FBO和PBO有什么区别?我应该使用哪一个进行屏幕外渲染?
答案 0 :(得分:75)
FBO和PBO有什么区别?
更好的问题是它们是如何相似的。唯一与他们相似的是他们的名称。
A Framebuffer Object(注意大写:framebuffer是一个单词,而不是两个单词)是一个包含多个图像的对象,可以用作渲染目标。
如果要渲染到纹理或仅渲染non-screen framebuffer,则使用FBO。如果您尝试异步读取像素数据到应用程序,或者您尝试异步传输像素数据到OpenGL图像,那么您可以使用PBO。
他们没什么相似的。
答案 1 :(得分:17)
FBO(Framebuffer对象)是一个目标,您可以在其中渲染默认帧缓冲区或屏幕以外的图像。
PBO(像素缓冲区对象)允许异步将像素数据传输到设备或从设备传输。如果在等待像素传输时还有其他事情可以完成,这有助于提高渲染时的整体性能。
答案 2 :(得分:11)
我会阅读VBOs, PBOs and FBOs:
Apple发布了两个非常好的内容 样本代码演示公益组织和 宗教组织。即便如此 特定于Mac,作为示例代码 在任何平台上都很好,因为PBO和 FBO是OpenGL扩展,而不是 窗口系统扩展。所有这些对象是什么?这里的 情况:
答案 3 :(得分:4)
我想突出一些事情。
FBO 它不是内存块。我认为它看起来像指针的结构。您必须将纹理附加到FBO才能使用它。附加纹理后,您现在可以绘制它以进行屏幕外渲染或第二次传递效果。
struct FBO{
AttachColor0 *ptr0;
AttachColor1 *ptr1;
AttachColor2 *ptr2;
AttachDepth *ptr3;
};
另一方面, PBO 是内存块“阻塞内存类型。”尝试将其视为x大小的malloc,然后您可以使用memcpy将数据从中复制到纹理/ FBO或它“。
创建中间内存缓冲区以与主机内存接口而不停止OpenGL绘图将纹理上传到主机或从主机上传纹理。