質問

私は現在pygameで書かれたゲームエンジンに取り組んでおり、OpenGLサポートを追加したかったです。

pygameとOpenGLを連携させる方法を確認するテストを作成しました。ウィンドウモードで実行している場合、150〜200 fpsで実行されます。全画面で実行すると(ウィンドウのセットアップ時にFULLSCREENフラグを追加するだけでした)、60 fpsに低下しました。描画関数をさらに追加して、パフォーマンスが大幅に低下するかどうかを確認しましたが、常に60 fpsで実行されました。

OpenGLがフルスクリーンで実行されていること、またはこれがOpenGLの制限であることをOpenGLに伝えるために必要な特別なことはありますか?

(Windows XPで実行しています)

役に立ちましたか?

解決

Frouが指摘したように、これは display.flip()を呼び出して画面を更新するときに、Pygameが垂直リトレースを待機しているためです。 Pygame display ドキュメント注、 HWSURFACE または DOUBLEBUF フラグを使用して表示モードを設定すると、 display.flip()は垂直リトレースを待機してからバッファの交換。

正直なところ、画面のリフレッシュレートよりも速いフレームレートを達成しようとする正当な理由はありません(ベンチマーク以外)。ディスプレイはとにかく60 fpsしか描画できないため、あなた(およびゲームをプレイしている人)は速度やパフォーマンスの違いに気付くことができません。さらに、垂直リトレースと同期しないと、画面のティアリング

他のヒント

これは V-Sync の問題ですか?構成または環境に関する何かが、最大フレームレートをモニタのリフレッシュレートに制限している可能性があります。

フルスクリーンモードとウィンドウモードを切り替えるときにclock.tick()を変更していない場合、これはほぼ間違いなくvsyncの問題です。 LCDを使用している場合、100%確実です。

残念ながら、v-syncはSDL、Pyopengl、ディスプレイサーバー、ビデオドライバーを含む多くの場所で処理できます。 Windowsを使用している場合は、nvidiaコントロールパネルのvsyncトグルを調整してテストすることができます。Linuxのnvidia-settingsにも同様の可能性があります。他のメーカーのドライバーも同様の設定になっていると思いますが、それは推測です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top