【问题标题】:CoreImage, iOS5 and speed, why is CoreImage so slow?CoreImage、iOS5和速度,CoreImage为什么这么慢?
【发布时间】:2012-01-17 14:39:23
【问题描述】:

我终于坐下来将我们的一些图形库转换为使用 CoreImage 来渲染图像(用于混合两个图像之类的事情),我已经让它工作了,但速度很慢(iOS5.01 iPhone 4S)。我认为 CoreImage 的承诺是硬件加速,这就是我正在做的事情:

        CIImage *intputBackgroundImage = [[CIImage alloc] initWithCGImage:backgroundImageRef];
    CIImage *inputImage = [[CIImage alloc] initWithCGImage:inputImageRef];

    CIFilter *multiply = [CIFilter filterWithName:@"CIMultiplyBlendMode"];
    [multiply setDefaults];

    [multiply setValue:intputBackgroundImage forKey:@"inputBackgroundImage"];
    [multiply setValue:inputImage forKey:@"inputImage"];

    CIImage *result = multiply.outputImage;
    CIContext *ctx = [CIContext contextWithOptions:nil];

    CGImageRef resultRef = [ctx createCGImage:result fromRect:CGRectMake(0, 0, imgFrame.size.width, imgFrame.size.height)];
    UIImage *resultImage = [UIImage imageWithCGImage:resultRef];
    CGImageRelease(resultRef);

它有效,我得到了一个将 inputImage 混合到 backgroundImage 中的图像,但它实际上比我刚刚使用 CoreGraphics 和 CGContext() 完成它需要更长的时间。有没有办法检查这项工作是否没有在 GPU 上完成,是否有原因?

谢谢,

【问题讨论】:

  • 您在 Instruments 中分析此代码时发现了什么?
  • 我会试试@PeterHosey。在阅读了更多内容之后,我开始怀疑它是因为我要进出 GPU/VRAM。即,数据被复制到 GPU/VRAM,工作完成,将其复制回 RAM(UIImage),然后复制回 VRAM(显示 UIImage)。
  • @Shizam - 上传到 GPU 非常快,甚至可以在 10 毫秒左右的时间内完成从 GPU 中提取信息的 glReadPixels() 调用,以便在 iPhone 4 上获得合适大小的图像. 这当然可以在 GPU 上比 CPU 快得多,所以那里一定有一些隐藏的开销。也许在 Core Image 的某个地方(可能往返于 CGImageRef)的 CPU 上进行了格式转换。正如 Peter 建议的那样,Time Profiler 可能会找出瓶颈所在。

标签: iphone ios ios5 core-graphics core-image


【解决方案1】:

需要重新渲染的东西最适合 ci,或者需要做多个过滤器的东西。

目前速度较慢,因为项目必须从 cpu 内存复制到 gpu 内存(ios 上不支持 opengl 统一内存)。

这意味着由于你只做一个效果,由于双重复制,它会花费更多时间。

【讨论】:

  • 我认为这是我的问题的要点,我需要弄清楚如何使用“CAEAGLLayers”。
猜你喜欢
  • 1970-01-01
  • 2021-04-21
  • 2013-02-15
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
相关资源
最近更新 更多