私たちのライブ壁紙は 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" +
"}";