我们在配备 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 已确认相同的错误。有关更多信息,请参阅我的答案。
最佳答案
我已经要求在 xda-developers 的不同固件上测试应用程序。在某些设备上它工作得很好,而在另一些设备上则存在这种视觉故障。
所以我得出结论,它与某些非库存 ROM 中修复的 OpenGL 驱动程序中的某些错误有关。
编辑 :确认它是旧 Qualcomm Adreno 220 驱动程序中的错误。在配备 4.0.3 ROM 的 HTC Rezound 手机(也是 Adreno 220)上也存在同样的错误,它不仅存在于我的应用程序中,而且存在于某些游戏中 - 在某些对象上缺少某些线条或像素。生根并安装 CM 4.1 后,bug 消失了。