diff options
| author | Soren Jorvang <soren.jorvang@gmail.com> | 2010-06-03 01:24:26 +0000 |
|---|---|---|
| committer | Soren Jorvang <soren.jorvang@gmail.com> | 2010-06-03 01:24:26 +0000 |
| commit | 52c912a59ed7fdfa82aaa33316ef19060eeece90 (patch) | |
| tree | cf5a31d06915c1c58ae3be181e73ef5137db9c38 | |
| parent | 3a7b8c51c66595addaa259ac595a984cf137f54a (diff) | |
Make wxgl mandatory on OS X.nJoy
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5576 8ced0084-cf51-0410-be5f-012b33b47a6e
| -rw-r--r-- | SConstruct | 15 | ||||
| -rw-r--r-- | Source/Core/DolphinWX/Src/ConfigMain.cpp | 4 | ||||
| -rw-r--r-- | Source/Core/DolphinWX/Src/MainNoGUI.cpp | 4 | ||||
| -rw-r--r-- | Source/Core/DolphinWX/Src/SConscript | 44 | ||||
| -rw-r--r-- | Source/Dolphin.xcodeproj/project.pbxproj | 24 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_GCPad/Src/Config.cpp | 2 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_GCPad/Src/GCPad.h | 3 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_VideoOGL/Src/GLUtil.cpp | 21 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h | 12 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_VideoOGL/Src/SConscript | 9 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_VideoOGL/Src/cocoaGL.h | 29 | ||||
| -rwxr-xr-x | Source/Plugins/Plugin_VideoOGL/Src/cocoaGL.m | 149 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.cpp | 1066 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.h | 289 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_VideoSoftware/Src/SConscript | 3 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.h | 29 | ||||
| -rwxr-xr-x | Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.m | 149 |
17 files changed, 697 insertions, 1155 deletions
diff --git a/SConstruct b/SConstruct index ad537b1f78..960b06805a 100644 --- a/SConstruct +++ b/SConstruct @@ -108,10 +108,10 @@ vars.AddVariables( BoolVariable('verbose', 'Set for compilation line', False), BoolVariable('bundle', 'Set to create bundle', False), BoolVariable('lint', 'Set for lint build (extra warnings)', False), - BoolVariable('nowx', 'Set For Building with no WX libs (WIP)', False), + BoolVariable('nowx', 'Set For Building with no WX libs', False), BoolVariable('openal', 'Build with OpenAL', False), BoolVariable('noao', 'Build without AO', False), - BoolVariable('wxgl', 'Set For Building with WX GL libs (WIP)', False), + BoolVariable('wxgl', 'Set For Building with WX GL libs', False), BoolVariable('opencl', 'Build with OpenCL', False), BoolVariable('nojit', 'Remove entire jit cores', False), BoolVariable('shared_soil', 'Use system shared libSOIL', False), @@ -354,7 +354,6 @@ if not env['SHARED_SFML']: #osx specifics if sys.platform == 'darwin': compileFlags.append('-mmacosx-version-min=10.5') - env['HAVE_COCOA'] = 1 env['HAVE_XRANDR'] = 0 env['HAVE_X11'] = 0 env['CC'] = "gcc-4.2" @@ -365,21 +364,20 @@ if sys.platform == 'darwin': else: env['HAVE_X11'] = conf.CheckPKG('x11') env['HAVE_XRANDR'] = env['HAVE_X11'] and conf.CheckPKG('xrandr') - env['HAVE_COCOA'] = 0 # handling wx flags CCFLAGS should be created before wxmods = ['aui', 'adv', 'core', 'base'] env['USE_WX'] = 0 if env['wxgl']: - wxmods.append('gl') env['USE_WX'] = 1 - -if sys.platform == 'win32': +if sys.platform == 'win32' or sys.platform == 'darwin': env['HAVE_WX'] = 1 env['USE_WX'] = 1 +if env['USE_WX']: + wxmods.append('gl') -# Gui less build +# gui-less build if env['nowx']: env['HAVE_WX'] = 0; else: @@ -415,7 +413,6 @@ conf.Define('HAVE_WX', env['HAVE_WX']) conf.Define('USE_WX', env['USE_WX']) conf.Define('HAVE_X11', env['HAVE_X11']) conf.Define('HAVE_XRANDR', env['HAVE_XRANDR']) -conf.Define('HAVE_COCOA', env['HAVE_COCOA']) conf.Define('HAVE_PORTAUDIO', env['HAVE_PORTAUDIO']) conf.Define('SHARED_SOIL', env['SHARED_SOIL']) conf.Define('SHARED_LZO', env['SHARED_LZO']) diff --git a/Source/Core/DolphinWX/Src/ConfigMain.cpp b/Source/Core/DolphinWX/Src/ConfigMain.cpp index 7b27af35e5..330d72ec2b 100644 --- a/Source/Core/DolphinWX/Src/ConfigMain.cpp +++ b/Source/Core/DolphinWX/Src/ConfigMain.cpp @@ -30,7 +30,7 @@ #include "Frame.h" #include "HotkeyDlg.h" -#if defined(HAVE_COCOA) && HAVE_COCOA +#ifdef __APPLE__ #include <Cocoa/Cocoa.h> #endif @@ -1188,7 +1188,7 @@ void CConfigMain::AddResolutions() main_frame->m_XRRConfig->AddResolutions(arrayStringFor_FullscreenResolution); -#elif defined(HAVE_COCOA) && HAVE_COCOA +#elif defined(__APPLE__) CGDisplayModeRef mode; CFArrayRef array; diff --git a/Source/Core/DolphinWX/Src/MainNoGUI.cpp b/Source/Core/DolphinWX/Src/MainNoGUI.cpp index 42a417fe2e..66e976310f 100644 --- a/Source/Core/DolphinWX/Src/MainNoGUI.cpp +++ b/Source/Core/DolphinWX/Src/MainNoGUI.cpp @@ -32,7 +32,7 @@ #include "X11Utils.h" #endif -#if defined(HAVE_COCOA) && HAVE_COCOA +#ifdef __APPLE__ #import "cocoaApp.h" #endif @@ -260,7 +260,7 @@ void X11_MainLoop() #endif //for cocoa we need to hijack the main to get event -#if defined(HAVE_COCOA) && HAVE_COCOA +#ifdef __APPLE__ @interface CocoaThread : NSObject { diff --git a/Source/Core/DolphinWX/Src/SConscript b/Source/Core/DolphinWX/Src/SConscript index bba8ef5e38..c352f14f64 100644 --- a/Source/Core/DolphinWX/Src/SConscript +++ b/Source/Core/DolphinWX/Src/SConscript @@ -44,37 +44,29 @@ if wxenv['HAVE_WX']: 'NetWindow.cpp', ] - CPPDEFINES = [ + CPPDEFINE = [ 'wxNEEDS_CHARPP', ], + compileFlags = [ + ], + + libs = [ 'debwx', 'debugger_ui_util'] + libs -if wxenv['HAVE_COCOA']: - files += [ 'cocoaApp.m', ] - compileFlags = [ - '-x', - 'objective-c++', - ] - wxenv.Append( - CXXFLAGS = compileFlags, - LINKFLAGS = [ - '-pthread', '-framework', 'IOKit' - ], - LIBS = libs - ) -else: - wxenv.Append( - LINKFLAGS = [ - '-pthread', - ], - LIBS = libs - ) +if sys.platform == 'darwin': + files += [ 'cocoaApp.m', ] + compileFlags = [ + '-x', + 'objective-c++', + ] + linkflags = [ + '-pthread', '-framework', 'IOKit' + ] -if sys.platform == 'darwin': exeGUI = env['binary_dir'] + 'Dolphin.app/Contents/MacOS/Dolphin' exeNoGUI = env['binary_dir'] + 'DolphinNoGUI' @@ -96,11 +88,17 @@ if sys.platform == 'darwin': else: exeGUI = env['binary_dir'] + 'dolphin-emu' exeNoGUI = env['binary_dir'] + 'dolphin-emu-nogui' + linkflags = [ '-pthread' ] if wxenv['HAVE_X11']: files += [ 'X11Utils.cpp' ] -#objects = [ wxenv.Object(srcFile) for srcFile in files ] + +wxenv.Append( + CXXFLAGS = compileFlags, + LINKFLAGS = linkflags, + LIBS = libs, +) if wxenv['HAVE_WX']: wxenv.Program(exeGUI, files + [ 'Main.cpp' ]) diff --git a/Source/Dolphin.xcodeproj/project.pbxproj b/Source/Dolphin.xcodeproj/project.pbxproj index 547a5a9bfa..7f75c81114 100644 --- a/Source/Dolphin.xcodeproj/project.pbxproj +++ b/Source/Dolphin.xcodeproj/project.pbxproj @@ -454,8 +454,6 @@ 292AC39C11838FD700B8790B /* CheatsWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 292ABF8D11838FD600B8790B /* CheatsWindow.h */; }; 292AC39D11838FD700B8790B /* cmdline.c in Sources */ = {isa = PBXBuildFile; fileRef = 292ABF8E11838FD600B8790B /* cmdline.c */; }; 292AC39E11838FD700B8790B /* cmdline.h in Headers */ = {isa = PBXBuildFile; fileRef = 292ABF8F11838FD600B8790B /* cmdline.h */; }; - 292AC39F11838FD700B8790B /* cocoaApp.h in Headers */ = {isa = PBXBuildFile; fileRef = 292ABF9011838FD600B8790B /* cocoaApp.h */; }; - 292AC3A011838FD700B8790B /* cocoaApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 292ABF9111838FD600B8790B /* cocoaApp.m */; }; 292AC3A111838FD700B8790B /* ConfigMain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 292ABF9211838FD600B8790B /* ConfigMain.cpp */; }; 292AC3A211838FD700B8790B /* ConfigMain.h in Headers */ = {isa = PBXBuildFile; fileRef = 292ABF9311838FD600B8790B /* ConfigMain.h */; }; 292AC3A311838FD700B8790B /* Frame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 292ABF9411838FD600B8790B /* Frame.cpp */; }; @@ -794,8 +792,6 @@ 292AC4F711838FD700B8790B /* XFStructs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 292AC12B11838FD700B8790B /* XFStructs.cpp */; }; 292AC4F811838FD700B8790B /* XFStructs.h in Headers */ = {isa = PBXBuildFile; fileRef = 292AC12C11838FD700B8790B /* XFStructs.h */; }; 292AC4F911838FD700B8790B /* BPFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 292AC13011838FD700B8790B /* BPFunctions.cpp */; }; - 292AC4FA11838FD700B8790B /* cocoaGL.h in Headers */ = {isa = PBXBuildFile; fileRef = 292AC13111838FD700B8790B /* cocoaGL.h */; }; - 292AC4FB11838FD700B8790B /* cocoaGL.m in Sources */ = {isa = PBXBuildFile; fileRef = 292AC13211838FD700B8790B /* cocoaGL.m */; }; 292AC4FC11838FD700B8790B /* Debugger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 292AC13411838FD700B8790B /* Debugger.cpp */; }; 292AC4FD11838FD700B8790B /* Debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 292AC13511838FD700B8790B /* Debugger.h */; }; 292AC4FE11838FD700B8790B /* DLCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 292AC13611838FD700B8790B /* DLCache.cpp */; }; @@ -837,8 +833,6 @@ 292AC52211838FD700B8790B /* BPMemLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 292AC16011838FD700B8790B /* BPMemLoader.h */; }; 292AC52311838FD700B8790B /* Clipper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 292AC16111838FD700B8790B /* Clipper.cpp */; }; 292AC52411838FD700B8790B /* Clipper.h in Headers */ = {isa = PBXBuildFile; fileRef = 292AC16211838FD700B8790B /* Clipper.h */; }; - 292AC52511838FD700B8790B /* cocoaGL.h in Headers */ = {isa = PBXBuildFile; fileRef = 292AC16311838FD700B8790B /* cocoaGL.h */; }; - 292AC52611838FD700B8790B /* cocoaGL.m in Sources */ = {isa = PBXBuildFile; fileRef = 292AC16411838FD700B8790B /* cocoaGL.m */; }; 292AC52711838FD700B8790B /* CommandProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 292AC16511838FD700B8790B /* CommandProcessor.cpp */; }; 292AC52811838FD700B8790B /* CommandProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 292AC16611838FD700B8790B /* CommandProcessor.h */; }; 292AC52911838FD700B8790B /* CPMemLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 292AC16711838FD700B8790B /* CPMemLoader.cpp */; }; @@ -1778,8 +1772,6 @@ 292ABF8D11838FD600B8790B /* CheatsWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CheatsWindow.h; sourceTree = "<group>"; }; 292ABF8E11838FD600B8790B /* cmdline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmdline.c; sourceTree = "<group>"; }; 292ABF8F11838FD600B8790B /* cmdline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cmdline.h; sourceTree = "<group>"; }; - 292ABF9011838FD600B8790B /* cocoaApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoaApp.h; sourceTree = "<group>"; }; - 292ABF9111838FD600B8790B /* cocoaApp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = cocoaApp.m; sourceTree = "<group>"; }; 292ABF9211838FD600B8790B /* ConfigMain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConfigMain.cpp; sourceTree = "<group>"; }; 292ABF9311838FD600B8790B /* ConfigMain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConfigMain.h; sourceTree = "<group>"; }; 292ABF9411838FD600B8790B /* Frame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Frame.cpp; sourceTree = "<group>"; }; @@ -2148,8 +2140,6 @@ 292AC12C11838FD700B8790B /* XFStructs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFStructs.h; sourceTree = "<group>"; }; 292AC12E11838FD700B8790B /* Plugin_VideoOGL.vcproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Plugin_VideoOGL.vcproj; sourceTree = "<group>"; }; 292AC13011838FD700B8790B /* BPFunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BPFunctions.cpp; sourceTree = "<group>"; }; - 292AC13111838FD700B8790B /* cocoaGL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoaGL.h; sourceTree = "<group>"; }; - 292AC13211838FD700B8790B /* cocoaGL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = cocoaGL.m; sourceTree = "<group>"; }; 292AC13411838FD700B8790B /* Debugger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Debugger.cpp; sourceTree = "<group>"; }; 292AC13511838FD700B8790B /* Debugger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Debugger.h; sourceTree = "<group>"; }; 292AC13611838FD700B8790B /* DLCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DLCache.cpp; sourceTree = "<group>"; }; @@ -2193,8 +2183,6 @@ 292AC16011838FD700B8790B /* BPMemLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BPMemLoader.h; sourceTree = "<group>"; }; 292AC16111838FD700B8790B /* Clipper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Clipper.cpp; sourceTree = "<group>"; }; 292AC16211838FD700B8790B /* Clipper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Clipper.h; sourceTree = "<group>"; }; - 292AC16311838FD700B8790B /* cocoaGL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoaGL.h; sourceTree = "<group>"; }; - 292AC16411838FD700B8790B /* cocoaGL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = cocoaGL.m; sourceTree = "<group>"; }; 292AC16511838FD700B8790B /* CommandProcessor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CommandProcessor.cpp; sourceTree = "<group>"; }; 292AC16611838FD700B8790B /* CommandProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommandProcessor.h; sourceTree = "<group>"; }; 292AC16711838FD700B8790B /* CPMemLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPMemLoader.cpp; sourceTree = "<group>"; }; @@ -3378,8 +3366,6 @@ 292ABF8D11838FD600B8790B /* CheatsWindow.h */, 292ABF8E11838FD600B8790B /* cmdline.c */, 292ABF8F11838FD600B8790B /* cmdline.h */, - 292ABF9011838FD600B8790B /* cocoaApp.h */, - 292ABF9111838FD600B8790B /* cocoaApp.m */, 292ABF9211838FD600B8790B /* ConfigMain.cpp */, 292ABF9311838FD600B8790B /* ConfigMain.h */, 292ABF9411838FD600B8790B /* Frame.cpp */, @@ -4075,8 +4061,6 @@ isa = PBXGroup; children = ( 292AC13011838FD700B8790B /* BPFunctions.cpp */, - 292AC13111838FD700B8790B /* cocoaGL.h */, - 292AC13211838FD700B8790B /* cocoaGL.m */, 292AC13311838FD700B8790B /* Debugger */, 292AC13611838FD700B8790B /* DLCache.cpp */, 292AC13711838FD700B8790B /* DLCache.h */, @@ -4159,8 +4143,6 @@ 292AC16011838FD700B8790B /* BPMemLoader.h */, 292AC16111838FD700B8790B /* Clipper.cpp */, 292AC16211838FD700B8790B /* Clipper.h */, - 292AC16311838FD700B8790B /* cocoaGL.h */, - 292AC16411838FD700B8790B /* cocoaGL.m */, 292AC16511838FD700B8790B /* CommandProcessor.cpp */, 292AC16611838FD700B8790B /* CommandProcessor.h */, 292AC16711838FD700B8790B /* CPMemLoader.cpp */, @@ -4605,7 +4587,6 @@ 292AC39A11838FD700B8790B /* BootManager.h in Headers */, 292AC39C11838FD700B8790B /* CheatsWindow.h in Headers */, 292AC39E11838FD700B8790B /* cmdline.h in Headers */, - 292AC39F11838FD700B8790B /* cocoaApp.h in Headers */, 292AC3A211838FD700B8790B /* ConfigMain.h in Headers */, 292AC3A411838FD700B8790B /* Frame.h in Headers */, 292AC3A811838FD700B8790B /* GameListCtrl.h in Headers */, @@ -4769,7 +4750,6 @@ 292AC4F411838FD700B8790B /* TabControl.h in Headers */, 292AC4F611838FD700B8790B /* Thread.h in Headers */, 292AC4F811838FD700B8790B /* XFStructs.h in Headers */, - 292AC4FA11838FD700B8790B /* cocoaGL.h in Headers */, 292AC4FD11838FD700B8790B /* Debugger.h in Headers */, 292AC4FF11838FD700B8790B /* DLCache.h in Headers */, 292AC50111838FD700B8790B /* FramebufferManager.h in Headers */, @@ -4790,7 +4770,6 @@ 292AC52011838FD700B8790B /* XFB.h in Headers */, 292AC52211838FD700B8790B /* BPMemLoader.h in Headers */, 292AC52411838FD700B8790B /* Clipper.h in Headers */, - 292AC52511838FD700B8790B /* cocoaGL.h in Headers */, 292AC52811838FD700B8790B /* CommandProcessor.h in Headers */, 292AC52A11838FD700B8790B /* CPMemLoader.h in Headers */, 292AC52C11838FD700B8790B /* DebugUtil.h in Headers */, @@ -5647,7 +5626,6 @@ 292AC39911838FD700B8790B /* BootManager.cpp in Sources */, 292AC39B11838FD700B8790B /* CheatsWindow.cpp in Sources */, 292AC39D11838FD700B8790B /* cmdline.c in Sources */, - 292AC3A011838FD700B8790B /* cocoaApp.m in Sources */, 292AC3A111838FD700B8790B /* ConfigMain.cpp in Sources */, 292AC3A311838FD700B8790B /* Frame.cpp in Sources */, 292AC3A511838FD700B8790B /* FrameAui.cpp in Sources */, @@ -5823,7 +5801,6 @@ 292AC4F511838FD700B8790B /* Thread.cpp in Sources */, 292AC4F711838FD700B8790B /* XFStructs.cpp in Sources */, 292AC4F911838FD700B8790B /* BPFunctions.cpp in Sources */, - 292AC4FB11838FD700B8790B /* cocoaGL.m in Sources */, 292AC4FC11838FD700B8790B /* Debugger.cpp in Sources */, 292AC4FE11838FD700B8790B /* DLCache.cpp in Sources */, 292AC50011838FD700B8790B /* FramebufferManager.cpp in Sources */, @@ -5845,7 +5822,6 @@ 292AC51F11838FD700B8790B /* XFB.cpp in Sources */, 292AC52111838FD700B8790B /* BPMemLoader.cpp in Sources */, 292AC52311838FD700B8790B /* Clipper.cpp in Sources */, - 292AC52611838FD700B8790B /* cocoaGL.m in Sources */, 292AC52711838FD700B8790B /* CommandProcessor.cpp in Sources */, 292AC52911838FD700B8790B /* CPMemLoader.cpp in Sources */, 292AC52B11838FD700B8790B /* DebugUtil.cpp in Sources */, diff --git a/Source/Plugins/Plugin_GCPad/Src/Config.cpp b/Source/Plugins/Plugin_GCPad/Src/Config.cpp index e8e9e4ff86..f417349d83 100644 --- a/Source/Plugins/Plugin_GCPad/Src/Config.cpp +++ b/Source/Plugins/Plugin_GCPad/Src/Config.cpp @@ -122,7 +122,7 @@ static const int gcDefaultControls[] = 0x00, // L semi-press 0x00, // R semi-press }; -#elif defined(HAVE_COCOA) && HAVE_COCOA +#elif defined(__APPLE__) // Reference for Cocoa key codes: // http://boredzo.org/blog/archives/2007-05-22/virtual-key-codes { diff --git a/Source/Plugins/Plugin_GCPad/Src/GCPad.h b/Source/Plugins/Plugin_GCPad/Src/GCPad.h index 6f702c0617..52fe385785 100644 --- a/Source/Plugins/Plugin_GCPad/Src/GCPad.h +++ b/Source/Plugins/Plugin_GCPad/Src/GCPad.h @@ -42,9 +42,6 @@ #include <X11/Xutil.h> #include <X11/keysym.h> #include <X11/XKBlib.h> -//no need for Cocoa yet, but I guess ayuanx isn't done yet. -//#elif defined(HAVE_COCOA) && HAVE_COCOA -// #include <Cocoa/Cocoa.h> #endif #include "pluginspecs_pad.h" diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.cpp b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.cpp index 9c9ae2c5cd..9a714eeed5 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.cpp @@ -55,8 +55,6 @@ void OpenGL_SwapBuffers() { #if defined(USE_WX) && USE_WX GLWin.glCanvas->SwapBuffers(); -#elif defined(HAVE_COCOA) && HAVE_COCOA - cocoaGLSwap(GLWin.cocoaCtx,GLWin.cocoaWin); #elif defined(_WIN32) SwapBuffers(hDC); #elif defined(HAVE_X11) && HAVE_X11 @@ -78,8 +76,6 @@ void OpenGL_SetWindowText(const char *text) { #if defined(USE_WX) && USE_WX // GLWin.frame->SetTitle(wxString::FromAscii(text)); -#elif defined(HAVE_COCOA) && HAVE_COCOA - cocoaGLSetTitle(GLWin.cocoaWin, text); #elif defined(_WIN32) // TODO convert text to unicode and change SetWindowTextA to SetWindowText SetWindowTextA(EmuWindow::GetWnd(), text); @@ -268,12 +264,6 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _iwidth, int _iheight GLWin.glCanvas->SetCurrent(*GLWin.glCtxt); -#elif defined(HAVE_COCOA) && HAVE_COCOA - GLWin.width = s_backbuffer_width; - GLWin.height = s_backbuffer_height; - GLWin.cocoaWin = cocoaGLCreateWindow(GLWin.width, GLWin.height); - GLWin.cocoaCtx = cocoaGLInit(g_Config.iMultisampleMode); - #elif defined(_WIN32) g_VideoInitialize.pWindowHandle = (void*)EmuWindow::Create((HWND)g_VideoInitialize.pWindowHandle, g_hInstance, _T("Please wait...")); if (g_VideoInitialize.pWindowHandle == NULL) @@ -415,8 +405,6 @@ bool OpenGL_MakeCurrent() // connect the glx-context to the window #if defined(USE_WX) && USE_WX GLWin.glCanvas->SetCurrent(*GLWin.glCtxt); -#elif defined(HAVE_COCOA) && HAVE_COCOA - cocoaGLMakeCurrent(GLWin.cocoaCtx,GLWin.cocoaWin); #elif defined(_WIN32) return wglMakeCurrent(hDC,hRC); #elif defined(HAVE_X11) && HAVE_X11 @@ -437,11 +425,6 @@ void OpenGL_Update() // TODO fill in -#elif defined(HAVE_COCOA) && HAVE_COCOA - RECT rcWindow = {0}; - rcWindow.right = GLWin.width; - rcWindow.bottom = GLWin.height; - #elif defined(_WIN32) RECT rcWindow; if (!EmuWindow::GetParentWnd()) @@ -481,10 +464,6 @@ void OpenGL_Shutdown() { #if defined(USE_WX) && USE_WX delete GLWin.glCanvas; -#elif defined(HAVE_COCOA) && HAVE_COCOA - cocoaGLDeleteWindow(GLWin.cocoaWin); - cocoaGLDelete(GLWin.cocoaCtx); - #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 9c20a1af96..12c53fe8e2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h @@ -48,10 +48,6 @@ #elif defined(USE_SDL) && USE_SDL #include <GL/glew.h> #include <SDL.h> - -#elif defined(HAVE_COCOA) && HAVE_COCOA -#include <GL/glew.h> -#include "cocoaGL.h" #endif // end USE_WX #if defined(__APPLE__) @@ -76,10 +72,7 @@ typedef struct { int screen; -#if defined(HAVE_COCOA) && HAVE_COCOA - NSWindow *cocoaWin; - NSOpenGLContext *cocoaCtx; -#elif defined(HAVE_X11) && HAVE_X11 +#if defined(HAVE_X11) && HAVE_X11 Window win; Window parent; Display *dpy; @@ -87,8 +80,7 @@ typedef struct { GLXContext ctx; XSetWindowAttributes attr; Common::Thread *xEventThread; -#endif // X11 -#if defined(USE_WX) && USE_WX +#elif defined(USE_WX) && USE_WX wxGLCanvas *glCanvas; wxPanel *panel; wxGLContext *glCtxt; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/SConscript b/Source/Plugins/Plugin_VideoOGL/Src/SConscript index 4793e4b994..2724a150d2 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/SConscript +++ b/Source/Plugins/Plugin_VideoOGL/Src/SConscript @@ -25,8 +25,6 @@ files = [ 'PostProcessing.cpp', 'FramebufferManager.cpp', ] -compileFlags = [ - ] linkFlags = [ ] libs = [ @@ -48,12 +46,6 @@ if gfxenv['HAVE_WX']: 'Debugger/Debugger.cpp', ] -if gfxenv['HAVE_COCOA']: - files += [ 'cocoaGL.m' ] - compileFlags += [ - '-x', - 'objective-c++', - ] if sys.platform == 'win32': files += [ 'OS/Win32.cpp' ] @@ -105,7 +97,6 @@ if gfxenv['USE_WX'] and not gfxenv['HAVE_WX']: print "Must have wx to use wxgl" Return() gfxenv.Append( - CXXFLAGS = compileFlags, LINKFLAGS = linkFlags, ) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/cocoaGL.h b/Source/Plugins/Plugin_VideoOGL/Src/cocoaGL.h deleted file mode 100644 index cdd2a70650..0000000000 --- a/Source/Plugins/Plugin_VideoOGL/Src/cocoaGL.h +++ /dev/null @@ -1,29 +0,0 @@ -#import <Cocoa/Cocoa.h> -#import <OpenGL/CGLRenderers.h> - -#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 6a821635e2..0000000000 --- a/Source/Plugins/Plugin_VideoOGL/Src/cocoaGL.m +++ /dev/null @@ -1,149 +0,0 @@ -#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]; -} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.cpp index fb74ce1abf..abbfaf1cb8 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.cpp @@ -1,544 +1,522 @@ -// Copyright (C) 2003-2009 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/
-
-#include "main.h"
-#include "VideoConfig.h"
-#include "IniFile.h"
-#include "svnrev.h"
-#include "Setup.h"
-
-//#include "Render.h"
-
-#if defined(_WIN32)
-#include "Win32.h"
-#else
-struct RECT
-{
- int left, top;
- int right, bottom;
-};
-#endif
-
-#include "GLUtil.h"
-
-// Handles OpenGL and the window
-
-// Window dimensions.
-static int s_backbuffer_width;
-static int s_backbuffer_height;
-
-#ifndef _WIN32
-GLWindow GLWin;
-#endif
-
-#if defined(_WIN32)
-static HDC hDC = NULL; // Private GDI Device Context
-static HGLRC hRC = NULL; // Permanent Rendering Context
-extern HINSTANCE g_hInstance;
-#endif
-
-void OpenGL_SwapBuffers()
-{
-#if defined(USE_WX) && USE_WX
- GLWin.glCanvas->SwapBuffers();
-#elif defined(HAVE_COCOA) && HAVE_COCOA
- cocoaGLSwap(GLWin.cocoaCtx,GLWin.cocoaWin);
-#elif defined(_WIN32)
- SwapBuffers(hDC);
-#elif defined(HAVE_X11) && HAVE_X11
- glXSwapBuffers(GLWin.dpy, GLWin.win);
-#endif
-}
-
-u32 OpenGL_GetBackbufferWidth()
-{
- return s_backbuffer_width;
-}
-
-u32 OpenGL_GetBackbufferHeight()
-{
- return s_backbuffer_height;
-}
-
-void OpenGL_SetWindowText(const char *text)
-{
-#if defined(USE_WX) && USE_WX
- GLWin.frame->SetTitle(wxString::FromAscii(text));
-#elif defined(HAVE_COCOA) && HAVE_COCOA
- cocoaGLSetTitle(GLWin.cocoaWin, text);
-#elif defined(_WIN32)
- // TODO convert text to unicode and change SetWindowTextA to SetWindowText
- SetWindowTextA(EmuWindow::GetWnd(), text);
-#elif defined(HAVE_X11) && HAVE_X11 // GLX
- /**
- * Tell X to ask the window manager to set the window title. (X
- * itself doesn't provide window title functionality.)
- */
- XStoreName(GLWin.dpy, GLWin.win, text);
-#endif
-}
-
-// =======================================================================================
-// Draw messages on top of the screen
-// ------------------
-unsigned int Callback_PeekMessages()
-{
-#ifdef _WIN32
- // TODO: peekmessage
- MSG msg;
- while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
- {
- if (msg.message == WM_QUIT)
- return FALSE;
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return TRUE;
-#else
- return FALSE;
-#endif
-}
-
-// Show the current FPS
-void UpdateFPSDisplay(const char *text)
-{
- char temp[512];
- sprintf(temp, "SVN R%s: SW: %s", SVN_REV_STR, text);
- OpenGL_SetWindowText(temp);
-}
-// =========================
-
-
-// =======================================================================================
-// Create rendering window.
-// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize()
-// ------------------
-bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _twidth, int _theight)
-{
- int xPos, yPos;
- g_VideoInitialize.pRequestWindowSize(xPos, yPos, _twidth, _theight);
-
- #if defined(_WIN32)
- EmuWindow::SetSize(_twidth, _theight);
- #endif
- // ----------------------------
-
- // ---------------------------------------------------------------------------------------
- // Control window size and picture scaling
- // ------------------
- s_backbuffer_width = _twidth;
- s_backbuffer_height = _theight;
-
- g_VideoInitialize.pPeekMessages = &Callback_PeekMessages;
- g_VideoInitialize.pUpdateFPSDisplay = &UpdateFPSDisplay;
-
-#if defined(USE_WX) && USE_WX
- int args[] = {WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 16, 0};
-
- wxSize size(_twidth, _theight);
- if ( g_VideoInitialize.pWindowHandle == NULL) {
- GLWin.frame = new wxFrame((wxWindow *)NULL,
- -1, _("Dolphin"), wxPoint(50,50), size);
- } else {
- GLWin.frame = new wxFrame((wxWindow *)g_VideoInitialize.pWindowHandle,
- -1, _("Dolphin"), wxPoint(50,50), size);
- }
-
- GLWin.glCanvas = new wxGLCanvas(GLWin.frame, wxID_ANY, args,
- wxPoint(0,0), size, wxSUNKEN_BORDER);
- GLWin.glCtxt = new wxGLContext(GLWin.glCanvas);
- GLWin.frame->Show(TRUE);
- GLWin.glCanvas->Show(TRUE);
-
- GLWin.glCanvas->SetCurrent(*GLWin.glCtxt);
-
-#elif defined(HAVE_COCOA) && HAVE_COCOA
- GLWin.width = s_backbuffer_width;
- GLWin.height = s_backbuffer_height;
- GLWin.cocoaWin = cocoaGLCreateWindow(GLWin.width, GLWin.height);
- GLWin.cocoaCtx = cocoaGLInit(0);
-
-#elif defined(_WIN32)
- // ---------------------------------------------------------------------------------------
- // Create rendering window in Windows
- // ----------------------
- g_VideoInitialize.pWindowHandle = (void*)EmuWindow::Create((HWND)g_VideoInitialize.pWindowHandle, g_hInstance, _T("Please wait..."));
-
- // Show the window
- EmuWindow::Show();
-
- if (g_VideoInitialize.pWindowHandle == NULL)
- {
- g_VideoInitialize.pSysMessage("failed to create window");
- return false;
- }
-
- GLuint PixelFormat; // Holds The Results After Searching For A Match
- DWORD dwExStyle; // Window Extended Style
- DWORD dwStyle; // Window Style
-
- RECT rcdesktop;
- GetWindowRect(GetDesktopWindow(), &rcdesktop);
-
- dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
- dwStyle = WS_OVERLAPPEDWINDOW;
-
- RECT rc = {0, 0, s_backbuffer_width, s_backbuffer_height};
- AdjustWindowRectEx(&rc, dwStyle, FALSE, dwExStyle);
-
- int X = (rcdesktop.right-rcdesktop.left)/2 - (rc.right-rc.left)/2;
- int Y = (rcdesktop.bottom-rcdesktop.top)/2 - (rc.bottom-rc.top)/2;
-
- // EmuWindow::GetWnd() is either the new child window or the new separate window
- SetWindowPos(EmuWindow::GetWnd(), NULL, X, Y, rc.right-rc.left, rc.bottom-rc.top, SWP_NOREPOSITION | SWP_NOZORDER);
-
- PIXELFORMATDESCRIPTOR pfd = // pfd Tells Windows How We Want Things To Be
- {
- sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor
- 1, // Version Number
- PFD_DRAW_TO_WINDOW | // Format Must Support Window
- PFD_SUPPORT_OPENGL | // Format Must Support OpenGL
- PFD_DOUBLEBUFFER, // Must Support Double Buffering
- PFD_TYPE_RGBA, // Request An RGBA Format
- 32, // Select Our Color Depth
- 0, 0, 0, 0, 0, 0, // Color Bits Ignored
- 0, // 8bit Alpha Buffer
- 0, // Shift Bit Ignored
- 0, // No Accumulation Buffer
- 0, 0, 0, 0, // Accumulation Bits Ignored
- 24, // 24Bit Z-Buffer (Depth Buffer)
- 8, // 8bit Stencil Buffer
- 0, // No Auxiliary Buffer
- PFD_MAIN_PLANE, // Main Drawing Layer
- 0, // Reserved
- 0, 0, 0 // Layer Masks Ignored
- };
-
- if (!(hDC=GetDC(EmuWindow::GetWnd()))) {
- PanicAlert("(1) Can't create an OpenGL Device context. Fail.");
- return false;
- }
-
- if (!(PixelFormat = ChoosePixelFormat(hDC,&pfd))) {
- PanicAlert("(2) Can't find a suitable PixelFormat.");
- return false;
- }
-
- if (!SetPixelFormat(hDC, PixelFormat, &pfd)) {
- PanicAlert("(3) Can't set the PixelFormat.");
- return false;
- }
-
- if (!(hRC = wglCreateContext(hDC))) {
- PanicAlert("(4) Can't create an OpenGL rendering context.");
- return false;
- }
- // --------------------------------------
-
-#elif defined(HAVE_X11) && HAVE_X11
- XVisualInfo *vi;
- Colormap cmap;
- int glxMajorVersion, glxMinorVersion;
- Atom wmDelete;
-
- // attributes for a single buffered visual in RGBA format with at least
- // 8 bits per color and a 24 bit depth buffer
- int attrListSgl[] = {GLX_RGBA, GLX_RED_SIZE, 8,
- GLX_GREEN_SIZE, 8,
- GLX_BLUE_SIZE, 8,
- GLX_DEPTH_SIZE, 24,
- None};
-
- // attributes for a double buffered visual in RGBA format with at least
- // 8 bits per color and a 24 bit depth buffer
- int attrListDbl[] = { GLX_RGBA, GLX_DOUBLEBUFFER,
- GLX_RED_SIZE, 8,
- GLX_GREEN_SIZE, 8,
- GLX_BLUE_SIZE, 8,
- GLX_DEPTH_SIZE, 24,
- GLX_SAMPLE_BUFFERS_ARB, GLX_SAMPLES_ARB, 1, None };
-
- int attrListDefault[] = {
- GLX_RGBA,
- GLX_RED_SIZE, 1,
- GLX_GREEN_SIZE, 1,
- GLX_BLUE_SIZE, 1,
- GLX_DOUBLEBUFFER,
- GLX_DEPTH_SIZE, 1,
- None };
-
- GLWin.dpy = XOpenDisplay(0);
- GLWin.parent = (Window)g_VideoInitialize.pWindowHandle;
- g_VideoInitialize.pWindowHandle = (HWND)GLWin.dpy;
- GLWin.screen = DefaultScreen(GLWin.dpy);
-
- /* get an appropriate visual */
- vi = glXChooseVisual(GLWin.dpy, GLWin.screen, attrListDbl);
- if (vi == NULL)
- {
- vi = glXChooseVisual(GLWin.dpy, GLWin.screen, attrListSgl);
- if (vi != NULL)
- {
- ERROR_LOG(VIDEO, "Only Singlebuffered Visual!");
- }
- else
- {
- vi = glXChooseVisual(GLWin.dpy, GLWin.screen, attrListDefault);
- if (vi == NULL)
- {
- ERROR_LOG(VIDEO, "Could not choose visual (glXChooseVisual)");
- exit(0);
- }
- }
- }
- else
- NOTICE_LOG(VIDEO, "Got Doublebuffered Visual!");
-
- glXQueryVersion(GLWin.dpy, &glxMajorVersion, &glxMinorVersion);
- NOTICE_LOG(VIDEO, "glX-Version %d.%d", glxMajorVersion, glxMinorVersion);
- // Create a GLX context.
- GLWin.ctx = glXCreateContext(GLWin.dpy, vi, 0, GL_TRUE);
- if(!GLWin.ctx)
- {
- PanicAlert("Couldn't Create GLX context.Quit");
- exit(0); // TODO: Don't bring down entire Emu
- }
-
- if (GLWin.parent == 0)
- GLWin.parent = RootWindow(GLWin.dpy, vi->screen);
- // Create a color map.
- cmap = XCreateColormap(GLWin.dpy, GLWin.parent, vi->visual, AllocNone);
- GLWin.attr.colormap = cmap;
- GLWin.attr.border_pixel = 0;
- XkbSetDetectableAutoRepeat(GLWin.dpy, True, NULL);
-
- // create a window in window mode
- GLWin.attr.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask |
- StructureNotifyMask | ResizeRedirectMask;
- GLWin.win = XCreateWindow(GLWin.dpy, GLWin.parent,
- xPos, yPos, _twidth, _theight, 0, vi->depth, InputOutput, vi->visual,
- CWBorderPixel | CWColormap | CWEventMask, &GLWin.attr);
- // only set window title and handle wm_delete_events if in windowed mode
- wmDelete = XInternAtom(GLWin.dpy, "WM_DELETE_WINDOW", True);
- XSetWMProtocols(GLWin.dpy, GLWin.win, &wmDelete, 1);
- XSetStandardProperties(GLWin.dpy, GLWin.win, "GPU",
- "GPU", None, NULL, 0, NULL);
- XMapRaised(GLWin.dpy, GLWin.win);
-
- g_VideoInitialize.pXWindow = (Window *) &GLWin.win;
-#endif
- return true;
-}
-
-bool OpenGL_MakeCurrent()
-{
-#if defined(USE_WX) && USE_WX
- GLWin.glCanvas->SetCurrent(*GLWin.glCtxt);
-#elif defined(HAVE_COCOA) && HAVE_COCOA
- cocoaGLMakeCurrent(GLWin.cocoaCtx,GLWin.cocoaWin);
-#elif defined(_WIN32)
- if (!wglMakeCurrent(hDC,hRC)) {
- PanicAlert("(5) Can't Activate The GL Rendering Context.");
- return false;
- }
-#elif defined(HAVE_X11) && HAVE_X11
- Window winDummy;
- unsigned int borderDummy;
- // connect the glx-context to the window
- glXMakeCurrent(GLWin.dpy, GLWin.win, GLWin.ctx);
- XGetGeometry(GLWin.dpy, GLWin.win, &winDummy, &GLWin.x, &GLWin.y,
- &GLWin.width, &GLWin.height, &borderDummy, &GLWin.depth);
- NOTICE_LOG(VIDEO, "GLWin Depth %d", GLWin.depth)
- if (glXIsDirect(GLWin.dpy, GLWin.ctx)) {
- NOTICE_LOG(VIDEO, "detected direct rendering");
- } else {
- ERROR_LOG(VIDEO, "no Direct Rendering possible!");
- }
-
- // better for pad plugin key input (thc)
- XSelectInput(GLWin.dpy, GLWin.win, ExposureMask | KeyPressMask | KeyReleaseMask |
- StructureNotifyMask | EnterWindowMask | LeaveWindowMask | FocusChangeMask );
-#endif
- return true;
-}
-// Update window width, size and etc. Called from Render.cpp
-void OpenGL_Update()
-{
-#if defined(USE_WX) && USE_WX
- RECT rcWindow = {0};
- rcWindow.right = GLWin.width;
- rcWindow.bottom = GLWin.height;
-
- // TODO fill in
-
-#elif defined(HAVE_COCOA) && HAVE_COCOA
- RECT rcWindow = {0};
- rcWindow.right = GLWin.width;
- rcWindow.bottom = GLWin.height;
-
-#elif defined(_WIN32)
- RECT rcWindow;
- if (!EmuWindow::GetParentWnd())
- {
- // We are not rendering to a child window - use client size.
- GetClientRect(EmuWindow::GetWnd(), &rcWindow);
- }
- else
- {
- // We are rendering to a child window - use parent size.
- GetWindowRect(EmuWindow::GetParentWnd(), &rcWindow);
- }
-
- // ---------------------------------------------------------------------------------------
- // Get the new window width and height
- // ------------------
- // See below for documentation
- // ------------------
- int width = rcWindow.right - rcWindow.left;
- int height = rcWindow.bottom - rcWindow.top;
-
- // If we are rendering to a child window
- if (EmuWindow::GetParentWnd() != 0)
- ::MoveWindow(EmuWindow::GetWnd(), 0, 0, width, height, FALSE);
-
- s_backbuffer_width = width;
- s_backbuffer_height = height;
-
-#elif defined(HAVE_X11) && HAVE_X11
- // We just check all of our events here
- XEvent event;
- int num_events;
- for (num_events = XPending(GLWin.dpy);num_events > 0;num_events--) {
- XNextEvent(GLWin.dpy, &event);
- switch(event.type) {
- case ConfigureNotify:
- Window winDummy;
- unsigned int borderDummy;
- XGetGeometry(GLWin.dpy, GLWin.win, &winDummy, &GLWin.x, &GLWin.y,
- &GLWin.width, &GLWin.height, &borderDummy, &GLWin.depth);
- s_backbuffer_width = GLWin.width;
- s_backbuffer_height = GLWin.height;
- break;
- case ClientMessage:
- if ((ulong) event.xclient.data.l[0] == XInternAtom(GLWin.dpy, "WM_DELETE_WINDOW", False))
- g_VideoInitialize.pCoreMessage(WM_USER_STOP);
- if ((ulong) event.xclient.data.l[0] == XInternAtom(GLWin.dpy, "RESIZE", False))
- XMoveResizeWindow(GLWin.dpy, GLWin.win, event.xclient.data.l[1],
- event.xclient.data.l[2], event.xclient.data.l[3], event.xclient.data.l[4]);
- return;
- break;
- default:
- break;
- }
- }
- return;
-#endif
-}
-
-
-// Close plugin
-void OpenGL_Shutdown()
-{
-#if defined(USE_WX) && USE_WX
- delete GLWin.glCanvas;
- delete GLWin.frame;
-#elif defined(HAVE_COCOA) && HAVE_COCOA
- cocoaGLDeleteWindow(GLWin.cocoaWin);
- cocoaGLDelete(GLWin.cocoaCtx);
-
-#elif defined(_WIN32)
- if (hRC) // Do We Have A Rendering Context?
- {
- if (!wglMakeCurrent(NULL,NULL)) // Are We Able To Release The DC And RC Contexts?
- {
- // [F|RES]: if this fails i dont see the message box and
- // cant get out of the modal state so i disable it.
- // This function fails only if i render to main window
- // MessageBox(NULL,"Release Of DC And RC Failed.", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
- }
-
- if (!wglDeleteContext(hRC)) // Are We Able To Delete The RC?
- {
- ERROR_LOG(VIDEO, "Release Rendering Context Failed.");
- }
- hRC = NULL; // Set RC To NULL
- }
-
- if (hDC && !ReleaseDC(EmuWindow::GetWnd(), hDC)) // Are We Able To Release The DC
- {
- ERROR_LOG(VIDEO, "Release Device Context Failed.");
- hDC = NULL; // Set DC To NULL
- }
-#elif defined(HAVE_X11) && HAVE_X11
- if (GLWin.ctx)
- {
- if (!glXMakeCurrent(GLWin.dpy, None, NULL))
- {
- ERROR_LOG(VIDEO, "Could not release drawing context.\n");
- }
- XUnmapWindow(GLWin.dpy, GLWin.win);
- glXDestroyContext(GLWin.dpy, GLWin.ctx);
- XCloseDisplay(GLWin.dpy);
- GLWin.ctx = NULL;
- }
-#endif
-}
-
-GLuint OpenGL_ReportGLError(const char *function, const char *file, int line)
-{
- GLint err = glGetError();
- if (err != GL_NO_ERROR)
- {
- ERROR_LOG(VIDEO, "%s:%d: (%s) OpenGL error 0x%x - %s\n", file, line, function, err, gluErrorString(err));
- }
- return err;
-}
-
-void OpenGL_ReportARBProgramError()
-{
- const GLubyte* pstr = glGetString(GL_PROGRAM_ERROR_STRING_ARB);
- if (pstr != NULL && pstr[0] != 0)
- {
- GLint loc = 0;
- glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &loc);
- ERROR_LOG(VIDEO, "program error at %d: ", loc);
- ERROR_LOG(VIDEO, (char*)pstr);
- ERROR_LOG(VIDEO, "");
- }
-}
-
-bool OpenGL_ReportFBOError(const char *function, const char *file, int line)
-{
- unsigned int fbo_status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
- if (fbo_status != GL_FRAMEBUFFER_COMPLETE_EXT)
- {
- const char *error = "-";
- switch (fbo_status)
- {
- case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: error = "INCOMPLETE_ATTACHMENT_EXT"; break;
- case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: error = "INCOMPLETE_MISSING_ATTACHMENT_EXT"; break;
- case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: error = "INCOMPLETE_DIMENSIONS_EXT"; break;
- case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: error = "INCOMPLETE_FORMATS_EXT"; break;
- case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: error = "INCOMPLETE_DRAW_BUFFER_EXT"; break;
- case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: error = "INCOMPLETE_READ_BUFFER_EXT"; break;
- case GL_FRAMEBUFFER_UNSUPPORTED_EXT: error = "UNSUPPORTED_EXT"; break;
- }
- ERROR_LOG(VIDEO, "%s:%d: (%s) OpenGL FBO error - %s\n", file, line, function, error);
- return false;
- }
- return true;
-}
+// Copyright (C) 2003-2009 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/ + +#include "main.h" +#include "VideoConfig.h" +#include "IniFile.h" +#include "svnrev.h" +#include "Setup.h" + +//#include "Render.h" + +#if defined(_WIN32) +#include "Win32.h" +#else +struct RECT +{ + int left, top; + int right, bottom; +}; +#endif + +#include "GLUtil.h" + +// Handles OpenGL and the window + +// Window dimensions. +static int s_backbuffer_width; +static int s_backbuffer_height; + +#ifndef _WIN32 +GLWindow GLWin; +#endif + +#if defined(_WIN32) +static HDC hDC = NULL; // Private GDI Device Context +static HGLRC hRC = NULL; // Permanent Rendering Context +extern HINSTANCE g_hInstance; +#endif + +void OpenGL_SwapBuffers() +{ +#if defined(USE_WX) && USE_WX + GLWin.glCanvas->SwapBuffers(); +#elif defined(_WIN32) + SwapBuffers(hDC); +#elif defined(HAVE_X11) && HAVE_X11 + glXSwapBuffers(GLWin.dpy, GLWin.win); +#endif +} + +u32 OpenGL_GetBackbufferWidth() +{ + return s_backbuffer_width; +} + +u32 OpenGL_GetBackbufferHeight() +{ + return s_backbuffer_height; +} + +void OpenGL_SetWindowText(const char *text) +{ +#if defined(USE_WX) && USE_WX + GLWin.frame->SetTitle(wxString::FromAscii(text)); +#elif defined(_WIN32) + // TODO convert text to unicode and change SetWindowTextA to SetWindowText + SetWindowTextA(EmuWindow::GetWnd(), text); +#elif defined(HAVE_X11) && HAVE_X11 // GLX + /** + * Tell X to ask the window manager to set the window title. (X + * itself doesn't provide window title functionality.) + */ + XStoreName(GLWin.dpy, GLWin.win, text); +#endif +} + +// ======================================================================================= +// Draw messages on top of the screen +// ------------------ +unsigned int Callback_PeekMessages() +{ +#ifdef _WIN32 + // TODO: peekmessage + MSG msg; + while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) + { + if (msg.message == WM_QUIT) + return FALSE; + TranslateMessage(&msg); + DispatchMessage(&msg); + } + return TRUE; +#else + return FALSE; +#endif +} + +// Show the current FPS +void UpdateFPSDisplay(const char *text) +{ + char temp[512]; + sprintf(temp, "SVN R%s: SW: %s", SVN_REV_STR, text); + OpenGL_SetWindowText(temp); +} +// ========================= + + +// ======================================================================================= +// Create rendering window. +// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize() +// ------------------ +bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _twidth, int _theight) +{ + int xPos, yPos; + g_VideoInitialize.pRequestWindowSize(xPos, yPos, _twidth, _theight); + + #if defined(_WIN32) + EmuWindow::SetSize(_twidth, _theight); + #endif + // ---------------------------- + + // --------------------------------------------------------------------------------------- + // Control window size and picture scaling + // ------------------ + s_backbuffer_width = _twidth; + s_backbuffer_height = _theight; + + g_VideoInitialize.pPeekMessages = &Callback_PeekMessages; + g_VideoInitialize.pUpdateFPSDisplay = &UpdateFPSDisplay; + +#if defined(USE_WX) && USE_WX + int args[] = {WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 16, 0}; + + wxSize size(_twidth, _theight); + if ( g_VideoInitialize.pWindowHandle == NULL) { + GLWin.frame = new wxFrame((wxWindow *)NULL, + -1, _("Dolphin"), wxPoint(50,50), size); + } else { + GLWin.frame = new wxFrame((wxWindow *)g_VideoInitialize.pWindowHandle, + -1, _("Dolphin"), wxPoint(50,50), size); + } + + GLWin.glCanvas = new wxGLCanvas(GLWin.frame, wxID_ANY, args, + wxPoint(0,0), size, wxSUNKEN_BORDER); + GLWin.glCtxt = new wxGLContext(GLWin.glCanvas); + GLWin.frame->Show(TRUE); + GLWin.glCanvas->Show(TRUE); + + GLWin.glCanvas->SetCurrent(*GLWin.glCtxt); +#elif defined(_WIN32) + // --------------------------------------------------------------------------------------- + // Create rendering window in Windows + // ---------------------- + g_VideoInitialize.pWindowHandle = (void*)EmuWindow::Create((HWND)g_VideoInitialize.pWindowHandle, g_hInstance, _T("Please wait...")); + + // Show the window + EmuWindow::Show(); + + if (g_VideoInitialize.pWindowHandle == NULL) + { + g_VideoInitialize.pSysMessage("failed to create window"); + return false; + } + + GLuint PixelFormat; // Holds The Results After Searching For A Match + DWORD dwExStyle; // Window Extended Style + DWORD dwStyle; // Window Style + + RECT rcdesktop; + GetWindowRect(GetDesktopWindow(), &rcdesktop); + + dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; + dwStyle = WS_OVERLAPPEDWINDOW; + + RECT rc = {0, 0, s_backbuffer_width, s_backbuffer_height}; + AdjustWindowRectEx(&rc, dwStyle, FALSE, dwExStyle); + + int X = (rcdesktop.right-rcdesktop.left)/2 - (rc.right-rc.left)/2; + int Y = (rcdesktop.bottom-rcdesktop.top)/2 - (rc.bottom-rc.top)/2; + + // EmuWindow::GetWnd() is either the new child window or the new separate window + SetWindowPos(EmuWindow::GetWnd(), NULL, X, Y, rc.right-rc.left, rc.bottom-rc.top, SWP_NOREPOSITION | SWP_NOZORDER); + + PIXELFORMATDESCRIPTOR pfd = // pfd Tells Windows How We Want Things To Be + { + sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor + 1, // Version Number + PFD_DRAW_TO_WINDOW | // Format Must Support Window + PFD_SUPPORT_OPENGL | // Format Must Support OpenGL + PFD_DOUBLEBUFFER, // Must Support Double Buffering + PFD_TYPE_RGBA, // Request An RGBA Format + 32, // Select Our Color Depth + 0, 0, 0, 0, 0, 0, // Color Bits Ignored + 0, // 8bit Alpha Buffer + 0, // Shift Bit Ignored + 0, // No Accumulation Buffer + 0, 0, 0, 0, // Accumulation Bits Ignored + 24, // 24Bit Z-Buffer (Depth Buffer) + 8, // 8bit Stencil Buffer + 0, // No Auxiliary Buffer + PFD_MAIN_PLANE, // Main Drawing Layer + 0, // Reserved + 0, 0, 0 // Layer Masks Ignored + }; + + if (!(hDC=GetDC(EmuWindow::GetWnd()))) { + PanicAlert("(1) Can't create an OpenGL Device context. Fail."); + return false; + } + + if (!(PixelFormat = ChoosePixelFormat(hDC,&pfd))) { + PanicAlert("(2) Can't find a suitable PixelFormat."); + return false; + } + + if (!SetPixelFormat(hDC, PixelFormat, &pfd)) { + PanicAlert("(3) Can't set the PixelFormat."); + return false; + } + + if (!(hRC = wglCreateContext(hDC))) { + PanicAlert("(4) Can't create an OpenGL rendering context."); + return false; + } + // -------------------------------------- + +#elif defined(HAVE_X11) && HAVE_X11 + XVisualInfo *vi; + Colormap cmap; + int glxMajorVersion, glxMinorVersion; + Atom wmDelete; + + // attributes for a single buffered visual in RGBA format with at least + // 8 bits per color and a 24 bit depth buffer + int attrListSgl[] = {GLX_RGBA, GLX_RED_SIZE, 8, + GLX_GREEN_SIZE, 8, + GLX_BLUE_SIZE, 8, + GLX_DEPTH_SIZE, 24, + None}; + + // attributes for a double buffered visual in RGBA format with at least + // 8 bits per color and a 24 bit depth buffer + int attrListDbl[] = { GLX_RGBA, GLX_DOUBLEBUFFER, + GLX_RED_SIZE, 8, + GLX_GREEN_SIZE, 8, + GLX_BLUE_SIZE, 8, + GLX_DEPTH_SIZE, 24, + GLX_SAMPLE_BUFFERS_ARB, GLX_SAMPLES_ARB, 1, None }; + + int attrListDefault[] = { + GLX_RGBA, + GLX_RED_SIZE, 1, + GLX_GREEN_SIZE, 1, + GLX_BLUE_SIZE, 1, + GLX_DOUBLEBUFFER, + GLX_DEPTH_SIZE, 1, + None }; + + GLWin.dpy = XOpenDisplay(0); + GLWin.parent = (Window)g_VideoInitialize.pWindowHandle; + g_VideoInitialize.pWindowHandle = (HWND)GLWin.dpy; + GLWin.screen = DefaultScreen(GLWin.dpy); + + /* get an appropriate visual */ + vi = glXChooseVisual(GLWin.dpy, GLWin.screen, attrListDbl); + if (vi == NULL) + { + vi = glXChooseVisual(GLWin.dpy, GLWin.screen, attrListSgl); + if (vi != NULL) + { + ERROR_LOG(VIDEO, "Only Singlebuffered Visual!"); + } + else + { + vi = glXChooseVisual(GLWin.dpy, GLWin.screen, attrListDefault); + if (vi == NULL) + { + ERROR_LOG(VIDEO, "Could not choose visual (glXChooseVisual)"); + exit(0); + } + } + } + else + NOTICE_LOG(VIDEO, "Got Doublebuffered Visual!"); + + glXQueryVersion(GLWin.dpy, &glxMajorVersion, &glxMinorVersion); + NOTICE_LOG(VIDEO, "glX-Version %d.%d", glxMajorVersion, glxMinorVersion); + // Create a GLX context. + GLWin.ctx = glXCreateContext(GLWin.dpy, vi, 0, GL_TRUE); + if(!GLWin.ctx) + { + PanicAlert("Couldn't Create GLX context.Quit"); + exit(0); // TODO: Don't bring down entire Emu + } + + if (GLWin.parent == 0) + GLWin.parent = RootWindow(GLWin.dpy, vi->screen); + // Create a color map. + cmap = XCreateColormap(GLWin.dpy, GLWin.parent, vi->visual, AllocNone); + GLWin.attr.colormap = cmap; + GLWin.attr.border_pixel = 0; + XkbSetDetectableAutoRepeat(GLWin.dpy, True, NULL); + + // create a window in window mode + GLWin.attr.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask | + StructureNotifyMask | ResizeRedirectMask; + GLWin.win = XCreateWindow(GLWin.dpy, GLWin.parent, + xPos, yPos, _twidth, _theight, 0, vi->depth, InputOutput, vi->visual, + CWBorderPixel | CWColormap | CWEventMask, &GLWin.attr); + // only set window title and handle wm_delete_events if in windowed mode + wmDelete = XInternAtom(GLWin.dpy, "WM_DELETE_WINDOW", True); + XSetWMProtocols(GLWin.dpy, GLWin.win, &wmDelete, 1); + XSetStandardProperties(GLWin.dpy, GLWin.win, "GPU", + "GPU", None, NULL, 0, NULL); + XMapRaised(GLWin.dpy, GLWin.win); + + g_VideoInitialize.pXWindow = (Window *) &GLWin.win; +#endif + return true; +} + +bool OpenGL_MakeCurrent() +{ +#if defined(USE_WX) && USE_WX + GLWin.glCanvas->SetCurrent(*GLWin.glCtxt); +#elif defined(_WIN32) + if (!wglMakeCurrent(hDC,hRC)) { + PanicAlert("(5) Can't Activate The GL Rendering Context."); + return false; + } +#elif defined(HAVE_X11) && HAVE_X11 + Window winDummy; + unsigned int borderDummy; + // connect the glx-context to the window + glXMakeCurrent(GLWin.dpy, GLWin.win, GLWin.ctx); + XGetGeometry(GLWin.dpy, GLWin.win, &winDummy, &GLWin.x, &GLWin.y, + &GLWin.width, &GLWin.height, &borderDummy, &GLWin.depth); + NOTICE_LOG(VIDEO, "GLWin Depth %d", GLWin.depth) + if (glXIsDirect(GLWin.dpy, GLWin.ctx)) { + NOTICE_LOG(VIDEO, "detected direct rendering"); + } else { + ERROR_LOG(VIDEO, "no Direct Rendering possible!"); + } + + // better for pad plugin key input (thc) + XSelectInput(GLWin.dpy, GLWin.win, ExposureMask | KeyPressMask | KeyReleaseMask | + StructureNotifyMask | EnterWindowMask | LeaveWindowMask | FocusChangeMask ); +#endif + return true; +} +// Update window width, size and etc. Called from Render.cpp +void OpenGL_Update() +{ +#if defined(USE_WX) && USE_WX + RECT rcWindow = {0}; + rcWindow.right = GLWin.width; + rcWindow.bottom = GLWin.height; + + // TODO fill in + +#elif defined(_WIN32) + RECT rcWindow; + if (!EmuWindow::GetParentWnd()) + { + // We are not rendering to a child window - use client size. + GetClientRect(EmuWindow::GetWnd(), &rcWindow); + } + else + { + // We are rendering to a child window - use parent size. + GetWindowRect(EmuWindow::GetParentWnd(), &rcWindow); + } + + // --------------------------------------------------------------------------------------- + // Get the new window width and height + // ------------------ + // See below for documentation + // ------------------ + int width = rcWindow.right - rcWindow.left; + int height = rcWindow.bottom - rcWindow.top; + + // If we are rendering to a child window + if (EmuWindow::GetParentWnd() != 0) + ::MoveWindow(EmuWindow::GetWnd(), 0, 0, width, height, FALSE); + + s_backbuffer_width = width; + s_backbuffer_height = height; + +#elif defined(HAVE_X11) && HAVE_X11 + // We just check all of our events here + XEvent event; + int num_events; + for (num_events = XPending(GLWin.dpy);num_events > 0;num_events--) { + XNextEvent(GLWin.dpy, &event); + switch(event.type) { + case ConfigureNotify: + Window winDummy; + unsigned int borderDummy; + XGetGeometry(GLWin.dpy, GLWin.win, &winDummy, &GLWin.x, &GLWin.y, + &GLWin.width, &GLWin.height, &borderDummy, &GLWin.depth); + s_backbuffer_width = GLWin.width; + s_backbuffer_height = GLWin.height; + break; + case ClientMessage: + if ((ulong) event.xclient.data.l[0] == XInternAtom(GLWin.dpy, "WM_DELETE_WINDOW", False)) + g_VideoInitialize.pCoreMessage(WM_USER_STOP); + if ((ulong) event.xclient.data.l[0] == XInternAtom(GLWin.dpy, "RESIZE", False)) + XMoveResizeWindow(GLWin.dpy, GLWin.win, event.xclient.data.l[1], + event.xclient.data.l[2], event.xclient.data.l[3], event.xclient.data.l[4]); + return; + break; + default: + break; + } + } + return; +#endif +} + + +// Close plugin +void OpenGL_Shutdown() +{ +#if defined(USE_WX) && USE_WX + delete GLWin.glCanvas; + delete GLWin.frame; +#elif defined(_WIN32) + if (hRC) // Do We Have A Rendering Context? + { + if (!wglMakeCurrent(NULL,NULL)) // Are We Able To Release The DC And RC Contexts? + { + // [F|RES]: if this fails i dont see the message box and + // cant get out of the modal state so i disable it. + // This function fails only if i render to main window + // MessageBox(NULL,"Release Of DC And RC Failed.", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION); + } + + if (!wglDeleteContext(hRC)) // Are We Able To Delete The RC? + { + ERROR_LOG(VIDEO, "Release Rendering Context Failed."); + } + hRC = NULL; // Set RC To NULL + } + + if (hDC && !ReleaseDC(EmuWindow::GetWnd(), hDC)) // Are We Able To Release The DC + { + ERROR_LOG(VIDEO, "Release Device Context Failed."); + hDC = NULL; // Set DC To NULL + } +#elif defined(HAVE_X11) && HAVE_X11 + if (GLWin.ctx) + { + if (!glXMakeCurrent(GLWin.dpy, None, NULL)) + { + ERROR_LOG(VIDEO, "Could not release drawing context.\n"); + } + XUnmapWindow(GLWin.dpy, GLWin.win); + glXDestroyContext(GLWin.dpy, GLWin.ctx); + XCloseDisplay(GLWin.dpy); + GLWin.ctx = NULL; + } +#endif +} + +GLuint OpenGL_ReportGLError(const char *function, const char *file, int line) +{ + GLint err = glGetError(); + if (err != GL_NO_ERROR) + { + ERROR_LOG(VIDEO, "%s:%d: (%s) OpenGL error 0x%x - %s\n", file, line, function, err, gluErrorString(err)); + } + return err; +} + +void OpenGL_ReportARBProgramError() +{ + const GLubyte* pstr = glGetString(GL_PROGRAM_ERROR_STRING_ARB); + if (pstr != NULL && pstr[0] != 0) + { + GLint loc = 0; + glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &loc); + ERROR_LOG(VIDEO, "program error at %d: ", loc); + ERROR_LOG(VIDEO, (char*)pstr); + ERROR_LOG(VIDEO, ""); + } +} + +bool OpenGL_ReportFBOError(const char *function, const char *file, int line) +{ + unsigned int fbo_status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); + if (fbo_status != GL_FRAMEBUFFER_COMPLETE_EXT) + { + const char *error = "-"; + switch (fbo_status) + { + case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: error = "INCOMPLETE_ATTACHMENT_EXT"; break; + case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: error = "INCOMPLETE_MISSING_ATTACHMENT_EXT"; break; + case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: error = "INCOMPLETE_DIMENSIONS_EXT"; break; + case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: error = "INCOMPLETE_FORMATS_EXT"; break; + case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: error = "INCOMPLETE_DRAW_BUFFER_EXT"; break; + case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: error = "INCOMPLETE_READ_BUFFER_EXT"; break; + case GL_FRAMEBUFFER_UNSUPPORTED_EXT: error = "UNSUPPORTED_EXT"; break; + } + ERROR_LOG(VIDEO, "%s:%d: (%s) OpenGL FBO error - %s\n", file, line, function, error); + return false; + } + return true; +} diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.h b/Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.h index 99d11b4d03..c4a7434471 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.h +++ b/Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.h @@ -1,148 +1,141 @@ -// Copyright (C) 2003-2009 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 _GLINIT_H_
-#define _GLINIT_H_
-
-#if defined GLTEST && GLTEST
-#include "nGLUtil.h"
-#else
-#include "Common.h"
-#include <string>
-#include "VideoConfig.h"
-#include "pluginspecs_video.h"
-
-#ifdef _WIN32
-
-#define GLEW_STATIC
-
-#include <GLew/glew.h>
-#include <GLew/wglew.h>
-#include <GLew/gl.h>
-#include <GLew/glext.h>
-
-#else // linux basic definitions
-
-#if defined(USE_WX) && USE_WX
-#include <GL/glew.h>
-#include "wx/wx.h"
-#include "wx/glcanvas.h"
-#undef HAVE_X11
-#elif defined(HAVE_X11) && HAVE_X11
-#define I_NEED_OS2_H // HAXXOR
-#include <GL/glxew.h>
-#include <X11/XKBlib.h>
-#elif defined(USE_SDL) && USE_SDL
-#include <GL/glew.h>
-#include <SDL.h>
-#elif defined(HAVE_COCOA) && HAVE_COCOA
-#include <GL/glew.h>
-#include "cocoaGL.h"
-#endif // end USE_WX
-
-#if defined(__APPLE__)
-#include <OpenGL/gl.h>
-#else
-#include <GL/gl.h>
-#endif
-
-#endif // linux basic definitions
-
-#ifndef GL_DEPTH24_STENCIL8_EXT // allows FBOs to support stencils
-#define GL_DEPTH_STENCIL_EXT 0x84F9
-#define GL_UNSIGNED_INT_24_8_EXT 0x84FA
-#define GL_DEPTH24_STENCIL8_EXT 0x88F0
-#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1
-#endif
-
-#ifndef _WIN32
-#if defined(HAVE_X11) && HAVE_X11
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/keysym.h>
-#endif // X11
-
-#include <sys/stat.h>
-#include <sys/types.h>
-
-typedef struct {
- int screen;
-#if defined(HAVE_COCOA) && HAVE_COCOA
- NSWindow *cocoaWin;
- NSOpenGLContext *cocoaCtx;
-#elif defined(HAVE_X11) && HAVE_X11
- Window win;
- Window parent;
- Display *dpy;
- GLXContext ctx;
- XSetWindowAttributes attr;
-#endif // X11
-#if defined(USE_WX) && USE_WX
- wxGLCanvas *glCanvas;
- wxFrame *frame;
- wxGLContext *glCtxt;
-#endif
- int x, y;
- unsigned int width, height;
- unsigned int depth;
-} GLWindow;
-
-extern GLWindow GLWin;
-
-#endif
-
-// Public OpenGL util
-
-// Initialization / upkeep
-bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _width, int _height);
-void OpenGL_Shutdown();
-void OpenGL_Update();
-bool OpenGL_MakeCurrent();
-void OpenGL_SwapBuffers();
-
-// Get status
-u32 OpenGL_GetBackbufferWidth();
-u32 OpenGL_GetBackbufferHeight();
-
-// Set things
-void OpenGL_SetWindowText(const char *text);
-
-// Error reporting - use the convenient macros.
-void OpenGL_ReportARBProgramError();
-GLuint OpenGL_ReportGLError(const char *function, const char *file, int line);
-bool OpenGL_ReportFBOError(const char *function, const char *file, int line);
-
-#if 1
-#define GL_REPORT_ERROR() OpenGL_ReportGLError (__FUNCTION__, __FILE__, __LINE__)
-#define GL_REPORT_PROGRAM_ERROR() OpenGL_ReportARBProgramError()
-#define GL_REPORT_FBO_ERROR() OpenGL_ReportFBOError (__FUNCTION__, __FILE__, __LINE__)
-#else
-#define GL_REPORT_ERROR() GL_NO_ERROR
-#define GL_REPORT_PROGRAM_ERROR()
-#define GL_REPORT_FBO_ERROR()
-#endif
-
-#if defined(_DEBUG) || defined(DEBUGFAST)
-#define GL_REPORT_ERRORD() OpenGL_ReportGLError(__FUNCTION__, __FILE__, __LINE__)
-#else
-#define GL_REPORT_ERRORD()
-#endif
-
-#endif // GLTEST ??
-
-#endif // _GLINIT_H_
+// Copyright (C) 2003-2009 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 _GLINIT_H_ +#define _GLINIT_H_ + +#if defined GLTEST && GLTEST +#include "nGLUtil.h" +#else +#include "Common.h" +#include <string> +#include "VideoConfig.h" +#include "pluginspecs_video.h" + +#ifdef _WIN32 + +#define GLEW_STATIC + +#include <GLew/glew.h> +#include <GLew/wglew.h> +#include <GLew/gl.h> +#include <GLew/glext.h> + +#else // linux basic definitions + +#if defined(USE_WX) && USE_WX +#include <GL/glew.h> +#include "wx/wx.h" +#include "wx/glcanvas.h" +#undef HAVE_X11 +#elif defined(HAVE_X11) && HAVE_X11 +#define I_NEED_OS2_H // HAXXOR +#include <GL/glxew.h> +#include <X11/XKBlib.h> +#elif defined(USE_SDL) && USE_SDL +#include <GL/glew.h> +#include <SDL.h> +#endif // end USE_WX + +#if defined(__APPLE__) +#include <OpenGL/gl.h> +#else +#include <GL/gl.h> +#endif + +#endif // linux basic definitions + +#ifndef GL_DEPTH24_STENCIL8_EXT // allows FBOs to support stencils +#define GL_DEPTH_STENCIL_EXT 0x84F9 +#define GL_UNSIGNED_INT_24_8_EXT 0x84FA +#define GL_DEPTH24_STENCIL8_EXT 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 +#endif + +#ifndef _WIN32 +#if defined(HAVE_X11) && HAVE_X11 +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <X11/keysym.h> +#endif // X11 + +#include <sys/stat.h> +#include <sys/types.h> + +typedef struct { + int screen; +#if defined(HAVE_X11) && HAVE_X11 + Window win; + Window parent; + Display *dpy; + GLXContext ctx; + XSetWindowAttributes attr; +#elif defined(USE_WX) && USE_WX + wxGLCanvas *glCanvas; + wxFrame *frame; + wxGLContext *glCtxt; +#endif + int x, y; + unsigned int width, height; + unsigned int depth; +} GLWindow; + +extern GLWindow GLWin; + +#endif + +// Public OpenGL util + +// Initialization / upkeep +bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _width, int _height); +void OpenGL_Shutdown(); +void OpenGL_Update(); +bool OpenGL_MakeCurrent(); +void OpenGL_SwapBuffers(); + +// Get status +u32 OpenGL_GetBackbufferWidth(); +u32 OpenGL_GetBackbufferHeight(); + +// Set things +void OpenGL_SetWindowText(const char *text); + +// Error reporting - use the convenient macros. +void OpenGL_ReportARBProgramError(); +GLuint OpenGL_ReportGLError(const char *function, const char *file, int line); +bool OpenGL_ReportFBOError(const char *function, const char *file, int line); + +#if 1 +#define GL_REPORT_ERROR() OpenGL_ReportGLError (__FUNCTION__, __FILE__, __LINE__) +#define GL_REPORT_PROGRAM_ERROR() OpenGL_ReportARBProgramError() +#define GL_REPORT_FBO_ERROR() OpenGL_ReportFBOError (__FUNCTION__, __FILE__, __LINE__) +#else +#define GL_REPORT_ERROR() GL_NO_ERROR +#define GL_REPORT_PROGRAM_ERROR() +#define GL_REPORT_FBO_ERROR() +#endif + +#if defined(_DEBUG) || defined(DEBUGFAST) +#define GL_REPORT_ERRORD() OpenGL_ReportGLError(__FUNCTION__, __FILE__, __LINE__) +#else +#define GL_REPORT_ERRORD() +#endif + +#endif // GLTEST ?? + +#endif // _GLINIT_H_ diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/SConscript b/Source/Plugins/Plugin_VideoSoftware/Src/SConscript index 6732a13b0f..9bdd52243c 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/SConscript +++ b/Source/Plugins/Plugin_VideoSoftware/Src/SConscript @@ -53,9 +53,6 @@ conf = gfxenv.Configure(custom_tests = tests, if sys.platform == 'darwin': gfxenv['FRAMEWORKS'] = ['CoreFoundation', 'System', 'OpenGL', 'Cocoa', 'Cg'] - compileFlags = ['-x','objective-c++',] - files += [ 'cocoaGL.m', ] - conf.CheckPKG('OpenGL') if gfxenv['HAVE_OPENCL']: gfxenv['FRAMEWORKS'] += ['OpenCL'] 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 <Cocoa/Cocoa.h> -#import <OpenGL/CGLRenderers.h> - -#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 6a821635e2..0000000000 --- a/Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.m +++ /dev/null @@ -1,149 +0,0 @@ -#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]; -} |
