TAB/Nexusなど、一部のAndroid端末で発生する「ステンシルマスク動作バグ」の検証を行うためのサンプル。TAB/Nexusでは「書き込み禁止でもカラーバッファに書き込んでしまう」という現象が発生することがあります。このプログラムは、この現象を再現することと、その現象を防ぐ動作の検証を行うためのサンプルです。[#yc7888da]stencilbug.apkをインストールし、起動します。ステンシルマスク作成作業が正常に行われているときは、以下のような表示が行われます。-下地の四角と星が重なる部分は黒く抜ける。-黒く抜けている部分のみ円が表示される。Nexus(OS4.1)では、以下のような表示が行われます。-下地の四角と星が重なる部分は星が表示される。-星と重なっている部分のみ円が表示される。いずれの場合も、メニューを表示して[Debugged]を選択することで、正常な表示が行われるようになります。一度[Debugged]を選択すると、最初の状態に戻ります。[#vf8291b4]glStencilFunc()で「GL_EQUAL、またはGL_NEVER」以外を指定すると、glColorMask(GL_FALSE)でカラーバッファへの書き込みを禁止している状態でもカラーバッファへの書き込みが行われてしまうのが、描画結果が異なる原因となります。この現象への対策として、「glDepthFunc(GL_NEVER)」を指定することで「実質的にカラーバッファへの書き込みを禁止する」ことができます。この方法はデプスバッファを確保しなければならないため、メモリの無駄や描画速度の低下を起こす原因となる可能性があります。2.0フレームワーク」として書かれています。アプリケーションとしての描画発行は、ほぼ全てMainView.javaに簡潔にまとまっています。-OS3.0より前のAndroidでは、「GLES20.glBlendEquation()」が正常に動作していないようです。-BitmapFactory.decodeResource()でアルファチャンネル付きPNGファイルを読み込むと、「乗算済みアルファ画像」に変換が行われるようです。この画像は、glBlendFunc()でGL_SRC_ALPHAではなくGL_ONEを使用しないと半透明部分が正しく描画されません。[#m65f06fd]ライセンスについては、パッケージ同梱のAPACHE-LICENSE-2.0.txtをご覧ください。