Opengl 在着色器中将帧缓冲区对象用作纹理
我可以使用FBO blitting将渲染FBO作为纹理传递到我的“解析着色器”输入吗 我可以使用FBO作为着色器“sampler2D”的输入吗 我是说,我向fbo提供了一些东西。现在我想对图像进行后期处理,我可以将FBO作为纹理传递给着色器吗?您不能“将FBO作为纹理传递” 取而代之的是使用纹理作为附件(尤其是颜色附件)创建FBO;然后可以使用此类纹理的内容正常绘制(到默认FBO目标,通常是屏幕) 对于典型的全屏后处理效果,通常会绘制一个全屏四边形,但当然,您的想象力非常有限(例如,您可以在电视机的网格上绘制FBO内容,以模拟实况摄影机)。同时,可以在片段着色器中执行任何类型的后处理 因此,最简单的方案是:Opengl 在着色器中将帧缓冲区对象用作纹理,opengl,fbo,Opengl,Fbo,我可以使用FBO blitting将渲染FBO作为纹理传递到我的“解析着色器”输入吗 我可以使用FBO作为着色器“sampler2D”的输入吗 我是说,我向fbo提供了一些东西。现在我想对图像进行后期处理,我可以将FBO作为纹理传递给着色器吗?您不能“将FBO作为纹理传递” 取而代之的是使用纹理作为附件(尤其是颜色附件)创建FBO;然后可以使用此类纹理的内容正常绘制(到默认FBO目标,通常是屏幕) 对于典型的全屏后处理效果,通常会绘制一个全屏四边形,但当然,您的想象力非常有限(例如,您可以在电视
glFramebufferTexture2D将先前创建的纹理附加到颜色附件(GL\u color\u ATTACHMENT0
)代码>
sampler2D
统一请注意,上面执行的操作不是“帧缓冲区闪烁”的意思。blit代表将一个FBO的子矩形复制到另一个FBO的子矩形的能力(当然,您可以只对整个区域进行blit)。此处涉及的固定基地运营商可能包括默认固定基地运营商(即屏幕)。没有通过blit执行后处理的方法,因为没有涉及着色器 Blitting在特定场景中最有用:将多采样FBO的内容复制到非多采样FBO,然后使用后者执行后处理或作为纹理源。这是因为使用方法大多是历史性的——较旧的GL版本(<3.2)提供了一种通过附加多采样颜色Renderbuffer来创建多采样FBO的方法,但无法读取着色器中的值(Renderbuffer是可以附加到FBO的缓冲区,就像纹理一样,但与纹理不同,不能对其内容进行采样)。因此,我们创建了两个FBO——一个多采样FBO来执行绘图,然后通过blit操作将其解析为第二个非多采样FBO。第二个FBO有一个纹理作为颜色附着,然后可以从中采样 现在(>=3.2,或使用
GL\u ARB\u texture\u multisample
)OpenGL提供了一种创建多采样纹理的方法,可直接在着色器中使用(通过sampler2DMS)代码>采样器)。不需要blit步骤。您不会“将FBO作为纹理传递”
取而代之的是使用纹理作为附件(尤其是颜色附件)创建FBO;然后可以使用此类纹理的内容正常绘制(到默认FBO目标,通常是屏幕)
对于典型的全屏后处理效果,通常会绘制一个全屏四边形,但当然,您的想象力非常有限(例如,您可以在电视机的网格上绘制FBO内容,以模拟实况摄影机)。同时,可以在片段着色器中执行任何类型的后处理
因此,最简单的方案是:
创建大小和类型正确的纹理(与视口大小相同的f.i.和8位RGB)
通过创建FBO
创建FBO对象本身
通过glFramebufferTexture2D将先前创建的纹理附加到颜色附件(GL\u color\u ATTACHMENT0
)代码>
然后
绑好你的FBO
绘制要进行后处理的内容
绑定默认FBO(即屏幕)
绑定后处理着色器程序
(可选)将纹理(现在包含FBO颜色内容)绑定为在纹理单元上处于活动状态,并在着色器程序中将纹理单元索引设置为sampler2D
统一
画一个全屏四元图。在片段着色器中,可以对纹理进行采样并应用任何类型的过滤
请注意,上面执行的操作不是“帧缓冲区闪烁”的意思。blit代表将一个FBO的子矩形复制到另一个FBO的子矩形的能力(当然,您可以只对整个区域进行blit)。此处涉及的固定基地运营商可能包括默认固定基地运营商(即屏幕)。没有通过blit执行后处理的方法,因为没有涉及着色器
Blitting在特定场景中最有用:将多采样FBO的内容复制到非多采样FBO,然后使用后者执行后处理或作为纹理源。这是因为使用方法大多是历史性的——较旧的GL版本(<3.2)提供了一种通过附加多采样颜色Renderbuffer来创建多采样FBO的方法,但无法读取着色器中的值(Renderbuffer是可以附加到FBO的缓冲区,就像纹理一样,但与纹理不同,不能对其内容进行采样)。因此,我们创建了两个FBO——一个多采样FBO来执行绘图,然后通过blit操作将其解析为第二个非多采样FBO。第二个FBO有一个纹理作为颜色附着,然后可以从中采样
这些天(>=3.2,或使用GL