获取OpenGL-ES模板缓冲区工作

在Android的opengl-es模板缓冲区,我只是试图屏蔽画面的一部分。 我想我已经把它设置了正确,但是它并没有掩盖没有被污染的部分。 下面是我正在做的代码的提取。

gl.glEnable(GL10.GL_STENCIL_TEST); gl.glClearStencil(0); gl.glClear(GL10.GL_STENCIL_BUFFER_BIT); gl.glColorMask(false, false, false, false); gl.glDepthMask(false); gl.glStencilFunc(GL10.GL_ALWAYS, 1, 1); gl.glStencilOp(GL10.GL_REPLACE, GL10.GL_REPLACE, GL10.GL_REPLACE); drawMask(); //I have confirmed this draws to the correct location by allowing colour to show. Trust that this draws the mask to the correct location. gl.glColorMask(true, true, true, true); gl.glDepthMask(true); gl.glStencilFunc(GL10.GL_EQUAL, 1, 1); gl.glStencilOp(GL10.GL_KEEP, GL10.GL_KEEP, GL10.GL_KEEP); drawItems(); //Draw everything. Only items inside the masked area should be drawn. But everything is drawn with this code... gl.glDisable(GL10.GL_STENCIL_TEST); 

任何人发现这有什么不对? 它基本上是画一个盒子说,一半的屏幕(这个工程,如果我有颜色启用)这是设置模板缓冲区为1该地区。 最后,我画了整个屏幕。 我只想把它画到上半部分,但它吸引了一切。

提前致谢。

Solutions Collecting From Web of "获取OpenGL-ES模板缓冲区工作"

您必须使用setEGLConfigChooser来设置stencilSize。 请注意,不同的手机有不同的表面,可能会或可能不支持这一点。

例如:

  // void android.opengl.GLSurfaceView.setEGLConfigChooser(int redSize, int greenSize, int blueSize, int alphaSize, int depthSize, int stencilSize) mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 8); 

原因最终是因为我没有正确设置我的EGLConfig来支持模板缓冲区。

您需要使用GLSurfaceView.setEGLConfigChooser显式请求模板缓冲区:

 public class MyActivity extends Activity { GLSurfaceView view; ... onCreate(... view.setEGLConfigChooser(5,6,5,0,16,8); view.setRenderer(... 

数字是红色,绿色,蓝色,阿尔法,深度,模具比特。 具有16位深度和8位模板的RGB565是每个支持EGL的Android设备所支持的最小值。

这个答案是从下面显示的链接转发。 这为我解决了一个样本中的OpenGL ES2.0错误。

“在调用glClear(GL_STENCIL_BUFFER_BIT)清除模板缓冲区的所有位之前,需要设置模板掩膜glStencilMask(0xff)。

android的opengl 2.0模板缓冲区不工作