5

我们在使用Adreno 220 GPU的Sony Xperia S手机上遇到 GLSL alpha 测试问题。设备运行 Android 4.0.4。

Adreno 200、Adreno 205、Adreno 225以及Tegra2Mali400PowerVR 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 确认了相同的错误。有关更多信息,请参阅我的答案。

4

1 回答 1

0

我已经要求在 xda-developers 的不同固件上测试应用程序。在某些设备上它工作得很好,而在另一些设备上则存在这种视觉故障。

所以我得出结论,这与 OpenGL 驱动程序中的一些错误有关,这些错误已在某些非库存 ROM 中修复。

编辑:确认它是旧高通公司的 Adreno 220 驱动程序中的一个错误。在具有 4.0.3 ROM 的HTC Rezound手机(也是 Adreno 220)上存在相同的错误,它不仅存在于我的应用程序中,而且还存在于某些游戏中 - 某些对象上缺少某些线条或像素。生根并安装 CM 4.1 后,错误消失了。

于 2013-01-29T09:57:35.610 回答