PyOpenGL + Pygame ограничен до 60 FPS в полноэкранном режиме
-
10-07-2019 - |
Вопрос
В настоящее время я работаю над игровым движком, написанным на pygame, и хочу добавить поддержку OpenGL.
Я написал тест, чтобы увидеть, как заставить Pygame и OpenGL работать вместе, и когда он работает в оконном режиме, он работает со скоростью 150-200 кадров в секунду. Когда я запускаю его в полноэкранном режиме (все, что я делал, это добавлял флаг FULLSCREEN при настройке окна), он падает до 60 кадров в секунду. Я добавил намного больше функций рисования, чтобы увидеть, было ли это просто огромное падение производительности, но оно всегда работало со скоростью 60 кадров в секунду.
Что мне нужно сделать, чтобы сообщить OpenGL, что он работает в полноэкранном режиме, или это ограничение OpenGL?
(я работаю в Windows XP)
Решение
Как указывало frou, это происходит из-за того, что Pygame ожидает вертикального отката, когда вы обновляете экран, вызывая display.flip ()
. Как Pygame отображать
документацию отмечает, что если вы устанавливаете режим отображения с помощью флагов HWSURFACE
или DOUBLEBUF
, display.flip ()
будет ожидать вертикального возврата до замена буферов.
Честно говоря, я не вижу веской причины (кроме сравнительного анализа) пытаться достичь частоты кадров, превышающей частоту обновления экрана. Вы (и люди, играющие в вашу игру) не сможете заметить никакой разницы в скорости или производительности, поскольку в любом случае дисплей может рисовать только 60 кадров в секунду. Кроме того, если вы не синхронизируете с вертикальным возвратом, есть большая вероятность, что вы получите разрыв экрана а>. р>
Другие советы
Это проблема V-Sync ? Что-то в конфигурации или вашей среде может ограничивать максимальную частоту кадров частотой обновления вашего монитора.
Если вы не меняете свой clock.tick () при переключении между полноэкранным и оконным режимами, это почти наверняка проблема vsync. Если вы на ЖК-дисплее, то это на 100% точно.
К сожалению, v-sync может обрабатываться во многих местах, включая SDL, Pyopengl, ваш сервер отображения и ваши видеодрайверы. Если вы используете Windows, вы можете настроить переключатель vsync на панели управления nvidia для тестирования, и в nvidia-settings для linux более чем вероятно. Я предполагаю, что драйверы других производителей имеют аналогичные настройки, но это предположение. Р>