这是我的片段着色器程序,它在iPhone 3g上的iOS 5.1.1上运行。
#ifdef GL_ES
precision lowp float;
#endif
varying vec2 v_texCoord;
void main()
{
float offset = sin(v_texCoord.x * 10.0);
// offset = offset * 1.0; // (!!!)
gl_FragColor = vec4(offset, 0.0, 0.0, 1.0);
}
哪会产生好罪:
注意标记为(!!!)的行。我想,将浮点值乘以1.0必须不做任何改变。 (在Windows操作系统下运行的相同着色器完全按预期工作。)因此,我取消注释该行并收到此信息:
WTF?!
如何重现:
将Shader.vsh的内容更改为以下内容。 (我刚刚添加了一个变量参数v_pos)。
attribute vec4 position;
attribute vec3 normal;
varying lowp vec4 colorVarying;
varying lowp vec4 v_pos;
uniform mat4 modelViewProjectionMatrix;
uniform mat3 normalMatrix;
void main()
{
vec3 eyeNormal = normalize(normalMatrix * normal);
vec3 lightPosition = vec3(0.0, 0.0, 1.0);
vec4 diffuseColor = vec4(0.4, 0.4, 1.0, 1.0);
float nDotVP = max(0.0, dot(eyeNormal, normalize(lightPosition)));
colorVarying = diffuseColor * nDotVP;
gl_Position = modelViewProjectionMatrix * position;
v_pos = gl_Position;
}
Chnge Shader.fsh如下。
varying lowp vec4 colorVarying;
varying lowp vec4 v_pos;
void main()
{
gl_FragColor = colorVarying;
lowp float a = sin(v_pos.x * 10.0);
// a = a * 1.0; // (!!!)
gl_FragColor = vec4(a, 0.0, 0.0, 1.0);
}
在设备上运行程序并查看蓝色立方体上的炫酷栏:
取消注释(!!!)标记的行(a = a * 1.0;
)并再次运行: