我们的动态壁纸在摩托罗拉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" +
"}";
'base.a'是否存在且是否超过0.5? – tolgap 2012-08-03 12:03:18
@tolgap抱歉,错误的着色器代码(它是使用单纹理alpha通道的旧着色器,ETC1纹理没有alpha,所以我修改了着色器以使用2纹理)。我编辑过问题 - 现在它有正确的顶点和片段着色器。 – keaukraine 2012-08-03 12:08:18
我为我的开发设备使用了Atrix,我的'discard'语句正常工作。如果你试图在if区块内部做一些其他的东西,除了放弃它之外它是否工作? (比如,将颜色设置为黄色而不是丢弃)。 – Tim 2012-08-03 14:30:10