Я создаю игру для 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++? Какие файлы я должен включить?
Заранее спасибо.
Или щелкните правой кнопкой мыши на группе «Каркасы» и выберите «Добавить существующую структуру», а затем выберите Core Graphics из списка. –