Использование SwapBuffers() с несколькими холстами OpenGL и вертикальной синхронизацией?
У меня есть графический интерфейс, написанный с использованием wxPython, который содержит два GLCanvas
es, холст 'display' и холст 'preview', на котором я рисую очень простую геометрию, используя PyOpenGL. Поля 'preview' и 'display' отображают содержимое одного и того же кадрового буфера:
Мне нужно, чтобы оба этих полотна были обновлены синхронно с постоянной частотой кадров без разрывов.
Пока я только что звонил
self.SetCurrent()
# draw stuff...
self.SwapBuffers()
для предварительного просмотра и отображения холстов в моем цикле рендеринга. Это работает достаточно хорошо при условии, что я отключил vsync в настройках моего драйвера.
Однако, если я включаю vsync, моя частота кадров падает до ~30 Гц, что составляет половину вертикальной частоты обновления моего дисплея. Предположительно это происходит потому, что выполнение цикла рендеринга останавливается на каждом SwapBuffers()
вызов в ожидании следующего вертикального обновления - если я закомментирую один из двух SwapBuffers()
звонки, моя частота кадров возвращается к 60 Гц, но тогда, конечно, только один из моих полотен обновляется.
То, что я действительно хотел бы, чтобы оба моих холста обновлялись синхронно, один раз за интервал vsync. Есть ли способ, которым я могу достичь этого, используя wx.glcanvas.GLCanvas
учебный класс?
1 ответ
В своем комментарии Андон подразумевает, что вы используете {wgl|glX}SwapInterval, чтобы установить интервал подкачки для первого, синхронизируя SwapBuffers на 1, а затем сразу после возврата SwapBuffers для синхронизации установите интервал подкачки на 0 и выполните другие операции SwapBuffers.,