0

我正在尝试进行多通道屏幕外渲染,但我陷入了一个问题(更像是一个问题)。捕获多次传球应该是什么概念?目前我得到了这个:

在里面:

Create FBO #1
Create FBO #2

Create Postprocess shader #1 (lighting)
Create Postprocess shader #2 (gamma, exposure, color control etc..)

使成为:

Bind FBO #1
RenderScene();
Unbind FBO

Bind FBO #2
Bind Postprocess shader #1
BIND FBO #1 TEXTURE ( with scene )
DRAWQUAD(); // And apply lighting etc..
Unbind;

// Now simply draw quad with FBO #1 texture.
Bind Postprocess shader #2 // Apply color corrections..
DRAWQUAD(); 
Unbind;

正如我在一些演示文稿中所读到的,最好使用多个 FBO,但有人说最好使用单个 FBO 并切换附件,它更快,但驱动程序可能验证过多(性能当然会受到影响)。我正在使用 OSX10.11,OpenGL 分析器确实显示 glBindFramebuffer 比 glFramebufferTexture(Layer.., attachment) 慢 x20。但是在这种情况下,如果我使用单个 FBO,我应该如何渲染到纹理?因为现在我不能做 DRAWQUAD(); 两次.. 如果我能够使用具有不同附件的单个 FBO,我认为的示例。

在里面:

Create FBO #1 // Only one frame buffer.

Create Postprocess shader #1 (lighting)
Create Postprocess shader #2 (gamma, exposure, color control etc..) 

使成为:

Bind FBO #1 
RenderScene()

..在这个阶段我应该做什么?因为 FBO 由场景数据填充,我不能只是 DRAWQUAD(); 这里。

编辑:这是正确的做法吗?

    // glBindFramebuffer #1
    // draw to layer 0
    // glUnbind

    // glBindFramebuffer #1
    // draw to layer 1 texture from layer 0 ( quad )
    // glUnbind

    // glBindFramebuffer #1
    // draw to layer 2 texture from layer 1 ( quad too )
    // glUnbind

    // ... and simply draw quad with layer 2 texture
4

0 回答 0