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); 
  • Los emuladores de Genymotion dan error Open GL en Kubuntu 13.10 64-bit
  • Compresión de textura de Android OpenGL
  • Construyendo un juego en Mobile. ¿Nativo o motor?
  • Android OpenGL ES 2.0: ¿Es posible la sintaxis de "switch-case" en el fragmento de fragmento GLSL en el Samsung Galaxy S2?
  • ¿Se admiten objetos Array Vertex de ES OpenGL en cualquier emulador de Android?
  • Android Openg GL ES 2 dibujo grandes texturas lento
  • ¿Hay algún punto en el uso de un búfer de índice con una textura en OpenGL ES (Android)?
  • El código fuente de Android no funciona, el búfer de marco de lectura a través de glReadPixels
  • OpenGL ES 2 no funciona en Android API23
  • Android personalizado XferMode / PorterDuff.Mode
  • Androide. Cómo mover el objeto en la dirección que se enfrenta (usando Vector3 y Quaternion)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.