我可以使用FBO blitting https://www.opengl.org/registry/specs/EXT/framebuffer_blit.txt,将渲染的FBO作为纹理传递给我的解析着色器输入吗?
我可以使用FBO作为着色器"sampler2D"的输入吗?
我的意思是,我为fbo渲染了一些东西.现在我想要后处理图像,我可以将FBO作为纹理传递到着色器吗?
你没有"将FBO作为纹理传递".
相反的是,您使用纹理作为附件(特别是颜色附件)创建FBO; 然后你可以使用这种纹理的内容正常绘制(到默认的FBO目标,通常是屏幕).
对于典型的全屏幕后处理效果,通常会绘制一个全屏四边形,但当然你几乎只限于自己的想象(例如你可以在电视机的网格上绘制FBO内容,模拟一个实时相机).同时,您可以在片段着色器中执行任何类型的后处理.
所以,最简单的计划是:
GL_COLOR_ATTACHMENT0)通过glFramebufferTexture2D?然后
sampler2D在着色器程序中将纹理单元索引设置为制服请注意,上面执行的操作不是 "帧缓冲区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?采样器).不需要快速步骤.