PyOpenGL + Pygame ограничен до 60 FPS в полноэкранном режиме - PullRequest
2 голосов
/ 02 августа 2009

В настоящее время я работаю над игровым движком, написанным на pygame, и я хотел добавить поддержку OpenGL.

Я написал тест, чтобы увидеть, как заставить Pygame и OpenGL работать вместе, и когда он работает в оконном режиме, он работает между 150 и 200 кадрами в секунду. Когда я запускаю его в полноэкранном режиме (все, что я делал, это добавлял флаг FULLSCREEN при настройке окна), он падает до 60 кадров в секунду. Я добавил намного больше функций рисования, чтобы увидеть, было ли это просто огромное падение производительности, но оно всегда работало со скоростью 60 кадров в секунду.

Что мне нужно сделать, чтобы сообщить OpenGL, что он работает в полноэкранном режиме, или это ограничение OpenGL?

(я работаю в Windows XP)

Ответы [ 3 ]

8 голосов
/ 02 августа 2009

Как указывало frou, это происходит из-за того, что Pygame ожидает вертикального отката при обновлении экрана с помощью вызова display.flip(). Как отмечается в документации Pygame display , если вы установите режим отображения с помощью флагов HWSURFACE или DOUBLEBUF, display.flip() будет ожидать вертикального отката, прежде чем менять буферы.

Если честно, я не вижу веских оснований (кроме бенчмаркинга) пытаться достичь частоты кадров, превышающей частоту обновления экрана. Вы (и люди, играющие в вашу игру) не сможете заметить никакой разницы в скорости или производительности, поскольку в любом случае дисплей может рисовать только 60 кадров в секунду. Кроме того, если вы не синхронизируете с вертикальным возвратом, есть большая вероятность, что вы получите разрыв экрана .

1 голос
/ 02 августа 2009

Это проблема V-Sync ? Что-то в конфигурации или вашей среде может ограничивать максимальную частоту кадров частотой обновления вашего монитора.

0 голосов
/ 02 августа 2009

Если вы не меняете свой clock.tick () при переключении между полноэкранным и оконным режимами, это почти наверняка проблема vsync. Если вы на ЖК-дисплее, то это на 100% уверенно.

К сожалению, v-sync может обрабатываться во многих местах, включая SDL, Pyopengl, ваш сервер отображения и ваши видеодрайверы. Если вы используете Windows, вы можете настроить переключатель vsync на панели управления nvidia для тестирования, и в nvidia-settings для linux более чем вероятно. Я предполагаю, что драйверы других производителей имеют аналогичные настройки, но это предположение.

...