【问题标题】:What are the differences between a Frame Buffer Object and a Pixel Buffer Object in OpenGL?OpenGL中的帧缓冲区对象和像素缓冲区对象有什么区别?
【发布时间】:2010-10-19 09:20:34
【问题描述】:

FBO 和 PBO 有什么区别?我应该使用哪一个进行离屏渲染?

【问题讨论】:

    标签: opengl


    【解决方案1】:

    FBO(帧缓冲区对象)是一个目标,您可以在其中渲染默认帧缓冲区或屏幕以外的图像。

    PBO(像素缓冲区对象)允许在设备之间异步传输像素数据。如果您在等待像素传输时还有其他事情可以完成,这有助于提高渲染时的整体性能。

    【讨论】:

      【解决方案2】:

      我会读VBOs, PBOs and FBOs:

      Apple 发布了两个非常不错的 演示 PBO 的示例代码和 FBO。尽管这些是 特定于 Mac,作为示例代码,它们是 在任何平台上都很好,因为 PBO 和 FBO 是 OpenGL 扩展,而不是 窗口系统扩展。

      那么所有这些对象是什么?这里是 情况:

      【讨论】:

        【解决方案3】:

        FBO和PBO有什么区别?

        更好的问题是它们有何相似之处。他们唯一的相似之处是他们的名字

        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。

        他们完全不同。

        【讨论】:

        • 让我们只希望这在纯链接答案和(不幸地被接受的)错误答案之上得到投票。
        • @ChristianRau:我检查过,OP 似乎仍然是常客。所以有希望它会被接受。
        【解决方案4】:

        我想强调一些东西。

        FBO 它不是内存块。我认为它看起来像指针结构。您必须将纹理附加到 FBO 才能使用它。附加纹理后,您现在可以绘制到它以进行屏幕外渲染或第二遍效果。

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

        另一方面,PBO是内存块“block to hold type of memory”。试着把它想象成x大小的malloc,然后你可以使用memcpy将数据从中复制到纹理/FBO 或它”。

        • 为什么要使用 PBO?

        创建中间内存缓冲区以与主机内存接口,并且不停止 OpenGL 绘图会将纹理上传到主机或从主机上传。

        【讨论】:

          猜你喜欢
          • 2012-04-24
          • 1970-01-01
          • 2014-07-13
          • 1970-01-01
          • 2020-07-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-26
          相关资源
          最近更新 更多