在渲染之外的另一个线程中初始化 OpenGL 上下文

Lie*_*mai 5 c++ opengl multithreading glew sdl

我正在主线程中初始化我的 OpenGL 上下文(SDL/GLEW)。但是渲染是在不同的线程中完成的(比如SDL_GL_SwapWindowor glDrawElements)。

问题是,如果我调用SDL_GL_SwapWindow. 我试图在每次交换后简单地改变清晰的颜色,但没有任何反应。

void render(){
    // Rendering... 
}

int main(){
    // Initialization... 

    thread rendering(render);
}
Run Code Online (Sandbox Code Playgroud)

这可能是问题吗?

the*_*man 1

不会像你期望的那样工作。OpenGL 上下文是线程本地的。无论您创建上下文的哪个线程,都必须从其中进行实际的 OpenGL 渲染调用。

  • 将 OpenGL 上下文转换到另一个线程是完全可能的。它只是不能同时在两个线程中处于活动状态。 (3认同)