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

5
我正在主线程中初始化我的OpenGL上下文(SDL/GLEW),但渲染是在不同的线程中完成的(例如SDL_GL_SwapWindowglDrawElements)。
问题是,如果我调用SDL_GL_SwapWindow,什么都不会发生。我试图在每次交换后简单地改变清除颜色,但什么都没有发生。
void render(){
    // Rendering... 
}

int main(){
    // Initialization... 

    thread rendering(render);
}

这可能是问题吗?
1个回答

1

不会按照您的期望工作。OpenGL上下文是线程本地的。您创建上下文的任何线程都必须从那里进行实际的OpenGL渲染调用。


3
可以将OpenGL上下文转移到另一个线程中,但不能同时在两个线程中激活。 - datenwolf
1
@thecoshman:与线程关联的上下文不是不变的。一个线程只能绑定一个上下文,一个上下文也只能在一个线程中绑定,但是你可以从一个线程中释放上下文并将其传递给另一个线程。窗口系统API都将其称为“当前”上下文(例如wglMakeCurrent(...)glXMakeCurrent(...)aglMakeCurrent(...))。为此,即使像Qt这样包装OpenGL的框架也有makeCurrent(...)方法。 - Andon M. Coleman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接