空のディスプレイループ(GeForce 260 GTX、1920x1080)で約5.600FPSを取得しています。glClearを追加すると、4.000 FPSに下がりますが、これはまだ200をはるかに超えています...単純なグラフィックエンジン(AoE2スタイル)は、約100〜200 FPS(GeForce 8など)で実行する必要があります。マルチスレッドで完全に最適化されている場合は、おそらくもっと多くなります。
ループ内で正確に何をしているのか、どのハードウェアで実行されているのかはわかりませんが、200 FPSは、何も描画しない以外に何かをしているように聞こえます(スリープ、ゲームロジック、貪欲なフレームワーク、エアロ?)。両方のフレームバッファをコピーする必要がある場合でも、swapbuffer関数に5msかかることはありません。プロファイルを使用して、最もCPU時間が費やされている場所を確認できます(ただし、gl *関数からのタイミング結果はほとんど役に立ちません)
OpenGLで何かをしている場合(描画、テクスチャの作成など)、GL_EXT_timer_queryと呼ばれる時間を測定するための優れた拡張機能があります。
いくつかの一般的な最適化のヒント:
- イミディエイトモード(glBegin / glEnd)を使用せず、代わりにVBOおよび/またはディスプレイリスト+頂点配列を使用してください
- いくつかのカリング手法を使用して、ビューの外側のオブジェクトを削除します(openglはすべてのポリゴンを個別にカリングする必要があります)
- 状態の変化を最小限に抑えてみてください。特に、バインドされたテクスチャまたは頂点バッファを変更してください。