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 桖上印刷文字或是圖像:
http://wiki.jikexueyuan.com/project/opengl-es-guide/images/91.png" alt="" />
在 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。這些在后面有更詳細的介紹。
http://wiki.jikexueyuan.com/project/opengl-es-guide/images/92.png" alt="" />