相关文章推荐
风流的小狗  ·  ios - The Android ...·  1 年前    · 
爱健身的马铃薯  ·  java - ...·  1 年前    · 

原标题: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 返回搜狐,查看更多

    责任编辑:

    平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
    阅读 ( )