プログラム内のテクスチャ ユニットの数をハード コーディングする多くのサンプルを見てきました。例えば:
glActiveTexture(GL_TEXTURE0 + 0);
glBindTexture(GL_TEXTURE_2D, object1BaseImage);
glActiveTexture(GL_TEXTURE0 + 2);
glBindTexture(GL_TEXTURE_2D, object1NormalMap);
glActiveTexture(GL_TEXTURE0 + 4);
glBindTexture(GL_TEXTURE_2D, shadowMap);
問題は、シーンをレンダリングするときに同じテクスチャ ユニットを使用することによって、同時に使用される 2 つのテクスチャが互いに競合する可能性があることです。私の質問は、クラスまたは関数を実装して、OpenGL でテクスチャ ユニットを自動的に割り当てる方法です。使用できるサンプラー オブジェクトの数を定義するさまざまな定数があるためです。
GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS,
GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS,
GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS,
GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS,
GL_MAX_TEXTURE_IMAGE_UNITS and
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS.
定数に混乱しています。次のような定数があるべきではありませんGL_MAX_FRAGMENT_TEXTURE_IMAGE_UNITS
か? 割り当てるときにテクスチャユニットの最大数を取得する必要があると思います。したがって、2 つの質問があります。
- 上記の 6 つの定数を理解する方法、なぜ という名前の定数がないのか
GL_MAX_FRAGMENT_TEXTURE_IMAGE_UNITS
。 - クラスまたは関数を記述する方法は、定数を使用してテクスチャ ユニットを自動的に割り当てます。
何か案は?コードスニペットをいただければ幸いです。