OpenGL ES 1.0에서 libgdx를 사용 중입니다. SpriteBatch가 스텐실 버퍼에 쓰기/그릴 수 있는지 궁금합니다. 나는 그것에 글을 쓰려고 노력했지만 어떤 결과도 얻지 못했습니다. 스텐실 버퍼를 사용하는 경험이 없지만 뒤 따르는 모든 것이 틀린다면 많이 읽었습니다. 기본적으로 SpriteBatch를 사용하여 스텐실 버퍼에 텍스처를 그리는 방법으로 스텐실 버퍼가 비활성화 된 상태에서 무언가를 그릴 때 스텐실 버퍼가 1 인 영역에만 그려집니다.Libgdx SpriteBatch가 StencilBuffer에 그립니다.
원하는 결과입니다. 스텐실 버퍼에 별 모양이있는 텍스처를 그린 다음 빨간색 버퍼를 빨간색 텍스처로 그립니다. 빨강 텍스처가 스텐실 버퍼의 픽셀을 생략하도록합니다.
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);