【发布时间】:2015-07-26 05:25:31
【问题描述】:
我正在我的程序中实现高斯模糊效果。为了完成这项工作,我需要在特定纹理(我们称之为 tex_1)中渲染第一个模糊信息(Y 轴上的那个),并使用 tex_1 中包含的相同信息作为第二个渲染通道的输入信息(对于 X 轴) 来填充包含最终高斯模糊结果的其他纹理(我们称之为 tex_2)。
一个好的做法应该是创建 2 个帧缓冲区 (FBO),每个缓冲区都附加一个纹理,并将两者都链接到 GL_COLOR_ATTACHMENT0(例如)。但我只想知道一件事:
是否可以使用相同的 FBO 填充这 2 个纹理?
所以我必须启用 GL_COLOR_ATTACHMENT0 和 GL_COLOR_ATTACHMENT1 并将所需的纹理绑定到正确的渲染通道,如下所示:
伪代码:
FrameBuffer->Bind()
{
FrameBuffer->GetTexture(GL_COLOR_ATTACHMENT0)->Bind(); //tex_1
{
//BIND external texture to blur
//DRAW code (Y axis blur pass) here...
//-> Write the result in texture COLOR_ATTACHEMENT0 (tex_1)
}
FrameBuffer->GetTexture(GL_COLOR_ATTACHMENT1)->Bind(); //tex_2
{
//BIND here first texture (tex_1) filled above in the first render pass
//Draw code (X axis blur pass) here...
//-> Use this texture in FS to compute the final result
//within COLOR_ATTACHEMENT1 (tex_2) -> The final result
}
}
FrameBuffer->Unbind()
但在我看来有一个问题,因为我需要为每个渲染通道绑定一个外部纹理作为我的片段着色器中的输入。因此,纹理的第一个绑定(color_attachment)丢失了!
那么是否存在使用一个 FBO 解决我的问题的方法,还是我需要使用 2 个单独的 FBO?
【问题讨论】:
标签: opengl-es opengl-es-2.0 shader fbo