nkeynes@964: /** nkeynes@964: * $Id$ nkeynes@964: * nkeynes@964: * Cocoa (NSOpenGL) video driver nkeynes@964: * nkeynes@964: * Copyright (c) 2005 Nathan Keynes. nkeynes@964: * nkeynes@964: * This program is free software; you can redistribute it and/or modify nkeynes@964: * it under the terms of the GNU General Public License as published by nkeynes@964: * the Free Software Foundation; either version 2 of the License, or nkeynes@964: * (at your option) any later version. nkeynes@964: * nkeynes@964: * This program is distributed in the hope that it will be useful, nkeynes@964: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@964: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@964: * GNU General Public License for more details. nkeynes@964: */ nkeynes@964: nkeynes@964: #include nkeynes@964: #include nkeynes@964: #include "drivers/video_nsgl.h" nkeynes@964: #include "drivers/video_gl.h" nkeynes@964: #include "pvr2/glutil.h" nkeynes@964: nkeynes@964: static NSOpenGLContext *nsgl_context = nil; nkeynes@964: nkeynes@964: gboolean video_nsgl_init_driver( NSView *view, display_driver_t driver ) nkeynes@964: { nkeynes@964: NSAutoreleasePool *pool = [NSAutoreleasePool new]; nkeynes@964: NSOpenGLPixelFormatAttribute attributes[] = { nkeynes@964: NSOpenGLPFAWindow, nkeynes@964: // NSOpenGLPFADoubleBuffer, nkeynes@964: NSOpenGLPFADepthSize, (NSOpenGLPixelFormatAttribute)24, nkeynes@964: (NSOpenGLPixelFormatAttribute)nil }; nkeynes@964: nkeynes@964: NSOpenGLPixelFormat *pixelFormat = nkeynes@964: [[[NSOpenGLPixelFormat alloc] initWithAttributes: attributes] autorelease]; nkeynes@964: nsgl_context = nkeynes@964: [[NSOpenGLContext alloc] initWithFormat: pixelFormat shareContext: nil]; nkeynes@964: [nsgl_context setView: view]; nkeynes@964: [nsgl_context makeCurrentContext]; nkeynes@964: [pool release]; nkeynes@1076: driver->swap_buffers = video_nsgl_swap_buffers; nkeynes@1134: driver->capabilities.has_gl = TRUE; nkeynes@964: if( gl_fbo_is_supported() ) { nkeynes@964: gl_fbo_init(driver); nkeynes@964: } else { nkeynes@1076: /* Note there is a 'native' buffer framework, but since all current nkeynes@1076: * Apple drivers appear to support FBO, there's not much point in nkeynes@1076: * doing the work to support them. nkeynes@1076: */ nkeynes@964: ERROR( "FBO not supported" ); nkeynes@964: return FALSE; nkeynes@964: } nkeynes@1159: gl_vbo_init(driver); nkeynes@964: nkeynes@964: return TRUE; nkeynes@964: } nkeynes@964: nkeynes@964: void video_nsgl_update() nkeynes@964: { nkeynes@964: if( nsgl_context != nil ) { nkeynes@964: [nsgl_context update]; nkeynes@964: } nkeynes@964: } nkeynes@964: nkeynes@964: void video_nsgl_make_current() nkeynes@964: { nkeynes@964: if( nsgl_context != nil ) { nkeynes@964: [nsgl_context makeCurrentContext]; nkeynes@964: } nkeynes@964: } nkeynes@964: nkeynes@964: void video_nsgl_swap_buffers() nkeynes@964: { nkeynes@964: if( nsgl_context != nil ) { nkeynes@964: [nsgl_context flushBuffer]; nkeynes@964: } nkeynes@964: } nkeynes@964: nkeynes@964: void video_nsgl_shutdown() nkeynes@964: { nkeynes@964: if( nsgl_context != nil ) { nkeynes@964: [NSOpenGLContext clearCurrentContext]; nkeynes@964: [nsgl_context release]; nkeynes@964: nsgl_context = nil; nkeynes@964: } nkeynes@964: }