web-dev-qa-db-ja.com

sampler2Dには何が保存されますか?

_OpenGL 2.1_でテクスチャの例を読みました。フラグメントシェーダーは次のようになります。

_#version 120

uniform sampler2D texture;
varying vec2 texcoord;

void main(void)
{
    gl_FragColor = texture2D(texture, texcoord);
}
_

texcoordは頂点シェーダーから渡されます。

次のC++レンダリングコードが使用されます。

_void render()
{
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, texture_id);
    glUniform1i(unf_texture, 0);
}
_

私はいくつかのことで混乱しています。私はいくつか質問があります:

  1. フラグメントシェーダーでは、テクスチャに(glUniform1i()によって)ゼロ値が渡されます。値は本当にゼロですか?値は何か他のものですか?

  2. glActiveTexture()呼び出しは本当に必要ですか?

  3. glUniform1i()にゼロ値を渡すのはなぜですか?

31
Bình Nguyên

_sampler2D_は texture unit にバインドされています。 glUniform呼び出しは、それをテクスチャユニット0にバインドします。 glActiveTexture()呼び出しは、複数のテクスチャユニットを使用する場合にのみ必要です(いずれにしても_GL_TEXTURE0_がデフォルトであるため)。

32
Ville Krumlinde