openGL ES 2.0 fragment shader and framebuffer

chapter 10

 

1. 內建變量:

gl_FragColor 用於輸出,可以不寫入該變量,比如你只想修改depth buffer

gl_FragCoord 只讀變量,值 (x, y, z, 1/w)

gl_FrontFacing 內建只讀變量,如果該fragment爲三角形正面的一部分,該值 爲真

gl_PointCoord:只讀變量,值 爲point sprite的紋理座標

 

2. 內建常量:

const mediump int gl_MaxTextureImageUnits = 8;

系統支持的最大紋理單元個數

const mediump int gl_MaxFragmentUniformVectors = 16;

最大vec4 爲單位的uniform變量存儲大小

const mediump int gl_MaxDrawBuffers = 1;

最大可寫入buffers,目前只支持1個

 

 

 

==========================

chapter 11

 

1.framebuffer and renderbuffer區別

render buffer 是一個實實在在的buffer,申請後,可以用來作爲color buffer, depth buffer, stencil buffer.

framebuffer 是clolor buffer, depth buffer, stencial buffer 指針的集合,The only 2D image that can be attached to the

stencil attachment point of an FBO is a renderbuffer object that stores

stencil values.

 

2. framebuffer中的color buffer到底是用texture還是用render buffer?

推薦使用render buffer, 理由如下:1.某些格式不能保存爲紋理對象,只能保存爲render buffer。2.如果照片不是用作紋理, 保存爲render buffer可以加快處理速度

 

3. Framebuffer Objects 和 EGL surface的區別:1. 像素所有者測試,frame buffer永遠返回真2,系統支持雙buffer的 suface,不過只支持單buffer的 frame buffer 3.stencil 和 depth buffer可以在多個frame buffer中共享,而 EGL surface不行。 4 系統提供的EGL surface支持multisample buffers(?)

 

4. 產生一個render buffer, frame buffer

void glGenRenderbuffers(GLsizei n, GLuint *renderbuffers)

void glGenFramebuffers(GLsizei n, GLuint *ids)

0 號 frame buffer由系統保留作系統frame buffer,即上面說的EGL surface

 

5. 如何使用render buffer

.先綁定void glBindRenderbuffer(GLenum target, GLuint renderbuffer)

.glRenderbufferStorage指定格式和大小

如果render buffer被attache to frame buffer,可以在attach 之後指定render buffer的格式

 

6. 如何使用frame buffer

.先綁定void glBindFramebuffer(GLenum target, GLuint framebuffer),同上,綁定的framebuffer可以沒有生成,只要是未使用的frame buffer就可以,綁定成功後,成爲渲染上下文的當前framebuffer。下面幾個狀態關聯到一個frame buffer

Color attachment point

Depth attachment point

Stencil attachment point

Framebuffer completeness status

.檢測framebuffer 是否complete glCheckFramebufferStatus

 

7. 刪除一個render buffer時,如果該buffer 綁定在一個framebuffer上,並且 該 framebuffer是當前綁定buffer,則系統會自動datach 該render buffer,如果framebuffer 不是當前綁定buffer,則用戶負責datach 該framebuffer

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章