35

我在 中阅读了纹理示例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()

4

1 回答 1

38

sampler2D绑定到一个纹理单元。该glUniform调用将其绑定到纹理单元零。仅当glActiveTexture()您要使用多个纹理单元时才需要调用(因为GL_TEXTURE0无论如何都是默认值)。

于 2012-06-03T09:12:33.233 回答