我想渲染到也填充深度缓冲区的颜色纹理。然后,我想将其他内容渲染到另一个纹理,但针对第一次渲染的深度缓冲区进行深度测试。
我对将打包深度值写入颜色纹理不感兴趣,我想保留第一次渲染时现有的填充深度缓冲区。全部通过 LibGDX 实现 OpenGL ES 2.0
所以我有一个带有深度缓冲区的 FBO。
- 我将单个允许的 COLOR_ATTACHMENT0 设置为 texA
- glCheckFramebufferStatus 返回完成
- 通过深度测试进行渲染(这会产生我期望的值)
- 将 FBO 的 COLOR_ATTACHMENT0 更改为 texB
- glCheckFramebufferStatus 返回完成
- 使用深度测试进行渲染(这就像第 3 步中的深度不存在一样)
我想我的查询真的是更改 COLOR_ATTACHMENT 是否会清除深度缓冲区?如果不是,我的代码中一定有不同的问题:(
最佳答案
该问题是由一些我没有预料到的 libgdx 行为引起的。 libgdx RenderContext 正在调用“Gdx.gl.glDisable(GL20.GL_DEPTH_TEST);”
如果未提供,libgdx ModelBatch 会为其自身创建一个 libgdx RenderContext 实例。当在 ModelBatch 实例上调用 begin 时,也会在 renderContext 上调用 begin。但前提是批处理创建了它自己的上下文。在 RenderContext 的开头,它禁用并关闭许多 gl 函数,包括深度测试。
解决方案是让您自己创建一个 RenderContext 实例并将其传递给您的 modelBatches。然后将两个模型批处理包装在对渲染上下文的开始结束调用中。请记住在调用批处理之前重新启用 gl 深度测试。
关于java - OpenGL E.S 2.0 在 LibGDX 中串行渲染到两个纹理时如何保持深度缓冲区完好无损?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25596836/