2009-12-31 4 views
2

Я создаю игру для iPhone, и мне нужно загрузить изображение из PNG-файла в OpenGL (и связать его как текстуру). Я использую функцию glTexImage2D для достижения этой цели.Загрузка изображения в OpenGL ES из кода C++ в iPhone

Я знаю, как загрузить изображение в OpenGL с помощью UIImage (путем преобразования его в CGImage и последующего рисования в контекст).

Как я могу вызвать свой код Objective-C из кода C++ (я кодирую файл .mm)?

Вот код, я использую, и что будет работать в 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]; 

Есть ли способ вызвать эти UI и Core Graphics функции из кода C++? Какие файлы я должен включить?

Заранее спасибо.

ответ

1

Решил проблему. Пришлось найти вручную и добавить основу Core Graphics.

+0

Или щелкните правой кнопкой мыши на группе «Каркасы» и выберите «Добавить существующую структуру», а затем выберите Core Graphics из списка. –

Смежные вопросы