sampler2D存储什么?

时间:2012-06-03 08:35:16

标签: opengl glsl

我在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中传递零值?

1 个答案:

答案 0 :(得分:30)

sampler2D绑定到texture unit。 glUniform调用将它绑定到纹理单元零。只有当你要使用多个纹理单元时才需要glActiveTexture调用(因为GL_TEXTURE0无论如何都是默认值)。