zoukankan      html  css  js  c++  java
  • 帧缓冲区对象

    帧缓冲区是指服务器(显存)中存储像素相关信息(颜色、深度等)的存储空间。

        系统提供的帧缓冲区对象包括多个缓冲区,有颜色缓冲区、深度缓冲区、模版缓冲区等。

          其中,颜色缓冲区包括前后左右(支持立体画面、双缓冲)、附加颜色缓冲区(GL_COLOR_ATTACHMENTi , i = 0 ~GL_MAX_COLOR_ATTACHMENTS - 1),默认绘制时使用的颜色缓冲区是 GL_BACK(双缓冲时(QGLWIDGET默认),若是单缓冲,则为GL_FRONT),即使用 GL_LINES、GL_QUADS等绘制的像素内容被默认存储到GL_BACK缓冲区中并自动绘制出来。

     可以使用自定义的帧缓冲区对象来存储绘制结果,而不是直接放到系统缓冲区中渲染,如红宝书中P337页的例子。

         方法是,先自定义一个帧缓冲区对象,并指定其附加的渲染缓冲区(真正放颜色和深度值的地方),使用glBindFramebuffer(GLenum target, GLuint framebuffer); 来使用自定义的帧缓冲区 framebuffer,附加上glFramebufferRenderbuffer() 后,之后的绘制结果就会被保存到该缓冲区对象指定的附加渲染缓冲区中;

         也可以使用glFramebufferTexure2D(GLenum traget, GLenum attachment, GLenum texturetarget, GLuint texure, GLint level);来将某一附加缓冲区attachment与某纹理对象texuretarget(事先定义好)相关联,这样绘制的结果被自动保存到该2D纹理对象中。

        有个文章解释了帧缓冲区对象(Frame buffer Object)  和 纹理对象 以及 渲染缓冲区对象 的关系。 http://blog.csdn.net/zhihuier/article/details/8060266

        也就是说,一个帧缓冲区对象一般由  GL_COLOR_ATTACHMENTi (可多个,i从0起)、 GL_DEAPTH__ATTACHMENT等附加缓冲区构成,这些附加缓冲区可以使用

     (1) glFramebufferRenderbuffer()与自定义的渲染缓冲区对象联系起来

     (2) glFramebufferTexure2D/1D/3D()与自定义纹理对象联系起来

        注意:FBO本身并没有图像数据存储区,只有多个关联(多个渲染缓冲区对象及纹理对象)。

  • 相关阅读:
    de1ctf_2019_weapon
    ciscn_2019_s_6
    用 Blend 给Windows Phone 应用创建 示例数据
    (转) Wp7 list 中列表项多样化的解决方案-Custom DataTemplateSelector
    Android开发之Java集合类性能分析
    WriteableBitmap 给透明的控件截图的问题
    VS 2013 配置OpenCV
    Cocos2d-x 版本小游戏 《是男人就下100层》 项目开源
    HEAP CORRUPTION DETECTED :after Normal block 错误
    Visual C++ 的代码折叠
  • 原文地址:https://www.cnblogs.com/wenshanzh/p/3024607.html
Copyright © 2011-2022 走看看