8

私は(Debian / Lennyで)pygameで遊んでいます。ブリットの厄介な引き裂き(フルスクリーンまたはウィンドウモード)を除いて、うまく機能しているようです。

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

ただし、実行中

SDL_VIDEODRIVER=dga ./mygame.py

でpygameの初期化をスローします

pygame.error: No available video device

xdpyinfoXFree86-DGA拡張機能が存在することを示していますが)。

だから:涙のないvsyncedフリップを取得するための秘訣は何ですか?このdgaを機能させるか、他のメカニズムを使用しますか?

4

3 に答える 3

5

ティアリングを最小限に抑える最善の方法は、フレームレートを画面の周波数にできるだけ近づけることです。OpenGLを実行していない限り、SDLライブラリにはvsyncがないため、フレームレートを自分で概算するしか方法はありません。SDLハードウェアのダブルバッファは保証されていませんが、動作する場合は問題ありません。私はそれが実際に動いているのを見たことはめったにありません。

私のSDLの経験では、OpenGLを使用してティアリングを完全に排除する必要があります。少し調整しますが、単純な2Dテクスチャの描画はそれほど複雑ではなく、回転、スケーリング、ブレンドなど、実装できるその他の追加のボーナスがいくつかあります。

ただし、それでもソフトウェアレンダリングを使用する場合は、ダーティレクタンギュラー更新を使用することをお勧めします。慣れるのも少し難しいですが、処理の負荷を節約できるため、更新のペースを維持しやすくなり、画面全体が破損するのを防ぐことができます(プレイエリア全体などをスクロールしている場合を除く)。また、バッファへの描画にかかる時間は最小限に抑えられているため、画面の更新中にブリッティングが発生するのを防ぐことができます。これは、ティアリングの原因です。

于 2009-08-11T10:08:26.160 に答える
4

私の最終的な解決策は、Pygletに切り替えることでした。これは、PygameよりもOpenGLをはるかによくサポートしているようで、ちらつきの問題はありません。

于 2009-10-08T22:40:10.383 に答える
0

SCALEDフラグを使用してvsync=True呼び出すset_modeと、すべて設定されているはずです(少なくとも、これを実際にサポートしているシステムでは、SDLがVSync対応のサーフェスを提供できない場合もありますが、まれになります)。

于 2022-02-06T07:52:15.847 に答える