私たちのライブ壁紙は Motorola Atrix フォンでは正しく動作しません。Android 2.3 を搭載したストック ROM を搭載しています。フラグメント シェーダのコマンドが機能しないように見えますが、discard
透明部分がない結果の画像です。この問題は、Android 2.3 搭載の Desire S、CM9 搭載の Mototola Droid、4.0 搭載の ASUS Transformer、4.0 搭載の Samsung Galaxy Note では発生しません。したがって、問題は Motorola Atrix 電話に非常に固有のもののようです。
ETC1 圧縮テクスチャを使用するため、アルファ チャネルは別のテクスチャ サンプラーを介してシェーダーに渡されます。sTexture
メインの拡散テクスチャに使用され、sAlpha
白黒のアルファ チャネルがあります。
フラグメント シェーダーと頂点シェーダーのコードは次のとおりです。
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" +
"}";