2

当我尝试使用模板缓冲区功能时,我在我的 android 设备上遇到了非常奇怪的行为。(GLES20.glEnable(GLES20.GL_STENCIL_TEST);)

这是我的代码:

GLES20.glEnable(GLES20.GL_STENCIL_TEST);
GLES20.glStencilFunc(GLES20.GL_GEQUAL, 1, 0xff);
GLES20.glStencilOp(GLES20.GL_KEEP, GLES20.GL_INCR, GLES20.GL_INCR);
GLES20.glStencilMask(0xff);

m_index_buffer.position(start_index);
GLES20.glDrawElements(GLES20.GL_TRIANGLE_STRIP,
                      n_indicies,
                      GLES20.GL_UNSIGNED_SHORT,
                      m_index_buffer);

GLES20.glDisable(GLES20.GL_STENCIL_TEST);

我得到以下结果: 我的代码的结果

起初我怀疑我的代码然后我尝试了模板示例: google stencil test 并得到以下结果:

谷歌在我的设备上进行模板测试的结果

看起来opengl和模板缓冲区功能存在一些问题......我正在使用带有android 4.4.4的摩托罗拉Moto G。这是某种已知的错误吗?有一些解决方法吗?

4

1 回答 1

2

问题是模板缓冲区没有正确清除。glStencilMask(0xff)在调用之前需要设置模板掩码glClear(GL_STENCIL_BUFFER_BIT)以清除模板缓冲区的所有位。某些设备可能会忽略模板掩码并在清除模板缓冲区时始终使用 0xff。甚至谷歌的模板测试示例也有这个错误:(

于 2015-03-19T12:36:46.450 回答