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

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

配布

コメント


概要

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

使用方法

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

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をご覧ください。

参考

PowerVR SGX540のバグ

「vertex shaderで精度指定する(precision mediump float;)とコンパイラが正常動作しない」とのこと。本件とは関係ないが、不具合再現機種が被っているので一応。

counter: today=3, yesterday=1, total=7072

添付ファイル: filestencilbug_ok.png 1282件 [詳細] filestencilbug_ng.png 1278件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-08-14 (火) 16:41:30