如何在 MacOS 上使用 SDL2 创建 window

How to create a window with SDL2 on MacOS

我正在尝试使用 SDL2 创建 window。我在编译时没有收到任何错误,但在运行时我也没有收到任何 window。

这是我的代码(没有错误检查可读性)。

#include <stdlib.h>
#include <SDL2/SDL.h>

int main(void)
{
    SDL_Window      *win = NULL;
    SDL_Renderer    *ren = NULL;

    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_CreateWindowAndRenderer(320, 640, 0, &win, &ren);

    SDL_SetRenderDrawColor(ren, 0, 0, 0, 255);
    SDL_RenderClear(ren);
    SDL_RenderPresent(ren);

    SDL_Delay(3000);

    SDL_DestroyRenderer(ren);
    SDL_DestroyWindow(win);
    SDL_Quit();

    return (0);
}

我也尝试了 this 来自 wiki 的代码示例,同样的问题。

编译

clang -F /Library/Frameworks -framework SDL2 main.c

我正在研究 MacOS 大苏尔。我从 their website 上下载的 .dmg 文件安装了 SDL2(运行时二进制文件 / Mac OS X),并放入 /Library/Frameworks 文件夹

这是兼容性问题吗?我该如何解决?

编辑

我也尝试在 this tutorial 之后安装 SDL,仍然是同样的问题。

您需要添加一个事件循环来获取 window -

#include <stdlib.h>
#include <SDL2/SDL.h>

int main(void)
{
    SDL_Window      *win = NULL;
    SDL_Renderer    *ren = NULL;

    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_CreateWindowAndRenderer(320, 640, 0, &win, &ren);

    SDL_SetRenderDrawColor(ren, 0, 0, 0, 255);
    SDL_RenderClear(ren);
    SDL_RenderPresent(ren);
    bool quit = false;

            //Event handler
            SDL_Event e;

            //While application is running
            while( !quit )
            {
                //Handle events on queue
                while( SDL_PollEvent( &e ) != 0 ) // poll for event
                {
                    //User requests quit
                    if( e.type == SDL_QUIT ) // unless player manually quits
                    {
                        quit = true;
                    }
                }
            }

    SDL_DestroyRenderer(ren);
    SDL_DestroyWindow(win);
    SDL_Quit();

    return (0);
}