Fix an issue that made it so that the emulator could not be resized in the nowx build on linux. Also some code cleanup in the OpenGL and Software plugins.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5889 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Glenn Rice
2010-07-16 21:56:40 +00:00
parent aa88d8b790
commit 25efe443ea
6 changed files with 216 additions and 312 deletions

View File

@ -22,34 +22,23 @@
#include "Render.h" #include "Render.h"
#include "GLUtil.h"
#if defined(_WIN32) #if defined(_WIN32)
#include "OS/Win32.h" #include "OS/Win32.h"
static HDC hDC = NULL; // Private GDI Device Context
static HGLRC hRC = NULL; // Permanent Rendering Context
extern HINSTANCE g_hInstance;
#else #else
struct RECT GLWindow GLWin;
{
int left, top;
int right, bottom;
};
#endif #endif
#include "GLUtil.h"
// Handles OpenGL and the window // Handles OpenGL and the window
// Window dimensions. // Window dimensions.
static int s_backbuffer_width; static int s_backbuffer_width;
static int s_backbuffer_height; 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() void OpenGL_SwapBuffers()
{ {
#if defined(USE_WX) && USE_WX #if defined(USE_WX) && USE_WX
@ -82,9 +71,9 @@ void OpenGL_SetWindowText(const char *text)
#elif defined(_WIN32) #elif defined(_WIN32)
// TODO convert text to unicode and change SetWindowTextA to SetWindowText // TODO convert text to unicode and change SetWindowTextA to SetWindowText
SetWindowTextA(EmuWindow::GetWnd(), text); SetWindowTextA(EmuWindow::GetWnd(), text);
#elif defined(HAVE_X11) && HAVE_X11 // GLX #elif defined(HAVE_X11) && HAVE_X11
// Tell X to ask the window manager to set the window title. (X // Tell X to ask the window manager to set the window title.
// itself doesn't provide window title functionality.) // (X itself doesn't provide window title functionality.)
XStoreName(GLWin.dpy, GLWin.win, text); XStoreName(GLWin.dpy, GLWin.win, text);
#endif #endif
} }
@ -127,8 +116,7 @@ void CreateXWindow (void)
GLWin.attr.colormap = XCreateColormap(GLWin.dpy, GLWin.attr.colormap = XCreateColormap(GLWin.dpy,
GLWin.parent, GLWin.vi->visual, AllocNone); GLWin.parent, GLWin.vi->visual, AllocNone);
GLWin.attr.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask | GLWin.attr.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask |
StructureNotifyMask | ResizeRedirectMask | EnterWindowMask | StructureNotifyMask | EnterWindowMask | LeaveWindowMask | FocusChangeMask;
LeaveWindowMask | FocusChangeMask;
GLWin.attr.background_pixel = BlackPixel(GLWin.dpy, GLWin.screen); GLWin.attr.background_pixel = BlackPixel(GLWin.dpy, GLWin.screen);
GLWin.attr.border_pixel = 0; GLWin.attr.border_pixel = 0;
@ -147,7 +135,6 @@ void CreateXWindow (void)
void DestroyXWindow(void) void DestroyXWindow(void)
{ {
/* switch back to original desktop resolution if we were in fullscreen */
XUnmapWindow(GLWin.dpy, GLWin.win); XUnmapWindow(GLWin.dpy, GLWin.win);
GLWin.win = 0; GLWin.win = 0;
XFreeColormap(GLWin.dpy, GLWin.attr.colormap); XFreeColormap(GLWin.dpy, GLWin.attr.colormap);
@ -366,7 +353,7 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _iwidth, int _iheight
glXQueryVersion(GLWin.dpy, &glxMajorVersion, &glxMinorVersion); glXQueryVersion(GLWin.dpy, &glxMajorVersion, &glxMinorVersion);
NOTICE_LOG(VIDEO, "glX-Version %d.%d", glxMajorVersion, glxMinorVersion); NOTICE_LOG(VIDEO, "glX-Version %d.%d", glxMajorVersion, glxMinorVersion);
/* get an appropriate visual */ // Get an appropriate visual
GLWin.vi = glXChooseVisual(GLWin.dpy, GLWin.screen, attrListDbl); GLWin.vi = glXChooseVisual(GLWin.dpy, GLWin.screen, attrListDbl);
if (GLWin.vi == NULL) if (GLWin.vi == NULL)
{ {
@ -428,16 +415,12 @@ bool OpenGL_MakeCurrent()
void OpenGL_Update() void OpenGL_Update()
{ {
#if defined(USE_WX) && USE_WX #if defined(USE_WX) && USE_WX
RECT rcWindow = {0}; GLWin.glCanvas->GetSize((int *)&GLWin.width, (int *)&GLWin.height);
rcWindow.right = GLWin.width; s_backbuffer_width = GLWin.width;
rcWindow.bottom = GLWin.height; s_backbuffer_height = GLWin.height;
// TODO fill in
#elif defined(__APPLE__) #elif defined(__APPLE__)
RECT rcWindow = {0};
rcWindow.right = GLWin.width; // Is anything needed here?
rcWindow.bottom = GLWin.height;
#elif defined(_WIN32) #elif defined(_WIN32)
RECT rcWindow; RECT rcWindow;
@ -452,11 +435,8 @@ void OpenGL_Update()
GetWindowRect(EmuWindow::GetParentWnd(), &rcWindow); GetWindowRect(EmuWindow::GetParentWnd(), &rcWindow);
} }
// ---------------------------------------------------------------------------------------
// Get the new window width and height // Get the new window width and height
// ------------------
// See below for documentation // See below for documentation
// ------------------
int width = rcWindow.right - rcWindow.left; int width = rcWindow.right - rcWindow.left;
int height = rcWindow.bottom - rcWindow.top; int height = rcWindow.bottom - rcWindow.top;
@ -467,8 +447,6 @@ void OpenGL_Update()
s_backbuffer_width = width; s_backbuffer_width = width;
s_backbuffer_height = height; s_backbuffer_height = height;
} }
#elif defined(HAVE_X11) && HAVE_X11
#endif #endif
} }

