概述
帧缓冲对象FBO(Frame buffer Object)。
OpenGL默认情况下,在GLSurfaceView中绘制的结果是显示到屏幕上的,但是实际情况中大部分时候都不需要渲染到屏幕中去,这个FBO就是来实现这个需求的,FBO可以让不渲染到屏幕当中去,而是渲染到离屏的buffer中。
关于FBO比较好的资料,这个是英文版的
http://www.songho.ca/opengl/gl_fbo.html
还有个中文的
https://blog.csdn.net/xiajun07061225/article/details/7283929
可以去看看。
帧缓冲对象FBO
OpenGL 管线渲染的最终目的地就是FrameBuffer(帧缓冲),前面写的很多渲染操作等都是在默认的帧缓冲进行操作的,这个默认的帧缓冲是在我们创建Surface的时候自动创建和配置好的,这个OpenGL ES默认的帧缓冲是由窗口系统提供的,是默认显示到屏幕上的,我们现在的需求是不显示到屏幕中,所以用Frame Buffer Object来实现。
我们都知道显示在屏幕上的每一帧数据都是对应着内存的数据,在内存中对应分配着存储帧数据的缓冲区,比如说写入颜色的颜色缓冲区,写入深度值的深度缓冲区,以及基于一些条件丢弃片元的模板缓冲区,这几种缓冲一起称之为帧缓冲。
FBO是一组颜色、深度、模板附着点。纹理对象可以连接到FBO中的颜色附着点和深度附着点,另一种连接到深度附着点和模板附着点的叫做渲染缓冲对象(RBO)。
在一个帧缓存对象中有多个颜色关联点、一个深度关联点,和一个模板关联。每个FBO中至少有一个颜色关联点,其数目与实体显卡相关。可以通过GL_MAX_COLOR_ATTACHMENTS_EXT来查询颜色关联点的最大数目。
需要注意:FBO中并没有存储图像,只有多个关联点。
实际上可以把帧缓冲对象理解为一个插线板,自己本身没有内存,但是可以连接纹理对象和渲染缓冲对象两种外设,这两种外设是有内存的来存储图像数据。
网友评论