OpenGL ES 中的 FrameBuffer 指的是存儲(chǔ)像素的內(nèi)存空間。對(duì)應(yīng)一個(gè)二維圖像,如果屏幕分辨率為1280X1024 ,如果屏幕支持 24 位真彩色 (RGB),則存儲(chǔ)這個(gè)屏幕區(qū)域的內(nèi)存至少需要 1024X1280X3 個(gè)字節(jié)。此外如果需要支持透明度(Alpha),則一個(gè)像素需要 4 個(gè)字節(jié)。
對(duì)應(yīng) 3D 圖像來(lái)說(shuō),上面存儲(chǔ)顯示顏色的 Buffer 稱為 Color Buffer,除 Color Buffer 之外,還需要存儲(chǔ)每個(gè)像素和 View Point 之間的距離,OpenGL ES 中使用 Depth Buffer 存儲(chǔ)像素與眼睛(eye 或是 view point) 的距離,Depth Buffer 也可稱為 z Buffer.
此外 OpenGL ES 還定義了一個(gè)稱為遮罩(Stencil) Buffer,可以將屏幕顯示局限在某個(gè)由 Stencil Buffer 定義的區(qū)域,在日常生活中常見的 Stencil Buffer 示例時(shí)使用紙質(zhì)模板在墻上或是 T 桖上印刷文字或是圖像:
http://wiki.jikexueyuan.com/project/opengl-es-guide/images/91.png" alt="" />
在 OpenGL ES 允許配置 Color Buffer 中 R,G,B,A 的顏色位數(shù),Depth Buffer 的位數(shù),以及 Stencil Buffer的位數(shù):
參數(shù) | 含義 |
---|---|
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 時(shí),OpenGL ES 提供一些 Mask 函數(shù)可以控制 Color Buffer 中 RGBA 通道,是否允許寫入 Depth Buffer 等,這些 Mask 函數(shù)可以打開或是關(guān)閉某個(gè)通道,只有通道打開后,對(duì)應(yīng)的分量才會(huì)寫入指定 Buffer,比如你可以關(guān)閉紅色通道,這樣最后寫道 Color Buffer 中就不含有紅色。這些函數(shù)有 glColorMask, glDepthMask, glStencilMask。這些在后面有更詳細(xì)的介紹。
http://wiki.jikexueyuan.com/project/opengl-es-guide/images/92.png" alt="" />