OpenGL Frame Buffer Object (FBO)(me:主要用于加速渲染纹理)
http://www.songho.ca/opengl/gl_fbo.html
概述
在OpenGL渲染管线中,几何数据和纹理经变换和测试后,它们最终被渲染到屏幕上。OpenGL渲染管线最终的渲染结果保存在framebuffer中。framebuffer是一个2D数组的集合:colour buffer, depth buffer, stencil buffer和accumulation buffer。 默认情况下,OpenGL使用framebuffer做为渲染结果的保存buffer。Framebuffer由窗体系统创建并管理。此默认的framebuffer被称做窗体系统提供的framebuffer。
在OpenGL扩展中,GL_ARB_framebuffer_object提供了一个创建不用于显示的framebuffer对象(FBO)接口。此framebuffer被称为由程序创建的framebuffer,这是为了区分由窗体系统创建的默认的framebuffer。使用framebuffer对象(FBO),OpenGL程序可以将渲染结果输出到程序创建的framebuffer对象(FB0)。它优于传统的窗体系统提供的framebuffer。并且它完全由OpenGL控制。
与窗体系统提供的framebuffer相似,FBO包含了渲染结果:颜色,深度,模板buffer。(注意:没有accumulation buffer)。在FBO中的这些逻辑buffer被称做framebuffer-attachable images。它是一个2D像素数组。它可被连接到framebuffer对象上(FBO)。
有两种framebuffer-attachable images:纹理图片和渲染缓冲区图片。如果一个纹理对象的图片被连到了framebuffer上,OpenGL将按"render to texture"执行。如果渲染缓冲区图片连接到framebuffer上,那么OpenGL将按"offscreen"执行。
在GL_ARB_framebuffer_object扩展中,renderbuffer object是一种新的储存对象。你可以使用在渲染过程中,在渲染过程叶,它可以被用来当作一张2D图片的rendering destination。
上面的图显示了framebuffer object, texture object和renderbuffer之间的关系。多重纹理对象或renderbuffer对象通过附着点与framebuffer连接。
在为多个颜色附着点为(GL_COLOR_ATTACHMENT0,..., GL_COLOR_ATTACHMENTn)。还有一个模板附着点为
(GL_STENCIL_ATTACHMENT)。颜色附着点依赖于具体实现。但每一个FBO对象必须至少有一个颜色附着点。你可以使用参数GL_MAX_COLOR_ATTACHMENTS 查询颜色附着点最大数量。此查询被显示支持。FBO有多个颜色附着点,这允许同时渲染多个color buffer到多个目的地。
.........
浙公网安备 33010602011771号