SDL创建窗口不在Mac os X上创建窗口

SDL创建窗口不在Mac os X上创建窗口,c,sdl,C,Sdl,我正在跟踪SDL上的消息 创建显示有SDL\u window\u的窗口并运行二进制文件时,会出现菜单栏,但窗口不会出现。需要一些指导,我可以做些什么来进一步调试这个 我也尝试过在没有运气的情况下手动设置窗口位置 SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCR

我正在跟踪SDL上的消息

创建显示有
SDL\u window\u的窗口并运行二进制文件时,会出现菜单栏,但窗口不会出现。需要一些指导,我可以做些什么来进一步调试这个

我也尝试过在没有运气的情况下手动设置窗口位置

SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
                                  SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);

SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
                                  SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);

SDL_CreateWindow("SDL Tutorial", 100, 100, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
一切都成功编译,并且
SDL\u GetError()
不会产生任何错误。我登录到一个文件进行确认

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

//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;

int main(int argc, const char * argv[]) {
    FILE *log_file;
    log_file = fopen("log.log", "a+");
    
    //The window we'll be rendering to
    SDL_Window* window = NULL;
    
    //The surface contained by the window
    SDL_Surface* screenSurface = NULL;

    //Initialize SDL
    if (SDL_Init(SDL_INIT_VIDEO) < 0 )
    {
        fprintf(log_file, "SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
    }
    else
    {
        //Create window
        window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
                                  SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
        
        if (window == NULL)
        {
            fprintf(log_file, "Window could not be created! SDL_Error: %s\n", SDL_GetError());
        }
        else
        {
            //Get window surface
            screenSurface = SDL_GetWindowSurface(window);

            //Fill the surface white
            SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0xFF, 0xFF, 0xFF));
            
            //Update the surface
            SDL_UpdateWindowSurface(window);
            
             fprintf(log_file, "SDL_Error: %s\n", SDL_GetError());

            //Wait two seconds
            SDL_Delay(2000);
        }
    }
    
    //Destroy window
    SDL_DestroyWindow(window);

    //Quit SDL subsystems
    SDL_Quit();
    
    return 0;
}

#包括
#包括
//屏幕尺寸常数
屏幕宽度=640;
屏幕上的常数=480;
int main(int argc,const char*argv[]{
文件*日志文件;
log_file=fopen(“log.log”,“a+”);
//我们将渲染到的窗口
SDL_Window*Window=NULL;
//窗户所包含的表面
SDL_表面*屏幕表面=空;
//初始化SDL
if(SDL_Init(SDL_Init_视频)<0)
{
fprintf(日志文件,“SDL无法初始化!SDL\U错误:%s\n”,SDL\U GetError());
}
其他的
{
//创建窗口
window=SDL_CreateWindow(“SDL教程”,SDL_WINDOWPOS_居中,SDL_WINDOWPOS_居中,
屏幕宽度、屏幕高度、显示的SDL窗口);
如果(窗口==NULL)
{
fprintf(日志文件,“无法创建窗口!SDL\U错误:%s\n”,SDL\U GetError());
}
其他的
{
//获取窗口表面
屏幕表面=SDL_GetWindowSurface(窗口);
//把表面涂成白色
SDL_FillRect(屏幕表面,NULL,SDL_映射RGB(屏幕表面->格式,0xFF,0xFF,0xFF));
//更新曲面
SDL_更新内表面(窗口);
fprintf(日志文件,“SDL\U错误:%s\n”,SDL\U GetError());
//等两秒钟
SDL_延迟(2000年);
}
}
//破坏窗口
SDL_窗口(窗口);
//退出SDL子系统
SDL_退出();
返回0;
}

它不工作的原因是我没有设置事件循环

我在那里找到了一个例子

SDL_Event event;

while (SDL_PollEvent(&event)) {
  if (event.type == SDL_QUIT) {
    done = SDL_TRUE;
  }
}

它不起作用的原因是我没有设置事件循环

我在那里找到了一个例子

SDL_Event event;

while (SDL_PollEvent(&event)) {
  if (event.type == SDL_QUIT) {
    done = SDL_TRUE;
  }
}

如果你启动事件循环,效果会更好吗?
screensface
正常吗?(不是
NULL
也就是说@genpfault泵工作了,我继续画一条线,在
while
循环中查看他们使用的
SDL\u PollEvent()
。我换成了那个。现在我面临的问题是看不到画的线。奇怪。。。屏幕上的IIRC绘图应该在没有事件循环的情况下工作。@DanielJour:可能在旧的非合成系统上。这种类型的问题会定期出现,所以几乎总是在macOS或Windows的DWM这样的复合窗口系统上。如果启动事件循环,效果会更好吗?
screensface
正常吗?(不是
NULL
也就是说@genpfault泵工作了,我继续画一条线,在
while
循环中查看他们使用的
SDL\u PollEvent()
。我换成了那个。现在我面临的问题是看不到画的线。奇怪。。。屏幕上的IIRC绘图应该在没有事件循环的情况下工作。@DanielJour:可能在旧的非合成系统上。这种类型的问题会定期出现,几乎总是出现在macOS或Windows的DWM这样的复合窗口系统上。