我终于坐下来转换我们的一些图形库来使用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上完成,是否有理由不存在?
谢谢,
答案 0 :(得分:1)
您需要重新呈现的内容最适合ci或需要执行多个过滤器的内容。
它目前较慢,因为必须将项目从cpu内存复制到gpu内存(在ios上没有opengl统一内存支持)。
这意味着由于您只做一种效果,因此双重复制需要更多时间。