OpenGL E.S 2.0如何在LibGDX中对两个纹理进行串行渲染时保持深度缓冲区的完整性



我想渲染到一个颜色纹理,同时填充深度缓冲区。然后,我想将其他东西渲染到另一个纹理,但对第一次渲染的深度缓冲区进行深度测试。

我对将压缩的深度值写入颜色纹理不感兴趣,我想从第一次渲染中保留现有的填充深度缓冲区。全部通过LibGDX 在OpenGL ES 2.0中

所以我有一个带深度缓冲的FBO。

  1. 我将单个允许的COLOR_ATTACHMENT0设置为texA
  2. glCheckFramebufferStatus返回complete
  3. 使用深度测试进行渲染(这会产生我期望的值)
  4. 将FBO的COLOR_ATTACHMENT0更改为texB
  5. glCheckFramebufferStatus返回complete
  6. 使用深度测试进行渲染(这表现为步骤3中的深度不存在)

我想我的问题是,更改COLOR_ATTACHMENT真的会清除深度缓冲区吗?如果没有,我的代码中一定有一个不同的问题:(

该问题是由一些我没有预料到的libgdx行为引起的。libgdx RenderContext正在进行此调用"Gdx.gl.glDisable(GL20.gl_DEPTH_TEST);"

如果没有提供libgdx RenderContext实例,那么libgdx ModelBatch会创建它自己的实例。在ModelBatch实例上调用begin时,renderContext上也会调用begin。但只有当批创建了上下文时,它才是自己。在RenderContext的开头,它禁用并关闭许多gl函数,包括深度测试。

解决方案是使RenderContext的实例成为您自己的实例,并将其传递给您的modelBatches。然后将两个模型批次包装在对渲染上下文的开始-结束调用中。记得在调用批次之前重新启用gl深度测试。

最新更新