2014-01-10 30 views
3

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

事情是,如果我打電話SDL_GL_SwapWindow什麼也沒有發生。我試圖在每次交換後簡單地改變清晰的顏色,但沒有任何反應。

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

int main(){ 
    // Initialization... 

    thread rendering(render); 
} 

這是問題嗎?

回答

2

不按預期工作。 OpenGL上下文是線程本地的。無論創建上下文的線程是實際的OpenGL渲染調用必須來自哪個線程。

+1

將OpenGL上下文轉換爲另一個線程是完全可能的。它不能同時在兩個線程中激活。 – datenwolf

+1

@thecoshman:上下文關聯的線程不是不可變的。有一個屬性是線程每次只能綁定一個上下文,並且上下文一次只能在一個線程中綁定,但是您可以從一個線程釋放上下文並將其傳遞給另一個線程。窗口系統API都將這稱爲「當前」上下文(例如'wglMakeCurrent(...)','glXMakeCurrent(...)','aglMakeCurrent(...)')。爲此,即使像Qt一樣封裝OpenGL的框架也有'makeCurrent(...)'方法。 –