幀緩衝(Framebuffer)

將顏色緩衝,深度緩衝,模板緩衝結合起來,就叫作幀緩衝(存儲在內存中)。git

具體建立方法以及用法這裏不講,LearnOpenGL對應章節有:幀緩衝github

這裏說一下容易讓人誤解(或者難以理解)的地方。性能


  1. 實際上咱們平時作的一些操做都是在默認幀緩衝中的渲染緩衝(Renderbuffer)中進行的,這裏默認的幀緩衝是在建立窗口的時候GLFW生成和配置的。
  2. 咱們能夠建立本身的幀緩衝,方便進行一些後期處理操做(不明白的話往下看)。
  3. 幀緩衝至少須要一個顏色附件,附件當中至少要有一個緩衝類型(顏色,深度,模板)。
  4. 顏色附件中的「顏色」指的是附加到幀緩衝的時候的目標類型,注意和附件自己的存儲格式區分開:比方說一個紋理顏色附件,那麼建立紋理的時候存儲格式應該爲GL_RGB(源圖格式也應該設置爲GL_RGB),而附加到幀緩衝上的時候用:GL_COLOR_ATTACHMENT;又好比說一個紋理深度(模板)附件,那麼建立紋理的時候就應該將存儲格式改成GL_DEPTH_COMPOENT(GL_STENCIL_INDEX),而附加到幀緩衝的時候用GL_DEPTH_ATTACHMENT(GL_STENCIL_ATTACHMENT)。
  5. 另一種附件叫作渲染緩衝附件(同紋理附件相對應),渲染緩衝對象直接將全部的渲染數據儲存到它的緩衝中,不會作任何針對紋理格式的轉換,讓它變爲一個更快的可寫儲存介質。然而,渲染緩衝對象一般都是隻寫的,因此你不能讀取它們(好比使用紋理訪問)。固然你仍然仍是可以使用glReadPixels來讀取它,這會從當前綁定的幀緩衝,而不是附件自己,中返回特定區域的像素。
  6. 通常紋理附件拿來當顏色附件,渲染緩衝附件拿來當 「模板&深度(一個總體)」 附件,一樣,這裏的"顏色」「模板&深度」指的都是附加到幀緩衝時候的目標類型。
  7. 那麼何時選擇紋理附件,何時選擇渲染緩衝附件呢?
    一般的規則是,若是你不須要從一個緩衝中採樣數據,那麼對這個緩衝使用渲染緩衝對象會是明智的選擇。若是你須要從緩衝中採樣顏色或深度值等數據,那麼你應該選擇紋理附件。性能方面它不會產生很是大的影響的。
  8. 須要注意的是,這些附件只是存儲最終結果的,實際渲染過程(深度測試,模板測試之類的)依舊由GLFW本身操做。
  9. 建立本身的幀緩衝有什麼用呢?它的優點是什麼呢?
    拿紋理附件(目標類型是顏色緩衝)來講的話,咱們能夠用圖像的方式訪問已經渲染場景的每一個像素,因此能夠在fragment shader中作出一些效果,好比說反相,灰度,更進一步,能夠結合核(kernel)作出更加有特色的效果:銳化,模糊等。這些操做統稱爲後期處理(Post-processing)

以上。測試

相關文章
相關標籤/搜索