Android OpenGL ES 开发教程(23):FrameBuffer

jerry OpenGL ES 2015年11月25日 收藏

OpenGL ES 中的FrameBuffer 指的是存储像素的内存空间。对应一个二维图像,如果屏幕分辨率为1280X1024 ,如果屏幕支持24位真彩色 (RGB),则存储这个屏幕区域的内存至少需要1024X1280X3个字节。此外如果需要支持透明度(Alpha),则一个像素需要4个字节。

对应3D图像来说,上面存储显示颜色的Buffer称为Color Buffer,除Color Buffer之外,还需要存储每个像素和View Point之间的距离,OpenGL ES中使用Depth Buffer 存储像素与眼睛(eye 或是view point)的距离,Depth Buffer也可称为z Buffer.

此外 OpenGL ES 还定义了一个称为遮罩(Stencil) Buffer,可以将屏幕显示局限在某个由Stencil Buffer 定义的区域,在日常生活中常见的Stencil Buffer 示例时使用纸质模板在墙上或是T桖上印刷文字或是图像:

在OpenGL ES 允许配置Color Buffer 中 R,G,B,A 的颜色位数,Depth Buffer 的位数,以及Stencil Buffer的位数:

参数 含义
GL_RED_BITS, GL_GREEN_BITS,
GL_BLUE_BITS, GL_ALPHA_BITS
Number of bits per R, G, B, or A component in the color buffers
GL_DEPTH_BITS Number of bits per pixel in the depth buffer
GL_STENCIL_BITS Number of bits per pixel in the stencil buffer

在最终OpenGL ES写入这些Buffer时,OpenGL ES提供一些Mask 函数可以控制Color Buffer 中RGBA通道,是否允许写入Depth Buffer 等,这些Mask 函数可以打开或是关闭某个通道,只有通道打开后,对应的分量才会写入指定Buffer,比如你可以关闭红色通道,这样最后写道Color Buffer中就不含有红色。这些函数有 glColorMask, glDepthMask, glStencilMask。这些在后面有更详细的介绍。