TextureWithCGImage вылетает iOS - PullRequest
       16

TextureWithCGImage вылетает iOS

3 голосов
/ 27 февраля 2012

Я пытаюсь текстурировать объект OpenGL с помощью видео. Это почти сделано, но у меня сбой с помощью метода textureWithCGImage, и я не знаю почему.

        CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 

        // Lock the image buffer
        CVPixelBufferLockBaseAddress(imageBuffer,0); 

        // Get information of the image
        uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer);
        size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
        size_t width = CVPixelBufferGetWidth(imageBuffer);
        size_t height = CVPixelBufferGetHeight(imageBuffer); 
        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
        CGContextRef newContext = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
        CGImageRef newImage = CGBitmapContextCreateImage(newContext); 


        NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:GLKTextureLoaderOriginBottomLeft];

        self.texture = [GLKTextureLoader textureWithCGImage:newImage options:options error:nil];
         if (self.texture == nil) NSLog(@"Error loading texture: %@", [error localizedDescription]);
         else
         {
             GLKEffectPropertyTexture *tex = [[[GLKEffectPropertyTexture alloc] init] autorelease];
             tex.enabled = GL_TRUE;
             tex.envMode = GLKTextureEnvModeDecal;
             tex.name = self.texture.name;
             self.effect.texture2d0.name = tex.name;
         }

        CVPixelBufferUnlockBaseAddress(imageBuffer,0);

        CGImageRelease(newImage);
        CGContextRelease(newContext);
        CGColorSpaceRelease(colorSpace);
        CFRelease(sampleBuffer);

этот код вызывается при каждом обновлении. У вас есть представление о том, что вызвало мой сбой?

...