2017-10-11 74 views
1

這裏是我的片段着色器:奇怪的事情我在片段着色器紋理

#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); 

我的問題是,一切工作正常。這是不正常的,因爲uniform_texturetoto從來沒有在我的主要C++程序中使用。我可以用任何變量名替換uniform_texturetoto,程序仍然有效!

我的問題是...爲什麼?

感謝

+0

你是說你沒有爲uniform_texturetoto調用glGetUniformLocation()並且你沒有將它綁定到任何紋理單元,並且代碼仍在工作? –

+1

採樣器統一的默認值很可能爲0.由於您將紋理綁定到紋理單元0,所以一切正常。 – BDL

回答

1

我覺得GLSL的規格已經回答了它

使用4.50規範,4.3.5節有答案:

所有統一變量是隻讀的,在外部要麼初始化在鏈接時或通過API。鏈接時初始值是變量初始值設定項的值(如果存在),如果沒有初始值設定項,則爲0。

我認爲這就是爲什麼你的代碼工作正常。