OpenGL(5.1)深入理解从Fram Buffer到显示设备
从Fram Buffer到显示设备
简介
绘制方式可以分为2D和3D。上个世纪的显卡大部分都是2D显卡,而现在主流的桌面显卡则都是以3D为主同时包括2D功能,纯2D功能的显卡在服务器中还存在。
我们知道,显示设备屏幕只是一个二维的平面。如果绘制的是一个平面上的点、线段和填充多边形,一般被称为2D,比如Vista之前的桌面、菜单等都是用这种方式画出来的。
如果要绘制三维空间中的物体,表现出它们的灯影效果,体现出移步换景、定点换景、定景换点的观察效果,最终在二维的屏幕上显示,就需要用到3D技术了。
而这些显示都需要依赖于Fram Buffer;
on screen buffer
- 其实无论是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类型如下图所示:
对上图的小结:
- 实际上,存在两种类型的Frame Buffer,一种类型就是如前所述,和on screen buffer相关联,最终要显示出来的;另一种类型则和on screen buffer无关,一般是作为中间结果暂存,不需要显示,在frame buffer object技术中被引入。一般所说的frame buffer都是以显示为目的的。
所有一般我们所说的Frame buffer指的就是on screen buffer。 - 另外,从驱动层来讲,为了提高效率,depth buffer和stencil buffer在物理上可能是交叉在一起的。
- 如果不是全屏程序,front buffer其实只是on screen buffer的一部分。一个全屏程序,也就是说color buffer和屏幕分辨率是一致的,可以将back buffer中的数据拷贝到front buffer中进行显示,也可以直接将back buffer的属性设置为on screen buffer,这样减少拷贝过程可以大幅提高性能。
- 为了某些设计上的考虑,front buffer可能和on screen buffer在物理上是分开的,当然,驱动程序会对外屏蔽这个特性。
在物理上是分开的,当然,驱动程序会对外屏蔽这个特性。