2012-10-13 11 views
6

Sto usando libgdx con OpenGL ES 1.0 e mi chiedo se lo SpriteBatch può scrivere/disegnare sul buffer dello stencil. Ho cercato di scriverci sopra e non ottengo alcun risultato, non ho esperienza con il buffer degli stencil, ma ho letto molto e quindi correggimi se sbaglio in qualcosa che segue. Fondamentalmente quello che voglio fare è disegnare una texture con una SpriteBatch nel buffer dello stencil, così quando disegno qualcos'altro (con il buffer dello stencil disabilitato) Viene disegnato solo sulle regioni dove il buffer stencil è uguale a 1.Libgdx SpriteBatch disegna su StencilBuffer?

Questo è il mio risultato desiderato: Se disegno una texture con una forma a stella nel buffer dello stencil e poi disegno una texture rossa nel buffer di colore, voglio che la texture rossa ometti i pixel in cui la stella si trova nel buffer dello stampino.

Questo è il mio codice finora:

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

risposta

3

sì SpriteBatch fa scrivere a stencil buffer Il problema era che ho dovuto configurare il buffer di stencil. Il modo in cui viene fatto è attraverso la creazione di un oggetto applicazione configuratioin e passando come parametro quando si inizializza l'applicazione in questo modo:

Per il launcher Android è necessario fare in questo modo:

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

Per il desktop è così

LwjglApplicationConfiguration Configuration = new LwjglApplicationConfiguration(); 
Configuration.stencil = 8; 
new LwjglApplication(new Game(), Configuration);