【发布时间】: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 参与,尽管这意味着额外的帧缓冲区上下文切换。
-
伙计,我已经很久没有发布这个问题了,我真的很抱歉耽搁了。我现在在一个不同的项目上,但要回答你......不,我没有尝试过。感谢您的建议。