簡體   English   中英

OpenGL 4.5:glClear()不起作用(使用SDL2和GLEW)

[英]OpenGL 4.5 : glClear() doesn't work (using SDL2 and GLEW)

我制作了一個簡短的代碼,以便使用OpenGL 4.5(GLEW API)清除黑色的SDL2窗口。 但是,它僅在我使用我的英特爾芯片組時才有效(在這種情況下,應該使用較舊的OpenGL版本)。 問題是如果我使用我的Nvidia GTX 960M,窗口仍然是空白的。 也許我忘了寫一些特定於OpenGL 4.5的東西? 你對此有任何想法嗎? 這是代碼示例:

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);
}

我將doublebuffer選項切換為FALSE並且它可以工作。 我意識到如果雙緩沖器打開,我需要在看到黑色窗口背景之前做幾次“交換”。 這很有道理,但很奇怪。 順便說一下,我最終使用GLFW而不是SDL2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM