CoreImage, iOS5 и скорость, почему CoreImage такой медленный? - PullRequest
3 голосов
/ 11 декабря 2011

Наконец-то я сижу, чтобы преобразовать некоторые из наших графических библиотек в 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 ().Есть ли способ проверить, не выполняется ли эта работа на графическом процессоре, есть ли причина, по которой его не будет?

Спасибо,

1 Ответ

1 голос
/ 17 декабря 2011

Вещи, которые вам нужно перерисовать, лучше всего подходят для ci, или вещи, которые должны выполнять несколько фильтров.

В настоящее время это медленнее, потому что элементы должны быть скопированы из памяти процессора в память GPU (нет поддержки объединенной памяти openglна ios).

Это означает, что, поскольку вы делаете только один эффект, это займет больше времени из-за двойной копии.

...