#import "cocoaGL.h" @implementation NSApplication(i) - (void)appRunning { _running = 1; } @end @interface cocoaAppDelegate : NSObject - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender; @end @implementation cocoaAppDelegate : NSObject - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { return NSTerminateCancel; } @end void cocoaGLCreateApp() { ProcessSerialNumber psn; NSAutoreleasePool *pool; if (!GetCurrentProcess(&psn)) { TransformProcessType(&psn, kProcessTransformToForegroundApplication); SetFrontProcess(&psn); } pool = [[NSAutoreleasePool alloc] init]; if (NSApp == nil) { [NSApplication sharedApplication]; //TODO : Create menu [NSApp finishLaunching]; } if ([NSApp delegate] == nil) { [NSApp setDelegate:[[cocoaAppDelegate alloc] init]]; } [NSApp appRunning]; [pool release]; } NSWindow *cocoaGLCreateWindow(int w,int h) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSWindow *window; window = [[NSWindow alloc] initWithContentRect:NSMakeRect(50,50,w,h) styleMask:NSTitledWindowMask | NSResizableWindowMask backing:NSBackingStoreBuffered defer:FALSE]; [window setTitle:@"Dolphin on OSX"]; [window makeKeyAndOrderFront: nil]; [pool release]; return window; } void cocoaGLSetTitle() { //todo } void cocoaGLMakeCurrent(NSOpenGLContext *ctx, NSWindow *win) { NSAutoreleasePool *pool; pool = [[NSAutoreleasePool alloc] init]; int value = 0; [ctx setValues:&value forParameter:NSOpenGLCPSwapInterval]; if (ctx) { [ctx setView:[win contentView]]; [ctx update]; [ctx makeCurrentContext]; } else { [NSOpenGLContext clearCurrentContext]; } [pool release]; } NSOpenGLContext* cocoaGLInit(int mode) { NSAutoreleasePool *pool; NSOpenGLPixelFormatAttribute attr[32]; NSOpenGLPixelFormat *fmt; NSOpenGLContext *context; int i = 0; pool = [[NSAutoreleasePool alloc] init]; attr[i++] = NSOpenGLPFADepthSize; attr[i++] = 24; attr[i++] = NSOpenGLPFADoubleBuffer; attr[i++] = NSOpenGLPFASampleBuffers; attr[i++] = mode; attr[i++] = NSOpenGLPFASamples; attr[i++] = 1; //if opengl < 1.3 uncomment this twoo lines to use software renderer //attr[i++] = NSOpenGLPFARendererID; //attr[i++] = kCGLRendererGenericFloatID; attr[i++] = NSOpenGLPFAScreenMask; attr[i++] = CGDisplayIDToOpenGLDisplayMask(CGMainDisplayID()); attr[i] = 0; fmt = [[NSOpenGLPixelFormat alloc] initWithAttributes:attr]; if (fmt == nil) { printf("failed to create pixel format\n"); [pool release]; return NULL; } context = [[NSOpenGLContext alloc] initWithFormat:fmt shareContext:nil]; [fmt release]; if (context == nil) { printf("failed to create context\n"); [pool release]; return NULL; } [pool release]; return context; } void cocoaGLDelete(NSOpenGLContext *ctx) { NSAutoreleasePool *pool; pool = [[NSAutoreleasePool alloc] init]; [ctx clearDrawable]; [ctx release]; [pool release]; } void cocoaGLSwap(NSOpenGLContext *ctx,NSWindow *window) { NSAutoreleasePool *pool; pool = [[NSAutoreleasePool alloc] init]; [window makeKeyAndOrderFront: nil]; ctx = [NSOpenGLContext currentContext]; if (ctx != nil) { [ctx flushBuffer]; } else { printf("bad cocoa gl ctx\n"); } [pool release]; }