PyOpenGL + Pygame ограничен до 60 FPS в полноэкранном режиме

StackOverflow https://stackoverflow.com/questions/1217939

Вопрос

В настоящее время я работаю над игровым движком, написанным на 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 более чем вероятно. Я предполагаю, что драйверы других производителей имеют аналогичные настройки, но это предположение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top