2014-12-03 1 views
0

내 SDL 창을 클릭하거나 최소화하면 배경이 흰색이고 OpenGL이 화면을 더 많이 업데이트하지 않습니다. 코드를 따른다 :SDL 창 not responig

#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를 사용하고있다. 누구든지 문제가 될 수 있다는 것을 알고 있습니까?

답변

3

루프 중에 이벤트를 처리하지 마십시오.

그렇게하지 않으면 최소화 이벤트가 처리되지 않습니다 (대개 다른 사람이 창 버퍼를 사용할 수 있음을 의미 함).

+0

그 이유는 응용 프로그램을 중지 할 수 있습니까? 이벤트의 사용이 필수적이라는 것을 알고 있기 때문에 응용 프로그램이 더 이상 작동하지 않으므로 이상하게 보입니다. – vaati

+2

OS는 모든 종류의 이벤트를 처리해야합니다. 대개 응답이없는 프로그램이 계속 실행되지만 OS는 사용자에게 프로그램을 종료 할 수있는 옵션을 제공합니다. 재 페인트 이벤트가 처리되지 않았기 때문에 아무 것도 볼 수 없다는 메시지가 표시됩니다. –

+0

일부 이벤트를 추가하고 작동하는지 확인하겠습니다. – vaati