Como evitar rasgar com pygame em Linux / X11
Pergunta
Eu tenho jogado com pygame (no Debian / Lenny). Parece que funciona muito bem, exceto para rasgar irritante de blits (tela cheia ou modo de janela).
Estou usando o driver SDL X11 padrão. Pesquisando sugere que é um problema conhecido com SDL que X11 oferece nenhuma facilidade vsync (mesmo com um display criado com bandeiras FULLSCREEN|DOUBLEBUF|HWSURFACE
), e que eu deveria usar o "dga" driver vez.
No entanto, executando
SDL_VIDEODRIVER=dga ./mygame.py
joga em pygame inicialização com
pygame.error: No available video device
(apesar xdpyinfo
mostrando uma extensão XFree86-DGA presente).
Então: qual é o truque para obter flips vsynced livre de lágrimas? Ou, obtendo essa coisa de trabalho dga ou algum outro mecanismo?
Solução
Bem, meu eventual solução foi mudar para Pyglet , que parece apoiar OpenGL muito melhor do que Pygame, e não tem quaisquer problemas de cintilação.
Outras dicas
A melhor maneira de manter a rasgar a um mínimo é manter sua taxa de quadros mais próximo à frequência da tela quanto possível. A biblioteca SDL não tem um vsync a menos que você estiver executando OpenGL através dele, então a única maneira é aproximar a taxa de quadros si mesmo. O buffer duplo hardware SDL não é garantido, embora agradável, quando ele funciona. Eu raramente vi isso em ação.
Na minha experiência com SDL você tem que usar OpenGL para eliminar completamente lacrimejamento. É um pouco de um ajuste, mas desenho simples 2D texturas não é tão complicado e você terá alguns outros bônus adicionais que você é capaz de implementar como rotação, escala, mistura e assim por diante.
No entanto, se você ainda quiser usar o processamento de software, eu recomendo usar sujo retângulo atualização. Também é um pouco difícil de se acostumar, mas poupa cargas de processamento que pode torná-lo mais fácil de manter as atualizações até ritmo e evita toda a tela que está sendo rasgado (a menos que você está rolando a área de jogo ou algo inteiro). Bem como o tempo que leva para desenhar para o tampão está a um mínimo que pode evitar o lugar blitting tendo enquanto a tela é actualização, o qual é a causa do rasgamento.