原文链接http://www.songho.ca/opengl/gl_fbo.html
示意图如下:
概念要点:
1.窗口系统也提供有帧缓冲区,直接画到窗口系统提供的帧缓冲区就画到了屏幕,这里讨论的帧缓冲区(Framebuffer)为用户创建的,与窗口系统不同。
2.如果一个texture object附着(attach)到了framebuffer,那么opengl就表现为渲染到纹理(render to texure),如果一个renderbuffer object被附着到framebuffer,那么opengl就表现为离线渲染(offscreen rendering)
3.FBO有多个颜色缓冲区附着点,一个深度缓冲区附着点和一个模板缓冲区附着点,用于将三者附着到FBO
(如图,纹理对象一般附着到颜色缓冲区附着点,创建的renderbuffer一般附着到深度缓冲区附着点)
4.FBO提供了一种高效的切换机制,可以附着和解除上述三种缓冲区的附着,其中提供多个颜色缓冲区附着点是为了支持同时渲染多个目标
5.FBO本身不包含任何图像存储,只是包含多个附着点而已.
使用要点:
- FBO must have at least one image attached.
- All images attached a FBO must have the same width and height.
- All images attached the color attachment points must have the same internal format
Simply create several textures (all with the correct and same size !), call glFramebufferTexture with a different color attachement for each, call glDrawBuffers with updated parameters ( something like (2,{GL_COLOR_ATTACHMENT0,GL_COLOR_ATTACHMENT1}})), and add another output variable in your fragment shader :