forked from dolphin-emu/dolphin
		
	
		
			
	
	
		
			150 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Mathematica
		
	
	
	
	
	
		
		
			
		
	
	
			150 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Mathematica
		
	
	
	
	
	
|   | #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];
 | ||
|  | }
 |