原标题:OpenGL的帧缓存——缓存的分类与操作
帧缓存:
它是屏幕所显示画面的一个直接映象,又称为位映射图(Bit Map)或光栅。帧缓存的每一存储单元对应屏幕上的一个像素,整个帧缓存对应一帧图像。
一、缓存的分类
1. 颜色缓存
指程序员绘图所用的缓存,分为:
左、右缓存——用于立体感视图(必须要有左缓存);
前、后缓存——用于双缓存(必须要有前缓存); 4个辅助缓存——可选择的、不可显示(程序员可以自己定义和使用它们)。
2. 深度缓存
用来存储每个象素的深度值,也称为Z缓存。
3. 模板缓存
可以将作图限制在屏幕的某些部分中进行。
4. 累积缓存
包含RGBA颜色数据,通常用于将一系列图象累加成一幅最终的合成图象。
象素不能直接绘制到累积缓存中,累加操作常常先在矩形块中进行,然后再与颜色缓存交换数据。
二、缓存的操作
1. 清空缓存
指定要写入缓存的清除值: glClearColor()——为颜色缓存设置清除值(red,green,blue,alpha); glClearIndex()——为颜色索引缓存设置清除值(index); glClearDepth()——为深度缓存设置清除值(默认为1.0); glClearStencil()——为模板缓存设置清除值(默认为0.0); glClearAccum()——为累积缓存设置清除值(red,green,blue,alpha);
清除指定的缓存: glClear(GLbitfield mask); mask的值是GL_COLOR_BUFFER_BIT、GL_DEPTH_BUFFER_BIT、GL_STENCIL_BUFFER_BIT和GL_ACCUM_BUFFER_BIT等常数的按位逻辑或(OR)。可以一次清除多个缓存,如硬件支持同时清除这些缓存,则操作同时进行;否则,按顺序清除各个缓存。
2. 为读写操作选择颜色缓存
绘图操作的结果可以放入任何一个颜色缓存中:前、后、左前、左后、右前、右后或任意辅存,程序员可选择单个缓存作为绘图目标或读取目标。对绘制图形而言,也可将目标同时绘制到几个缓存中,用glDrawBuffer()函数来选择将要写入的缓存;用glReadBuffer()函数来选择缓存,作为glReadPixels()、glCopyPixels()、glCopyTexImage*()和glCopyTexSubImage*()的应用目标。
3. 缓存的屏蔽(掩码)
OpenGL在向激活的颜色、深度和模板缓存中写入数据之前,需按下面函数指定的掩码对这些数据进行屏蔽操作。
每个掩码要与对应的待写数据进行按位逻辑与(AND)操作。
void glIndexMask(GLuint mask);
mask默认为1。若掩码中出现1,则颜色索引模式中相应的位被写入;而在0出现的位,则不写。
void glColorMask(GLboolean red,green,blue,alpha);
默认为GL_TRUE,表示相应的分量已写入;若为GL_FALSE,则没写入。
void glDepthMask(GLboolean flag);
默认为GL_TRUE,表示深度缓存被激活用于写操作;若为GL_FALSE,则取消。
void glStencilMask(GLuint mask);
默认为1,和颜色索引类似。
(本文参考的是《OpenGL编程权威指南》,也就是传说中的“红宝书”)
转自: https://blog.csdn.net/zhongjling/article/details/8486563
返回搜狐,查看更多
责任编辑:
平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 (
)