【发布时间】:2015-07-19 06:43:54
【问题描述】:
如何使用同一个 FBO 绘制两个纹理?
如下所示,我有一个initDesktop(),我在其中初始化了我的两个纹理(之前使用 SOIL 加载)。
在我的另一堂课上,我想执行drawDesktop(),它将用纹理和页脚矩形绘制我的背景矩形...
我只看到页脚... 我在这里缺少什么?
已编辑
void Desktop::initDesktop ()
{
GLuint fboId = 0;
glGenFramebuffers(1, &fboId);
glBindFramebuffer(GL_READ_FRAMEBUFFER, fboId);
//now with GL_COLOR_ATTACHMENT0
glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D, m_background.getId(), 0);
//now with GL_COLOR_ATTACHMENT1
glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT1,GL_TEXTURE_2D, m_footer.getId(), 0);
}
void Desktop::drawDesktop ()
{
drawBackground ();
drawFooter ();
}
void Desktop::drawBackground ()
{
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glReadBuffer(GL_COLOR_ATTACHMENT0); //<-- ?
glBlitFramebuffer(0, 0, 1200, 800, 0, 0, 1200, 800, GL_COLOR_BUFFER_BIT, GL_NEAREST);
}
void Desktop::drawFooter ()
{
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glReadBuffer(GL_COLOR_ATTACHMENT1); //<-- ?
glBlitFramebuffer(0, 0, 1200, 100, 0, 0, 1200, 100, GL_COLOR_BUFFER_BIT, GL_NEAREST);
}
谢谢!
【问题讨论】:
-
只需绘制带纹理的四边形……更容易,更省事。是的,我知道您必须为此设置一个着色器。那又怎样……?