SDL 窗口没有响应

Posted

技术标签:

【中文标题】SDL 窗口没有响应【英文标题】:SDL window not respondig 【发布时间】:2014-12-03 16:11:58 【问题描述】:

我的 SDL 窗口在单击或最小化它时崩溃,背景为白色,并且 OpenGL 不会更新屏幕。遵循代码:

#include <stdio.h>
#include <SDL.h>
#include <SDL_opengl.h>

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const char * SCREEN_NAME = "Tetris SDL";

SDL_Window *window;
SDL_GLContext glcontext;

int init();
void main_loop();
void quit();
void events();
void update();
void draw();

int main(int argc, char* args[])

    if(!init())
        quit();
    main_loop();
    quit();


int init()

    if (SDL_Init(SDL_INIT_VIDEO) < 0)
       return 0;

    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    SDL_GL_SetAttribute(SDL_GL_ACCUM_RED_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_ACCUM_GREEN_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_ACCUM_BLUE_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_ACCUM_ALPHA_SIZE, 0);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);

    window = SDL_CreateWindow(SCREEN_NAME, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
        SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_OPENGL);

    if(!window)
        return 0;

    glcontext = SDL_GL_CreateContext(window);
    glViewport(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);

    return 1;


void main_loop()

    while(true)
    
        events();
        update();
        draw();
        //only for test
        SDL_Delay(16);
    

void events()
void update()
void draw()

    glClear(GL_COLOR_BUFFER_BIT);
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glBegin(GL_TRIANGLES);
    glColor3f(1,0,0); glVertex2f(0.0f,0.5f);
    glColor3f(0,1,0); glVertex2f(-0.5f, -0.5f);
    glColor3f(0,0,1); glVertex2f(0.5f, -0.5f);
    glEnd();
    SDL_GL_SwapWindow(window);

void quit()

    SDL_GL_DeleteContext(glcontext);
    SDL_DestroyWindow(window);
    SDL_Quit();

我正在使用 SDL 2.0 和 GNU GCC 编译器以及 Windows XP。有谁知道可能是什么问题?

【问题讨论】:

【参考方案1】:

您在循环中不处理任何事件。

如果你不这样做,那么最小化事件将不会被处理(通常意味着窗口缓冲区被释放以供其他人使用)。

【讨论】:

那是停止应用程序的原因?我知道使用事件是必不可少的,因为这有点奇怪,所以更多地停止了应用程序。 操作系统发送各种需要处理的事件。通常一个无响应的程序会继续运行,但操作系统会提供一个选项来杀死它给用户。您看不到任何内容可能是因为未处理重绘事件

以上是关于SDL 窗口没有响应的主要内容,如果未能解决你的问题,请参考以下文章

流媒体开发13SDL事件响应

流媒体开发13SDL事件响应

绘图窗口没有响应

Pygame 窗口几秒钟后没有响应

OpenCV - imshow()在等待来自命令窗口的输入时没有响应

Pygame 窗口在全屏模式下没有响应