【发布时间】:2020-02-11 21:57:33
【问题描述】:
有没有一种方法可以同时渲染渲染缓冲区和显示器,而不必多次调用绘图函数?我想要这样的东西:
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE2D, tbo, 0);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
GLenum* attachments[2] = {GL_COLOR_ATTACHMENT0, ...} //with the second I want to render to screen which would have the same value like the first
glDrawBuffer(2, attachments);
glDrawElements(GL_TRIANGLES, 12*3, GL_UNSIGNED_INT, 0);
所以我可以将我在同一时间绘制的内容用作另一个渲染调用的纹理。我可以写
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glDrawElements(GL_TRIANGLES, 12*3, GL_UNSIGNED_INT, 0);
但这需要再次绘制场景,这会很慢。另一种解决方案是仅绘制帧缓冲区,但我认为会有更聪明的解决方案。
【问题讨论】:
-
简短回答:不。但是,使用
glBlitFramebuffer从一个帧缓冲区复制到另一个。当然要复制数据,但不需要重新渲染场景。