summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/DolphinWX/Src/ConfigMain.cpp4
-rw-r--r--Source/Core/DolphinWX/Src/MainNoGUI.cpp4
-rw-r--r--Source/Core/DolphinWX/Src/SConscript44
-rw-r--r--Source/Dolphin.xcodeproj/project.pbxproj24
-rw-r--r--Source/Plugins/Plugin_GCPad/Src/Config.cpp2
-rw-r--r--Source/Plugins/Plugin_GCPad/Src/GCPad.h3
-rw-r--r--Source/Plugins/Plugin_VideoOGL/Src/GLUtil.cpp21
-rw-r--r--Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h12
-rw-r--r--Source/Plugins/Plugin_VideoOGL/Src/SConscript9
-rw-r--r--Source/Plugins/Plugin_VideoOGL/Src/cocoaGL.h29
-rwxr-xr-xSource/Plugins/Plugin_VideoOGL/Src/cocoaGL.m149
-rw-r--r--Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.cpp1066
-rw-r--r--Source/Plugins/Plugin_VideoSoftware/Src/GLUtil.h289
-rw-r--r--Source/Plugins/Plugin_VideoSoftware/Src/SConscript3
-rw-r--r--Source/Plugins/Plugin_VideoSoftware/Src/cocoaGL.h29
-rwxr-xr-xSource/Plugins/Plugin_VideoSoftware/Src/cocoaGL.m149
16 files changed, 691 insertions, 1146 deletions
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];
-}