2012-04-29 12 views
2

gDEBuggerを使用して、私のopenGLコードのパフォーマンスを向上させようとしています(これは現在非常に悪いので、私はあなたのfpsレートも教えてくれません)。私はチュートリアルを段階的に行っています(デバッガを使ってOpenGLエラーを見つけるなど)、今は冗長な状態の変更を識別しています。それらを避けるためにコードを変更するのが本当に良いアイディアかどうか私は多少は分かりません。例えばOpenGLの冗長なコールを削除する

  • 私のコードはglClearAccum(0 , 0 , 0 , 0);glClearColor(0.0, 0.0, 0.0, 0.0);を呼び出すことにより、 "クリーン初期化" を行います。これらは分かりやすいように冗長ですが、すべての状況でそれに頼ることができますか?いくつかのOpenGLの実装がこの初期状態を保証しない場合、ほとんどの場合それらが冗長であっても呼び出しを行う方が安全です。
  • 初めて初めてシーンを描画する場合はglDrawBuffer(GL_BACK);と同じです。
  • glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL)も冗長であると報告されている。私は同じパラメーターで繰り返し呼び出すことを認識しています。これは、コールがglEnable(GL_TEXTURE_2D);glDisable(GL_TEXTURE_2D);の間に配置され、テクスチャリングが有効になっている間にテクスチャリングが一時的に有効になっているためです。テクスチャが永久に有効になるようにパフォーマンスを傷つけるでしょうか?一時的にテクスチャリングを有効にしている場合は、初期化中にglTextEnvfを一度だけ呼び出すことはできますか?その時点でテクスチャリングが無効になっているので失敗しますか?それとも、それはOpenGLの実装に依存していますか?
+2

即時モード(glBegin/glEnd)または頂点配列を使用していますか? –

+0

私はglBegin/glEndを使用しています。私はおそらく、その頂点配列の事を読む必要があるように見える... +1 – Dabbler

+1

はい、glBegin/glEndは、あなたの悪い性能の原因である可能性が高いです。 –

答えて

1

各初期化コードについては、各特定の関数のマニュアルページを見ると、デフォルト値が何であるかが分かり、仕様によって保証されます。つまり、初期化コードは最初から一度だけ実行され、呼び出しごとに1マイクロ秒の遅延が生じる可能性があるため、問題はありません。初期化中にこれらのことを心配する価値はありません。

glTexEnvfの場合、テクスチャリングを無効にすると状態はリセットされません。 glEnable(GL_TEXTURE_2D)は他のテクスチャ関数には何の影響も与えず、draw呼び出し中にテクスチャをサンプリングしないかどうかを決定するだけです。テクスチャを設定してテクスチャパラメータを設定する必要はありません。たとえば、次のコードが有効である

:あなたが画面全体に(おそらく行う)すべてのフレームを描画する際

//textures disabled 
glTexEnvf(some_texture_state); 

for(i=0;i<10;i++){ 
    glEnable(GL_TEXTURE_2D) 
    //draw some stuff with textures and "some_texture_state" 
    glDisable(GL_TEXTURE_2D) 
    //draw some stuff without texturing 
} 
0

glClearAccum(0 , 0 , 0 , 0);glClearColor(0.0, 0.0, 0.0, 0.0);は冗長であり、彼らは非常に重いです。フレームバッファをクリアする時点はありません。最後のフレームを描画します。

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);は常にフラグを立てて動作するはずです。しかし、それは高価ではありません。

+0

-1: "フレームバッファをクリアしない"ということは古い最適化です。それはもはや最適化ではないだけでなく、実際にフレームバッファをクリアすることでパフォーマンスが低下することはありません。(http://gamedev.stackexchange.com/questions/17706/out-of-bounds-in-aaa-games/ 17713#17713) –

関連する問題