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