我可以使用FBO blitting https://www.opengl.org/registry/specs/EXT/framebuffer_blit.txt将渲染的FBO作为纹理传递给我的解析着色器输入吗?
我可以使用FBO作为着色器的输入" sampler2D"?
我的意思是,我为fbo渲染了一些东西。现在我想要后处理图像,我可以将FBO作为纹理传递给着色器吗?
答案 0 :(得分:8)
你不会将FBO作为纹理传递#34;。
相反,您使用纹理作为附件创建FBO(特别是对于颜色附件);然后你可以使用这种纹理的内容正常绘制(到默认的FBO目标,通常是屏幕)。
对于典型的全屏后期处理效果,通常会绘制全屏四边形,但当然你几乎只限于自己的想象力(例如你可以在电视机的网格上绘制FBO内容,模拟现场摄像头)。同时,您可以在片段着色器中执行任何类型的后处理。
所以,最简单的计划是:
GL_COLOR_ATTACHMENT0
glFramebufferTexture2D
)
然后
sampler2D
制服请注意,上面执行的操作不是对于#buffer blitting"的含义。 Blitting代表将FBO的子矩形复制到另一个FBO的子矩形中的能力(当然,您可以只对整个区域进行blit)。这里涉及的FBO可以包括默认FBO(即屏幕)。没有办法通过blit执行后处理,因为没有涉及着色器。
Blitting在特定场景中非常有用:将多重采样FBO的内容复制到非多采样FBO中,然后使用后者执行后处理或作为纹理源。其原因主要是历史使用 - 较旧的GL版本(< 3.2)提供了一种通过附加多重采样颜色Renderbuffer 来创建多重采样FBO的方法,但是没有办法在以后读取值着色器(Renderbuffer是一个可以附加到FBO的缓冲区,就像纹理一样,但与纹理不同,你不能对其内容进行采样)。因此,创建了两个 FBO - 一个多重采样的FBO来执行绘图,然后通过blit操作将其解析为第二个非多重采样的FBO。第二个FBO将纹理作为颜色附件附加,然后您可以从中进行采样。
这些天(> = 3.2,或GL_ARB_texture_multisample
)OpenGL提供了一种创建多重采样纹理的方法,可直接在着色器中使用(通过sampler2DMS
采样器)。不需要快速步骤。