如何在多采样纹理上渲染帧缓冲区对象?

Posted

技术标签:

【中文标题】如何在多采样纹理上渲染帧缓冲区对象?【英文标题】:How to render Framebuffer Objects on multi-sampled textures? 【发布时间】:2012-02-16 18:15:53 【问题描述】:

我目前有一个使用多个通道的渲染引擎,其中图像的各个部分在纹理上渲染,然后使用着色器进行组合。它有效,现在我想激活多重采样。

我在这里 (http://www.opengl.org/wiki/Framebuffer_Object_Examples#MSAA) 读到,使用 OpenGL,您不能将 GL_TEXTURE2D_MULTISAMPLE 附加到帧缓冲区对象。

似乎使用多重采样并且仍然可以访问作为纹理的结果的一种方法是使用多重采样渲染缓冲区,然后将结果复制到多重采样纹理中。

我的问题是:前进的最佳方式是什么?

是否可以在渲染缓冲区中进行渲染并在我的着色器中使用输出,而无需复制到纹理中? 我是否应该将缓冲区的内容复制到纹理中,然后使用它? 还有其他更好的解决方案吗?

谢谢。

【问题讨论】:

【参考方案1】:

我在这里 (http://www.opengl.org/wiki/Framebuffer_Object_Examples#MSAA) 读到,使用 OpenGL,您无法将 GL_TEXTURE2D_MULTISAMPLE 附加到帧缓冲区对象。

再读一遍。它没有说明 GL_TEXTURE_2D_MULTISAMPLE 纹理。实际上,我收回了这一点:不要再次阅读该页面。如果您想要好的 FBO 信息,请阅读解释 3.x 行为的 the page on Framebuffer Objects。您链接到的页面是旧的。

在 EXT 时代,您所拥有的只是多重采样渲染缓冲区,因为多重采样纹理不存在。您可以创建多重采样缓冲区,但不能使用它们纹理。你只能blit。

在 3.3 OpenGL 中,您可以创建多重采样纹理。您可以像将任何其他纹理一样将它们附加到 FBO。

【讨论】:

感谢您的回答,并感谢我不时发现的这些资源,然后 bur 从未被确定为权威。

以上是关于如何在多采样纹理上渲染帧缓冲区对象?的主要内容,如果未能解决你的问题,请参考以下文章

纹理和渲染缓冲区是不是在帧缓冲区对象上共享相同的空间?

WebGL入门(四十一)-使用帧缓冲区对象(FBO)实现将渲染结果作为纹理绘制到另一个物体上

从帧缓冲区对象读取时,OpenGL 纹理坐标是相反的

Opengl 和 Webgl:从附加到当前帧缓冲区的纹理中采样

COLOR_ATTACHMENT's - 如何将多个纹理渲染为帧缓冲区对象内的颜色附件?

使用帧缓冲区将深度缓冲区渲染到纹理中