我正在尝试进行多通道屏幕外渲染,我陷入了一个问题(更像是一个问题)。什么应该是捕获多次传球的概念?目前我得到了这个:
初始化:
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 profiler确实显示glBindFramebuffer比glFramebufferTexture(Layer ..,附件)慢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