【问题标题】:Initializing OpenGL Context in another thread than the rendering在渲染之外的另一个线程中初始化 OpenGL 上下文
【发布时间】:2014-01-29 16:45:36
【问题描述】:

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

问题是,如果我打电话给SDL_GL_SwapWindow,什么都不会发生。我试图在每次交换后简单地更改清晰的颜色,但没有任何反应。

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

int main(){
    // Initialization... 

    thread rendering(render);
}

这可能是问题吗?

【问题讨论】:

    标签: c++ multithreading opengl sdl glew


    【解决方案1】:

    无法按预期工作。 OpenGL 上下文是线程本地的。无论您创建上下文的哪个线程都是必须从其中进行实际 OpenGL 渲染调用的地方。

    【讨论】:

    • 完全可以将 OpenGL 上下文转换到另一个线程。它只是不能同时在两个线程中处于活动状态。
    • @thecoshman:与上下文关联的线程不是不可变的。有一个属性,一个线程一次只能绑定一个上下文,并且一次只能在一个线程中绑定一个上下文,但是您可以从一个线程释放上下文并将其提供给另一个线程。窗口系统 API 都将其称为“当前”上下文(例如 wglMakeCurrent (...)glXMakeCurrent (...)aglMakeCurrent (...))。为此,即使是像 Qt 这样封装 OpenGL 的框架也有 makeCurrent (...) 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    相关资源
    最近更新 更多