帧缓冲区
  几乎每个图形程序的重要目标之一都是在屏幕上绘制图形。屏幕是由一个矩形像素数组组成的,每个像素都可以在图像的某一个点上显示一个某种颜色的微小方块。在光栅化阶段(包括纹理和雾)之后,数据就不再是像素,而是片段。每个片段都具有与像素对应的坐标数据以及颜色值和深度值。
  如果顺利通过了这些测试和操作,片段值便可以转换为像素。 如果顺利通过了这些测试和操作,片段值便可以转换为像素。为了绘制这些像素,我们需要知道它们的颜色(即存储在颜色缓冲区中的信息)。当每个像素的数据按照统一的方式存储时,存储所有像素的数据按照统一的方式存储时,存储所有像素的存储空间就叫做缓冲区。不同的缓冲区为每个像素存储的数据量可能不同。但是,在一个特定的缓冲区内,每个像素存储的数据是相同的。为每个像素存储了1位信息的缓冲区又称为位平面(bitplane)。

  颜色缓冲区,它用于保存屏幕上所显示的颜色信息。假设屏幕的宽度为1280个像素,高度为1024像素,并使用24位的完整颜色。换句话说,这个屏幕可以显示2的24次方中不同的颜色。由于24位相当于3个字节,因此这个颜色缓冲区必须为屏幕上1289*1024个像素的每一个都存储在3个字节的数据。在特定的硬件系统中,物理屏幕所显示的像素可能更多或更少。另外,每个像素可能更多或更少。另外,每个像素的数据量也可能更多或更少。但是,对于一个特定的颜色缓冲区而言,它为屏幕上每个像素所存储的数据量是相同的。
  颜色缓冲区只是用了存储像素信息的许多缓冲区之一,还有很多其他缓冲区。例如,深度缓冲区存储了每个像素的深度信息。颜色缓冲区本身也可能包括几个子缓冲区。系统的帧缓冲区是由所有这些缓冲区组成的。除了颜色缓冲区之外,其他缓冲区都无法直接查看,它们用于实现诸如隐藏表面消除,场景抗锯齿、模版测试、绘制平滑的运动图像等功能。 
  颜色缓冲区通常用于绘图的缓冲区。它们包含了颜色索引或RGB颜色数据,还可能包含alpha数据。支持立体画面的OpenGL实现了提供了左右颜色缓冲区,分别包含了左右立体图像。如果OpenGL实现不支持立体图像,那就值使用了左缓冲区。类似地,双缓冲系统提供了前后缓冲区,而单缓冲系统只提供了前缓冲区。

  深度缓冲区
  深度缓冲区存储每个像素的深度值。深度通常是根据物体和观察点的距离来测量的,因此具有较大深度的像素有可能会被具有较小深度值的像素覆盖。但是,这只是一种通常的约定,我们完全可以更改深度缓冲区的行为。深度缓冲区有时又称为z缓冲区(x表示屏幕的水平方向,y表示屏幕的垂直方向,z表示从观察点垂直于屏幕的方向)。

  模版缓冲区
  模版缓冲区的用途之一就是把绘图限制在屏幕中的某个区域,就像使用纸板和喷漆实现精确的绘图一样。例如,例如,如果想绘制一幅在形状怪异的挡风玻璃上出现的图像,可以在模版缓冲区内存储一幅挡风玻璃形状的图像,然后在绘制整个场景。模版缓冲区可以防止哪些透过挡风玻璃无法看到的物体被绘制出来。因此,如果应用程序是一个模拟驾驶的程序,可以只绘制车内的仪表和其他物体1次,当汽车开动时,只有车窗外的场景需要更新。

  积累缓冲区
  与RGBA模式下的颜色缓冲区一样,积累缓冲区也用于存储RGBA颜色数据(在颜色索引模式下,使用积累缓冲区的结果是未定义的)。积累缓冲区通常用于把一些列的图像合成为一幅图像。通过这种方法,可以对图像惊醒超量采样,然后对样本求平均值,并且将结果写入到颜色缓冲区中,从而显示场景的抗锯齿处理。不能把数据直接写入到积累缓冲区,积累操作总是以矩形块为单位对数据进行操作,通常是把数据移入或一出颜色缓冲区。

  清除缓冲区
  在图形程序中,清楚屏幕(以及所有缓冲区)是开销最大的操作之一。一个1280*1024的屏幕包含了上百万的像素。对于简单的图形应用程序,清除操作话费的时间可能比接下来进行的绘图操作的时间还要多。如果需要清除的不仅仅是颜色缓冲区,还需要清除深度和模版缓冲区,清除操作所花费的时间可能还要成倍地增加。 为了解决这个问题,有些计算机提供了能够同时清除多个缓冲区的硬件。OpenGL的清除命令能够充分的利用这类硬件的优势。首先,指定需要写入到每个将要清除的缓冲区的值,然后发布一条命令执行清除操作。在这个命令中,需要传递将要清除的缓冲区列表。如果硬件支持同时清除多个缓冲区,这些清除操作就会同时进行。否则,这些缓冲区就会按顺序逐个清除。

