(opengl-es 2.0 android libGDX)更改FBO颜色附件时清除深度缓冲区

时间:2015-01-26 04:11:20

标签: android opengl-es libgdx fbo depth-buffer

我花了很多时间试图解决这个问题并寻找答案。但我无法弄清楚。

我正在尝试在将两个图像渲染到纹理时保留深度缓冲区。我尝试了两种不同的解决方案,它们都适用于桌面,但不适用于android(opengl-es 2.0,libGDX)。两种解决方案也产生完全相同的结果我也尝试了两种不同的设备。三星TAB 2和HTC One M7。相同的结果。

第一个解决方案:创建两个FBO,并在它们之间共享深度缓冲附件。

创建FBO1,纹理1作为颜色附件和深度附件。 创建FBO2,纹理2作为颜色附件,深度附件与FBO1上的深度附件具有相同的句柄。

然后我绑定FBO1,清除深度和颜色,渲染,取消绑定FBO1,绑定FBO2,清除颜色,渲染,取消绑定FBO2。

第二个解决方案:创建一个FBO,然后更改颜色附件。

绑定fbo,将Texture1附加到唯一可用的GL_COLOR_ATTACHMENT0。清晰的颜色和深度,渲染,将Texture2附加到唯一可用的GL_COLOR_ATTACHMENT0,清除颜色,渲染,解除绑定fbo。

在两个解决方案中,我然后将两个传递作为全屏四边形绘制。第一次传球,第二次传球第二次。

两种解决方案都会产生完全相同的结果,这对于桌面而言是正确的,而对于android来说则是错

编辑:我现在有10个声望,并且能够发布图片

澄清:"绿色的房间"在第一个通道/纹理中呈现,而在多彩的球体中呈现#34;在第二遍/纹理中渲染。

第一张图片,桌面:

enter image description here [在桌面上渲染:深度缓冲区在两次传递中都保留。第二遍的部分结束于第一遍的部分后面。这是正确的]

第二张图片,设备:

enter image description here [在Android上渲染:每个单独传递的深度都是正确的,但是第二次传递总是在第一次传递的顶部渲染,即使第二次传递的部分位于第一次传递的部分后面(因此应该已被剔除)深度测试),这让我相信深度缓冲区在传递之间被清除。]

那么为什么在移动设备上的传递之间清除深度缓冲区,而不是在桌面上清除,以及解决方案是什么?

0 个答案:

没有答案
相关问题