Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 肾上腺220 GLSL缺陷_Android_Opengl Es_Opengl Es 2.0_Glsl - Fatal编程技术网

Android 肾上腺220 GLSL缺陷

Android 肾上腺220 GLSL缺陷,android,opengl-es,opengl-es-2.0,glsl,Android,Opengl Es,Opengl Es 2.0,Glsl,我们在使用Adreno 220 GPU的索尼Xperia手机上遇到GLSL alpha测试问题。该设备正在运行安卓4.0.4 在Adreno 200、Adreno 205、Adreno 225以及Tegra2、Mali400和PowerVR GPU上工作正常 着色器代码: // vertex uniform highp mat4 uMVPMatrix; attribute highp vec4 aPosition; attr

我们在使用Adreno 220 GPU的索尼Xperia手机上遇到GLSL alpha测试问题。该设备正在运行安卓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; }
            }
//顶点
均匀高阶mat4-umvp矩阵;
属性高位向量4;
属性highp vec2 ATEXTROCORD;
可变媒介向量2 vTextureCoord;
void main(){
gl_位置=UMVP矩阵*位置;
vTextureCoord=ATextureCord;
} 
//碎片
精密中泵浮子;
可变媒介向量2 vTextureCoord;
均匀结构;
均匀输卵管;
颜色均匀;
void main(){
vec4-base=texture2D(sTexture,vtexturecord);
if(texture2D(sAlpha,vtexturecord).r<0.5){discard;}
else{gl_FragColor=base*uBlendColor;}
}
错误截图:

其他设备上的正确结果:

请告知导致此类视觉故障的原因、查找原因的方法以及可能的解决方法


编辑:HTC Rezound的旧股票ROM也确认了相同的错误。更多信息请参见我的答案。

我要求在xda开发者的不同固件上测试应用程序。在某些设备上,它工作正常,而在另一个设备上,则存在此视觉故障

因此,我得出结论,这与OpenGL驱动程序中的某些错误有关,这些错误在某些非库存ROM中得到了修复


编辑:确认它是高通公司旧款Adreno 220驱动程序中的一个bug。在HTC Rezound手机(也叫Adreno 220)的4.0.3版ROM上也有同样的错误,它不仅出现在我的应用程序中,也出现在一些游戏中——丢失了某些物体上的某些线条或像素。在生根和安装CM 4.1之后,bug消失了。

祝您好运。我的解决办法是在谷歌中排除这些设备play@rds不可能。:)我不会轻易放弃——我的应用程序中的任何视觉故障都必须消除。如果我有机会在那个设备上调试,我敢肯定它在发布应用程序到Google Play之前就被删除了。我唯一的猜测是,你的alpha纹理可能有一些非常接近0.5的值,并且由于四舍五入,一些你认为>=0.5的值正在评估为<0.5。你能告诉我们更多关于你的阿尔法纹理吗?它是如何生成的,微型/磁性过滤器,边框包裹等?@SchighSchagh它是blacck和white(r==g==b)ETC1压缩纹理,没有mipmap。最近的最小过滤器,线性mag过滤器。边界没有被钳制。放弃!这可能是移动驱动程序特有的问题,可能不可能或不值得解决。如果你正在编写墙纸应用程序,我不认为这是一个杀手级功能,因此最好禁用它。你是否尝试过从你的UV坐标(a-la DirectX)中减去半texel…?在我基于220的HTC Sensation XE上运行良好,顺便说一句。@Goz我的着色器的所有代码都有问题。我还尝试了对片段着色器逻辑的3种不同修改,但都没有效果。DirectX UV coord“修复”通常是从C/C++代码执行的,现在与GLSL有关。。。