2009-04-14 124 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绘图将纹理上传到主机或从主机上传纹理。