Pregunta

He estado jugando con pygame (en Debian / Lenny). Parece que funciona bien, excepto por molesto desgarro de blits (pantalla completa o modo de ventana).

Estoy usando el controlador X11 SDL por defecto. Google sugiere que se trata de un problema conocido con SDL que X11 ofrece ninguna instalación VSYNC (incluso con una pantalla creada con banderas FULLSCREEN|DOUBLEBUF|HWSURFACE), y que debería utilizar el controlador "DGA" en su lugar.

Sin embargo, ejecutar

SDL_VIDEODRIVER=dga ./mygame.py

lanza en la inicialización con pygame

pygame.error: No available video device

(a pesar de xdpyinfo que muestra una extensión presente XFree86-DGA).

Así que: ¿cuál es el truco para conseguir lanzamientos vsynced libre de lágrima? Ya sea por conseguir esta cosa DGA de trabajo o algún otro mecanismo?

¿Fue útil?

Solución

Bueno, mi eventual solución era cambiar a Pyglet , que parece apoyar OpenGL mucho mejor que Pygame, y no tiene ningún problema de parpadeo.

Otros consejos

La mejor manera de mantener desgarro al mínimo es mantener su velocidad de cuadro lo más cercano a la frecuencia de la pantalla como sea posible. La biblioteca SDL no tiene un VSYNC menos que esté ejecutando OpenGL a través de él, por lo que la única manera es la aproximación de la Tasa de sí mismo marco. El doble buffer de hardware SDL no está garantizada, aunque estaba bien cuando funciona. He visto raramente en acción.

En mi experiencia con SDL tiene que usar OpenGL para eliminar por completo el desgarro. Es un poco de un ajuste, pero el dibujo texturas simples en 2D no es tan complicado y se obtiene algunas otras cosas adicionales que usted es capaz de poner en práctica como rotación, escalado, mezcla y así sucesivamente.

Sin embargo, si aún desea utilizar el software de renderización, me gustaría recomendar el uso actualización rectángulo sucio. También es un poco difícil acostumbrarse, pero se ahorra un montón de procesamiento que puede hacer que sea más fácil mantener las actualizaciones hasta el ritmo y evita toda la pantalla se llenaron de lágrimas (a menos que el desplazamiento de toda una zona de juegos o algo así). Como así como el tiempo que se necesita para sacar a la memoria intermedia está en un mínimo que puede evitar la blitting teniendo lugar mientras que la pantalla está actualizando, que es la causa de la rotura.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top