2014-09-16 2 views
1

사용자가 이미지와 블렌드 모드를 선택하고 배경 이미지의 혼합 이미지 겹치기를 끌어서 조작 할 수있게 해주는 정말 기본적인 데모 응용 프로그램을 만들려고합니다. 사용자가 배경 이미지 덩어리를 드래그하면 실시간 성능 (iPhone 4에서 20+ fps)을 원합니다. 이미지는 화면과 동일한 해상도입니다.코어 이미지 블렌드 모드를 사용한 실시간 성능

코어 이미지와 관련이 있습니까? 몇 가지 접근법을 시도했지만 원하는 성능을 얻을 수없는 것 같습니다.

는 지금은 이런 식으로 뭔가를하고 있어요 :

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의하지만 난 ~ 35 받고 있어요 4 내 아이 패드에 그래서 나는 그것이 가장 낮은 공통 분모 인 아이폰 4에서 더 나쁠 것이라고 확신한다.

답변

0

GLKViewController -> preferredFramesPerSecond를 기본 30 이외의 값으로 설정 했습니까?

+0

예 60으로 설정합니다. – FreaknBigPanda

+0

GLKViewController와 관련된 GLKView도 설치 코드에서 초기화하는 EAGLContext로 설정되어 있습니까? (일반적으로 GLKView -> 컨텍스트 매개 변수에서 CIContext를 만들 수 있습니다.) – 32Beat

+0

그래, 이제 테스트가 더 진행되었고 iPhone 4에서 <5 fps가되었습니다. 내 추측은 핵심 이미지가 어떻게 든 오버 헤드를 추가한다는 것입니다. 나는 내가 OpenGL을 사용하여 직접적으로 실시간 성능을 쉽게 얻을 수 있다고 생각했다. – FreaknBigPanda

관련 문제