[OpenGL学习] 缓冲区
缓冲区:
1 颜色缓冲区(COLOR_BUFFER):
颜色缓冲区就是帧缓冲区(FRAME_BUFFER),你需要渲染的场景最终每一个像素都要写入该缓冲区,然后由它在渲染到屏幕上显示;
双缓存的情况下,帧缓冲区包括前缓冲(GL_FRONT)和后缓冲(GL_BACK)。
例子1:读入一张图像要作为纹理,一开始读入的时候是要放在后缓冲区,要显示的时候,就放到前缓冲区,glSwapBuffer()是用来实现由后缓冲到前缓冲。
例子2:我们现在后缓冲区将图形的每一部分绘制完全,然后用glSwapBuffer()将这个图像转到前缓冲区里显示,如果直接就在前缓冲区,那我们一开始看到的只是图像的一部分,我们会看到绘制过程,到其完全绘制好。
2 深度缓冲区(DEPTH_BUFFER):
深度缓冲区与帧缓冲区对应,用于记录上面每个像素的深度值,通过深度缓冲区,我们可以进行深度测试,从而确定像素的遮挡关系,保证渲染正确;
PS:现实世界里的物体投影到平面,存在遮挡关系,要在荧幕显示的时候要进行深度测试,确定显示哪个物体。
3 模版缓冲(STENCIL_BUFFER):
模版缓冲与深度缓冲大小相同,通过设置模版缓冲每个像素的值,我们可以指定在渲染的时候只渲染某些像素,从而可以达到一些特殊的效果.
(以上转自http://www.cnblogs.com/tekkaman/archive/2011/11/16/2250938.html,并添加了部分内容)
4 累积缓冲区(ACCUM_BUFFER):
主要作用是允许颜色缓冲区的内容不直接显示到窗口上
作用过程:
(1)内容从颜色缓冲区 复制 到累积缓冲区;
(2)根据不同的方法,将颜色缓冲区的内容与在累积缓冲区的内容进行反复混合;
(3)将最终结果从累积缓冲区 复制 回颜色缓冲区;
(4)由颜色缓冲区直接显示到窗口上。
PS:由于积累缓冲区操作需要复制大量的内存并进行大量的处理,所以很少使用这个功能。