我们在配备 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 消失了。

10-08 01:04