forked from dolphin-emu/dolphin
		
	git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5076 8ced0084-cf51-0410-be5f-012b33b47a6e
		
			
				
	
	
		
			150 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Objective-C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Objective-C
		
	
	
		
			Executable File
		
	
	
	
	
| #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 window;
 | |
| }
 | |
| 
 | |
| 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];
 | |
| }
 |