rpcsx/rpcs3/Emu/RSX/GL/OpenGL.cpp

63 lines
1.5 KiB
C++
Raw Normal View History

#include "stdafx.h"
#include "OpenGL.h"
2014-02-21 17:13:57 +01:00
#ifdef _WIN32
2017-03-05 17:00:08 +01:00
extern "C"
{
// NVIDIA Optimus: Default dGPU instead of iGPU (Driver: 302+)
2017-03-05 17:00:08 +01:00
__declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
// AMD: Request dGPU High Performance (Driver: 13.35+)
2017-03-05 17:00:08 +01:00
__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
}
#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)
#include "GLProcTable.h"
#undef OPENGL_PROC
#undef OPENGL_PROC2
#undef WGL_PROC
2014-02-21 17:13:57 +01:00
#endif
void gl::init()
{
2014-02-21 17:13:57 +01:00
#ifdef _WIN32
#define OPENGL_PROC(p, n) OPENGL_PROC2(p, gl##n, gl##n)
#define WGL_PROC(p, n) OPENGL_PROC2(p, wgl##n, wgl##n)
#define OPENGL_PROC2(p, n, tn) /*if(!gl##n)*/ if(!(n = reinterpret_cast<p>(wglGetProcAddress(#tn)))) rsx_log.error("OpenGL: initialization of " #tn " failed.")
#include "GLProcTable.h"
#undef OPENGL_PROC
#undef WGL_PROC
#undef OPENGL_PROC2
2014-02-21 17:13:57 +01:00
#endif
#ifdef __unix__
glewExperimental = true;
glewInit();
#ifdef HAVE_X11
2018-01-22 11:07:52 +01:00
glxewInit();
#endif
#endif
}
void gl::set_swapinterval(int interval)
{
2014-02-21 17:13:57 +01:00
#ifdef _WIN32
wglSwapIntervalEXT(interval);
#elif defined(HAVE_X11)
2018-01-22 11:07:52 +01:00
if (glXSwapIntervalEXT)
{
if (auto window = glXGetCurrentDrawable())
{
glXSwapIntervalEXT(glXGetCurrentDisplay(), window, interval);
return;
}
}
//No existing drawable or missing swap extension, EGL?
rsx_log.error("Failed to set swap interval");
2018-01-22 11:07:52 +01:00
#else
2023-05-08 23:12:39 +02:00
rsx_log.error("Swap control not implemented for this platform. Vsync options not available. (interval=%d)", interval);
2014-02-21 17:13:57 +01:00
#endif
2018-01-22 11:07:52 +01:00
}