2009-07-04 14 views
6

私はpygame(Debian/Lenny)で遊んでいます。 blit(全画面モードまたはウィンドウモード)の厄介な引き裂きを除いて、うまく動作しているようです。Linux/X11上でpygameで裂けるのを避ける方法

私はデフォルトのSDL X11ドライバを使用しています。グーグルでは、X11がvsync機能を提供していないことがSDLの既知の問題であることを示唆しています(FULLSCREEN|DOUBLEBUF|HWSURFACEフラグで作成されたディスプレイでさえ)。代わりに "dga"ドライバを使用する必要があります。

しかしながら、

SDL_VIDEODRIVER=dga ./mygame.py 

を実行する(xdpyinfo本のXFree86-DGA拡張を示すにもかかわらず)

pygame.error: No available video device 

とpygameの初期化中にスロー。

だから、涙のないvsyncedフリップを得るにはどんなトリックですか?このdgaを動かすか、他の仕組みにするか?

+1

ビデオカード用の適切なカーネルドライバがありますか。 X11の場合は、カーネルドライバとX11の両方にアクセスする必要があります。 1つが欠落している場合、もう一方は機能しますが、使用できなくなります。 – 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

最小限に抑えるには、フレームレートをできるだけ画面の周波数に近づけておくことが最善の方法です。 OpenGLを使用している場合を除き、SDLライブラリにはvsyncがありません。唯一の方法はフレームレートを近似することです。 SDLハードウェアダブルバッファは保証されていませんが、動作してもいいと思います。私はめったにそれを実際に見たことがありません。

私のSDLでの経験では、OpenGLを使用して完全に引き裂かないようにする必要があります。これはちょっとした調整ですが、単純な2Dテクスチャを描画することはそれほど複雑ではなく、回転、スケーリング、ブレンディングなどのように実装できるボーナスがいくつか追加されます。

しかし、ソフトウェアレンダリングを使用したい場合は、ダーティーな四角形の更新を使用することをおすすめします。少し慣れるのも難しいですが、処理の負荷が軽減され、アップデートのペースを上げやすくなります(プレイエリア全体や何かをスクロールしていない限り)。また、バッファに描画するのにかかる時間も最小限に抑えられるため、画面が更新されている間にブリッティングが発生するのを避けることができ、これが引き裂きの原因となります。

関連する問題