mirror of
https://github.com/mauiaaron/apple2.git
synced 2024-06-08 16:29:27 +00:00
78 lines
2.2 KiB
Objective-C
78 lines
2.2 KiB
Objective-C
/*
|
|
* Apple // emulator for *ix
|
|
*
|
|
* This software package is subject to the GNU General Public License
|
|
* version 3 or later (your choice) as published by the Free Software
|
|
* Foundation.
|
|
*
|
|
* Copyright 2013-2015 Aaron Culliney
|
|
*
|
|
*/
|
|
|
|
// Modified sample code from https://developer.apple.com/library/mac/samplecode/GLEssentials/Introduction/Intro.html
|
|
|
|
#include "imageUtil.h"
|
|
#include "common.h"
|
|
|
|
#if TARGET_OS_IPHONE
|
|
#import <UIKit/UIKit.h>
|
|
#else
|
|
#import <Cocoa/Cocoa.h>
|
|
#endif
|
|
|
|
demoImage *imgLoadImage(const char *filepathname, int flipVertical) {
|
|
NSString *filepathString = [[NSString alloc] initWithUTF8String:filepathname];
|
|
|
|
#if TARGET_OS_IPHONE
|
|
UIImage* imageClass = [[UIImage alloc] initWithContentsOfFile:filepathString];
|
|
#else
|
|
NSImage *nsimage = [[NSImage alloc] initWithContentsOfFile: filepathString];
|
|
NSBitmapImageRep *imageClass = [[NSBitmapImageRep alloc] initWithData:[nsimage TIFFRepresentation]];
|
|
[nsimage release];
|
|
#endif
|
|
|
|
CGImageRef cgImage = imageClass.CGImage;
|
|
if (!cgImage)
|
|
{
|
|
[filepathString release];
|
|
[imageClass release];
|
|
return NULL;
|
|
}
|
|
|
|
demoImage *image = MALLOC(sizeof(demoImage));
|
|
image->width = (GLuint)CGImageGetWidth(cgImage);
|
|
image->height = (GLuint)CGImageGetHeight(cgImage);
|
|
image->rowByteSize = image->width * 4;
|
|
image->data = MALLOC(image->height * image->rowByteSize);
|
|
image->format = GL_RGBA;
|
|
image->type = GL_UNSIGNED_BYTE;
|
|
|
|
CGContextRef context = CGBitmapContextCreate(image->data, image->width, image->height, 8, image->rowByteSize, CGImageGetColorSpace(cgImage), 0x0);
|
|
CGContextSetBlendMode(context, kCGBlendModeCopy);
|
|
if (flipVertical) {
|
|
CGContextTranslateCTM(context, 0.0, image->height);
|
|
CGContextScaleCTM(context, 1.0, -1.0);
|
|
}
|
|
CGContextDrawImage(context, CGRectMake(0.0, 0.0, image->width, image->height), cgImage);
|
|
CGContextRelease(context);
|
|
|
|
if (!image->data) {
|
|
[filepathString release];
|
|
[imageClass release];
|
|
|
|
imgDestroyImage(image);
|
|
return NULL;
|
|
}
|
|
|
|
[filepathString release];
|
|
[imageClass release];
|
|
|
|
return image;
|
|
}
|
|
|
|
void imgDestroyImage(demoImage* image) {
|
|
FREE(image->data);
|
|
FREE(image);
|
|
}
|
|
|