碎片着色器中的纹理有些奇怪

时间:2017-10-11 08:39:40

标签: opengl

这是我的片段着色器:

#version 330 core
in vec2 param_uv;
uniform sampler2D uniform_texturetoto;
out vec3 color;
void main()
{
    color = texture( uniform_texturetoto, param_uv ).rgb;
}

这是我的主要c ++代码:

GLuint textureID;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texture->w, texture->h, 0, GL_RGB, GL_UNSIGNED_BYTE, my_texture_pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

...

glBindTexture(GL_TEXTURE_2D, textureID);

我的问题是一切正常。这不正常,因为我的主c ++程序中从未使用uniform_texturetoto。我可以用任何变量名替换uniform_texturetoto,程序仍然有效!

我的问题是......为什么?

由于

1 个答案:

答案 0 :(得分:1)

我认为GLSL规范有答案

使用4.50规范,第4.3.5节有答案:

所有统一变量都是只读的,并在链接时或通过API在外部进行初始化。链接时初始值是变量初始化程序的值(如果存在),如果没有初始化程序,则为0。

我认为这就是为什么你的代码工作正常。

相关问题