OpenGL FBO 多个纹理

Posted

技术标签:

【中文标题】OpenGL FBO 多个纹理【英文标题】:OpenGL FBO Multiple textures 【发布时间】:2012-07-09 20:18:33 【问题描述】:

我有一个附加两个纹理的 FBO。然后我想绑定 FBO,使用第一个纹理作为输入(绑定)到着色器并写入第二个纹理,两者都附加到 FBO。我尝试使用 glDrawBuffer 将 GL_COLOR_ATTACHMENT1 指定为绘图缓冲区,但没有成功。这可能吗?

编辑

这是我尝试的方法:

GLuint tex0, tex1; // they are created elsewhere and bound to the fbo
glBindFramebuffer( GL_FRAMEBUFFER, fbo );

glActiveTexture( GL_TEXTURE0 );
glBindTexture( GL_TEXTURE_2D, tex0 );

glDrawBuffer(GL_COLOR_ATTACHMENT1);

// render code

glReadBuffer(GL_COLOR_ATTACHMENT1);
glReadPixels(...);

但是 glReadPixels 的结果与我的预期不同。你能看出这里有什么问题吗?

【问题讨论】:

【参考方案1】:

您在着色器中采样的纹理不应绑定到 FBO。只需像普通纹理一样使用 glBindTexture 绑定它。

如果您将纹理同时绑定到采样器和 FBO,我相信您会得到未定义的行为。

【讨论】:

-1:不正确。将纹理附加到 FBO 并从着色器中采样是完全合法的。只有当您写入到您从中采样的图像时,它才会变得未定义。 您好,请问上述情况到底合法吗?

以上是关于OpenGL FBO 多个纹理的主要内容,如果未能解决你的问题,请参考以下文章

带有 FBO 的 OpenGL 阴影映射 - 多个拖尾绘制

OpenGL渲染到多个纹理,结果是白色的

OpenGL:渲染到 FBO 时是不是支持纹理组合器功能?

使用 FBO 和着色器 OpenGL 渲染到纹理

OpenGL:使用 FBO 和视口偏移问题渲染到纹理

openGL FBO 复制到纹理导致黑色/深色图像