openGL から見ると、ステンシルは単なる画像の大きさのメモリに過ぎない。それぞれのピクセルの所に数字が書いてあって、数字を元にこの線は表示するしないを決めるだけだ。この数字の使い方はプログラマに委ねられていて、ポータルがやっているみたいに何枚ものステンシルが重なって、奥まで見える穴しか描画しないようにも出来るし、ビットごとに独立したステンシルと見なして、複数のステンシル同士の論理演算の結果で描画を決める事も出来る。まあ、色んな事をやると大変なので、ポータルのやり方だけを採用する事にする。
というわけで仕様はこんな感じか。
- OpenGL>>getStencil でオブジェクト取得。最初は手を抜いてシングルトン。
- clear ステンシルの全く無い状態に戻す
- push 新しいステンシルを重ねる
- pop 現在のステンシルを一枚破棄
- cutWhile: [] ブロック内の描画は、ステンシルの切り抜きである
- renderWhile: [] ブロック内の描画は、ステンシル内の描画である
。。。と、ここまで作業して、ステンシルの使い方が僕の考えていたのと微妙に違うことを発見する。うーん。ワカラン。明日聞こう。