Cortar un cuadrado translúcido en una textura

Cómo quitar (recorte) un rectángulo transparente en una textura, de modo que el agujero sea translúcido.

En Android usaría el enfoque de Xfermodes:

Cómo utilizar máscaras en android

Pero en libgdx tendré que usar opengl. Hasta ahora casi logré lo que estaba buscando, mediante el uso de la glBlendFunc Desde esta página agradable y muy útil que learend que

glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA); 

Debería solucionar mi problema, pero lo probé, y no funcionó como esperaba:

 batch.end(); batch.begin(); //Draw the background super.draw(batch, x, y, width, height); batch.setBlendFunction(GL20.GL_ZERO, GL20.GL_ONE_MINUS_SRC_ALPHA); //draw the mask mask.draw(batch, x + innerButtonTable.getX(), y + innerButtonTable.getY(), innerButtonTable.getWidth(), innerButtonTable.getHeight()); batch.end(); batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); batch.begin(); 

Es sólo hacer la zona de la máscara de negro llano, mientras que yo estaba esperando la transparencia, las ideas.

Esto es lo que obtengo:

La máscara se dibujará en negro

Esto es lo que esperaba:

El área de la máscara debe ser transparente

He resuelto mi problema mediante el uso del búfer de plantilla:

 Gdx.gl.glClear(GL_STENCIL_BUFFER_BIT); batch.end(); //disable color mask Gdx.gl.glColorMask(false, false, false, false); Gdx.gl.glDepthMask(false); //enable the stencil Gdx.gl.glEnable(GL20.GL_STENCIL_TEST); Gdx.gl.glStencilFunc(GL20.GL_ALWAYS, 0x1, 0xffffffff); Gdx.gl.glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); batch.begin(); //draw the mask mask.draw(batch, x + innerButtonTable.getX(), y + innerButtonTable.getY(), innerButtonTable.getWidth(), innerButtonTable.getHeight()); batch.end(); batch.begin(); //enable color mask Gdx.gl.glColorMask(true, true, true, true); Gdx.gl.glDepthMask(true); //just draw where outside of the mask Gdx.gl.glStencilFunc(GL_NOTEQUAL, 0x1, 0xffffffff); Gdx.gl.glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); //draw the destination texture super.draw(batch, x, y, width, height); batch.end(); //disable the stencil Gdx.gl.glDisable(GL20.GL_STENCIL_TEST); 
  • Java.lang.ClassNotFoundException: android.view.GLSurfaceView
  • EGL_emulation no pudo establecer la conexión con host - android
  • Android Opengl FBO fuera de la pantalla
  • Android Vertex Array objetos?
  • Los emuladores de Genymotion dan error Open GL en Kubuntu 13.10 64-bit
  • ¿Cómo puedo declarar la versión de OpenGL en shaders en Android?
  • Android OpenGL2.0 que muestra texturas negras
  • El código fuente de Android no funciona, el búfer de marco de lectura a través de glReadPixels
  • ¿Diferencias y ventajas de SurfaceView vs GLSurfaceView en Android?
  • GLES 3.0 incluyendo gl2ext.h
  • Cómo crear un mapa interactivo en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.