2012-07-05 4 views
2

현재 Image I/O를 사용하여 iOS에서 텍스처를로드하고 Core Graphics로 이미지 데이터를 추출합니다. 그럼 난 이렇게는 OpenGL에 이미지 데이터를 보낼 수 있습니다Objective-c : OpenGL에 텍스처를로드하는 가장 효율적인 방법

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture->width, texture->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture->imageData); 

문제는 코어 그래픽 부분은 난 그냥 이미지 데이터를 추출하는 설정에 필요 코어 그래픽으로 그리는, 정말 느린 것입니다 ... 난 그것을 화면에 표시하고 싶지 않습니다. 아이폰 OS 이미지 데이터를 추출하는보다 효율적인 방법이 있어야합니다 ... 여기

내 코드입니다 :

... 
myTexRef = CGImageSourceCreateWithURL((__bridge CFURLRef)url, myOptions); 
... 
MyTexture2D* texture; 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

void *imageData = malloc(tileSize.width * tileSize.height * 4); 

CGContextRef imgContext = CGBitmapContextCreate(imageData, tileSize.width, tileSize.height, 8, 4 * tileSize.width, colorSpace, kCGImageAlphaNoneSkipLast | kCGBitmapByteOrder32Big); 
CGColorSpaceRelease(colorSpace); 
CGContextClearRect(imgContext, CGRectMake(0, 0, tileSize.width, tileSize.height)); 
CGContextTranslateCTM(imgContext, 0, 0); 
... 
CGImageRef tiledImage = CGImageCreateWithImageInRect (imageRef, tileArea); 
CGRect drawRect = CGRectMake(0, 0, tileSize.width, tileSize.height); 

// *** THIS CALL IS REALLY EXPENSIVE! 
CGContextDrawImage(imgContext, drawRect, tiledImage); 

CGImageRelease(tiledImage); 

// TamTexture2D takes the ownership of imageData and will be responsible to free it 
texture = new MyTexture2D(tileSize.width, tileSize.height, imageData); 

CGContextRelease(imgContext); 
+0

코드가 이미지 데이터 (타일링)를로드하는 것 이상을 수행하는 것 같습니다. 최적화에 대한 도움이 필요하면 전체 코드를 게시해야합니다. –

답변

1

위에서 iOS 5 및 위해 개발하는 경우, GLKTextureLoader 당신이 찾고있는 무엇인가 for :

+0

Thx 팁, 나는 그것을 시도했지만 질감을로드 할 때이 오류 메시지가 계속 정적으로 호출하고 인스턴스 메서드를 사용하여 initWithSharegroup ... (메신저 사용하여 1.1 OpenGL) : 질감 오류 : 오류 도메인 = GLKTextureLoaderErrorDomain Code = 8 "작업을 완료 할 수 없습니다 (GLKTextureLoaderErrorDomain 오류 8)."UserInfo = 0x10bef750 {GLKTextureLoaderGLErrorKey = 1280, GLKTextureLoaderErrorKey = OpenGL 오류} ... – AkademiksQc

+0

GLKit은 OpenGLES 2.0 전용입니다. – MrMage

+0

아! 그것은 그것을 설명 할 수도 있습니다 ... 그래서 리처드 대답은 유용하지만 OpenGL 1.1을 사용하고 있습니다 ... 아마도 코어 이미지 프레임 워크를 살펴볼 것입니다. – AkademiksQc

1

GLKTextureLoader는 CG를 사용하는 것보다 훨씬 느립니다.

나는 이것을 Apple DTS의 버그로 기록하고 "예, 우리는 신경 쓰지 않고 고치지 않을 것입니다."라고 말합니다. 텍스처를 원하면 CoreGraphics를 사용해야합니다. (거의 그 말씨)

CGContext * 메서드가 생성하는 원시 버퍼를 넘겨 줄 수 있으면 glTexImage2D가 매우 빠릅니다. RGBA/ARGB/등 색상 공간을 얻는다고 가정하십시오. 맞습니다.

cgcontextDrawImage도 매우 빠릅니다. 내 생각 엔 웹을 통해 데이터를로드하는 데 시간이 걸리는 것 같습니다 ...

관련 문제