为什么gdebugger在渲染到FBO时会在纹理查看器中更新多个纹理?

时间:2013-07-05 13:52:41

标签: opengl

目前我在gDebugger发生了一个非常奇怪和令人沮丧的问题,我希望有人能看到我做错了什么。

所以作为一些背景信息,在我的代码中我有一堆FBO来完成以下类型的场景:

- 我绑定一个FBO来渲染一些东西到纹理,以便在线上的某个点上运行一个后处理着色器

- 在完成FBO之前,我将另一个FBO推入堆栈并绑定那个,这样我就可以渲染一些东西到该纹理,在其上运行一个后处理着色器,然后渲染它的内容FBO的纹理在原始FBO上

虽然在功能上这很好用,但是在gDebugger中调试它已经证明是一场噩梦,因为出于某种原因gDebugger会在我向FBO渲染任何东西时显示多个纹理被更新。

我附上了一些图片来解释:

在这里的第一个中,Tex 1是我用于所有FBO的深度/模板纹理(但是,作为旁注,我在没有将深度/模板纹理附加到FBO时测试了同样的问题,它仍然会发生,所以我不认为这是一个因素)。 Tex 2是附加到FBO 1的纹理,Tex 3是附加到FBO 2的纹理。此时,FBO 1被绑定。尽管如此,每当渲染任何东西时它都会更新纹理3(FBO 2)。

Before rendering next texture

正如您在此图片中看到的(单次绘制的结果),FBO 1已更新(如预期),但FBO 2也是如此。 After rendering next texture

现在即使这不是那么糟糕 - 毕竟,我现在不使用FBO 2,谁在乎gDebugger是否更新了纹理?那么真正的问题是,如果我绑定FBO 2并清除其颜色缓冲区,gDebugger也会清除FBO 1(纹理2)!然后如果我渲染到FBO 2,FBO 1也会渲染到!

正如我上面提到的,尽管有这种奇怪的行为,但它实际上所有功能都按预期工作。也就是说,在清除FBO 2表明FBO 1也被清除的情况下,它实际上不会被清除。但是,当各种FBO中的图像信息看起来不准确时,尝试调试问题几乎是不可能的!

那么,我做错了吗?或者有没有办法在gDebugger中解决这个问题?

提前致谢!

赖安

0 个答案:

没有答案