OpenGL最適化のヒント[終了]


26

OpenGLをより効率的にするためのヒントやコツを教えてください。

回答:


16

glStart()/ glEnd()ではなくVBOを使用します。これにより、データをGPUのメモリに転送するサイクルを節約できます。


7
さらに、glBeginとglEndは後のリビジョンで非推奨になり、バージョン3.x以降では完全に削除されました(したがって動作しません)。OpenGL 3.xコンテキストをリクエストすると、それらを完全に使用できなくなります。
マッドリップスを丸lurみ

DirectXは実際にこれをあなたに強制します、それに相当するものはありませんglStart()/glEnd()
knight666

@SAHChandlerそれは知りませんでした。廃止されることに気づきませんでした。
MrValdez

3
@SAHChandler:ひどい!私はすべての描画をglBegin()とglEnd()で学びました。いやー!!!

8

プロファイル、プロファイル、プロファイルの標準的なヒントはここでも同様に適用されますが、ツールはわずかに異なります。

gDEBuggerは、内部で何が起こっているかを正確に確認するのに役立ちます。しかし、それは高価です。


2
それが今無料であることを付け加えたかっただけです。
DMan

8

これらは、AppleのOpenGLのドキュメントリファレンスからのものですが、少しでも役に立ちますか?;)

OpenGLパフォーマンスの最適化:OS XでのOpenGLデータスループットの最適化の基本

(最後のサンプルはサンプルアプリケーションです)
頂点の最適化

また、主題(Appleからも)で入手可能な非常に多数のビデオがあり、OpenGL拡張機能について説明しています。それらの一部はOS X固有ですが、他のいくつかはより一般化されており、WindowsおよびLinuxに適用される可能性が最も高くなります。

ここでビデオを見つけることができます。ただし、表示するにはiTunesとAppleアカウントが必要です(ただし、無料です!:D)


7

まあ、それは本当に、本当にあなたが何をしようとしているのかに依存しますが、ここに基本があります:

  • GPUは空腹の獣ですが、CPUは非常に貴重です。できる限りGPUにオフセットします。最近では、OpenCL、CUDA、Thrustなどの優れたライブラリを使用してこれを行うことができます。

  • シェーダーで照明を行います。これはあなたの正気を保つのに役立つだけでなく、トゥーンシェーダーや遅延照明のような非常にクールなものを可能にします。

  • 粒子が吸います。OpenGLポイントスプライトを使用している場合でも。


6

状態の変化を最小限に抑えます。多くのプラットフォームでは、各状態の変化によりパイプラインがフラッシュされる可能性があります。同様のアイテムをまとめてバッチ処理し、状態を1回変更する方がはるかに優れています。


4
glEnable(GL_CULL_FACES);

背面カリングを適用するシンプルな1つのライナー。これは、ポリゴン数の削減に最適です。また、ポリカウントを減らすためのFrustum / Occlusionカリングを調べます。

もう1つ検討すべきことは、ベクトルとクォータニオンのSIMDです(主にカメラの回転に使用されます)。ASMをいじりたくない場合は、CでSIMDを処理するための優れたライブラリであるlibSIMDを確認してください。


4

ローカル変数にアクセスできる場合は、glGet *を使用しないでください。例:

  • OpenGLからテクスチャサイズを照会せず、変数にロードする際に保存します
  • アプリケーションに変更を保存できる場合、OpenGLから線幅/ポイントサイズをクエリしないでください。

これらの呼び出しは本当に遅いです

glBegin-glEnd句(glColor、glNormal、またはその他)の内部で変更されていない場合は、未使用のものを外部に移動します。OpenGLはステートマシンであり、最後の値を使用します。


3

OpenGLコマンドを最小化することが重要です。したがって、すべての描画コマンドをバッチ処理する必要があります。2Dゲームの場合、Altasテクスチャを使用して、1つのopenglコマンドで同じテクスチャを共有するすべてのスプライトを描画することをお勧めします。


注意してください。小さいバッチと大きいバッチは便利ですが、ターゲットプラットフォームによっては「大きすぎる」バッチはパフォーマンスを低下させます。
アンドレアス

3

バッチ、バッチ、バッチ!! (ab)GPUを使用して、各描画呼び出しで可能な限りレンダリングします。ゲームは、三角形の量ではなく、状態の変化の量によって主に制限されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.