2012-08-03 46 views
0

我们的动态壁纸在摩托罗拉Atrix手机上无法正常工作。它有一个股票ROM瓦特/ Android 2.3。 看起来像discard片段着色器的命令不起作用导致没有透明部分的图像。 Desire S w/Android 2.3,Mototola Droid w/CM9,华硕Transformer w/4.0,Samsung Galaxy Note w/4.0未出现此问题。所以这个问题似乎对摩托罗拉Atrix手机非常具体。
我们使用ETC1压缩纹理,所以alpha通道通过单独的纹理采样器传递到着色器 - sTexture用于主要漫反射纹理,sAlpha具有黑白alpha通道。ETC1压缩纹理不适用于摩托罗拉Atrix

这里是片段和顶点着色器代码:

private final String mVertexShader = "uniform highp mat4 uMVPMatrix;\n" + 
     "attribute highp vec4 aPosition;\n" + 
     "attribute highp vec2 aTextureCoord;\n" + 
     "varying mediump vec2 vTextureCoord;\n" + 
     "void main() {\n" + 
     " gl_Position = uMVPMatrix * aPosition;\n" + 
     " vTextureCoord = aTextureCoord;\n" + 
     "}\n"; 

private final String mAlphaFragmentShader = "precision mediump float;\n" + 
     "varying mediump vec2 vTextureCoord;\n" + 
     "uniform sampler2D sTexture;\n" + 
     "uniform sampler2D sAlpha;\n" + 
     "void main() {\n" + 
     " vec4 base = texture2D(sTexture, vTextureCoord);\n" + 
     " gl_FragColor = base;\n" + 
     " if(texture2D(sAlpha, vTextureCoord).r < 0.5){ discard; }\n" + 
     "}"; 
+0

'base.a'是否存在且是否超过0.5? – tolgap 2012-08-03 12:03:18

+0

@tolgap抱歉,错误的着色器代码(它是使用单纹理alpha通道的旧着色器,ETC1纹理没有alpha,所以我修改了着色器以使用2纹理)。我编辑过问题 - 现在它有正确的顶点和片段着色器。 – keaukraine 2012-08-03 12:08:18

+1

我为我的开发设备使用了Atrix,我的'discard'语句正常工作。如果你试图在if区块内部做一些其他的东西,除了放弃它之外它是否工作? (比如,将颜色设置为黄色而不是丢弃)。 – Tim 2012-08-03 14:30:10

回答

1

行,所以我已经解决了这个问题。非常感谢@Tim愿意在设备上运行测试应用程序并提供截图。 我修改片段着色器以下列方式:

private final String mAlphaFragmentShader = "precision mediump float;\n" + 
     "varying mediump vec2 vTextureCoord;\n" + 
     "uniform sampler2D sTexture;\n" + 
     "uniform sampler2D sAlpha;\n" + 
     "void main() {\n" + 
     " vec4 base = texture2D(sTexture, vTextureCoord);\n" + 
     " vec4 mask = texture2D(sAlpha, vTextureCoord);\n" + 
     " gl_FragColor = base;\n" + 
     " if(mask.g < 0.5){ discard; }\n" + 
     "}"; 

似乎摩托罗拉Atrix OpenGL驱动治疗中错误的方法和样本- [R信道作为通道压缩纹理这始终是1.0 ETC1的情况下压缩纹理。它看起来像纹理的内部格式被视为ARGB而不是RGBA。由于我的面具纹理是黑白的,我可以取任何其他颜色。绿色工作得很好。

+0

很高兴你能找到解决方案。为了更准确地反映问题,我编辑了问题标题,以便可以帮助其他人解决同样的问题(ETC1纹理)。 – Tim 2012-08-09 20:36:22

相关问题