【问题标题】:Fast copy between two FBO(s) or from FBO to Texture in OpenGL-ES 1.1OpenGL-ES 1.1 中的两个 FBO 之间或从 FBO 到纹理的快速复制
【发布时间】:2011-07-10 18:20:57
【问题描述】:

您好。

我的目标是实现一个管道来处理具有“当前”和“前一个”帧的视频帧。在某些情况下,它需要将一个子区域从“前一个”帧复制到“当前”帧。这是一种解码器,是更大应用程序的一部分。

这是我目前在使用 OpenGL-ES 1.1 的 iPhone 上运行的

                            glCopyTexSubImage2D
                        .--------------------\
  glTexSubImage2D       V     glDrawArray    |

图像 --------------> 纹理 --------------> FBO/纹理-------> 渲染缓冲区

纹理像往常一样更新每个新帧或部分帧。 纹理被绘制到帧缓冲区对象中并最终渲染。

这些部件的性能非常好。

问题是glCopyTexSubImage2D,使用Instruments进行分析显示它占用了大约50%的CPU;看起来它正在使用 CPU 进行复制。呸。

在我发布代码之前(我很乐意这样做),我想问一下这个架构是否合理?

项目的下一阶段是与另一个 GL 上下文共享最终的 FBO/纹理,以渲染到外部屏幕。我在这里阅读了其他关于共享资源的微妙性质的帖子。

感谢您的指导。

干杯,克里斯

附:我在让图表看起来正确时遇到了一些麻烦。回流线应该从FBO/Texture节点到Texture节点。

【问题讨论】:

  • 你是否使用图像 -> FBO/纹理 -> FBO/纹理 -> 渲染缓冲区,使用 GL 原语(或 glDrawTexiOES,因为 iPhone 实现了 OES_draw_texture)来执行渲染?这肯定会跳过任何直接的 CPU 参与,尽管这意味着额外的帧缓冲区上下文切换。
  • 伙计,我已经很久没有发布这个问题了,我真的很抱歉耽搁了。我现在在一个不同的项目上,但要回答你......不,我没有尝试过。感谢您的建议。

标签: iphone opengl-es


【解决方案1】:

glCopyTexImage*DglGetTexImage*D 众所周知,无论您使用什么平台,都非常慢。

要替换glCopyTexSubImage2D,您只需添加另一个FBO/纹理并渲染您要复制到其中的另一个纹理,然后您可以从FBO 获取纹理。我不确定它会更快,但应该会。

                           Render to FBO
                       .--------------------\
 glTexSubImage2D       V     glDrawArray    |

图像 --------------> FBO/纹理 --------------> FBO /Texture -------> 渲染缓冲区

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多