Производительность в реальном времени с основными режимами смешивания изображений
Я пытаюсь создать действительно простое демонстрационное приложение, которое позволяет пользователю выбирать изображение и режим наложения, а затем перетаскивать и манипулировать смешанным изображением поверх фонового изображения. Когда пользователь перетаскивает изображение поверх фона, мне нужна производительность в реальном времени (20+ кадров в секунду на iPhone 4). Изображения имеют то же разрешение, что и экран.
Можно ли это сделать с базовым образом? Я пробовал пару разных подходов, но я не могу добиться желаемой производительности.
Прямо сейчас я делаю что-то вроде этого:
CIFilter * overlayBlendMode = [CIFilter filterWithName:@"CIOverlayBlendMode"];
[overlayBlendMode setValue:self.foregroundImage forKey:@"inputImage"];
[overlayBlendMode setValue:self.backgroundImage forKey:@"inputBackgroundImage"];
CIImage * test = [overlayBlendMode outputImage];
// render background image
[self.ciContext drawImage:test inRect:test.extent fromRect:test.extent];
Этот код выполняется каждый раз, когда вызывается отображение из моего GLKViewController.
И мой установочный код:
self.glContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
self.ciContext = [CIContext contextWithEAGLContext:self.glContext];
...
UIImage * foregroundImage = [ViewController imageScaledFromImage:[UIImage imageNamed:@"Smiley"] inRect:CGRectMake(0, 0, 100, 100)];
GLKTextureInfo * foregroundTexture = [GLKTextureLoader textureWithCGImage:foregroundImage.CGImage options:@{GLKTextureLoaderOriginBottomLeft: @(YES)} error:nil];
self.foregroundImage = [CIImage imageWithTexture:foregroundTexture.name size:foregroundImage.size flipped:NO colorSpace:nil];
UIImage *backgroundImage = [ViewController imageCenterScaledFromImage:[UIImage imageNamed:@"Kate.jpg"] inRect:(CGRect){0,0,self.renderBufferSize}];
GLKTextureInfo * backgroundTexture = [GLKTextureLoader textureWithCGImage:backgroundImage.CGImage options:@{GLKTextureLoaderOriginBottomLeft: @(YES)} error:nil];
self.backgroundImage = [CIImage imageWithTexture:backgroundTexture.name size:backgroundImage.size flipped:NO colorSpace:nil];
Производительность, которую я получаю, не та, которую я ожидал, я ожидал 60 кадров в секунду, поскольку это такая простая сцена, но на моем iPad 4 я получаю ~35 или около того, и я уверен, что это будет хуже на iPhone 4, который мой самый низкий общий знаменатель.
1 ответ
Вы установили GLKViewController -> предпочитаемое значение FramesPerSecond в значение, отличное от значения по умолчанию 30?