2016-07-04 2 views
2

OpenGL 4.5 (GLEW API)를 사용하여 검정색 SDL2 창을 지우는 간단한 코드를 만들었습니다. 그러나 인텔 칩셋을 사용할 때만 작동합니다 (이 경우 이전 OpenGL 버전을 사용해야합니다). 문제는 내 Nvidia GTX 960M을 사용하면 창이 비어 있다는 것입니다. 아마도 OpenGL 4.5에 특정한 것을 쓰는 것을 잊었을까요? 이것에 대해 어떤 생각을 가지고 있습니까? 다음은 코드 샘플입니다.OpenGL 4.5 : glClear()가 작동하지 않음 (SDL2 및 GLEW 사용)

DisplayContext::DisplayContext(PropertiesDictionary properties) 
{ 
    const string windowTitle = properties.getString("window_title"); 
    const int screenX = properties.getNumber("screen_resolution_x"); 
    const int screenY = properties.getNumber("screen_resolution_y"); 
    const bool isFullscreen = properties.getBoolean("fullscreen"); 

    const int gl_majorVersion = properties.getNumber("gl_major_version"); 
    const int gl_minorVersion = properties.getNumber("gl_minor_version"); 
    const int doublebuffer = properties.getNumber("gl_doublebuffer"); 
    const int depthSize = properties.getNumber("gl_depth_size"); 
    const bool isGlewExperimental = properties.getBoolean("glew_experimental"); 

    SDL_Init(SDL_INIT_VIDEO); 
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, gl_majorVersion); // 4 
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, gl_minorVersion); // 5 
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, doublebuffer); // TRUE 
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, depthSize); // 24 

    window = SDL_CreateWindow(
     windowTitle.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, screenX, screenY, 
     SDL_WINDOW_OPENGL | (isFullscreen ? SDL_WINDOW_FULLSCREEN : NULL)); 

    context = SDL_GL_CreateContext(window); 
    glewExperimental = isGlewExperimental ? GL_TRUE : GL_FALSE; // TRUE 
    glewInit(); 

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    SDL_GL_SwapWindow(window); 
} 
+0

SDL 및 GL에서 반환 한 오류를 확인하십시오. –

+0

두 그래픽 카드 모두에서'glewInit'이 성공합니까? – SurvivalMachine

+0

@ SurvivalMachine glewInit()은 GTX960M 카드에서 FALSE를 반환합니다. 그리고 인텔 칩셋에서 TRUE를 반환합니다. 그래서 오류가 여기에있는 것 같습니다. 하지만 왜 ... 다른 API를 사용해야한다고 생각하지 않습니까? – Ant0nin

답변

3

doublebuffer 옵션을 FALSE로 전환했는데 작동합니다. Doublebuffer가 켜져 있으면 검은 색 창 배경을보기 전에 여러 번 "스왑"해야한다고 깨달았습니다. 그것은 의미가 있지만 꽤 이상합니다. 그런데 마침내 SDL2 대신 GLFW를 사용합니다.

+1

* "마침내 SDL2 대신 GLFW 사용"* - SDL에 비해 * 유용한 기능이 많지 않음을 기억하십시오. 당신은 심지어 그것으로 창을 극대화 할 수 없습니다. – HolyBlackCat

관련 문제