sampler2D存储什么?

Bìn*_*yên 27 opengl glsl

我已经阅读了一个纹理示例OpenGL 2.1.片段着色器看起来像这样:

#version 120

uniform sampler2D texture;
varying vec2 texcoord;

void main(void)
{
    gl_FragColor = texture2D(texture, texcoord);
}
Run Code Online (Sandbox Code Playgroud)

texcoord从顶点着色器传递.

使用以下C++呈现代码:

void render()
{
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, texture_id);
    glUniform1i(unf_texture, 0);
}
Run Code Online (Sandbox Code Playgroud)

我对某些事感到困惑.我有一些问题:

  1. 在片段着色器中,纹理传递零值(通过glUniform1i).价值真的是零吗?价值还有别的吗?

  2. glUniform1i()调用真正需要的?

  3. 为什么我们在glUniform1i中传递零值?

Vil*_*nde 32

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

  • 你应该养成一个总是叫`glActiveTexture`的习惯.这样,当你突然需要使用多个纹理时,你就不会打破这个世界. (25认同)