mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-03-12 14:46:49 +01:00
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:
parent
aa88d8b790
commit
25efe443ea
@ -22,34 +22,23 @@
|
||||
|
||||
#include "Render.h"
|
||||
|
||||
#include "GLUtil.h"
|
||||
|
||||
#if defined(_WIN32)
|
||||
#include "OS/Win32.h"
|
||||
static HDC hDC = NULL; // Private GDI Device Context
|
||||
static HGLRC hRC = NULL; // Permanent Rendering Context
|
||||
extern HINSTANCE g_hInstance;
|
||||
#else
|
||||
struct RECT
|
||||
{
|
||||
int left, top;
|
||||
int right, bottom;
|
||||
};
|
||||
GLWindow GLWin;
|
||||
#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
|
||||
@ -82,9 +71,9 @@ void OpenGL_SetWindowText(const char *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.)
|
||||
#elif defined(HAVE_X11) && HAVE_X11
|
||||
// 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
|
||||
}
|
||||
@ -127,8 +116,7 @@ void CreateXWindow (void)
|
||||
GLWin.attr.colormap = XCreateColormap(GLWin.dpy,
|
||||
GLWin.parent, GLWin.vi->visual, AllocNone);
|
||||
GLWin.attr.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask |
|
||||
StructureNotifyMask | ResizeRedirectMask | EnterWindowMask |
|
||||
LeaveWindowMask | FocusChangeMask;
|
||||
StructureNotifyMask | EnterWindowMask | LeaveWindowMask | FocusChangeMask;
|
||||
GLWin.attr.background_pixel = BlackPixel(GLWin.dpy, GLWin.screen);
|
||||
GLWin.attr.border_pixel = 0;
|
||||
|
||||
@ -147,7 +135,6 @@ void CreateXWindow (void)
|
||||
|
||||
void DestroyXWindow(void)
|
||||
{
|
||||
/* switch back to original desktop resolution if we were in fullscreen */
|
||||
XUnmapWindow(GLWin.dpy, GLWin.win);
|
||||
GLWin.win = 0;
|
||||
XFreeColormap(GLWin.dpy, GLWin.attr.colormap);
|
||||
@ -366,7 +353,7 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _iwidth, int _iheight
|
||||
glXQueryVersion(GLWin.dpy, &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);
|
||||
if (GLWin.vi == NULL)
|
||||
{
|
||||
@ -428,16 +415,12 @@ bool OpenGL_MakeCurrent()
|
||||
void OpenGL_Update()
|
||||
{
|
||||
#if defined(USE_WX) && USE_WX
|
||||
RECT rcWindow = {0};
|
||||
rcWindow.right = GLWin.width;
|
||||
rcWindow.bottom = GLWin.height;
|
||||
|
||||
// TODO fill in
|
||||
|
||||
GLWin.glCanvas->GetSize((int *)&GLWin.width, (int *)&GLWin.height);
|
||||
s_backbuffer_width = GLWin.width;
|
||||
s_backbuffer_height = GLWin.height;
|
||||
#elif defined(__APPLE__)
|
||||
RECT rcWindow = {0};
|
||||
rcWindow.right = GLWin.width;
|
||||
rcWindow.bottom = GLWin.height;
|
||||
|
||||
// Is anything needed here?
|
||||
|
||||
#elif defined(_WIN32)
|
||||
RECT rcWindow;
|
||||
@ -452,11 +435,8 @@ void OpenGL_Update()
|
||||
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;
|
||||
|
||||
@ -467,8 +447,6 @@ void OpenGL_Update()
|
||||
s_backbuffer_width = width;
|
||||
s_backbuffer_height = height;
|
||||
}
|
||||
|
||||
#elif defined(HAVE_X11) && HAVE_X11
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -71,11 +71,15 @@
|
||||
#include <sys/types.h>
|
||||
|
||||
typedef struct {
|
||||
int screen;
|
||||
#if defined(__APPLE__)
|
||||
#if defined(USE_WX) && USE_WX
|
||||
wxGLCanvas *glCanvas;
|
||||
wxPanel *panel;
|
||||
wxGLContext *glCtxt;
|
||||
#elif defined(__APPLE__)
|
||||
NSWindow *cocoaWin;
|
||||
NSOpenGLContext *cocoaCtx;
|
||||
#elif defined(HAVE_X11) && HAVE_X11
|
||||
int screen;
|
||||
Window win;
|
||||
Window parent;
|
||||
Display *dpy;
|
||||
@ -83,13 +87,8 @@ typedef struct {
|
||||
GLXContext ctx;
|
||||
XSetWindowAttributes attr;
|
||||
Common::Thread *xEventThread;
|
||||
#endif // X11
|
||||
#if defined(USE_WX) && USE_WX
|
||||
wxGLCanvas *glCanvas;
|
||||
wxPanel *panel;
|
||||
wxGLContext *glCtxt;
|
||||
#endif
|
||||
int x, y;
|
||||
#endif
|
||||
unsigned int width, height;
|
||||
} GLWindow;
|
||||
|
||||
|
@ -1,11 +1,7 @@
|
||||
# -*- python -*-
|
||||
|
||||
Import('env')
|
||||
# can we import path in one place?
|
||||
import sys
|
||||
sys.path.append(env['base_dir']+'SconsTests')
|
||||
import utils
|
||||
import platform
|
||||
|
||||
name = "Plugin_VideoOGL"
|
||||
|
||||
@ -24,22 +20,20 @@ files = [
|
||||
'XFB.cpp',
|
||||
'PostProcessing.cpp',
|
||||
'FramebufferManager.cpp',
|
||||
'main.cpp',
|
||||
'GLUtil.cpp'
|
||||
]
|
||||
linkFlags = [
|
||||
]
|
||||
|
||||
libs = [
|
||||
'videocommon', 'GLEW', 'SOIL', 'common'
|
||||
]
|
||||
|
||||
gfxenv = env.Clone()
|
||||
|
||||
files += [
|
||||
'main.cpp',
|
||||
'GLUtil.cpp',
|
||||
]
|
||||
if sys.platform != 'darwin':
|
||||
if gfxenv['HAVE_OPENCL']:
|
||||
libs += [ 'OpenCL']
|
||||
|
||||
if gfxenv['HAVE_WX']:
|
||||
files += [
|
||||
'GUI/ConfigDlg.cpp',
|
||||
@ -51,14 +45,7 @@ if sys.platform == 'darwin':
|
||||
|
||||
if sys.platform == 'win32':
|
||||
files += [ 'OS/Win32.cpp' ]
|
||||
|
||||
if sys.platform == 'win32':
|
||||
files += [
|
||||
'OS/Win32.cpp'
|
||||
]
|
||||
libs += [
|
||||
env['base_dir'] + '/Externals/Cg/'
|
||||
]
|
||||
libs += [ env['base_dir'] + '/Externals/Cg/' ]
|
||||
gfxenv['CPPPATH'] += libs
|
||||
|
||||
gfxenv.SharedLibrary(
|
||||
|
@ -20,36 +20,23 @@
|
||||
#include "IniFile.h"
|
||||
#include "Setup.h"
|
||||
|
||||
//#include "Render.h"
|
||||
#include "GLUtil.h"
|
||||
|
||||
#if defined(_WIN32)
|
||||
#include "Win32.h"
|
||||
static HDC hDC = NULL; // Private GDI Device Context
|
||||
static HGLRC hRC = NULL; // Permanent Rendering Context
|
||||
extern HINSTANCE g_hInstance;
|
||||
#else
|
||||
struct RECT
|
||||
{
|
||||
int left, top;
|
||||
int right, bottom;
|
||||
};
|
||||
GLWindow GLWin;
|
||||
#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
|
||||
@ -74,22 +61,18 @@ u32 OpenGL_GetBackbufferHeight()
|
||||
void OpenGL_SetWindowText(const char *text)
|
||||
{
|
||||
#if defined(USE_WX) && USE_WX
|
||||
GLWin.frame->SetTitle(wxString::FromAscii(text));
|
||||
// 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.)
|
||||
*/
|
||||
#elif defined(HAVE_X11) && HAVE_X11
|
||||
// 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
|
||||
@ -115,13 +98,9 @@ void UpdateFPSDisplay(const char *text)
|
||||
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;
|
||||
@ -130,11 +109,8 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _twidth, int _theight
|
||||
#if defined(_WIN32)
|
||||
EmuWindow::SetSize(_twidth, _theight);
|
||||
#endif
|
||||
// ----------------------------
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
// Control window size and picture scaling
|
||||
// ------------------
|
||||
s_backbuffer_width = _twidth;
|
||||
s_backbuffer_height = _theight;
|
||||
|
||||
@ -142,28 +118,22 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _twidth, int _theight
|
||||
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,
|
||||
GLWin.panel = (wxPanel *)g_VideoInitialize.pWindowHandle;
|
||||
|
||||
GLWin.glCanvas = new wxGLCanvas(GLWin.panel, 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
|
||||
@ -273,7 +243,7 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _twidth, int _theight
|
||||
GLWin.parent = (Window)g_VideoInitialize.pWindowHandle;
|
||||
GLWin.screen = DefaultScreen(GLWin.dpy);
|
||||
|
||||
/* get an appropriate visual */
|
||||
// Get an appropriate visual
|
||||
vi = glXChooseVisual(GLWin.dpy, GLWin.screen, attrListDbl);
|
||||
if (vi == NULL)
|
||||
{
|
||||
@ -313,14 +283,13 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _twidth, int _theight
|
||||
GLWin.attr.border_pixel = 0;
|
||||
XkbSetDetectableAutoRepeat(GLWin.dpy, True, NULL);
|
||||
|
||||
// create a window in window mode
|
||||
// Create a window in window mode
|
||||
GLWin.attr.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask |
|
||||
StructureNotifyMask | ResizeRedirectMask | EnterWindowMask |
|
||||
LeaveWindowMask | FocusChangeMask;
|
||||
StructureNotifyMask | EnterWindowMask | LeaveWindowMask | FocusChangeMask;
|
||||
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
|
||||
// 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",
|
||||
@ -349,12 +318,9 @@ bool OpenGL_MakeCurrent()
|
||||
void OpenGL_Update()
|
||||
{
|
||||
#if defined(USE_WX) && USE_WX
|
||||
RECT rcWindow = {0};
|
||||
rcWindow.right = GLWin.width;
|
||||
rcWindow.bottom = GLWin.height;
|
||||
|
||||
// TODO fill in
|
||||
|
||||
GLWin.glCanvas->GetSize((int *)&GLWin.width, (int *)&GLWin.height);
|
||||
s_backbuffer_width = GLWin.width;
|
||||
s_backbuffer_height = GLWin.height;
|
||||
#elif defined(_WIN32)
|
||||
RECT rcWindow;
|
||||
if (!EmuWindow::GetParentWnd())
|
||||
@ -368,11 +334,8 @@ void OpenGL_Update()
|
||||
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;
|
||||
|
||||
@ -392,9 +355,9 @@ void OpenGL_Update()
|
||||
switch(event.type) {
|
||||
case ConfigureNotify:
|
||||
Window winDummy;
|
||||
unsigned int borderDummy;
|
||||
unsigned int borderDummy, depthDummy;
|
||||
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_height = GLWin.height;
|
||||
break;
|
||||
@ -420,7 +383,6 @@ 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?
|
||||
{
|
||||
|
@ -19,9 +19,6 @@
|
||||
#ifndef _GLINIT_H_
|
||||
#define _GLINIT_H_
|
||||
|
||||
#if defined GLTEST && GLTEST
|
||||
#include "nGLUtil.h"
|
||||
#else
|
||||
#include "Common.h"
|
||||
#include <string>
|
||||
#include "VideoConfig.h"
|
||||
@ -42,11 +39,12 @@
|
||||
#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>
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
#include <X11/keysym.h>
|
||||
#else
|
||||
#include <GL/glew.h>
|
||||
#endif // end USE_WX
|
||||
@ -67,31 +65,25 @@
|
||||
#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 {
|
||||
#if defined(USE_WX) && USE_WX
|
||||
wxGLCanvas *glCanvas;
|
||||
wxPanel *panel;
|
||||
wxGLContext *glCtxt;
|
||||
#elif defined(HAVE_X11) && HAVE_X11
|
||||
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;
|
||||
#endif
|
||||
unsigned int width, height;
|
||||
unsigned int depth;
|
||||
} GLWindow;
|
||||
|
||||
extern GLWindow GLWin;
|
||||
@ -135,6 +127,4 @@ bool OpenGL_ReportFBOError(const char *function, const char *file, int line);
|
||||
#define GL_REPORT_ERRORD()
|
||||
#endif
|
||||
|
||||
#endif // GLTEST ??
|
||||
|
||||
#endif // _GLINIT_H_
|
||||
|
@ -1,11 +1,7 @@
|
||||
# -*- python -*-
|
||||
|
||||
Import('env')
|
||||
# can we import path in one place?
|
||||
import sys
|
||||
sys.path.append(env['base_dir']+'SconsTests')
|
||||
import utils
|
||||
import platform
|
||||
|
||||
name = "Plugin_VideoSoftware"
|
||||
|
||||
@ -36,27 +32,19 @@ files = [
|
||||
'VideoConfig.cpp',
|
||||
'XFMemLoader.cpp',
|
||||
]
|
||||
linkFlags = [
|
||||
]
|
||||
|
||||
libs = [
|
||||
'videocommon', 'GLEW', 'SOIL', 'common'
|
||||
]
|
||||
|
||||
gfxenv = env.Clone()
|
||||
|
||||
if sys.platform == 'win32':
|
||||
files += [ 'Win32.cpp' ]
|
||||
|
||||
if sys.platform == 'darwin':
|
||||
files += [ 'cocoaGL.m', ]
|
||||
|
||||
if sys.platform == 'win32':
|
||||
files += [
|
||||
'Win32.cpp'
|
||||
]
|
||||
libs += [
|
||||
env['base_dir'] + '/Externals/Cg/'
|
||||
]
|
||||
files += [ 'Win32.cpp' ]
|
||||
libs += [ env['base_dir'] + '/Externals/Cg/' ]
|
||||
gfxenv['CPPPATH'] += libs
|
||||
|
||||
gfxenv.SharedLibrary(
|
||||
|
Loading…
x
Reference in New Issue
Block a user