Skip to content

Commit

Permalink
Move swap control to the host specific GLInterface files.
Browse files Browse the repository at this point in the history
  • Loading branch information
Sonicadvance1 committed Jan 24, 2013
1 parent 2db0c42 commit 73eb98e
Show file tree
Hide file tree
Showing 11 changed files with 45 additions and 34 deletions.
6 changes: 6 additions & 0 deletions Source/Core/DolphinWX/Src/GLInterface/EGL.cpp
Expand Up @@ -26,6 +26,12 @@ void cInterfaceEGL::UpdateFPSDisplay(const char *text)
{
XStoreName(GLWin.dpy, GLWin.win, text);
}

void cInterfaceEGL::SwapInterval(int Interval)
{
eglSwapInterval(GLWin.egl_dpy, Interval);
}

void cInterfaceEGL::Swap()
{
eglSwapBuffers(GLWin.egl_dpy, GLWin.egl_surf);
Expand Down
1 change: 1 addition & 0 deletions Source/Core/DolphinWX/Src/GLInterface/EGL.h
Expand Up @@ -34,6 +34,7 @@ class cInterfaceEGL : public cInterfaceBase
cX11Window XWindow;
public:
friend class cX11Window;
void SwapInterval(int Interval);
void Swap();
void UpdateFPSDisplay(const char *Text);
bool Create(void *&window_handle);
Expand Down
9 changes: 9 additions & 0 deletions Source/Core/DolphinWX/Src/GLInterface/GLX.cpp
Expand Up @@ -27,6 +27,15 @@ void cInterfaceGLX::UpdateFPSDisplay(const char *text)
{
XStoreName(GLWin.dpy, GLWin.win, text);
}

void cInterfaceGLX::SwapInterval(int Interval)
{
if (glXSwapIntervalSGI)
glXSwapIntervalSGI(Interval);
else
ERROR_LOG(VIDEO, "No support for SwapInterval (framerate clamped to monitor refresh rate).");
}

void cInterfaceGLX::Swap()
{
glXSwapBuffers(GLWin.dpy, GLWin.win);
Expand Down
1 change: 1 addition & 0 deletions Source/Core/DolphinWX/Src/GLInterface/GLX.h
Expand Up @@ -31,6 +31,7 @@ class cInterfaceGLX : public cInterfaceBase
cX11Window XWindow;
public:
friend class cX11Window;
void SwapInterval(int Interval);
void Swap();
void UpdateFPSDisplay(const char *Text);
bool Create(void *&window_handle);
Expand Down
1 change: 1 addition & 0 deletions Source/Core/DolphinWX/Src/GLInterface/InterfaceBase.h
Expand Up @@ -29,6 +29,7 @@ class cInterfaceBase
virtual bool MakeCurrent() = 0;
virtual void Shutdown() = 0;

virtual void SwapInterval(int Interval) { }
virtual u32 GetBackBufferWidth() { return s_backbuffer_width; }
virtual u32 GetBackBufferHeight() { return s_backbuffer_height; }
virtual void SetBackBufferDimensions(u32 W, u32 H) {s_backbuffer_width = W; s_backbuffer_height = H; }
Expand Down
7 changes: 7 additions & 0 deletions Source/Core/DolphinWX/Src/GLInterface/WGL.cpp
Expand Up @@ -27,6 +27,13 @@
static HDC hDC = NULL; // Private GDI Device Context
static HGLRC hRC = NULL; // Permanent Rendering Context

void cInterfaceWGL::SwapInterval(int Interval)
{
if (WGLEW_EXT_swap_control)
wglSwapIntervalEXT(Interval);
else
ERROR_LOG(VIDEO, "No support for SwapInterval (framerate clamped to monitor refresh rate).");
}
void cInterfaceWGL::Swap()
{
SwapBuffers(hDC);
Expand Down
1 change: 1 addition & 0 deletions Source/Core/DolphinWX/Src/GLInterface/WGL.h
Expand Up @@ -28,6 +28,7 @@
class cInterfaceWGL : public cInterfaceBase
{
public:
void SwapInterval(int Interval);
void Swap();
void UpdateFPSDisplay(const char *Text);
bool Create(void *&window_handle);
Expand Down
13 changes: 13 additions & 0 deletions Source/Core/DolphinWX/Src/GLInterface/WX.cpp
Expand Up @@ -23,6 +23,19 @@
#include "../GLInterface.h"
#include "WX.h"

void cInterfaceWX::SwapInterval(int Interval)
{
// WX interface only used on Apple
#ifdef __APPLE__
#if defined USE_WX && USE_WX
NSOpenGLContext *ctx = GLWin.glCtxt->GetWXGLContext();
#else
NSOpenGLContext *ctx = GLWin.cocoaCtx;
#endif
[ctx setValues: &Interval forParameter: NSOpenGLCPSwapInterval];
#endif
}

void cInterfaceWX::Swap()
{
GLWin.glCanvas->SwapBuffers();
Expand Down
1 change: 1 addition & 0 deletions Source/Core/DolphinWX/Src/GLInterface/WX.h
Expand Up @@ -35,6 +35,7 @@
class cInterfaceWX : public cInterfaceBase
{
public:
void SwapInterval(int Interval);
void Swap();
void UpdateFPSDisplay(const char *Text);
bool Create(void *&window_handle);
Expand Down
19 changes: 1 addition & 18 deletions Source/Plugins/Plugin_VideoOGL/Src/Render.cpp
Expand Up @@ -327,25 +327,8 @@ Renderer::Renderer()
s_backbuffer_height = (int)GLInterface->GetBackBufferHeight();

// Handle VSync on/off
#ifdef __APPLE__
int swapInterval = g_ActiveConfig.bVSync ? 1 : 0;
#if defined USE_WX && USE_WX
NSOpenGLContext *ctx = GLWin.glCtxt->GetWXGLContext();
#else
NSOpenGLContext *ctx = GLWin.cocoaCtx;
#endif
[ctx setValues: &swapInterval forParameter: NSOpenGLCPSwapInterval];
#elif defined _WIN32
if (WGLEW_EXT_swap_control)
wglSwapIntervalEXT(g_ActiveConfig.bVSync ? 1 : 0);
else
ERROR_LOG(VIDEO, "No support for SwapInterval (framerate clamped to monitor refresh rate).");
#elif defined(HAVE_X11) && HAVE_X11
if (glXSwapIntervalSGI)
glXSwapIntervalSGI(g_ActiveConfig.bVSync ? 1 : 0);
else
ERROR_LOG(VIDEO, "No support for SwapInterval (framerate clamped to monitor refresh rate).");
#endif
GLInterface->SwapInterval(swapInterval);

// check the max texture width and height
GLint max_texture_size;
Expand Down
20 changes: 4 additions & 16 deletions Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp
Expand Up @@ -141,28 +141,16 @@ void VideoSoftware::Shutdown()
void VideoSoftware::Video_Prepare()
{
GLInterface->MakeCurrent();
// Init extension support.
{
// Init extension support.
// Required for WGL SwapInterval
#ifndef USE_GLES
if (glewInit() != GLEW_OK) {
ERROR_LOG(VIDEO, "glewInit() failed!Does your video card support OpenGL 2.x?");
return;
}

// Handle VSync on/off
#ifdef _WIN32
if (WGLEW_EXT_swap_control)
wglSwapIntervalEXT(VSYNC_ENABLED);
else
ERROR_LOG(VIDEO, "no support for SwapInterval (framerate clamped to monitor refresh rate)Does your video card support OpenGL 2.x?");
#elif defined(HAVE_X11) && HAVE_X11
if (glXSwapIntervalSGI)
glXSwapIntervalSGI(VSYNC_ENABLED);
else
ERROR_LOG(VIDEO, "no support for SwapInterval (framerate clamped to monitor refresh rate)");
#endif
#endif
}
// Handle VSync on/off
GLInterface->SwapInterval(VSYNC_ENABLED);

HwRasterizer::Prepare();
SWRenderer::Prepare();
Expand Down

0 comments on commit 73eb98e

Please sign in to comment.