2009-12-31 3 views
2

Je crée un jeu iPhone et j'ai besoin de charger une image à partir d'un fichier PNG dans OpenGL (et la lier comme une texture). J'utilise la fonction glTexImage2D pour atteindre cet objectif.Chargement de l'image dans OpenGL ES à partir du code C++ dans l'iPhone

Je sais comment charger une image dans OpenGL en utilisant UIImage (en le convertissant en CGImage et en dessinant ensuite dans un contexte). Comment puis-je appeler mon code Objective-C à partir du code C++ (je code dans le fichier .mm)?

Voici le code que je utilise et qui travaillerait en Objective-C:

NSString *path = [[NSBundle mainBundle] pathForResource:@"texture" 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); 
    CGColorSpaceRelease(colorSpace); 
    CGContextClearRect(context, CGRectMake(0, 0, width, height)); 
    CGContextTranslateCTM(context, 0, 0); 
    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); 
    [image release]; 
    [texData release]; 

Est-il possible d'appeler les fonctions de base et l'interface utilisateur graphique à partir du code C++? Quels fichiers dois-je inclure?

Merci d'avance.

Répondre

1

Résolu le problème. J'ai dû trouver manuellement et ajouter le framework Core Graphics.

+0

Ou, faites un clic droit sur le groupe de cadres et choisissez « Ajouter cadre existant », puis choisissez Cœur graphique de la liste. –