2

我正在使用 SDL 和 OpenGL,我创建了 SDL_Surface 和 SDL_SetVideoMode:

SDL_Init(SDL_INIT_EVERYTHING);

const SDL_VideoInfo * dinfo = SDL_GetVideoInfo();

// Setup the surface of SDL
if(configurer::fullscreened){
    data::Wnd_Surface = SDL_SetVideoMode(configurer::window_width,configurer::window_height,dinfo->vfmt->BitsPerPixel,SDL_FULLSCREEN | SDL_OPENGL);
}else{
    data::Wnd_Surface = SDL_SetVideoMode(configurer::window_width,configurer::window_height,16,SDL_OPENGL);
}
if(data::Wnd_Surface==0){
    return -1;
}

SDL_WM_SetCaption("Test", "Test");

SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

// Initialize GLEW
if(glewInit()!=0){
    cout << "Failed to start glew";
    return -1;
}

我在我的主函数中初始化它,然后我有以下(在主函数上):

while(!data::terminate){
    AscMainLoop();
    SDL_Delay(80);
}
return 0;

一切都很好。我的 AscMainLoop 函数:

int timerelapse = SDL_GetTicks();
//Check for key events
    /* BLA BLA BLA *(
AscUpdateComponents(); // Update matrixes and bla bla bla...
AscRender();// Paint

// Fps Counter Update
    /* BLA BLA BLA */

SDL_GL_SwapBuffers();// Swap the buffers of our screen

好的,我遇到了问题,我运行了应用程序,但屏幕没有响应,我认为问题出在 main 上的 while 循环上。窗口打开,但我不能拖动它,调整它的大小,这就像窗口上的等待状态(Windows 7 有趣的“请等待”光标)激活。我已经尝试将主循环放在一个线程中。我不知道发生了什么...

编辑:这就像主函数中的循环引起的冻结状态

4

1 回答 1

2

您需要通过执行以下操作来处理您SDL_Event的 s 或while您的 s AscMainLoop

SDL_Event Event;

while(SDL_PollEvent(&Event))
{
    // Later, you'll be adding your code that handles keyboard / mouse input here
}
于 2012-12-11T15:53:11.710 回答