2

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

pygameとOpenGLを連携させる方法を確認するためのテストを作成しました。ウィンドウモードで実行すると、150〜200fpsで実行されます。フルスクリーンで実行すると(ウィンドウを設定するときにFULLSCREENフラグを追加するだけでした)、60fpsに低下します。パフォーマンスが大幅に低下したかどうかを確認するために、さらに多くの描画関数を追加しましたが、常に60fpsで実行されていました。

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

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

4

3 に答える 3

8

先に指摘したように、これは、を呼び出して画面を更新するときに、Pygameが垂直方向のリトレースを待機していることが原因である可能性がありますdisplay.flip()Pygameのdisplayドキュメントに記載されているように、HWSURFACEまたはDOUBLEBUFフラグを使用して表示モードを設定するdisplay.flip()と、バッファを交換する前に垂直方向のリトレースを待機します。

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

于 2009-08-02T03:46:05.113 に答える
1

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

于 2009-08-02T01:28:41.113 に答える
0

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

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

于 2009-08-02T02:18:11.927 に答える