2014-01-10 3 views
3

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

Смежные вопросы