OpenGL ES 1.0でlibgdxを使用していますが、SpriteBatchがステンシルバッファに書き込み/描画できるかどうか疑問に思っています。私はそれに書き込もうとしていて、まったく結果が得られません。ステンシルバッファを使用した経験はありませんが、たくさん読んでいるので、次の何かが間違っている場合は訂正してください。基本的に私がやりたいのは、SpriteBatchを使用してテクスチャをステンシルバッファに描画することです。そのため、他の何かを描画すると(ステンシルバッファが無効になっている場合)、ステンシルバッファが1に等しい領域にのみ描画されます。
これが私の望ましい結果です。星の形をしたテクスチャをステンシルバッファに描画してから、赤いテクスチャをカラーバッファに描画する場合、赤いテクスチャで、星がステンシルバッファにあるピクセルを省略します。
これはこれまでの私のコードです:
batch.begin();
Gdx.gl10.glEnable(GL10.GL_STENCIL_TEST);
Gdx.gl10.glEnable(GL10.GL_ALPHA_TEST);
Gdx.gl10.glStencilFunc(GL10.GL_ALWAYS, 0x1, 0xffffffff);
Gdx.gl10.glStencilOp(GL10.GL_REPLACE, GL10.GL_REPLACE, GL10.GL_REPLACE);
Gdx.gl10.glColorMask(false, false, false, false);
batch.draw(myShape, 100, 100); //draw to the stencil buffer a shape (texture region)
batch.end();
batch.begin();
Gdx.gl10.glColorMask(true, true, true, true);
Gdx.gl10.glStencilOp(GL10.GL_KEEP, GL10.GL_KEEP, GL10.GL_KEEP);
// draw where the shape has NOT been drawn
Gdx.gl10.glStencilFunc(GL10.GL_NOTEQUAL, 0x1, 0xff);
batch.draw(BackGroundLayer, 0, 0);// draw background
Gdx.gl10.glDisable(GL10.GL_STENCIL_TEST);