fbo的個人淺薄瞭解

在OpenGL渲染管道中,幾何數據和紋理被轉換並通過幾個測試,最終以2D像素的形式呈現在屏幕上。

OpenGL管道的最終呈現目標稱爲幀緩衝區(Framebuffer)。Framebuffer是OpenGL使用的2D數組或存儲庫的集合:彩色緩衝區,深度緩衝區,模板緩衝區和累積緩衝區。默認情況下,OpenGL使用幀緩衝區作爲由窗口系統完全創建和管理的rendering target。這個默認的幀緩衝區稱爲窗口系統提供的幀緩衝區。

OpenGL擴展GL_ARB_framebuffer_object,提供了一個接口來創建其他不可顯示的幀緩衝對象(FBO)。該幀緩衝區被稱爲應用程序創建的幀緩衝區,以便與默認的窗口系統提供的幀緩衝區區分開來。
通過使用FBO,OpenGL應用程序可以將渲染輸出重定向到除了傳統的窗口系統提供的幀緩衝區之外的應用程序創建的FBO。而且,它完全由OpenGL控制。

與窗口系統提供的幀緩衝區類似,FBO包含一系列渲染緩衝區集合:顏色,深度和模板緩衝區。FBO中沒有定義累加緩衝區。FBO中的邏輯緩衝區被稱爲framebuffer-attachable 圖像,它們是可以附加到幀緩衝區對象FBO的二維像素數組。

有兩種類型的framebuffer-attachable images:紋理圖像和renderbuffer圖像。

  1. 如果紋理對象的圖像被附加到幀緩衝區,OpenGL將執行“渲染到紋理”。
  2. 如果renderbuffer對象的圖像附加到幀緩衝區,則OpenGL會執行“屏幕外渲染”。

順便說一下,renderbuffer對象是在GL_ARB_framebuffer_object擴展中定義的一種新類型的存儲對象。它在渲染過程中用作單個2D圖像的渲染目的地。

下圖顯示了FBO,紋理對象和renderbuffer對象之間的連接。多個紋理對象或renderbuffer對象可以通過attachment point 附加到framebuffer對象。
這裏寫圖片描述

  1. 幀緩衝對象中有多個顏色附着點(GL_COLOR_ATTACHMENT0,…,GL_COLOR_ATTACHMENTn)
  2. 一個深度附着點(GL_DEPTH_ATTACHMENT)
  3. 一個模板附着點(GL_STENCIL_ATTACHMENT)

顏色連接點的數量取決於實現,但每個FBO必須至少具有一個顏色附着點。您可以使用GL_MAX_COLOR_ATTACHMENTS查詢最大數量的顏色附着點,這些數據由顯卡支持。 FBO具有多個顏色附着點的原因是允許在同一時間將顏色緩衝區渲染到多個目的地。

這個“多個渲染目標”(MRT)可以由GL_ARB_draw_buffers擴展完成。請注意,framebuffer對象本身沒有任何圖像存儲(數組),但它只有多個附件點。

幀緩衝器對象(FBO)提供了一種高效的切換機制:從FBO中分離先前的可與幀緩衝區相關聯的圖像,並將一個新的framebuffer-attachable image 圖像附加到FBO。切換framebuffer-attachable image比在FBO之間切換要快得多。 FBO提供glFramebufferTexture2D()來切換2D紋理對象,並將glFramebufferRenderbuffer()切換到renderbuffer對象。

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