纹理缓冲区对象作为帧缓冲存储

时间:2011-09-21 01:34:20

标签: opengl opengl-3

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:4)

OpenGL不允许您将缓冲区纹理绑定为渲染目标。但是,我没有看到是什么阻止你制作“多重采样帧缓冲区的精确,逐位复制”。遇到什么问题,你认为缓冲区纹理可以解决?


  

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

没有。

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