PDA

View Full Version : Vertex shader doesn't recognize some uniforms



glslbeginner
11-20-2010, 12:55 AM
Hi all!

I'm rather new programming with GLSL but I've made some simple shaders successfully. My problem now is that the following shader (vertex) doesn't recognize three of the uniform variables I use: modelview, normalMatrix and invertedCamera.

After some tries, I've found out that the only uniform found is that one used in the last line: gl_Position = matrix * vertex;.

I post the two shaders; vertex and fragment:


#version 330

// Attributes per vertex: position, normal and texture coordinates
in vec4 vertex;
in vec3 normal;

uniform mat4 modelviewProj;
uniform mat4 modelview;
uniform mat3 normalMatrix;
uniform mat4 invertedCamera;

// Color to fragment program
smooth out vec3 vertOutTexCoords;

void main(void)
{
// Get surface normal in eye coordinates
vec3 eyeNormal = normalMatrix * normal;

// Get vertex position in eye coordinates
vec4 vertexPos = modelview * vertex;
vec3 vertexEyePos = normalize (vertexPos.xyz / vertexPos.w);

// Get reflected vector
vec4 texCoords = vec4 (reflect (vertexEyePos, eyeNormal), 1.0);

// Rotate by flipped camera
texCoords = invertedCamera * texCoords;
vertOutTexCoords.xyz = normalize (texCoords.xyz);

// Don't forget to transform the geometry!
gl_Position = modelviewProj * vertex;
}



#version 330

out vec4 fragmentColor;

uniform samplerCube textureUnit0;

smooth in vec3 vertOutTexCoord;

void main(void)
{
fragmentColor = texture (textureUnit0, vertOutTexCoord.stp);
}


Thank you!

glslbeginner
11-20-2010, 09:00 AM
With "doesn't recognize" I mean that when I try to retrieve the uniform location through glGetUniformLocation, only the modelviewProj and textureUnit0 return valid values (0 and 1), but the rest return -1. All the uniforms are necessary for the shader, so I don't understant why the compiler "deletes" them (if the problem is the compiler, which I don't know...).

I hope this explanation sheds some light on the problem.

hound
11-20-2010, 09:05 AM
In the vertex shader you have "vertOutTexCoords" and in the fragment shader "vertOutTexCoord" (note the extra / missing s)

glslbeginner
11-20-2010, 09:11 AM
In the vertex shader you have "vertOutTexCoords" and in the fragment shader "vertOutTexCoord" (note the extra / missing s)

Oh! I was trying to understand so many things at a time than I missed the simplest one.

However, I thought the linker would complaint in cases like this.

Thank you very much!