View File

@ -71,11 +71,15 @@
#include <sys/types.h> #include <sys/types.h>
typedef struct { typedef struct {
int screen; #if defined(USE_WX) && USE_WX
#if defined(__APPLE__) wxGLCanvas *glCanvas;
wxPanel *panel;
wxGLContext *glCtxt;
#elif defined(__APPLE__)
NSWindow *cocoaWin; NSWindow *cocoaWin;
NSOpenGLContext *cocoaCtx; NSOpenGLContext *cocoaCtx;
#elif defined(HAVE_X11) && HAVE_X11 #elif defined(HAVE_X11) && HAVE_X11
int screen;
Window win; Window win;
Window parent; Window parent;
Display *dpy; Display *dpy;
@ -83,13 +87,8 @@ typedef struct {
GLXContext ctx; GLXContext ctx;
XSetWindowAttributes attr; XSetWindowAttributes attr;
Common::Thread *xEventThread; Common::Thread *xEventThread;
#endif // X11
#if defined(USE_WX) && USE_WX
wxGLCanvas *glCanvas;
wxPanel *panel;
wxGLContext *glCtxt;
#endif
int x, y; int x, y;
#endif
unsigned int width, height; unsigned int width, height;
} GLWindow; } GLWindow;

View File

@ -1,11 +1,7 @@
# -*- python -*- # -*- python -*-
Import('env') Import('env')
# can we import path in one place?
import sys import sys
sys.path.append(env['base_dir']+'SconsTests')
import utils
import platform
name = "Plugin_VideoOGL" name = "Plugin_VideoOGL"
@ -24,22 +20,20 @@ files = [
'XFB.cpp', 'XFB.cpp',
'PostProcessing.cpp', 'PostProcessing.cpp',
'FramebufferManager.cpp', 'FramebufferManager.cpp',
'main.cpp',
'GLUtil.cpp'
] ]
linkFlags = [
]
libs = [ libs = [
'videocommon', 'GLEW', 'SOIL', 'common' 'videocommon', 'GLEW', 'SOIL', 'common'
] ]
gfxenv = env.Clone() gfxenv = env.Clone()
files += [
'main.cpp',
'GLUtil.cpp',
]
if sys.platform != 'darwin': if sys.platform != 'darwin':
if gfxenv['HAVE_OPENCL']: if gfxenv['HAVE_OPENCL']:
libs += [ 'OpenCL'] libs += [ 'OpenCL']
if gfxenv['HAVE_WX']: if gfxenv['HAVE_WX']:
files += [ files += [
'GUI/ConfigDlg.cpp', 'GUI/ConfigDlg.cpp',
@ -51,14 +45,7 @@ if sys.platform == 'darwin':
if sys.platform == 'win32': if sys.platform == 'win32':
files += [ 'OS/Win32.cpp' ] files += [ 'OS/Win32.cpp' ]
libs += [ env['base_dir'] + '/Externals/Cg/' ]
if sys.platform == 'win32':
files += [
'OS/Win32.cpp'
]
libs += [
env['base_dir'] + '/Externals/Cg/'
]
gfxenv['CPPPATH'] += libs gfxenv['CPPPATH'] += libs
gfxenv.SharedLibrary( gfxenv.SharedLibrary(

View File

@ -20,36 +20,23 @@
#include "IniFile.h" #include "IniFile.h"
#include "Setup.h" #include "Setup.h"
//#include "Render.h" #include "GLUtil.h"
#if defined(_WIN32) #if defined(_WIN32)
#include "Win32.h" #include "Win32.h"
static HDC hDC = NULL; // Private GDI Device Context
static HGLRC hRC = NULL; // Permanent Rendering Context
extern HINSTANCE g_hInstance;
#else #else
struct RECT GLWindow GLWin;
{
int left, top;
int right, bottom;
};
#endif #endif
#include "GLUtil.h"
// Handles OpenGL and the window // Handles OpenGL and the window
// Window dimensions. // Window dimensions.
static int s_backbuffer_width; static int s_backbuffer_width;
static int s_backbuffer_height; 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() void OpenGL_SwapBuffers()
{ {
#if defined(USE_WX) && USE_WX #if defined(USE_WX) && USE_WX
@ -74,22 +61,18 @@ u32 OpenGL_GetBackbufferHeight()
void OpenGL_SetWindowText(const char *text) void OpenGL_SetWindowText(const char *text)
{ {
#if defined(USE_WX) && USE_WX #if defined(USE_WX) && USE_WX
GLWin.frame->SetTitle(wxString::FromAscii(text)); // GLWin.frame->SetTitle(wxString::FromAscii(text));
#elif defined(_WIN32) #elif defined(_WIN32)
// TODO convert text to unicode and change SetWindowTextA to SetWindowText // TODO convert text to unicode and change SetWindowTextA to SetWindowText
SetWindowTextA(EmuWindow::GetWnd(), text); SetWindowTextA(EmuWindow::GetWnd(), text);
#elif defined(HAVE_X11) && HAVE_X11 // GLX #elif defined(HAVE_X11) && HAVE_X11
/** // Tell X to ask the window manager to set the window title.
* Tell X to ask the window manager to set the window title. (X // (X itself doesn't provide window title functionality.)
* itself doesn't provide window title functionality.)
*/
XStoreName(GLWin.dpy, GLWin.win, text); XStoreName(GLWin.dpy, GLWin.win, text);
#endif #endif
} }
// =======================================================================================
// Draw messages on top of the screen // Draw messages on top of the screen
// ------------------
unsigned int Callback_PeekMessages() unsigned int Callback_PeekMessages()
{ {
#ifdef _WIN32 #ifdef _WIN32
@ -115,13 +98,9 @@ void UpdateFPSDisplay(const char *text)
sprintf(temp, "SVN R%s: SW: %s", svn_rev_str, text); sprintf(temp, "SVN R%s: SW: %s", svn_rev_str, text);
OpenGL_SetWindowText(temp); OpenGL_SetWindowText(temp);
} }
// =========================
// =======================================================================================
// Create rendering window. // Create rendering window.
// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize() // Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize()
// ------------------
bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _twidth, int _theight) bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _twidth, int _theight)
{ {
int xPos, yPos; int xPos, yPos;
@ -130,11 +109,8 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _twidth, int _theight
#if defined(_WIN32) #if defined(_WIN32)
EmuWindow::SetSize(_twidth, _theight); EmuWindow::SetSize(_twidth, _theight);
#endif #endif
// ----------------------------
// ---------------------------------------------------------------------------------------
// Control window size and picture scaling // Control window size and picture scaling
// ------------------
s_backbuffer_width = _twidth; s_backbuffer_width = _twidth;
s_backbuffer_height = _theight; s_backbuffer_height = _theight;
@ -142,28 +118,22 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _twidth, int _theight
g_VideoInitialize.pUpdateFPSDisplay = &UpdateFPSDisplay; g_VideoInitialize.pUpdateFPSDisplay = &UpdateFPSDisplay;
#if defined(USE_WX) && USE_WX #if defined(USE_WX) && USE_WX
int args[] = {WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 16, 0}; int args[] = {WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 16, 0};
wxSize size(_twidth, _theight); 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, GLWin.panel = (wxPanel *)g_VideoInitialize.pWindowHandle;
GLWin.glCanvas = new wxGLCanvas(GLWin.panel, wxID_ANY, args,
wxPoint(0,0), size, wxSUNKEN_BORDER); wxPoint(0,0), size, wxSUNKEN_BORDER);
GLWin.glCtxt = new wxGLContext(GLWin.glCanvas); GLWin.glCtxt = new wxGLContext(GLWin.glCanvas);
GLWin.frame->Show(TRUE);
GLWin.glCanvas->Show(TRUE); GLWin.glCanvas->Show(TRUE);
GLWin.glCanvas->SetCurrent(*GLWin.glCtxt); GLWin.glCanvas->SetCurrent(*GLWin.glCtxt);
#elif defined(_WIN32) #elif defined(_WIN32)
// ---------------------------------------------------------------------------------------
// Create rendering window in Windows // Create rendering window in Windows
// ----------------------
g_VideoInitialize.pWindowHandle = (void*)EmuWindow::Create((HWND)g_VideoInitialize.pWindowHandle, g_hInstance, _T("Please wait...")); g_VideoInitialize.pWindowHandle = (void*)EmuWindow::Create((HWND)g_VideoInitialize.pWindowHandle, g_hInstance, _T("Please wait..."));
// Show the window // Show the window
@ -273,7 +243,7 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _twidth, int _theight
GLWin.parent = (Window)g_VideoInitialize.pWindowHandle; GLWin.parent = (Window)g_VideoInitialize.pWindowHandle;
GLWin.screen = DefaultScreen(GLWin.dpy); GLWin.screen = DefaultScreen(GLWin.dpy);
/* get an appropriate visual */ // Get an appropriate visual
vi = glXChooseVisual(GLWin.dpy, GLWin.screen, attrListDbl); vi = glXChooseVisual(GLWin.dpy, GLWin.screen, attrListDbl);
if (vi == NULL) if (vi == NULL)
{ {
@ -313,14 +283,13 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _twidth, int _theight
GLWin.attr.border_pixel = 0; GLWin.attr.border_pixel = 0;
XkbSetDetectableAutoRepeat(GLWin.dpy, True, NULL); XkbSetDetectableAutoRepeat(GLWin.dpy, True, NULL);
// create a window in window mode // Create a window in window mode
GLWin.attr.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask | GLWin.attr.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask |
StructureNotifyMask | ResizeRedirectMask | EnterWindowMask | StructureNotifyMask | EnterWindowMask | LeaveWindowMask | FocusChangeMask;
LeaveWindowMask | FocusChangeMask;
GLWin.win = XCreateWindow(GLWin.dpy, GLWin.parent, GLWin.win = XCreateWindow(GLWin.dpy, GLWin.parent,
xPos, yPos, _twidth, _theight, 0, vi->depth, InputOutput, vi->visual, xPos, yPos, _twidth, _theight, 0, vi->depth, InputOutput, vi->visual,
CWBorderPixel | CWColormap | CWEventMask, &GLWin.attr); CWBorderPixel | CWColormap | CWEventMask, &GLWin.attr);
// only set window title and handle wm_delete_events if in windowed mode // Only set window title and handle wm_delete_events if in windowed mode
wmDelete = XInternAtom(GLWin.dpy, "WM_DELETE_WINDOW", True); wmDelete = XInternAtom(GLWin.dpy, "WM_DELETE_WINDOW", True);
XSetWMProtocols(GLWin.dpy, GLWin.win, &wmDelete, 1); XSetWMProtocols(GLWin.dpy, GLWin.win, &wmDelete, 1);
XSetStandardProperties(GLWin.dpy, GLWin.win, "GPU", XSetStandardProperties(GLWin.dpy, GLWin.win, "GPU",
@ -349,12 +318,9 @@ bool OpenGL_MakeCurrent()
void OpenGL_Update() void OpenGL_Update()
{ {
#if defined(USE_WX) && USE_WX #if defined(USE_WX) && USE_WX
RECT rcWindow = {0}; GLWin.glCanvas->GetSize((int *)&GLWin.width, (int *)&GLWin.height);
rcWindow.right = GLWin.width; s_backbuffer_width = GLWin.width;
rcWindow.bottom = GLWin.height; s_backbuffer_height = GLWin.height;
// TODO fill in
#elif defined(_WIN32) #elif defined(_WIN32)
RECT rcWindow; RECT rcWindow;
if (!EmuWindow::GetParentWnd()) if (!EmuWindow::GetParentWnd())
@ -368,11 +334,8 @@ void OpenGL_Update()
GetWindowRect(EmuWindow::GetParentWnd(), &rcWindow); GetWindowRect(EmuWindow::GetParentWnd(), &rcWindow);
} }
// ---------------------------------------------------------------------------------------
// Get the new window width and height // Get the new window width and height
// ------------------
// See below for documentation // See below for documentation
// ------------------
int width = rcWindow.right - rcWindow.left; int width = rcWindow.right - rcWindow.left;
int height = rcWindow.bottom - rcWindow.top; int height = rcWindow.bottom - rcWindow.top;
@ -392,9 +355,9 @@ void OpenGL_Update()
switch(event.type) { switch(event.type) {
case ConfigureNotify: case ConfigureNotify:
Window winDummy; Window winDummy;
unsigned int borderDummy; unsigned int borderDummy, depthDummy;
XGetGeometry(GLWin.dpy, GLWin.win, &winDummy, &GLWin.x, &GLWin.y, XGetGeometry(GLWin.dpy, GLWin.win, &winDummy, &GLWin.x, &GLWin.y,
&GLWin.width, &GLWin.height, &borderDummy, &GLWin.depth); &GLWin.width, &GLWin.height, &borderDummy, &depthDummy);
s_backbuffer_width = GLWin.width; s_backbuffer_width = GLWin.width;
s_backbuffer_height = GLWin.height; s_backbuffer_height = GLWin.height;
break; break;
@ -420,7 +383,6 @@ void OpenGL_Shutdown()
{ {
#if defined(USE_WX) && USE_WX #if defined(USE_WX) && USE_WX
delete GLWin.glCanvas; delete GLWin.glCanvas;
delete GLWin.frame;
#elif defined(_WIN32) #elif defined(_WIN32)
if (hRC) // Do We Have A Rendering Context? if (hRC) // Do We Have A Rendering Context?
{ {

View File

@ -19,9 +19,6 @@
#ifndef _GLINIT_H_ #ifndef _GLINIT_H_
#define _GLINIT_H_ #define _GLINIT_H_
#if defined GLTEST && GLTEST
#include "nGLUtil.h"
#else
#include "Common.h" #include "Common.h"
#include <string> #include <string>
#include "VideoConfig.h" #include "VideoConfig.h"
@ -42,11 +39,12 @@
#include <GL/glew.h> #include <GL/glew.h>
#include "wx/wx.h" #include "wx/wx.h"
#include "wx/glcanvas.h" #include "wx/glcanvas.h"
#undef HAVE_X11
#elif defined(HAVE_X11) && HAVE_X11 #elif defined(HAVE_X11) && HAVE_X11
#define I_NEED_OS2_H // HAXXOR
#include <GL/glxew.h> #include <GL/glxew.h>
#include <X11/XKBlib.h> #include <X11/XKBlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/keysym.h>
#else #else
#include <GL/glew.h> #include <GL/glew.h>
#endif // end USE_WX #endif // end USE_WX
@ -67,31 +65,25 @@
#endif #endif
#ifndef _WIN32 #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/stat.h>
#include <sys/types.h> #include <sys/types.h>
typedef struct { typedef struct {
#if defined(USE_WX) && USE_WX
wxGLCanvas *glCanvas;
wxPanel *panel;
wxGLContext *glCtxt;
#elif defined(HAVE_X11) && HAVE_X11
int screen; int screen;
#if defined(HAVE_X11) && HAVE_X11
Window win; Window win;
Window parent; Window parent;
Display *dpy; Display *dpy;
GLXContext ctx; GLXContext ctx;
XSetWindowAttributes attr; XSetWindowAttributes attr;
#elif defined(USE_WX) && USE_WX
wxGLCanvas *glCanvas;
wxFrame *frame;
wxGLContext *glCtxt;
#endif
int x, y; int x, y;
#endif
unsigned int width, height; unsigned int width, height;
unsigned int depth;
} GLWindow; } GLWindow;
extern GLWindow GLWin; extern GLWindow GLWin;
@ -135,6 +127,4 @@ bool OpenGL_ReportFBOError(const char *function, const char *file, int line);
#define GL_REPORT_ERRORD() #define GL_REPORT_ERRORD()
#endif #endif
#endif // GLTEST ??
#endif // _GLINIT_H_ #endif // _GLINIT_H_

View File

@ -1,11 +1,7 @@
# -*- python -*- # -*- python -*-
Import('env') Import('env')
# can we import path in one place?
import sys import sys
sys.path.append(env['base_dir']+'SconsTests')
import utils
import platform
name = "Plugin_VideoSoftware" name = "Plugin_VideoSoftware"
@ -36,27 +32,19 @@ files = [
'VideoConfig.cpp', 'VideoConfig.cpp',
'XFMemLoader.cpp', 'XFMemLoader.cpp',
] ]
linkFlags = [
]
libs = [ libs = [
'videocommon', 'GLEW', 'SOIL', 'common' 'videocommon', 'GLEW', 'SOIL', 'common'
] ]
gfxenv = env.Clone() gfxenv = env.Clone()
if sys.platform == 'win32':
files += [ 'Win32.cpp' ]
if sys.platform == 'darwin': if sys.platform == 'darwin':
files += [ 'cocoaGL.m', ] files += [ 'cocoaGL.m', ]
if sys.platform == 'win32': if sys.platform == 'win32':
files += [ files += [ 'Win32.cpp' ]
'Win32.cpp' libs += [ env['base_dir'] + '/Externals/Cg/' ]
]
libs += [
env['base_dir'] + '/Externals/Cg/'
]
gfxenv['CPPPATH'] += libs gfxenv['CPPPATH'] += libs
gfxenv.SharedLibrary( gfxenv.SharedLibrary(