2012-10-13 10 views
6

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); 

Odpowiedz

3

tak spriteBatch nie pisać do wzornika bufor problemem było to, że musiałem skonfigurować bufor szablonowy. Sposób, w jaki odbywa się to poprzez stworzenie obiektu configuratioin aplikacji i przekazanie go jako parametr podczas inicjalizacji aplikacji tak:

dla android wyrzutni trzeba zrobić to tak:

AndroidApplicationConfiguration Configuration = new AndroidApplicationConfiguration(); 
Configuration.stencil = 8; //stencil buffer size 
initialize(new Game(), Configuration); //pass it as parameter 

Na pulpicie jest taki:

LwjglApplicationConfiguration Configuration = new LwjglApplicationConfiguration(); 
Configuration.stencil = 8; 
new LwjglApplication(new Game(), Configuration); 
Powiązane problemy