2012-01-14 19 views
1

我需要使用运行时作为纹理期间编程制作的图像,但我不知道该如何从一个点到另一个。制成的图像是UIGraphicsBeginImageContextwithOptions(),以下是我当前的代码在我的项目加载从图像的纹理:如何使用与UIGraphicsBeginImageContextWithOptions()制作的图像中的OpenGL ES

-(void)loadTextures:(NSString*) filename textureIdentifier:(int) textureNumber { 

    //enable textures. 
    glEnable(GL_TEXTURE_2D); 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_FASTEST); 
    glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

    // Bind the number of textures we need. 
    glGenTextures(1, &texture[textureNumber]); 
    glBindTexture(GL_TEXTURE_2D, texture[textureNumber]); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
    glTexParameterf(GL_TEXTURE_2D,GL_GENERATE_MIPMAP,GL_TRUE);  
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE); 


    NSString *path = [[NSBundle mainBundle] pathForResource:filename ofType:@"png"]; 
    NSData *texData = [[NSData alloc] initWithContentsOfFile:path]; 
    UIImage *image = [[UIImage alloc] initWithData:texData]; 

    if (image == nil) 
     NSLog(@"Do real error checking here"); 

    GLuint width = CGImageGetWidth(image.CGImage); 
    GLuint height = CGImageGetHeight(image.CGImage); 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    void *imageData = malloc(height * width * 4); 
    CGContextRef context = CGBitmapContextCreate(imageData, width, height, 8, 4 * width, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 

    // Flip the Y-axis 
    CGContextTranslateCTM (context, 0, height); 
    CGContextScaleCTM (context, 1.0, -1.0); 

    CGColorSpaceRelease(colorSpace); 
    CGContextClearRect(context, CGRectMake(0, 0, width, height)); 
    CGContextDrawImage(context, CGRectMake(0, 0, width, height), image.CGImage); 

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

    CGContextRelease(context); 

    free(imageData); 
} 

回答

1

容易。从质感装载代码删除这些行,并与核芯显卡的绘图代码替换它们:

NSString *path = [[NSBundle mainBundle] pathForResource:filename ofType:@"png"]; 
NSData *texData = [[NSData alloc] initWithContentsOfFile:path]; 

现在替换此行:

UIImage *image = [[UIImage alloc] initWithData:texData]; 

有:

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();