Android openglES Framebuffer Object學習總結

  1. Framebuffer Object 其自身並沒有實際的內存,它可以理解爲內存管理者(manager)。其管理的內存是和Framebuffer Object綁定的附件(color attachments,depth attachment,stencil attachment),如紋理(texture,renderbufer object),其綁定附件才擁有實際的內存。
  2. OpenGL ES 的默認Framebuffer Object(ID 爲0 ),其color attachments,depth attachment,stencil attachment是由openg es自己創建的,(其color attachments很有可能就是Android 的GraphicBuffer, 待驗證!!),其大小是和EGLSurface的尺寸相等的。
  3. 在自己創建的FrameBuffer Object時,其綁定的附件的大小是任意的,甚至可以比EGLSurface的尺寸大,可以調整glViewport大小來調整渲染繪製的範圍。opengl es 渲染操作會直接作用到其綁定的附件上。

opengl es渲染繪製的區域是由glViewport來指定的

void glViewport(GLint x, GLint y, GLsizei w, GLsizei h)

座標(x,y)對應NDC座標的(-1,-1)
座標(x+w,y+h)對應NDC座標的(1,1)。
glViewport設置的範圍是任意的,甚至可以比FrameBuffer Object綁定附件的尺寸還要大(在綁定默認的FrameBuffer Object時,可以比EGLSurface還要大;在綁定子定義的FrameBuffer Object時,可以綁定的attachments尺寸還要大,如在color attachments爲texture時,可以比texture的尺寸還要大),但是隻有其有效範圍(FrameBuffer Object 綁定附件重合的部分)才能渲染出圖來

一篇比較好的學習資料
Android openglES Framebuffer是什麼buffer及其大小?
OpenGL 圖形庫的使用(二十五)—— 高級OpenGL之幀緩衝Framebuffers

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