2011-03-08 151 views
0

问候。快速复制两个FBO之间或从FBO到OpenGL-ES中的纹理1.1

我的目标是实现一个流水线,用于处理具有“当前”和“前一个”帧的视频帧。它需要在某些场合将“先前”帧中的一个子区域复制到“当前”帧中。这是一种解码器,它是更大应用程序的一部分。

这是我使用OpenGL-ES 1.1

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

形象至今运行在iPhone上------------------- ------->纹理--------------> FBO /纹理------->渲染缓冲区

纹理获取每个新帧或部分框架照常更新。 纹理被绘制到帧缓冲区对象中并最终呈现。

这些零件表现非常好。

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

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

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

感谢您的任何指导。

Cheers,Chris

P.S.让图看起来不错,我遇到了一些麻烦。回流线应从FBO/Texture节点到Texture节点。

+0

你是否用图像 - > FBO /纹理 - > FBO /纹理 - >渲染缓冲区使用GL原语(或glDrawTexiOES,因为iPhone实现了OES_draw_texture)来执行渲染回来?这肯定会跳过任何直接的CPU参与,但它意味着一个额外的帧缓冲区上下文切换。 – Tommy 2011-03-08 01:57:33

+0

男人,自从我发布这个问题已经很长时间了,我真的为延迟道歉。我现在在一个不同的项目上,但要回答你......不,我没有尝试过。感谢您的建议。 – Buddhisthead 2014-02-19 19:10:57

回答

1

glCopyTexImage*DglGetTexImage*D知道地狱速度很慢,不管你在哪个平台上。

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

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

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

相关问题