From 0a6e191eaebcc8edc2611dbedab6fd04a615fc2f Mon Sep 17 00:00:00 2001 From: Kenneth Russel Date: Thu, 26 Jun 2003 13:21:12 +0000 Subject: Initial Mac OS X port of Jogl by Gerard Ziemski and Kenneth Russell, subsuming the previous prototype implementation (no GLCanvas support) done by Marc Downie. Added user's guide (HTML format) under doc/userguide/index.html. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/trunk@13 232f8b59-042b-4e1e-8c03-345bb8c30851 --- src/native/jogl/MacOSXWindowSystemInterface.m | 94 +++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 src/native/jogl/MacOSXWindowSystemInterface.m (limited to 'src/native') diff --git a/src/native/jogl/MacOSXWindowSystemInterface.m b/src/native/jogl/MacOSXWindowSystemInterface.m new file mode 100644 index 000000000..074b98b2a --- /dev/null +++ b/src/native/jogl/MacOSXWindowSystemInterface.m @@ -0,0 +1,94 @@ +#import +#import + +typedef int Bool; + +void* createContext(void* nsView) { + NSView *view = nsView; + + // FIXME: hardcoded pixel format. Instead pass these attributes down + // as arguments. There is really no way to enumerate the possible + // pixel formats for a given window on Mac OS X, so we will assume + // that we can match the requested capabilities and leave the + // selection up to the built-in pixel format selection algorithm. + GLuint attribs[] = { + NSOpenGLPFANoRecovery, + NSOpenGLPFAWindow, + NSOpenGLPFAAccelerated, + NSOpenGLPFADoubleBuffer, + NSOpenGLPFAColorSize, 32, + NSOpenGLPFAAlphaSize, 8, + NSOpenGLPFADepthSize, 24, + NSOpenGLPFAStencilSize, 8, + NSOpenGLPFAAccumSize, 0, + 0 + }; + + NSRect rect = [view frame]; + + NSOpenGLPixelFormat* fmt = [[NSOpenGLPixelFormat alloc] initWithAttributes: (NSOpenGLPixelFormatAttribute*) attribs]; + + NSOpenGLContext* context = [[NSOpenGLContext alloc] initWithFormat: [fmt autorelease] shareContext: nil]; + + if (view != nil) { + [context setView: view]; + + [context makeCurrentContext]; + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + [context update]; + [context flushBuffer]; + } + + return context; +} + +Bool makeCurrentContext(void* nsView, void* nsContext) { + NSOpenGLContext *context = nsContext; + + [context makeCurrentContext]; + return true; +} + +Bool clearCurrentContext(void* nsView, void* nsContext) { + NSView *view = nsView; + NSOpenGLContext *context = nsContext; + + [NSOpenGLContext clearCurrentContext]; + return true; +} + +void updateContext(void* nsView, void* nsContext) { + NSView *view = nsView; + NSOpenGLContext *context = nsContext; + + [context update]; +} + +Bool deleteContext(void* nsView, void* nsContext) { + NSOpenGLContext *context = nsContext; + + [context setView: nil]; + [context release]; + return true; +} + +Bool flushBuffer(void* nsView, void* nsContext) { + NSOpenGLContext *context = nsContext; + + [context flushBuffer]; + return true; +} + + +#include +void* getProcAddress(const char *procname) { + void *funcPtr = NULL; + static char underscoreName[256]; + strcpy(underscoreName, "_"); + strcat(underscoreName, procname); + if (NSIsSymbolNameDefined(underscoreName)) { + NSSymbol sym = NSLookupAndBindSymbol(underscoreName); + funcPtr = (void *)NSAddressOfSymbol(sym); + } + return funcPtr; +} -- cgit v1.2.3