0

シェーダープログラムの状態に均一な値が格納されることは既に学習しました。

// GLSL code
uniform mat4 projection;

// C++ code
GLuint location = glGetUniformLocation(program, "projection");
glUniformMatrix4fv(location, 1, GL_FALSE, pointer);

ただし、ID ではなくテクスチャ スロットの番号によってバインドされるため、テクスチャ ユニフォームには当てはまらないようです。

// GLSL code
uniform sampler2D albedo;

// C++ code
int slot = 3;
glActiveTexture(GL_TEXTURE0 + slot);
glBindTexture(GL_TEXTURE_2D, id);
GLuint location = glGetUniformLocation(program, "albedo");
glUniform1i(location, slot);

sampler2Dテクスチャ ID をシェーダーのユニフォームにバインドする方法はありますか? こうすれば、パスごとにすべてのテクスチャを手動でバインドする必要がなくなります。

4

1 に答える 1

1

テクスチャ ID をシェーダの sampler2D ユニフォームにバインドする方法はありますか?

いいえ、そうではありません。サンプラーはテクスチャ オブジェクトではなく、テクスチャ ユニットにアクセスするためです。ただし、NVidia の Kepler GPU は、ベンダー固有の拡張機能として OpenGL で利用可能なバインドレス テクスチャを使用できます。これは、要求されたものを実際に実装します。

于 2013-03-04T13:28:58.230 に答える