write by fgd

转载于:https://www.cnblogs.com/wendao/archive/2011/12/26/ogl_frame_buffer_learning.html

OpenGL 帧缓冲区相关推荐

  1. OpenGL framebuffer 帧缓冲区的实例

    OpenGL framebuffer 帧缓冲区 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #incl ...

  2. OpenGL ES之离屏渲染的帧缓冲区对象FBO的说明和使用

    一.什么是 FBO ? FBO(Frame Buffer Object)即帧缓冲区对象,实际上是一个可添加缓冲区的容器,可以为其添加纹理或渲染缓冲区对象(RBO). FBO 本身不能用于渲染,只有添加 ...

  3. 【OpenGL ES】帧缓冲区对象FBO

    1.FBO 使用OpenGL ES,一般要通过EGL来配置本地窗口系统,关于EGL的介绍可参照"[OpenGL ES]EGL简介"http://blog.csdn.net/ieea ...

  4. Android系统Surface机制的SurfaceFlinger服务对帧缓冲区(Frame Buffer)的管理分析

    在前文中,我们分析了SurfaceFlinger服务的启动过程.SurfaceFlinger服务在启动的过程中,会对系统的硬件帧缓冲区进行初始化.由于系统的硬件帧缓冲区一般只有一个,并且不是谁都可以随 ...

  5. OpenGL帧缓存对象(FBO:Frame Buffer Object)(转载)

    原文地址http://www.songho.ca/opengl/gl_fbo.html 但有改动. OpenGL Frame BufferObject(FBO) Overview: 在OpenGL渲染 ...

  6. opengl模板缓冲区

    相信大家有些人对opengl的模板缓冲区不是很理解,包括我最开始也是,opengl的模板缓冲区其实就是采用过滤的技术来控制那些颜色可以绘制,那些不能进行绘制.这里的过滤技术也就是我们的一个控制方法,主 ...

  7. 帧缓冲区对象 FBO

    帧缓冲区对象 FBO(Frame Buffer Object). 1.FBO(framebuffer object) (我习惯于把EGL创建的framebuffer称为framebuffer,也叫做w ...

  8. Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(4)...

            成员变量fd指向一个文件描述符,这个文件描述符要么指向帧缓冲区设备,要么指向一块匿名共享内存,取决于它的宿主结构体private_handle_t描述的一个图形缓冲区是在帧缓冲区分配的 ...

  9. Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析

    前面在介绍Android系统的开机画面时提到,Android设备的显示屏被抽象为一个帧缓冲区,而Android系统中的SurfaceFlinger服务就是通过向这个帧缓冲区写入内容来绘制应用程序的用户 ...

最新文章

  1. LNMP环境搭建(centos6.9+mysql5.7+php7.1+nginx1.10)
  2. 常见linux命令使用方法(二)
  3. qrp文件如何用excel打开_问与答66: 如何不打开Excel文件删除行?
  4. leader选举的源码分析-quorumPeer.createElectionAlgorithm
  5. 一个json格式转xml格式的java实现
  6. 马云欣赏你,你的创业就已成功了一半
  7. CCF201912-2 回收站选址(100分)【序列处理】
  8. 一个简单SeekBar样式的例子
  9. 路径太深 无法删除文件夹 之解决办法
  10. 树枝学术 | 论文翻译全攻略
  11. 【内网穿透笔记】NAPT类型测试与XTCP点对点内网穿透适用例外
  12. php快照劫持代码,php快照劫持跳转代码,php快照劫持源码下载
  13. SAP请求一键传输程序
  14. 二元对数正态分布 (bivariate lognormal distribution) 的几个性质
  15. 百度云搭建微信公众平台服务器,微信大众开放平台开发03-百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试...
  16. firewalld防火墙(二)实验案例:ip地址伪装,端口转发
  17. linux自动同步onedrive,如何在Linux中同步微软OneDrive
  18. python语言下同一个类下有多个函数,其中一个函数想调用另外一个函数里面的变量怎么调用
  19. addToSet与each插入多条值
  20. 3S基础知识:VC6.0+MapX编程总结

热门文章

  1. qt调用linux 进程,Linux 下qt 程序打包发布(使用linuxdelpoyqt ,shell 脚本)
  2. php无法加载dll插件,php无法加载动态库怎么办
  3. mysql性能的介绍少_MySQL性能突然下降怎么回事 MySQL性能突然下降原因介绍
  4. 智能车竞赛技术报告 | 节能信标组-哈尔滨工业大学紫丁香五队
  5. 第十六届全国大学生智能车竞赛报名信息统计
  6. 粘贴铜箔简易实验电路制作
  7. 如何合并多个Django项目?
  8. Apache Commons包 StringUtils工具类深入整理(转载)
  9. ios wkwebview弹框_iOS WKWebView的javascript alert 不弹的解决方案
  10. win10怎么设置开机启动项目_苹果mac开机启动项怎么设置