2009-08-02 21 views
2

私は現在pygameで書かれたゲームエンジンで作業しています。私はOpenGLサポートを追加したいと考えていました。PyOpenGL + Pygameがフルスクリーンで60 FPSにキャップされました

私はpygameとOpenGLを一緒に動作させる方法を知るためのテストを書いていました。ウィンドウモードで実行しているときは、150〜200 fpsで動作します。私はそれをフルスクリーンで実行すると(ウィンドウをセットアップするときにFULLSCREENフラグを追加しただけです)、60 fpsに低下します。私はそれが単なる巨大な性能低下であるかどうかを確認するために、もっと多くの描画機能を追加しましたが、常に60 fpsで動作しました。

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

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

+0

(Windows、linux/X11など)どのシステムを実行していますか? –

答えて

7

FROUが指摘したように、これはあなたがdisplay.flip()を呼び出して、画面を更新するときに垂直帰を待ってpygameのが原因だろう。 Pygame display documentationのように、HWSURFACEまたはDOUBLEBUFフラグを使用して表示モードを設定すると、display.flip()は、バッファを交換する前に垂直帰線を待つでしょう。

実際、画面のリフレッシュレートよりも速いフレームレートを達成しようとすると、(ベンチマークとは別の)良い理由はありません。とにかく60 fpsしか表示できないため、あなた(そしてあなたのゲームをプレイしている人)はスピードやパフォーマンスの違いに気づくことができません。さらに、垂直リトレースと同期しないと、screen tearingが得られる可能性があります。

1

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

0

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

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

+0

"changin clock.tickf()"はどういう意味ですか?私はまた、コンピュータに付属のグラフィックスカードを使用しているので、私はvsyncの設定にアクセスすることはできません。私はOpenGLでこれを行う方法はありますか? –

+0

clock.tick()は、画面再描画の頻度を制御するための、パイゲーム機構です。 http://www.pygame.org/docs/ref/time.htmlはこちらのドキュメントです。http://www.pygame.org/docs/tut/chimp/ChimpLineByLine.htmlをご覧ください。 – Pmc

+0

@htw Pygame実装の問題だったら、FULLSCREEN状態にかかわらず結果は一様ではないでしょうか? – Pmc

関連する問題