2012-08-03 63 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