OpenGL应用程序进行图形渲染都是以pipeline的方式进行处理,在其中的每一个步骤都有输入和输出,渲染的最后一步是将渲染的结果绘制到屏幕上。在绘制这一步的输出是屏幕专用的存储,输入则是Frame buffer。由于OpenGL并没有窗口处理函数,所以与窗口相关的处理都需要外部的扩展来实现,因此相应的窗口处理函数会在初始化的时候分配相应的Frame buffer,同时OpenGL会将最终渲染的结果给写到系统分配管理的Frame buffer中。由于这部分Frame Buffer是由系统管理的,所以程序员不能够直接的操作这部分存储。为了更好的与Frame buffer进行交互,OpenGL提供了对应的扩展接口——Frame Buffer Object,也就是说OpenGL提供了一种程序员可以操作的Frame Buffer。这就使得渲染与最终绘制到窗口的操作可以分开来处理,从而在某些应用场景中有效的提高显示效率。
在渲染的过程的中间步骤,需要用到两个比较重要的缓存,一个叫做texture buffer,另一个是render buffer。在某些时候render buffer也可以用作texture buffer,然而需要注意的是texture buffer指作为输入缓存,用于存储常规的纹理信息。然而render buffer则是作为输出缓存,用于存储逻辑缓存,仅仅包含一些与纹理格式无关的一些信息,比如说模板、深度信息之类的。不过texture buffer和render buffer都可以作为frame buffer最终的输出存储来接收渲染到frame buffer中的数据,从而有效的实现离屏渲染。
frame buffer的创建和其他的缓存一样,同样遵循三步走规则,第一步通过相应的生成函数分配frame buffer的ID号,第二步通过bind函数将ID号和对应的frame buffer的对象绑定到一起,第三步