2012-10-13 7 views
6

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

답변

3

네의 SpriteBatch이 문제는 내가 스텐실 버퍼를 구성해야한다고했다 버퍼 스텐실에 기록 않습니다

이 지금까지 내 코드입니다.

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

을 바탕 화면의 경우 :이처럼 그것을 할 필요 안드로이드 런처를 들어

: 그것을 수행하는 방법은 응용 프로그램 configuratioin 객체를 생성하고이 같은 응용 프로그램을 초기화 할 때 매개 변수로 전달하는 것입니다 이 같은 모습입니다