当我尝试使用模板缓冲区功能时,我在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和模板缓冲区功能存在一些问题...... 我使用的是摩托罗拉Moto G和Android 4.4.4。 这是某种已知的错误吗? 有一些解决方法吗?
答案 0 :(得分:1)
问题是模板缓冲区未正确清除。在调用glStencilMask(0xff)
之前必须设置模板掩码glClear(GL_STENCIL_BUFFER_BIT)
以清除模板缓冲区的所有位。某些设备可能会忽略模板掩码,并在清除模板缓冲区时始终使用0xff。甚至谷歌的模板测试示例都有这个错误:(