From d7b6766fe2f0467594efe79954195ce9b340c41e Mon Sep 17 00:00:00 2001 From: Soren Jorvang Date: Mon, 10 Jan 2011 23:48:59 +0000 Subject: [PATCH] Fix cocoaGL window resizing. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6807 8ced0084-cf51-0410-be5f-012b33b47a6e --- .../Plugin_VideoOGL/Plugin_VideoOGL.vcproj | 4 - Source/Plugins/Plugin_VideoOGL/Src/GLUtil.cpp | 54 ++++-- Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h | 29 +-- Source/Plugins/Plugin_VideoOGL/Src/GLWindow.h | 168 ------------------ Source/Plugins/Plugin_VideoOGL/Src/SConscript | 3 - Source/Plugins/Plugin_VideoOGL/Src/cocoaGL.h | 28 --- Source/Plugins/Plugin_VideoOGL/Src/cocoaGL.m | 109 ------------ .../Plugin_VideoSoftware/Src/GLUtil.cpp | 4 +- .../Plugins/Plugin_VideoSoftware/Src/GLUtil.h | 32 ++-- .../Plugin_VideoSoftware/Src/SConscript | 6 +- .../Plugin_VideoSoftware/Src/cocoaGL.h | 29 --- .../Plugin_VideoSoftware/Src/cocoaGL.m | 109 ------------ 12 files changed, 65 insertions(+), 510 deletions(-) delete mode 100644 Source/Plugins/Plugin_VideoOGL/Src/GLWindow.h delete mode 100644 Source/Plugins/Plugin_VideoOGL/Src/cocoaGL.h delete mode 100755 Source/Plugins/Plugin_VideoOGL/Src/cocoaGL.m delete mode 100644 Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.h delete mode 100755 Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.m diff --git a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcproj b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcproj index dc6d44c717..1f9e4d4a97 100644 --- a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcproj +++ b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcproj @@ -769,10 +769,6 @@ RelativePath=".\Src\GLUtil.h" > - - diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.cpp b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.cpp index a395606d87..ed0748f9d5 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.cpp @@ -45,7 +45,7 @@ void OpenGL_SwapBuffers() #if defined(USE_WX) && USE_WX GLWin.glCanvas->SwapBuffers(); #elif defined(__APPLE__) - cocoaGLSwap(GLWin.cocoaCtx,GLWin.cocoaWin); + [GLWin.cocoaCtx flushBuffer]; #elif defined(_WIN32) SwapBuffers(hDC); #elif defined(HAVE_X11) && HAVE_X11 @@ -68,7 +68,8 @@ void OpenGL_SetWindowText(const char *text) #if defined(USE_WX) && USE_WX // GLWin.frame->SetTitle(wxString::FromAscii(text)); #elif defined(__APPLE__) - cocoaGLSetTitle(GLWin.cocoaWin, text); + [GLWin.cocoaWin setTitle: [[[NSString alloc] + initWithCString: text] autorelease]]; #elif defined(_WIN32) // TODO convert text to unicode and change SetWindowTextA to SetWindowText SetWindowTextA(EmuWindow::GetWnd(), text); @@ -101,8 +102,8 @@ unsigned int Callback_PeekMessages() // Show the current FPS void UpdateFPSDisplay(const char *text) { - char temp[512]; - sprintf(temp, "SVN R%s: GL: %s", svn_rev_str, text); + char temp[100]; + snprintf(temp, sizeof temp, "%s | OpenGL | %s", svn_rev_str, text); OpenGL_SetWindowText(temp); } @@ -330,8 +331,29 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _iwidth, int _iheight GLWin.glCanvas->Show(true); #elif defined(__APPLE__) - GLWin.cocoaWin = cocoaGLCreateWindow(GLWin.width, GLWin.height); - GLWin.cocoaCtx = cocoaGLInit(g_Config.iMultisampleMode); + NSOpenGLPixelFormatAttribute attr[2] = { NSOpenGLPFADoubleBuffer, 0 }; + NSOpenGLPixelFormat *fmt = [[NSOpenGLPixelFormat alloc] + initWithAttributes: attr]; + if (fmt == nil) { + printf("failed to create pixel format\n"); + return false; + } + + GLWin.cocoaCtx = [[NSOpenGLContext alloc] + initWithFormat: fmt shareContext: nil]; + [fmt release]; + if (GLWin.cocoaCtx == nil) { + printf("failed to create context\n"); + return false; + } + + GLWin.cocoaWin = [[NSWindow alloc] + initWithContentRect: NSMakeRect(50, 50, _twidth, _theight) + styleMask: NSTitledWindowMask | NSResizableWindowMask + backing: NSBackingStoreBuffered defer: FALSE]; + [GLWin.cocoaWin setReleasedWhenClosed: YES]; + [GLWin.cocoaWin makeKeyAndOrderFront: nil]; + [GLWin.cocoaCtx setView: [GLWin.cocoaWin contentView]]; #elif defined(_WIN32) g_VideoInitialize.pWindowHandle = (void*)EmuWindow::Create((HWND)g_VideoInitialize.pWindowHandle, g_hInstance, _T("Please wait...")); @@ -474,7 +496,7 @@ bool OpenGL_MakeCurrent() #if defined(USE_WX) && USE_WX GLWin.glCanvas->SetCurrent(*GLWin.glCtxt); #elif defined(__APPLE__) - cocoaGLMakeCurrent(GLWin.cocoaCtx,GLWin.cocoaWin); + [GLWin.cocoaCtx makeCurrentContext]; #elif defined(_WIN32) return wglMakeCurrent(hDC,hRC) ? true : false; #elif defined(HAVE_X11) && HAVE_X11 @@ -503,8 +525,18 @@ void OpenGL_Update() s_backbuffer_height = height; #elif defined(__APPLE__) + int width, height; - // Is anything needed here? + width = [[GLWin.cocoaWin contentView] frame].size.width; + height = [[GLWin.cocoaWin contentView] frame].size.height; + if (width == s_backbuffer_width && height == s_backbuffer_height) + return; + + [GLWin.cocoaCtx setView: [GLWin.cocoaWin contentView]]; + [GLWin.cocoaCtx update]; + [GLWin.cocoaCtx makeCurrentContext]; + s_backbuffer_width = width; + s_backbuffer_height = height; #elif defined(_WIN32) RECT rcWindow; @@ -541,9 +573,9 @@ void OpenGL_Shutdown() #if defined(USE_WX) && USE_WX delete GLWin.glCanvas; #elif defined(__APPLE__) - cocoaGLDeleteWindow(GLWin.cocoaWin); - cocoaGLDelete(GLWin.cocoaCtx); - + [GLWin.cocoaWin close]; + [GLWin.cocoaCtx clearDrawable]; + [GLWin.cocoaCtx release]; #elif defined(_WIN32) if (hRC) // Do We Have A Rendering Context? { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h index dbddbb0159..fbf9acff4d 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h @@ -20,39 +20,26 @@ #include "VideoConfig.h" #include "MathUtil.h" +#include "Thread.h" #include "pluginspecs_video.h" #ifdef _WIN32 - #define GLEW_STATIC - #include #include - -#else - -#if defined(USE_WX) && USE_WX -#include -#include "wx/wx.h" -#include "wx/glcanvas.h" - -#elif defined(HAVE_X11) && HAVE_X11 +#elif defined HAVE_X11 && HAVE_X11 #include +#include #include #include -#include "Thread.h" - -#elif defined(__APPLE__) +#elif defined __APPLE__ #include -#include "cocoaGL.h" -#endif // end USE_WX - -#ifdef __APPLE__ -#include -#else -#include +#import #endif +#if defined USE_WX && USE_WX +#include "wx/wx.h" +#include "wx/glcanvas.h" #endif #ifndef GL_DEPTH24_STENCIL8_EXT // allows FBOs to support stencils diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GLWindow.h b/Source/Plugins/Plugin_VideoOGL/Src/GLWindow.h deleted file mode 100644 index 322363007d..0000000000 --- a/Source/Plugins/Plugin_VideoOGL/Src/GLWindow.h +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifndef _GLWINDOW_H_ -#define _GLWINDOW_H_ - -#include -#include "Common.h" -#include "Globals.h" -#include "pluginspecs_video.h" - -#ifdef _WIN32 -#define GLEW_STATIC - -#include -#include -#include -#include -#else -#include -#endif - -#ifdef __APPLE__ -#include -#else -#include -#endif -enum OGL_Props -{ - OGL_FULLSCREEN, - OGL_KEEPRATIO, - OGL_HIDECURSOR, - OGL_PROP_COUNT -}; - -struct res -{ - u32 x; - u32 y; -}; - -class GLWindow { -private: - - // TODO: what is xmax and ymax? do we need [xy]render? - u32 xWin, yWin; // Windows' size - int xOffset, yOffset; // Offset in window - float xMax, yMax; // ??? - u32 xRender, yRender; // Render area - - bool properties[OGL_PROP_COUNT]; - -protected: - - EventHandler* eventHandler; - res origRes, currFullRes, currWinRes; - static std::vector fullResolutions; - virtual void SetRender(u32 x, u32 y) - { - xRender = x; - yRender = y; - } - - static const std::vector& getFsResolutions() - { - return fullResolutions; - } - - static void addFSResolution(res fsr) - { - fullResolutions.push_back(fsr); - } -public: - - virtual void SwapBuffers() {}; - virtual void SetWindowText(const char *text) {}; - virtual bool PeekMessages() {return false;}; - virtual void Update() {}; - virtual bool MakeCurrent() {return false;}; - - virtual void updateDim() - { - if (GetProperty(OGL_FULLSCREEN)) - SetWinSize(currFullRes.x, currFullRes.y); - else - // Set the windowed resolution - SetWinSize(currWinRes.x, currWinRes.y); - - float FactorX = 640.0f / (float)GetXwin(); - float FactorY = 480.0f / (float)GetYwin(); - //float Max = (FactorX < FactorY) ? FactorX : FactorY; - - SetMax(1.0f / FactorX, 1.0f / FactorY); - SetOffset(0,0); - } - - void SetEventHandler(EventHandler *eh) { eventHandler = eh;} - bool GetProperty(OGL_Props prop) {return properties[prop];} - virtual bool SetProperty(OGL_Props prop, bool value) - {return properties[prop] = value;} - - u32 GetXrender() {return xRender;} - u32 GetYrender() {return yRender;} - - u32 GetXwin() {return xWin;} - u32 GetYwin() {return yWin;} - void SetWinSize(u32 x, u32 y) - { - xWin = x; - yWin = y; - } - - int GetYoff() {return yOffset;} - int GetXoff() {return xOffset;} - void SetOffset(int x, int y) - { - yOffset = y; - xOffset = x; - } - - void SetMax(float x, float y) - { - yMax = y; - xMax = x; - } - - float GetXmax() {return xMax;} - float GetYmax() {return yMax;} - - static bool valid() { return false;} - - GLWindow() - { - // Load defaults - sscanf(g_Config.iFSResolution, "%dx%d", - &currFullRes.x, &currFullRes.y); - - sscanf(g_Config.iInternalRes, "%dx%d", - &currWinRes.x, &currWinRes.y); - - SetProperty(OGL_FULLSCREEN, g_Config.bFullscreen); - // What does this do? - SetProperty(OGL_KEEPRATIO, g_Config.bKeepAR43); - SetProperty(OGL_HIDECURSOR, g_Config.bHideCursor); - - updateDim(); - } - - - // setResolution - // resolution iter -}; - -#endif // _GLWINDOW_H_ diff --git a/Source/Plugins/Plugin_VideoOGL/Src/SConscript b/Source/Plugins/Plugin_VideoOGL/Src/SConscript index 81b753664f..1327a210d2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/SConscript +++ b/Source/Plugins/Plugin_VideoOGL/Src/SConscript @@ -23,7 +23,4 @@ files = [ libs = [ 'videocommon', 'videouicommon', 'GLEW', 'SOIL', 'common' ] -if sys.platform == 'darwin' and not env['HAVE_WX']: - files += [ 'cocoaGL.m' ] - env.SharedLibrary(env['plugin_dir'] + name, files, LIBS = env['LIBS'] + libs) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/cocoaGL.h b/Source/Plugins/Plugin_VideoOGL/Src/cocoaGL.h deleted file mode 100644 index 0d8515ff7f..0000000000 --- a/Source/Plugins/Plugin_VideoOGL/Src/cocoaGL.h +++ /dev/null @@ -1,28 +0,0 @@ -#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_VideoOGL/Src/cocoaGL.m b/Source/Plugins/Plugin_VideoOGL/Src/cocoaGL.m deleted file mode 100755 index 5209bf3647..0000000000 --- a/Source/Plugins/Plugin_VideoOGL/Src/cocoaGL.m +++ /dev/null @@ -1,109 +0,0 @@ -#import "cocoaGL.h" - -NSWindow *cocoaGLCreateWindow(int w, int h) -{ - 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]; - - return window; -} - -void cocoaGLSetTitle(NSWindow *win, const char *title) -{ - [win setTitle: [[[NSString alloc] initWithCString: title - encoding: NSASCIIStringEncoding] autorelease]]; -} - -void cocoaGLMakeCurrent(NSOpenGLContext *ctx, NSWindow *win) -{ - int value = 0; - [ctx setValues:&value forParameter:NSOpenGLCPSwapInterval]; - - if (ctx) { - [ctx setView:[win contentView]]; - [ctx update]; - [ctx makeCurrentContext]; - } - else - [NSOpenGLContext clearCurrentContext]; -} - -NSOpenGLContext* cocoaGLInit(int mode) -{ - NSOpenGLPixelFormatAttribute attr[32]; - NSOpenGLPixelFormat *fmt; - NSOpenGLContext *context; - int i = 0; - - 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"); - return NULL; - } - - context = [[NSOpenGLContext alloc] initWithFormat:fmt shareContext:nil]; - - [fmt release]; - - if (context == nil) { - printf("failed to create context\n"); - return NULL; - } - - return context; -} - -void cocoaGLDelete(NSOpenGLContext *ctx) -{ - [ctx clearDrawable]; - [ctx release]; -} - -void cocoaGLDeleteWindow(NSWindow *window) -{ - [window close]; - - return; -} - -void cocoaGLSwap(NSOpenGLContext *ctx, NSWindow *window) -{ - [window makeKeyAndOrderFront: nil]; - - ctx = [NSOpenGLContext currentContext]; - if (ctx != nil) - [ctx flushBuffer]; - else - printf("bad cocoa gl ctx\n"); -} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.cpp index 1be873863b..451a1de33e 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.cpp @@ -94,8 +94,8 @@ unsigned int Callback_PeekMessages() // Show the current FPS void UpdateFPSDisplay(const char *text) { - char temp[512]; - sprintf(temp, "SVN R%s: SW: %s", svn_rev_str, text); + char temp[100]; + snprintf(temp, sizeof temp, "%s | Software | %s", svn_rev_str, text); OpenGL_SetWindowText(temp); } diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.h b/Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.h index ce0e183fb4..26acaa86dd 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.h @@ -19,40 +19,28 @@ #ifndef _GLINIT_H_ #define _GLINIT_H_ -#include "Common.h" #include #include "VideoConfig.h" #include "pluginspecs_video.h" #ifdef _WIN32 - #define GLEW_STATIC - #include #include - -#else - -#if defined(USE_WX) && USE_WX -#include -#include "wx/wx.h" -#include "wx/glcanvas.h" -#elif defined(HAVE_X11) && HAVE_X11 +#elif defined HAVE_X11 && HAVE_X11 #include -#include -#include -#include -#include -#else -#include -#endif // end USE_WX - -#ifdef __APPLE__ -#include -#else #include +#include +#include +#include +#elif defined __APPLE__ +#include +#import #endif +#if defined USE_WX && USE_WX +#include "wx/wx.h" +#include "wx/glcanvas.h" #endif #ifndef GL_DEPTH24_STENCIL8_EXT // allows FBOs to support stencils diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/SConscript b/Source/Plugins/Plugin_VideoSoftware/Src/SConscript index 4e9508f31d..a26209a771 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/SConscript +++ b/Source/Plugins/Plugin_VideoSoftware/Src/SConscript @@ -37,11 +37,9 @@ files = [ if env['HAVE_WX']: files += [ 'VideoConfigDialog.cpp' ] -if sys.platform == 'darwin' and not env['HAVE_WX']: - files += [ 'cocoaGL.m' ] -elif sys.platform == 'win32': +if sys.platform == 'win32': files += [ 'Win32.cpp' ] - + libs = [ 'videocommon', 'GLEW', 'SOIL', 'common' ] env.SharedLibrary(env['plugin_dir'] + name, files, LIBS = env['LIBS'] + libs) diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.h b/Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.h deleted file mode 100644 index cdd2a70650..0000000000 --- a/Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.h +++ /dev/null @@ -1,29 +0,0 @@ -#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 deleted file mode 100755 index 5209bf3647..0000000000 --- a/Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.m +++ /dev/null @@ -1,109 +0,0 @@ -#import "cocoaGL.h" - -NSWindow *cocoaGLCreateWindow(int w, int h) -{ - 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]; - - return window; -} - -void cocoaGLSetTitle(NSWindow *win, const char *title) -{ - [win setTitle: [[[NSString alloc] initWithCString: title - encoding: NSASCIIStringEncoding] autorelease]]; -} - -void cocoaGLMakeCurrent(NSOpenGLContext *ctx, NSWindow *win) -{ - int value = 0; - [ctx setValues:&value forParameter:NSOpenGLCPSwapInterval]; - - if (ctx) { - [ctx setView:[win contentView]]; - [ctx update]; - [ctx makeCurrentContext]; - } - else - [NSOpenGLContext clearCurrentContext]; -} - -NSOpenGLContext* cocoaGLInit(int mode) -{ - NSOpenGLPixelFormatAttribute attr[32]; - NSOpenGLPixelFormat *fmt; - NSOpenGLContext *context; - int i = 0; - - 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"); - return NULL; - } - - context = [[NSOpenGLContext alloc] initWithFormat:fmt shareContext:nil]; - - [fmt release]; - - if (context == nil) { - printf("failed to create context\n"); - return NULL; - } - - return context; -} - -void cocoaGLDelete(NSOpenGLContext *ctx) -{ - [ctx clearDrawable]; - [ctx release]; -} - -void cocoaGLDeleteWindow(NSWindow *window) -{ - [window close]; - - return; -} - -void cocoaGLSwap(NSOpenGLContext *ctx, NSWindow *window) -{ - [window makeKeyAndOrderFront: nil]; - - ctx = [NSOpenGLContext currentContext]; - if (ctx != nil) - [ctx flushBuffer]; - else - printf("bad cocoa gl ctx\n"); -}