OPENGL中的帧缓存区概述

(1)帧缓存介绍

OPENGL系统的帧缓冲区是由所有存储着像素信息的缓冲区组成的,包括:颜色缓冲区、深度缓冲区、模板缓冲区、累积缓冲区。可以使用glGetIntegerv()查询特定画面可用的缓冲区的存储信息。


颜色缓冲区是用于绘图的缓冲区,它包含了颜色索引或者RGB颜色数据,还可能有alpha数据。若OPENGL支持立体画面,则提供了左、右缓冲区;若OPENGL支持双缓冲,则提供前、后缓冲区。可以使用glGetBooleanv()判断自己系统是否支持立体画面和双缓冲;可以使用glGetIntegerv()判断支持多少个辅助缓冲区。

比如在当前GLUT的配置下:


深度缓冲区也叫z缓冲区,通常是用作消隐。

模板缓冲区常用于将绘图限制在屏幕中的某个区域。

累积缓冲区也用于存储RGBA颜色数据,常用于抗锯齿处理。

(2)清除帧缓冲区

OPENGL的清除命令是硬件实现的,这保证了清除的速度。

1. 指定RBGA颜色缓冲区的清除值

void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);

2. 指定颜色索引模式下的颜色缓冲区的清除值

void glClearIndex(GLfloat index);

3. 指定深度缓冲区的清除值

void glClearDepth(GLclampf depth);

4. 指定模板缓冲区的清除值

void glClearStencil(GLint s);

5. 指定累积缓冲区的清除值

void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);

其中,除了深度缓冲区的默认清除值为1.0外,其他都是0。

6. 清除缓冲区

void glClear(GLbitfield mask);

清除指定的缓冲区,mask为GL_COLOR_BUFFER_BIT、GL_DEPTH_BUFFER_BIT、GL_STENCIL_BUFFER_BIT、GL_ACCUM_BUFFER_BIT的逻辑OR操作的组合结果。

比如将颜色缓冲区清除成绿色、蓝色:



(3)写入和读取颜色缓冲区

1.void glDrawBuffer(GLenum mode);//选择用于写入的颜色缓冲区

mode值可以是:GL_FRONT GL_BACK GL_LEFT GL_RIGHT GL_FRONT_LEFT GL_FRONT_RIGHT GL_BACK_LEFT GL_BACK_RIGHT GL_AUXi GL_FRONT_AND_BACK GL_NONE

2.void glDrawBuffers(GLsizei n, const GLenum *buffers);//指定同时接收颜色值的多个缓冲区,它是OPENGL2.0加入的函数,常用于渲染到多个输出缓冲区

buffers只允许包括GL_NONE GL_FRONT_LEFT GL_FRONT_RIGHT GL_BACK_LEFT GL_BACK_RIGHT GL_AUXi

3. void glReadbuffer(GLenum mode);//选择作为像素读取来源的颜色缓冲区

mode值可以是:GL_FRONT GL_BACK GL_LEFT GL_RIGHT GL_FRONT_LEFT GL_FRONT_RIGHT GL_BACK_LEFT GL_BACK_RIGHT GL_AUXi GL_FRONT_AND_BACK GL_NONE

(4)屏蔽缓冲区

使用屏蔽技术可以在数据写入到缓冲区之间,对指定数据先进行AND操作,进行屏蔽。

void glIndexMask(GLuint mask);//颜色索引模式下的掩码

void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);//RGBA下的掩码

void glDepthMask(GLboolean flag);//决定深度缓冲区是否被禁用

void glStencilMask(GLuint mask);//模板的掩码

void glStencilMaskSeparate(GLenum face, GLuint mask);//允许对正面和背面独立使用掩码,这是OPENGL2.0新加入的函数

其中,所有布尔型的默认值均为GL_TRUE,所有GLint掩码的默认值是全1。

下面是将蓝色成分拒绝写入缓冲区的前后对比:

glColorMask(GL_TRUE, GL_TRUE, GL_FALSE, GL_TRUE);



本文转自:博客园 - 三戒1993,转载此文目的在于传递更多信息,版权归原作者所有。

最新文章