有没有一种方法可以同时渲染渲染缓冲区和显示,而不必多次调用draw函数?我想要这样的东西:
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()
。
就像是:
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glBlitFramebuffer(
0, 0, fboWidth, fboHeight,
0, 0, screenWidth, screenHeight,
GL_COLOR_BUFFER_BIT, GL_NEAREST);
应该可以。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句