2017-09-26 1 views
0

Visual C++でのテクスチャ操作にはOpenGL 4を使用します。 私が作業しているプラ​​ットフォームはVisual Studio 2015です。GL_TEXTUREiテクスチャユニットの実装を見てみると、合計数は0〜31(合計32)に制限されています。Visual StudioでのOpenGL 4インプリメンテーションでのテクスチャユニット数(GL_TEXTUREi)2015

同時にアクセスできる最大テクスチャ数は32個に制限されていますか?

これは、実装のソースコードからのものである:

#define GL_TEXTURE0 0x84C0 
#define GL_TEXTURE1 0x84C1 
#define GL_TEXTURE2 0x84C2 
#define GL_TEXTURE3 0x84C3 
#define GL_TEXTURE4 0x84C4 
#define GL_TEXTURE5 0x84C5 
#define GL_TEXTURE6 0x84C6 
... 
#define GL_TEXTURE31 0x84DF 
+4

:[どのように多くのテクスチャI通常することができます本当に賛成ですか?](https://gamedev.stackexchange.com/questions/30043/how-many-textures-can-usually-i-bind-at-once) SE) – Borgleader

答えて

5

のOpenGLに結合することができるテクスチャの数がない32又はあります。 glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);で得られるものではありません。この関数は、フラグメントシェーダによってアクセス可能なテクスチャの数を取得します。

それぞれshader has its own limit of the number of textures it can useを参照してください。しかし、使用可能なテクスチャの総数、期間もあります。これは、OpenGLでGL_MAX_COMBINED_TEXTURE_IMAGE_UNITSで定義されています。

したがって、ステージあたりのテクスチャとテクスチャ - トータルバウンドの2つの制限があります。

OpenGL 3.xでは、ステージあたりの制限の最小値が16に設定されているため、ハードウェアのステージあたりのテクスチャは16より少なくなることはありません。より高い制限がありますが、少なくとも16になることがわかります。3.xでは、テクスチャ合計の最小数を48と指定します。AKA:16 * 3段階。同様に、GL 4.xは、数値を16テクスチャ/ステージ、80テクスチャ - トータルバウンド(つまり16 * 5ステージ)と定義しています。

この場合も、これらは最小の番号です。ハードウェアは変化する可能性があります。

定義された列挙子よりも多くのテクスチャユニットを使用するには、GL_TEXTURE0の値を取ると、あなたが操作したいテクスチャユニットに追加:重複/関連

glActiveTexture(GL_TEXTURE0 + unit_index); 
関連する問題