Skip to content

Latest commit

 

History

History
63 lines (16 loc) · 2.15 KB

12.FBO.md

File metadata and controls

63 lines (16 loc) · 2.15 KB

12.FBO

FBO(Frame Buffer Object)即帧缓冲区对象,实际上是一个可添加缓冲区的容器,可以为其添加纹理或渲染缓冲区对象(RBO)。

FBO本身不能用于渲染,只有添加了纹理或者渲染缓冲区之后才能作为渲染目标,它仅且提供了3种附着(Attachment),分别是颜色附着、深度附着和模板附着。

RBO(Render Buffer Object)即渲染缓冲区对象,是一个由应用程序分配的2D图像缓冲区。渲染缓冲区可以用于分配和存储颜色、深度或者模板值,可以用作FBO中的颜色、深度或者模板附着。

使用FBO作为渲染目标时,首先需要为FBO的附着添加连接对象,如颜色附着需要连接纹理或者渲染缓冲区对象的颜色缓冲区。

为什么用 FBO

默认情况下,OpenGL ES通过绘制到窗口系统提供的帧缓冲区,然后将帧缓冲区的对应区域复制到纹理来实现渲染到纹理,但是此方法只有在纹理尺寸小于或等于帧缓冲区尺寸才有效。

另一种方式是通过使用连接到纹理的pbuffer来实现渲染到纹理,但是与上下文和窗口系统提供的可绘制表面切换开销也很大。因此,引入了帧缓冲区对象FBO来解决这个问题。

Android OpenGL ES开发中,一般使用GLSurfaceView将绘制结果显示到屏幕上,然而在实际应用中,也有许多场景不需要渲染到屏幕上,如利用GPU在后台完成一些图像转换、缩放等耗时操作,这个时候利用FBO可以方便实现类似需求。

使用FBO可以让渲染操作不用再渲染到屏幕上,而是渲染到离屏Buffer中,然后可以使用glReadPixels或者HardwareBuffer将渲染后的图像数据读出来,从而实现在后台利用GPU完成对图像的处理。