I've discovered a problem passing an array from a vertex shader to a pixel
shader. Somewhere the array ends up overlapping with other constants, for
example if I have an array of UV coordinates and a colour being passed
though, then changing the UV coordinates will affect the colour. Using
either the colour or UV alone works, I assume because the compiler optimises
out the unused variables and prevents the overwrite occurring. This happens
even with an array size of 1.
To give a simple example, this pixel shader will render incorrectly:
varying highp vec4 vl_TexCoord[1];
varying highp vec4 vl_Color;
uniform highp sampler2D _diffuseMap;
void main() {
gl_FragColor = vl_Colo r* texture2D(_diffuseMap, vl_TexCoord[0].xy);
}
However changing main to either of these cases work, giving either a
correctly mapped texture, or correct vertex colour:
void main() {
gl_FragColor = vl_Color;
}
void main() {
gl_FragColor = texture2D(_diffuseMap, vl_TexCoord[0].xy);
}
Changing the vl_TexCoord array to a simple vec4 makes the problem go away,
so I have a workaround, but this seems like a fairly serious problem,
possibly in the shader compiler.
The same issue was raised on gamedev so I think it's a genuine bug:
http://www.gamedev.net/topic/594352-gl-20-shader-varying-array-problem/
Has anyone else experienced this problem? I'm using a HTC Desire HD for
testing, using the 2.2 Android SDK. I don't know if it's hardware or SDK
version specific at the moment.
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en