OpenGLにバインドできるテクスチャの数は32または16ではありません。それはあなたが得るものではありませんglGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);
。この関数は、フラグメントシェーダーがアクセスできるテクスチャの数を取得します。
各シェーダーには、使用できるテクスチャの数に独自の制限があります。ただし、使用できるテクスチャの合計数、期間もあります。これは(OpenGLで)によって定義されていGL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
ます。
そのため、2つの制限があります:ステージごとのテクスチャと、テクスチャの合計バウンドです。
OpenGL 3.xは、ステージごとの制限の最小数を16に定義しているため、ハードウェアがステージごとに16未満のテクスチャを持つことはできません。より高い制限を持つこともできますが、少なくとも16が得られることがわかります。3.xはtextures-total-boundの最小数を48として定義します。AKA:16 * 3ステージ。同様に、GL 4.xでは、1ステージあたり16テクスチャ、合計96テクスチャ(つまり、16 * 6ステージ、計算シェーダーを含む)になるように数値を定義しています。
繰り返しますが、これらは最小数です。ハードウェアはさまざまです(実際に異なります)。
特定のハードウェアに関しては、DX10クラスのハードウェアがこれらの数値と一致すると予想できます。DX11クラスのハードウェアには多少の違いがあります。NVIDIA(GeForce 4xx +)およびハイエンドAMDチップ(別名:GCNコア)には、ステージあたり16個を超える可能性があります。