2009-04-14 122 views

回答

17

A FBO(幀緩衝區對象)是可以渲染除默認幀緩衝區或屏幕以外的圖像的目標。

A PBO(像素緩衝對象)允許異步傳輸像素數據往返於設備。如果在等待像素傳輸時可以完成其他操作,則可以提高渲染時的整體性能。

12

我會讀VBOs, PBOs and FBOs

蘋果已經發布的 示例代碼演示公益組織和宗教組織 兩個非常不錯位。儘管這些是特定於Mac的 ,但作爲示例代碼,它們在任何平臺上都很好,因爲PBO和 FBO是OpenGL擴展,而不是 窗口系統擴展。

那麼,所有這些對象是什麼?這裏的 情況:

70

是什麼FBO和PBO之間的區別?

更好的問題是它們是如何相似的。唯一相似的是他們的名稱

A Framebuffer Object(注意大小寫:framebuffer是一個單詞,而不是兩個)是一個包含多個圖像的對象,可用作渲染目標。

Pixel Buffer Object是:

  1. Buffer Object。 FBO是而不是緩衝區對象。再次說明:framebuffer是一個詞。
  2. 用於異步的緩衝對象uploading/downloading of pixel data to/from images

如果你想渲染到紋理或只是non-screen framebuffer,那麼你使用FBO。如果您嘗試將像素數據異步讀取到應用程序,或者您嘗試異步傳輸像素數據到OpenGL圖像,則使用PBO。

他們沒什麼相似之處。

+5

讓我們希望這個問題在純鏈接答案和(不幸接受的)錯誤答案上面投票。 – 2012-06-09 16:59:13

+0

@ChristianRau:我查過了,而OP似乎仍然是常客。所以希望它能被接受。 – 2012-06-09 17:02:01

4

我想強調一些東西。

FBO它不是內存塊。我認爲它看起來像指針的結構。您必須將紋理附加到FBO才能使用它。在附加紋理之後,您現在可以爲其進行離屏渲染或二次傳遞效果。

struct FBO{ 
AttachColor0 *ptr0; 
AttachColor1 *ptr1; 
AttachColor2 *ptr2; 
AttachDepth *ptr3; 
}; 

在另一方面,PBO是存儲器塊「塊保持的存儲器類型。「試着將它看作x尺寸的malloc,然後你可以使用memcpy將數據從它複製到紋理/ FBO或它。」

  • 爲什麼要使用PBO?

創建中間內存緩衝區來與主機內存交互,而不是停止OpenGL繪圖將紋理上傳到主機或從主機上傳紋理。