2014-09-16 2 views
1

Я пытаюсь сделать действительно базовое демонстрационное приложение, которое позволяет пользователю выбирать изображение и режим наложения, а затем перетаскивать и манипулировать смешанным изображением поверх фонового изображения. Когда пользователь перетаскивает верхнюю часть изображения фона, мне нужна производительность в реальном времени (20 + fps на 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]; 

Спектакль я получаю не то, что я ожидал, я ожидал 60fps, так как это такая простая сцена, но на мой IPad 4 я получаю ~ 35 или так, и я уверен, что это будет хуже на iPhone 4, который является моим самым низким общим знаменателем.

ответ

0

Вы установили GLKViewController -> preferredFramesPerSecond в нечто иное, чем его значение по умолчанию 30?

+0

Да, я установил его на 60 – FreaknBigPanda

+0

Является ли GLKView, связанный с GLKViewController, также настроенным с EAGLContext, который вы инициализируете в своем установочном коде? (Обычно вы можете сделать CIContext из параметра контекста GLKView ->.) – 32Beat

+0

Да, я просто сделал еще несколько тестов и на iPhone 4 я получаю <5 кадров в секунду. Сейчас я думаю, что основной образ каким-то образом добавляет массу накладных расходов. Я знаю, что если бы я отказался от прямого использования OpenGL, я бы быстро стал работать в режиме реального времени. – FreaknBigPanda

Смежные вопросы