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

应该可以。

关于c++ - 写入renderbuffer并通过单个rendercall用OpenGL显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58390950/

10-12 01:55