写入renderbuffer并通过单个rendercall用OpenGL显示

数字龙

有没有一种方法可以同时渲染渲染缓冲区和显示,而不必多次调用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章