This might be a stupid question but what is the defined behavior of normalize?
normalize(float thing) = 1.0
normalize(vec2 thing) = thing/length
normalize(vec3 thing) = thing/length
normalize(vec4 thing) = thing/length or maybe
normalize(vec4 thing) = vec4(vec3(thing)/length_of_vec3, 1.0)
and if a vector is of length = 0.0, result is a NULL vector.
What about textureXD vs textureXDProj.
In ARBfp, I used TXP to take the effect of projection into account. TEX gave incorrect results.
In GLSL, texture2D works.
Which to use and when?