我们在使用Adreno 220 GPU的Sony Xperia S手机上遇到 GLSL alpha 测试问题。设备运行 Android 4.0.4。
在Adreno 200、Adreno 205、Adreno 225以及Tegra2、Mali400和PowerVR GPU 上运行良好。
着色器代码:
// vertex
uniform highp mat4 uMVPMatrix;
attribute highp vec4 aPosition;
attribute highp vec2 aTextureCoord;
varying mediump vec2 vTextureCoord;
void main() {
gl_Position = uMVPMatrix * aPosition;
vTextureCoord = aTextureCoord;
}
// fragment
precision mediump float;
varying mediump vec2 vTextureCoord;
uniform sampler2D sTexture;
uniform sampler2D sAlpha;
uniform vec4 uBlendColor;
void main() {
vec4 base = texture2D(sTexture, vTextureCoord);
if(texture2D(sAlpha, vTextureCoord).r < 0.5){ discard; }
else { gl_FragColor = base * uBlendColor; }
}
错误截图:
其他设备上的正确结果:
请告知可能导致此类视觉故障的原因、查找原因的方法以及可能的解决方法。
编辑: HTC Rezound 的旧库存 ROM 确认了相同的错误。有关更多信息,请参阅我的答案。