2012-07-09 173 views
1

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

编辑

这里是我尝试这样做:

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结果跟我想象的不同。你能看到这里有什么问题吗?

+0

我们可以看到一些代码吗? – 2012-07-09 20:56:13

回答

0

您在着色器中采样的纹理不应绑定到FBO。只需使用glBindTexture就可以像正常纹理那样绑定它。

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

+0

-1:错误。将纹理附加到FBO并从着色器采样是完全合法的。当你将*写入你正在采样的图像时,它只会变得不确定。 – 2012-07-09 20:56:00

+0

嗨, 那么最终是否合法上面的情况呢? – Alin 2012-07-17 20:54:16