Синхронизация нескольких окон OpenGL с vsync

В приложении Windows у меня одновременно открыто несколько окон OpenGL. В идеале я хотел бы, чтобы каждый из них рисовал со скоростью 60 кадров в секунду, синхронизируясь с обновлением экрана.

Для каждого контекста рендеринга я вызываю wglSwapIntervalEXT(1), чтобы включить вертикальную синхронизацию. Каждое окно имеет свой собственный поток отображения, который рисует фрейм, а затем вызывает SwapBuffersдля обновления.

Получается, что окна «борются» друг с другом: похоже, что вызовы SwapBuffersсинхронизированы и ждут друг друга, даже если они находятся в отдельных потоках. Я измеряю время от кадра к кадру для каждого окна, и с двумя окнами оно падает до 30 кадров в секунду, с тремя — до 20 кадров в секунду и т. д.

Если я отключу вертикальную синхронизацию с помощью wglSwapIntervalEXT(0), они радостно обновляются со скоростью 60 кадров в секунду независимо от того, сколько окон я открываю. Но с одним открытым окном это далеко не так гладко, как с включенным vsync.

Есть ли способ выполнить то, что я хочу, с помощью OpenGL?

9
задан Frederik Slijkerman 6 April 2012 в 12:52
поделиться