2

OpenGL 3.2+ でエンジンを作成しています。レンダリング可能なオブジェクトには、メッシュ (別名 VAO) といくつかのマテリアル (別名シェーダーとプログラム) があります。すべてのレンダリング可能なものはレンダリング キューに保存され、必要な OpenGL バインド呼び出しが最小限になるように、マテリアルとメッシュのレンダリング プロセスが並べ替えられます。

ただし、すでにバインドされているオブジェクトをバインドする場合があります。私の質問は、OpenGL は、既にバインドされているオブジェクトをバインドしようとしているときに自動的に検出し、すべての高価な操作をスキップしますか、またはシステムを実装する必要がありますか?オブジェクトがすでにバインドされているかどうかを検出しますか?

OpenGL がこれを検出しない場合、glGet* を介してオブジェクト名をフェッチし、バインドしようとしているオブジェクトと比較するか、現在バインドされているオブジェクトを自分で追跡する方が速いでしょうか?

4

2 に答える 2

2

仕様がそのようなチェックを実行する必要があるとは思いませんが、すべての主要な実装は必要です。ただし、自分で行うことにした場合は、値を自分で保存してみませんか? ここでは、glGet に特に関心はありません。ところで、マテリアルとシェーダーは同じものではありません。

于 2012-09-24T06:16:41.293 に答える
0

通常、何かを有効にすると、必要がなくなったら無効にする必要があります。したがって、答えは次のとおりです。プログラムで行われたことを追跡する必要があります。

私が考えることができる最も簡単な例は次のとおりです。

glEnable(GL_TEXTURE_2D);
glBindTexture( 0, id );
// render
glDisable(GL_TEXTURE_2D);
于 2012-09-24T06:15:27.737 に答える