mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-12 17:58:37 +12:00
gl: Fix vsync; always use adaptive vsync instead of double-buffered
This commit is contained in:
parent
c04aa05398
commit
b86745ee4e
4 changed files with 23 additions and 52 deletions
|
@ -566,6 +566,9 @@ void GLGSRender::on_init_thread()
|
||||||
|
|
||||||
gl::init();
|
gl::init();
|
||||||
|
|
||||||
|
//Enable adaptive vsync if vsync is requested
|
||||||
|
gl::set_swapinterval(g_cfg.video.vsync ? -1 : 0);
|
||||||
|
|
||||||
if (g_cfg.video.debug_output)
|
if (g_cfg.video.debug_output)
|
||||||
gl::enable_debugging();
|
gl::enable_debugging();
|
||||||
|
|
||||||
|
|
|
@ -219,6 +219,8 @@ OPENGL_PROC(PFNGLTEXTUREBARRIERPROC, TextureBarrier);
|
||||||
OPENGL_PROC(PFNGLTEXTUREBARRIERNVPROC, TextureBarrierNV);
|
OPENGL_PROC(PFNGLTEXTUREBARRIERNVPROC, TextureBarrierNV);
|
||||||
//...
|
//...
|
||||||
|
|
||||||
|
WGL_PROC(PFNWGLSWAPINTERVALEXTPROC, SwapIntervalEXT);
|
||||||
|
|
||||||
#if !defined(__GNUG__) || defined(__MINGW32__)
|
#if !defined(__GNUG__) || defined(__MINGW32__)
|
||||||
OPENGL_PROC(PFNGLBLENDCOLORPROC, BlendColor);
|
OPENGL_PROC(PFNGLBLENDCOLORPROC, BlendColor);
|
||||||
OPENGL_PROC(PFNGLBLENDEQUATIONPROC, BlendEquation);
|
OPENGL_PROC(PFNGLBLENDEQUATIONPROC, BlendEquation);
|
||||||
|
|
|
@ -1,21 +1,6 @@
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "OpenGL.h"
|
#include "OpenGL.h"
|
||||||
|
|
||||||
void gl::init()
|
|
||||||
{
|
|
||||||
#ifdef _WIN32
|
|
||||||
#define OPENGL_PROC(p, n) OPENGL_PROC2(p, n, gl##n)
|
|
||||||
#define OPENGL_PROC2(p, n, tn) /*if(!gl##n)*/ if(!(gl##n = (p)wglGetProcAddress(#tn))) LOG_ERROR(RSX, "OpenGL: initialization of " #tn " failed.")
|
|
||||||
#include "GLProcTable.h"
|
|
||||||
#undef OPENGL_PROC
|
|
||||||
#undef OPENGL_PROC2
|
|
||||||
#endif
|
|
||||||
#ifdef __unix__
|
|
||||||
glewExperimental = true;
|
|
||||||
glewInit();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
|
@ -27,41 +12,34 @@ extern "C"
|
||||||
}
|
}
|
||||||
|
|
||||||
#define OPENGL_PROC(p, n) p gl##n = nullptr
|
#define OPENGL_PROC(p, n) p gl##n = nullptr
|
||||||
|
#define WGL_PROC(p, n) p wgl##n = nullptr
|
||||||
#define OPENGL_PROC2(p, n, tn) OPENGL_PROC(p, n)
|
#define OPENGL_PROC2(p, n, tn) OPENGL_PROC(p, n)
|
||||||
#include "GLProcTable.h"
|
#include "GLProcTable.h"
|
||||||
#undef OPENGL_PROC
|
#undef OPENGL_PROC
|
||||||
#undef OPENGL_PROC2
|
#undef OPENGL_PROC2
|
||||||
|
#undef WGL_PROC
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
OpenGL::OpenGL()
|
void gl::init()
|
||||||
{
|
|
||||||
Close();
|
|
||||||
Init();
|
|
||||||
}
|
|
||||||
|
|
||||||
OpenGL::~OpenGL()
|
|
||||||
{
|
|
||||||
Close();
|
|
||||||
}
|
|
||||||
|
|
||||||
void OpenGL::Init()
|
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define OPENGL_PROC(p, n) OPENGL_PROC2(p, n, gl##n)
|
#define OPENGL_PROC(p, n) OPENGL_PROC2(p, gl##n, gl##n)
|
||||||
#define OPENGL_PROC2(p, n, tn) if(!(n = (p)wglGetProcAddress(#tn))) LOG_ERROR(RSX, "OpenGL: initialization of " #tn " failed.")
|
#define WGL_PROC(p, n) OPENGL_PROC2(p, wgl##n, wgl##n)
|
||||||
|
#define OPENGL_PROC2(p, n, tn) /*if(!gl##n)*/ if(!(n = (p)wglGetProcAddress(#tn))) LOG_ERROR(RSX, "OpenGL: initialization of " #tn " failed.")
|
||||||
#include "GLProcTable.h"
|
#include "GLProcTable.h"
|
||||||
#undef OPENGL_PROC
|
#undef OPENGL_PROC
|
||||||
|
#undef WGL_PROC
|
||||||
#undef OPENGL_PROC2
|
#undef OPENGL_PROC2
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __unix__
|
||||||
|
glewExperimental = true;
|
||||||
|
glewInit();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenGL::Close()
|
void gl::set_swapinterval(int interval)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define OPENGL_PROC(p, n) n = nullptr
|
wglSwapIntervalEXT(interval);
|
||||||
#define OPENGL_PROC2(p, n, tn) OPENGL_PROC(p, n)
|
|
||||||
#include "GLProcTable.h"
|
|
||||||
#undef OPENGL_PROC
|
|
||||||
#undef OPENGL_PROC2
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
|
@ -10,9 +10,11 @@
|
||||||
typedef BOOL (WINAPI* PFNWGLSWAPINTERVALEXTPROC) (int interval);
|
typedef BOOL (WINAPI* PFNWGLSWAPINTERVALEXTPROC) (int interval);
|
||||||
|
|
||||||
#define OPENGL_PROC(p, n) extern p gl##n
|
#define OPENGL_PROC(p, n) extern p gl##n
|
||||||
|
#define WGL_PROC(p, n) extern p wgl##n
|
||||||
#define OPENGL_PROC2(p, n, tn) OPENGL_PROC(p, n)
|
#define OPENGL_PROC2(p, n, tn) OPENGL_PROC(p, n)
|
||||||
#include "GLProcTable.h"
|
#include "GLProcTable.h"
|
||||||
#undef OPENGL_PROC
|
#undef OPENGL_PROC
|
||||||
|
#undef WGL_PROC
|
||||||
#undef OPENGL_PROC2
|
#undef OPENGL_PROC2
|
||||||
|
|
||||||
#elif defined(__APPLE__)
|
#elif defined(__APPLE__)
|
||||||
|
@ -34,19 +36,5 @@ typedef BOOL (WINAPI* PFNWGLSWAPINTERVALEXTPROC) (int interval);
|
||||||
namespace gl
|
namespace gl
|
||||||
{
|
{
|
||||||
void init();
|
void init();
|
||||||
|
void set_swapinterval(int interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct OpenGL
|
|
||||||
{
|
|
||||||
#define OPENGL_PROC2(p, n, tn) OPENGL_PROC(p, n)
|
|
||||||
#define OPENGL_PROC(p, n) p n
|
|
||||||
#include "GLProcTable.h"
|
|
||||||
#undef OPENGL_PROC
|
|
||||||
#undef OPENGL_PROC2
|
|
||||||
|
|
||||||
OpenGL();
|
|
||||||
~OpenGL();
|
|
||||||
|
|
||||||
void Init();
|
|
||||||
void Close();
|
|
||||||
};
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue