这很容易描述,但让我感到困惑。它需要另一双眼睛。像往常一样,我认为这要么是愚蠢的事情,要么是除了我之外每个人都知道的事情。此外,由于我很少问问题(以前几乎总是有人问过),我想我会在格式中犯一些错误。
下面的代码使用在两次渲染纹理中写入的纹理绘制一个对象。然后它做一个在其他逻辑中使用的glReadPixels,然后切换到另一个包含文本的纹理,并覆盖对象的中心部分(它实际上是一个功能性的Open GL按钮)。无论是否使用glReadPixels,都存在相同的问题
所以。如果我取消对第一部分中的两行的注释,它使用texture1时的视觉效果与预期的一样。如果我注释掉这些线,它在视觉上的效果与纹理一致,但最终的glDrawArrays似乎没有做任何事情,因为它应该用texture1中的文本覆盖中心面,就好像它已经被优化了一样。因此,我有两段明显相同的代码,它们在一个上下文中按预期工作,但在另一个上下文中却不能。与texture1一样,交换机mButtonFaceHandle必须在第一个实例中正常运行
//This a switch in the shader unrelated to the texture
GLES20.glUniform1i(mButtonFaceHandle, 0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);
//Draw bezels
GLES20.glDrawArrays(GLES20.GL_TRIANGLES,0, (numVertices/3)-6);
//GLES20.glUniform1i(mButtonFaceHandle, 1);
//GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[1]);
//Draw central face
GLES20.glDrawArrays(GLES20.GL_TRIANGLES,(numVertices/3)-6, 6);
//glReadPixels omitted for clarity
//This a switch in the shader unrelated to the texture
GLES20.glUniform1i(mButtonFaceHandle, 1);
//Redraw central face using texture[1]
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[1]);
GLES20.glDrawArrays(GLES20.GL_TRIANGLES,(numVertices/3)-6, 6);
glioGLRenderer.checkGlError("end");发布于 2021-03-18 18:45:58
深度测试。在绘制之前禁用深度测试并在之后重新启用已修复此问题。我需要让自己明白为什么会这样。这两个纹理都绘制在相同的顶点上,我不确定为什么其中一个会比另一个有深度先例。当我知道发生了什么事,我会报告的。
https://stackoverflow.com/questions/66671023
复制相似问题