PDA

View Full Version : find the location of texture uniform



bingdianlieshou
11-05-2012, 05:53 PM
Hi ,here is my glsl code


#version 400

in vec4 ex_Color;
in vec4 ex_Pos;
out vec4 FragColor;


uniform sampler2D RayStartPoint;
uniform sampler2D RayStopPoint;

void main()
{
vec4 temp = ex_Color;
vec2 texc = ((ex_Pos.xy / ex_Pos.w) + 1.0f )/2.0f ;

vec4 startPosition = texture(RayStartPoint, texc) ;
vec4 stopPosition = texture2D(RayStopPoint, texc);
temp.w = 1 ;

// FragColor = startPosition ;
FragColor = stopPosition ;
// FragColor = temp ;

// FragColor = stopPosition - startPosition ;

}
my program could find the first uniform location,but can't find the second. the function "glGetUniformLocation" just return -1
anyone had encountered similar problem?

Alfonse Reinheart
11-05-2012, 07:50 PM
Of course it couldn't; you never used it.

The compiler can plainly see that you never use `startPosition` to generate the fragment shader output in any way. So it is optimized out; it doesn't access the RayStartPoint texture. And since you never access the texture, the sampler uniform is itself optimized out. It is not an active uniform, so the compiler doesn't have to provide a uniform location for it.

You should not consider getting a -1 back from `glGetUniformLocation` to be an error.

bingdianlieshou
11-05-2012, 09:35 PM
Of course it couldn't; you never used it.

The compiler can plainly see that you never use `startPosition` to generate the fragment shader output in any way. So it is optimized out; it doesn't access the RayStartPoint texture. And since you never access the texture, the sampler uniform is itself optimized out. It is not an active uniform, so the compiler doesn't have to provide a uniform location for it.

You should not consider getting a -1 back from `glGetUniformLocation` to be an error.

Thank you very much ! problem got solved。

and can you tell me where to find the infromation about the "shader complier"?