美文网首页
OpenGL学习之FBO的使用

OpenGL学习之FBO的使用

作者: cat_code | 来源:发表于2019-02-15 21:51 被阅读0次


    概述

    帧缓冲对象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中并没有存储图像,只有多个关联点。

    实际上可以把帧缓冲对象理解为一个插线板,自己本身没有内存,但是可以连接纹理对象和渲染缓冲对象两种外设,这两种外设是有内存的来存储图像数据。

    相关文章

      网友评论

          本文标题:OpenGL学习之FBO的使用

          本文链接:https://www.haomeiwen.com/subject/mmhveqtx.html