Я инициализирую свой контекст 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 (...)'). С этой целью даже фреймворки, которые используют OpenGL, такие как Qt, имеют методы 'makeCurrent (...)'. –