stencilbug : ステンシルマスク動作検証

Galaxy TAB/Nexusで発生する「ステンシルマスク動作バグ」の検証を行うためのサンプル。

配布

コメント


概要

OpenGL ESでステンシルマスクを作成するとき、カラーバッファへ書き込みを行わないようにするために「glColorMask?()」で書き込み禁止を行いますが、Galaxy TAB/Nexusでは「書き込み禁止でもカラーバッファに書き込んでしまう」という現象が発生することがあります。 このプログラムは、この現象を再現することと、その現象を防ぐ動作の検証を行うためのサンプルです。

使用方法

stencilbugを起動します。ステンシルマスク作成作業が正常に行われているときは、以下のような表示が行われます。

Galaxy TAB(OS2.3.4)・Galaxy Nexus(OS4.1)では、以下のような表示が行われます。

いずれの場合も、メニューを表示して[Debugged]を選択することで、正常な表示が行われるようになります。もう一度[Debugged]を選択すると、最初の状態に戻ります。

stencilbug_ok.pngstencilbug_ng.png
正常な表示Galaxy TAB/
Galaxy Nexusでの表示

解説

glStencilFunc?()で「GL_EQUAL、またはGL_NEVER」以外を指定すると、glColorMask?(GL_FALSE)でカラーバッファへの書き込みを禁止している状態でもカラーバッファへの書き込みが行われてしまうのが、描画結果が異なる原因となります。

この現象への対策として、「glDepthFunc?(GL_NEVER)」を指定することで「実質的にカラーバッファへの書き込みを禁止する」ことができます。ただし、この方法はデプスバッファを確保しなければならないため、メモリの無駄や描画速度の低下を起こす原因となる可能性があります。

余談

ライセンス

ライセンスについては、パッケージ同梱のAPACHE-LICENSE-2.0.txtをご覧ください。

counter: today=1, yesterday=0, total=4895

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS