2009-07-04 5 views
6

나는 파이 게임 (데비안/레니)을 가지고 놀았습니다. blit (전체 화면 또는 윈도우 모드)의 성가신 찢김을 제외하고는 제대로 작동하는 것 같습니다.리눅스/X11에서 파이 게임으로 찢어지는 것을 피하는 방법

기본 SDL X11 드라이버를 사용하고 있습니다. 인터넷 검색을 통해 X11은 vsync 기능을 제공하지 않으며 (FULLSCREEN|DOUBLEBUF|HWSURFACE 플래그로 생성 된 디스플레이도 포함) 알려진 문제이므로 "dga"드라이버를 대신 사용해야합니다.

SDL_VIDEODRIVER=dga ./mygame.py 

실행하지만

는 (AN-DGA XFree86의 확장 본 나타내는 xdpyinfo 불구)

pygame.error: No available video device 

와 파이 게임 초기화에 던진다.

그렇다면 눈물을 흘리지 않는 vsynced 플립을 얻으려면 어떤 트릭이 필요합니까? 이 dga 일을 작동 시키거나 다른 메커니즘으로 얻는가?

+1

비디오 카드에 적절한 커널 드라이버가 있습니까? X11의 경우 커널 드라이버와 X11 lib가 모두 필요합니다. 하나가 누락되면 다른 하나는 작동하지만 사용할 수 없게됩니다. – SingleNegationElimination

+0

나는 x11에서 DGA를 제공하는 것으로 보이는 http://packages.debian.org/lenny/libxxf86dga1로 약간 놀랐다. 커널 모듈에 대해서는 언급하지 않았다. lsmod?). 가치가있는 것을 위해, 나는 오래된 5 시리즈 AGP NVidia 카드와 함께 nv xorg 드라이버를 사용하고 있습니다. – timday

답변

4

글쎄 나의 궁극적 인 해결책은 OpenGL을 Pygame보다 훨씬 더 잘 지원하는 것으로 보이는 Pyglet으로 전환하는 것이었고 깜박임 문제가 발생하지 않았습니다.

+1

Pyglet은 다른 언어와 현대 기술을위한 다른 그래픽 라이브러리에 대한 API와 연습면에서 훨씬 더 가깝습니다. – Jotham

+0

[Gloss] (http://www.tuxradar.com/gloss)는 모든 것을 원한다면 다른 옵션입니다. OpenGL을 쉬운 클래스와 메서드로 랩핑하고 파이 게임 (Pygame)을 따라 멋지게 연출합니다. – fbmd

4

최소로 찢어 지도록 유지하는 가장 좋은 방법은 프레임 속도를 가능한 한 화면의 빈도에 가깝게 유지하는 것입니다. SDL 라이브러리에는 OpenGL을 사용하지 않는 한 vsync가 없으므로 유일한 방법은 직접 프레임 속도를 추정하는 것입니다. SDL 하드웨어 이중 버퍼는 작동 할 때 좋지만 보장되지 않습니다. 나는 거의 그것을 행동으로 보지 못했다.

SDL을 사용한 경험으로 OpenGL을 사용하여 완전히 찢어지지 않도록해야합니다. 약간의 조정이지만 단순한 2D 텍스처를 그리는 것이 그렇게 복잡한 것은 아니며 회전, 배율 조정, 혼합 등과 같이 구현할 수있는 몇 가지 보너스를 추가로 얻을 수 있습니다.

그러나 여전히 소프트웨어 렌더링을 사용하려는 경우 더러운 사각형 업데이트를 사용하는 것이 좋습니다. 익숙해지기는 다소 어려울 지 모르지만, 많은 처리량을 절약 할 수 있으므로 업데이트 속도를 쉽게 유지할 수 있으며 전체 재생 영역이나 다른 항목을 스크롤하지 않는 한 전체 화면이 재생되지 않습니다. 버퍼로 가져 오는 데 걸리는 시간뿐만 아니라 화면이 업데이트되는 동안 블리 팅 (blitting)이 발생하는 것을 피할 수있는 최소 시간이 필요합니다. 이는 찢어짐의 원인입니다.