OpenGL(5.1)深入理解从Fram Buffer到显示设备

OpenGL(5.1)深入理解从Fram Buffer到显示设备

从Fram Buffer到显示设备

简介

绘制方式可以分为2D和3D。上个世纪的显卡大部分都是2D显卡,而现在主流的桌面显卡则都是以3D为主同时包括2D功能,纯2D功能的显卡在服务器中还存在。
我们知道,显示设备屏幕只是一个二维的平面。如果绘制的是一个平面上的点、线段和填充多边形,一般被称为2D,比如Vista之前的桌面、菜单等都是用这种方式画出来的。
如果要绘制三维空间中的物体,表现出它们的灯影效果,体现出移步换景、定点换景、定景换点的观察效果,最终在二维的屏幕上显示,就需要用到3D技术了。
而这些显示都需要依赖于Fram Buffer;

on screen buffer

  1. 其实无论是2D 还是3D显示到显示设备上,最终都是建计算机上一块连续的,存储着像素信息的内存(memory)映射到对应相应分辨率的屏幕上。这里的映射指的是,内存数据通过控制芯片(contoller)将显示数据传送到显示设备的过程。这块内存(memory) 也称为on screen buffer;
    在这里插入图片描述
    可以同时存在多块memory,其内容都可以被Display Controller传给显示设备,而当前被通过控制芯片(contoller)传输数据的那块memory就是on screen buffer。

Fram Buffer详解

在GPU绘制过程中,为了避免闪烁,以及在3D应用中需要考虑灯光,深度信息等问题,绘制内容不会直接放入on screen buffer中。
Frame Buffer类型如下图所示:
在这里插入图片描述
对上图的小结:

  1. 实际上,存在两种类型的Frame Buffer,一种类型就是如前所述,和on screen buffer相关联,最终要显示出来的;另一种类型则和on screen buffer无关,一般是作为中间结果暂存,不需要显示,在frame buffer object技术中被引入。一般所说的frame buffer都是以显示为目的的。
    所有一般我们所说的Frame buffer指的就是on screen buffer。
  2. 另外,从驱动层来讲,为了提高效率,depth buffer和stencil buffer在物理上可能是交叉在一起的。
  3. 如果不是全屏程序,front buffer其实只是on screen buffer的一部分。一个全屏程序,也就是说color buffer和屏幕分辨率是一致的,可以将back buffer中的数据拷贝到front buffer中进行显示,也可以直接将back buffer的属性设置为on screen buffer,这样减少拷贝过程可以大幅提高性能。
  4. 为了某些设计上的考虑,front buffer可能和on screen buffer在物理上是分开的,当然,驱动程序会对外屏蔽这个特性。
    在物理上是分开的,当然,驱动程序会对外屏蔽这个特性。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章