Как избежать разрыва с Pygame на Linux / X11

Я играл с Pygame (на Debian / Lenny). Кажется, это работает хорошо, за исключением раздражающего разрывания блиттов (полноэкранный или оконный режим).

Я использую драйвер SDL X11 по умолчанию. Поиск в Google позволяет предположить, что это известная проблема с SDL, что X11 не предоставляет возможности vsync (даже с дисплеем, созданным с помощьюFULLSCREEN|DOUBLEBUF|HWSURFACE флаги), и я должен использовать & quot; dga & quot; водитель вместо

Тем не менее, работает

SDL_VIDEODRIVER=dga ./mygame.py

добавляет инициализацию Pygame с помощью

pygame.error: No available video device

(несмотря наxdpyinfo демонстрирующее расширение XFree86-DGA).

Итак: что за хитрость в том, чтобы получить vsynced сальто без слез? Или заставить эту вещь работать на DGA или какой-то другой механизм?

 SingleNegationElimination04 июл. 2009 г., 18:58
У вас есть соответствующий драйвер ядра для вашей видеокарты. Для X11 вам нужен драйвер ядра и библиотека X11 для доступа к нему. Если один отсутствует, другой будет работать, но будет непригодным для использования.
 timday05 июл. 2009 г., 01:46
Я немного удивлен этим как Packages.debian.org / Ленни / libxxf86dga1, которая, по-видимому, предоставляет DGA-контент в X11, ничего не упоминает о модулях ядра (что будет отображаться как в lsmod?). Для этого я использую драйвер nv xorg со старой картой AGP NVidia серии

Ответы на вопрос(2)

Решение Вопроса

Pyglet, который, кажется, поддерживает OpenGL намного лучше, чем Pygame, и не имеет никаких проблем с мерцанием.

 fbmd17 янв. 2014 г., 16:01
Gloss - это еще один вариант, если вы не хотите идти до конца. Он оборачивает OpenGL в лёгкие классы и методы и прекрасно сочетается с Pygame.
 20 янв. 2013 г., 11:07
Pyglet также намного ближе с точки зрения API и практики к другим графическим библиотекам для других языков и современных технологий.

ать частоту кадров как можно ближе к частоте экрана. Библиотека SDL не имеет vsync, если вы не запускаете через нее OpenGL, поэтому единственный способ - приблизить частоту кадров самостоятельно. Аппаратный двойной буфер SDL не гарантируется, хотя хорошо, когда он работает. Я редко видел это в действии.

По моему опыту с SDL вы должны использовать OpenGL, чтобы полностью исключить разрыв. Это немного корректирует, но рисование простых 2D текстур не так уж сложно, и вы получаете несколько других дополнительных бонусов, которые вы можете реализовать, например, вращение, масштабирование, смешивание и т. Д.

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

Ваш ответ на вопрос