我在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);
}
我对某些事感到困惑。我有一些问题:
在片段着色器中,纹理传递零值(通过glUniform1i)。价值真的是零吗?价值还有别的吗?
真的需要glActiveTexture
来电吗?
为什么我们在glUniform1i中传递零值?
答案 0 :(得分:30)
sampler2D绑定到texture unit。 glUniform调用将它绑定到纹理单元零。只有当你要使用多个纹理单元时才需要glActiveTexture调用(因为GL_TEXTURE0无论如何都是默认值)。