# I have a frag shader, one with an empty s_lightMap, how and why is it effecting the output?

I have an image of concrete rocks of different shades of colors, and I'm applying this shader, but without referencing s_lightMap's uniform in my program:

        precision mediump float;
varying vec2 v_texCoord;
uniform sampler2D s_baseMap;
uniform sampler2D s_lightMap;
void main()
{
vec4 baseColor;
vec4 lightColor;

baseColor = texture2D( s_baseMap, v_texCoord );
lightColor = texture2D( s_lightMap, v_texCoord );
gl_FragColor = baseColor * (lightColor + 0.25);
}


it displays a picture with variable light color added to the final pixel color, but s_lightMap isn't even linked into the program, what is happening in this case, at first I thought it would just do the baseColor as the FragColor, but the addition of the 0.25 makes a non-negative result to (lightColor + 0.25). I'm confused, one minute I think lightColor would be set to a texture of 1's the next an array of 0's.

Or is it just random data? It doesn't appear at all random in the picture, it looks like it's obeying a rule of shading.

I'd like to mimic this effect in code that's not broken.

Example "gimped" image of how it has variable shades (though this is an invert):

• s_lightMap is not linked in shader = you are not assigning it a texture unit in the code? – Cristina May 2 '13 at 15:08
• @Cristina correct, but why would it be doing anything at all, like adding what appears to be color in sharper shades? It's a snippet of code I hacked together, I liked the effect, but it's poor code, so I'd like to get the effect without poor code. – jaysonpowers May 2 '13 at 19:52
• If you are compiling under Win32 you can use gDebugger gremedy.com/download.php to see what exactly is the texture that is being redered at that time. Also there is vis.uni-stuttgart.de/glsldevil – Cristina May 2 '13 at 20:25

After close inspection I found that the line:

gl_FragColor = baseColor * ( lightColor + 0.25 );


is probably exactly equal to:

gl_FragColor = baseColor * ( baseColor + 0.25 );


when uniform sampler2D s_lightMap isn't being loaded into the program.

EDIT: This may or may not be because of the State Functionality of openGL es 2.0, but I wouldn't bet on using it.