iPhoneのOpenGL ESでステンシルバッファ使えるよ!( ゚∀゚)

使えるったら使えるよ!!( ゚∀゚)

“iPhone ステンシルバッファ” でググると「ステンシルバッファはない」とか「iPhoneでは使えない」とかいうサイトが上位にヒットしますが、使えます。

実は使えます。

使えるんです!!!!!!!!!

公式ガイド「iOS OpenGL ESプログラミングガイド」にもステンシルステンシル書いてあるじゃないですか。
よく読んでみよう。

iOS 4.0以降では、独立したステンシルバッファはサポートされていません。結合された深度/ステンシルバッファを使用します。

とある。
4.0以降、一般的なステンシルバッファ GL_STENCIL_INDEX8 が使えないようです。

じゃあ4.0以降の「結合された深度/ステンシルバッファ」ってどう使うんだよっ! てのは以下の通り。

ひとつのレンダーバッファをGL_DEPTH_ATTACHMENTとGL_STENCIL_ATTACHMENTで2度フレームバッファに登録するのがポイント。

-layoutSubviewsの中なんかに書くバッファの構築部分は、

みたいなカンジで、バッファのタイプにGL_DEPTH24_STENCIL8_OESを指定。
(GL_STENCIL_INDEX8ではなく)

後は glEnable(GL_STENCIL_TEST) してフツーにステンシル使えます。ぐらっちぇ。

俺はステンシルバッファだけ使いたいんだよ! デプスバッファなんか要らねーー!!!!
って場合はglFramebufferRenderbufferGL_STENCIL_ATTACHMENTだけすればOK。
(8bitのステンシルのために32bitのバッファが作られちゃうことには変わりないが)