From 1fa79f1f99e4122a49567f458336dbcd03fdd371 Mon Sep 17 00:00:00 2001 From: Soren Jorvang Date: Fri, 4 Jun 2010 05:00:37 +0000 Subject: [PATCH] Revert parts of r5576 and r5598 for Sonicadvance1's sake. This reenables the option for building without wx on OS X, but still leaves wxgl as the default. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5600 8ced0084-cf51-0410-be5f-012b33b47a6e --- .../Plugin_VideoSoftware/Src/cocoaGL.h | 29 ++++ .../Plugin_VideoSoftware/Src/cocoaGL.m | 149 ++++++++++++++++++ 2 files changed, 178 insertions(+) create mode 100644 Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.h create mode 100755 Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.m diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.h b/Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.h new file mode 100644 index 0000000000..cdd2a70650 --- /dev/null +++ b/Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.h @@ -0,0 +1,29 @@ +#import +#import + +#ifdef __cplusplus +extern "C" +{ +#endif + + +void cocoaGLCreateApp(); + +NSWindow *cocoaGLCreateWindow(int w,int h); + +void cocoaGLSetTitle(NSWindow *win, const char *title); + +void cocoaGLMakeCurrent(NSOpenGLContext *ctx, NSWindow *win); + +NSOpenGLContext* cocoaGLInit(int mode); + +void cocoaGLDelete(NSOpenGLContext *ctx); + +void cocoaGLDeleteWindow(NSWindow *window); + +void cocoaGLSwap(NSOpenGLContext *ctx,NSWindow *window); + +#ifdef __cplusplus +} +#endif + diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.m b/Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.m new file mode 100755 index 0000000000..6a821635e2 --- /dev/null +++ b/Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.m @@ -0,0 +1,149 @@ +#import "cocoaGL.h" + +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 setReleasedWhenClosed: YES]; + + [window setTitle:@"Dolphin on OSX"]; + //[window makeKeyAndOrderFront: nil]; + + [pool release]; + + return window; +} + +void cocoaGLSetTitle(NSWindow *win, const char *title) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + [win setTitle: [[[NSString alloc] initWithCString: title encoding: NSASCIIStringEncoding] autorelease]]; + + [pool release]; +} + +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; + + attr[i++] = NSOpenGLPFANoRecovery; +#ifdef GL_VERSION_1_3 + +#else +#ifdef GL_VERSION_1_2 +#warning "your card only supports ogl 1.2, dolphin will use software renderer" + //if opengl < 1.3 uncomment this twoo lines to use software renderer + attr[i++] = NSOpenGLPFARendererID; + attr[i++] = kCGLRendererGenericFloatID; +#endif +#endif + 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 cocoaGLDeleteWindow(NSWindow *window) +{ + + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + [window close]; + [pool release]; + + return; +} + +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]; +}