1

有没有办法将纹理缓冲区对象(ARB_texture_buffer_object)附加到帧缓冲区(EXT_framebuffer_object),以便我可以直接渲染到纹理缓冲区对象中?

我需要它来制作多样本帧缓冲区(颜色缓冲区、深度缓冲区和模板缓冲区)的精确按位副本,并将此副本驻留在主内存中而不是 VRAM 中。

更新:问题是我不能直接在多采样帧缓冲区上调用 glReadPixels 来复制其内容。相反,我必须将多采样帧缓冲区传输到中间帧缓冲区,然后在其上调用 glReadPixels。在此过程中,多个样本被平均并写入中间缓冲区。如果我用 glWritePixels 恢复这个缓冲区,现在当然会损失精度。

我意识到我可以使用多样本纹理作为帧缓冲区对象的后备存储,但是此纹理将驻留在 VRAM 中,并且似乎无法将其复制到主内存而不会损失同样的精度。具体来说,我担心与多采样深度缓冲区附件相关的精度损失,而不是颜色缓冲区。

是否有另一种方法可以在 OpenGL 中制作多采样帧缓冲区的精确副本(并恢复此副本)?

TL;DR:如何将多样本帧缓冲区(特别是深度缓冲区)的确切内容复制到主内存并稍后恢复这些内容,而不会损失精度。

4

1 回答 1

4

OpenGL 不允许您将缓冲区纹理绑定为渲染目标。但是,我看不出是什么阻止了您制作“多样本帧缓冲区的精确按位副本”。您认为缓冲纹理可以解决什么问题?


如何将多样本帧缓冲区(特别是深度缓冲区)的确切内容复制到主内存并稍后恢复这些内容,而不会损失精度。

不。

并且您无需将图像的内容复制到主存储器以便以后保存和恢复它。如果您需要保留多样本图像的内容,只需将其传送到另一个多样本图像即可。您可以将其回位以恢复它。或者更好的是,渲染到在完成之前不会擦除的多重采样纹理。这样,就不需要任何复制。

于 2011-09-21T03:21:28.830 回答