tutorial online oficial mac instalar graphics x11 sdl pygame vsync

graphics - oficial - pygame online



Cómo evitar el desgarro con pygame en Linux/X11 (2)

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

Estoy usando el controlador predeterminado de SDL X11. Google sugiere que es un problema conocido con SDL que X11 no proporciona ninguna función vsync (incluso con una pantalla creada con banderas FULLSCREEN|DOUBLEBUF|HWSURFACE ), y yo debería usar el controlador "dga" en su lugar.

Sin embargo, corriendo

SDL_VIDEODRIVER=dga ./mygame.py

lanza en la inicialización pygame con

pygame.error: No available video device

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

Entonces, ¿cuál es el truco para obtener flips vsynced sin lágrimas? ¿Al hacer funcionar esta dga o algún otro mecanismo?


La mejor manera de mantener el rasgado al mínimo es mantener su velocidad de cuadros lo más cerca posible de la frecuencia de la pantalla. La biblioteca SDL no tiene una función vsync a menos que esté ejecutando OpenGL a través de ella, por lo que la única forma es aproximar la velocidad de fotogramas usted mismo. El doble buffer de hardware SDL no está garantizado, aunque es bueno cuando funciona. Pocas veces lo he visto en acción.

En mi experiencia con SDL, debes usar OpenGL para eliminar por completo el desgarro. Es un poco un ajuste, pero dibujar texturas 2D simples no es tan complicado y obtienes algunas otras bonificaciones adicionales que puedes implementar como rotación, escalado, fusión, etc.

Sin embargo, si aún desea usar la representación del software, le recomendaría usar la actualización de rectángulo sucio. También es un poco difícil acostumbrarse, pero ahorra un montón de procesamiento que puede hacer que sea más fácil mantener las actualizaciones al ritmo y evita que toda la pantalla se rompa (a menos que estés desplazando toda el área de juego o algo así). Además, el tiempo que lleva dibujar en el búfer es mínimo, lo que puede evitar que ocurra el blitting mientras la pantalla se está actualizando, lo cual es la causa del desgarro.


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