3
我正在初始化主線程中的OpenGL上下文(SDL/GLEW)。但渲染是在不同的線程中完成的(例如SDL_GL_SwapWindow
或glDrawElements
)。在渲染的另一個線程中初始化OpenGL上下文
事情是,如果我打電話SDL_GL_SwapWindow
什麼也沒有發生。我試圖在每次交換後簡單地改變清晰的顏色,但沒有任何反應。
void render(){
// Rendering...
}
int main(){
// Initialization...
thread rendering(render);
}
這是問題嗎?
將OpenGL上下文轉換爲另一個線程是完全可能的。它不能同時在兩個線程中激活。 – datenwolf
@thecoshman:上下文關聯的線程不是不可變的。有一個屬性是線程每次只能綁定一個上下文,並且上下文一次只能在一個線程中綁定,但是您可以從一個線程釋放上下文並將其傳遞給另一個線程。窗口系統API都將這稱爲「當前」上下文(例如'wglMakeCurrent(...)','glXMakeCurrent(...)','aglMakeCurrent(...)')。爲此,即使像Qt一樣封裝OpenGL的框架也有'makeCurrent(...)'方法。 –