В приложении Windows у меня одновременно открыто несколько окон OpenGL. В идеале я хотел бы, чтобы каждый из них рисовал со скоростью 60 кадров в секунду, синхронизируясь с обновлением экрана.
Для каждого контекста рендеринга я вызываю wglSwapIntervalEXT(1)
, чтобы включить вертикальную синхронизацию. Каждое окно имеет свой собственный поток отображения, который рисует фрейм, а затем вызывает SwapBuffers
для обновления.
Получается, что окна «борются» друг с другом: похоже, что вызовы SwapBuffers
синхронизированы и ждут друг друга, даже если они находятся в отдельных потоках. Я измеряю время от кадра к кадру для каждого окна, и с двумя окнами оно падает до 30 кадров в секунду, с тремя — до 20 кадров в секунду и т. д.
Если я отключу вертикальную синхронизацию с помощью wglSwapIntervalEXT(0)
, они радостно обновляются со скоростью 60 кадров в секунду независимо от того, сколько окон я открываю. Но с одним открытым окном это далеко не так гладко, как с включенным vsync.
Есть ли способ выполнить то, что я хочу, с помощью OpenGL?