Używam libgdx z OpenGL ES 1.0 i zastanawiam się, czy SpriteBatch może pisać/rysować do bufora szablonu. Próbowałem napisać do tego i nie mam żadnych wyników, nie mam doświadczenia z wykorzystaniem bufora szablonu, ale dużo czytałem, więc popraw mnie, jeśli się mylę w czymkolwiek, co następuje. Zasadniczo chciałbym narysować teksturę za pomocą SpriteBatch do bufora szablonu, więc gdy rysuję coś innego (z wyłączonym buforem szablonowym), rysuje się tylko w obszarach, w których bufor szablonu jest równy 1.Libgdx Czy SpriteBatch rysuje do StencilBuffer?
To jest mój pożądany wynik: Jeśli narysuję teksturę o kształcie gwiazdy do bufora szablonu, a następnie narysuję czerwoną teksturę do bufora kolorów, chcę, aby czerwona tekstura pominęła piksele, w których gwiazda znajduje się w buforze szablonu.
To jest mój kod do tej pory:
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);