Merge pull request #3066 from degasus/master
GLInterface: Fix VideoSW on linux + OSX (v2) Conflicts: Source/Core/VideoBackends/OGL/GLInterface/GLX.cpp
This commit is contained in:
parent
2814aa20c8
commit
bfd5c6c69d
|
@ -15,7 +15,7 @@ void cInterfaceAGL::Swap()
|
|||
|
||||
// Create rendering window.
|
||||
// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize()
|
||||
bool cInterfaceAGL::Create(void *window_handle)
|
||||
bool cInterfaceAGL::Create(void *window_handle, bool core)
|
||||
{
|
||||
cocoaWin = reinterpret_cast<NSView*>(window_handle);
|
||||
NSSize size = [cocoaWin frame].size;
|
||||
|
@ -33,7 +33,7 @@ bool cInterfaceAGL::Create(void *window_handle)
|
|||
s_backbuffer_width = size.width;
|
||||
s_backbuffer_height = size.height;
|
||||
|
||||
NSOpenGLPixelFormatAttribute attr[] = { NSOpenGLPFADoubleBuffer, NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core, NSOpenGLPFAAccelerated, 0 };
|
||||
NSOpenGLPixelFormatAttribute attr[] = { NSOpenGLPFADoubleBuffer, NSOpenGLPFAOpenGLProfile, core ? NSOpenGLProfileVersion3_2Core : NSOpenGLProfileVersionLegacy, NSOpenGLPFAAccelerated, 0 };
|
||||
NSOpenGLPixelFormat *fmt = [[NSOpenGLPixelFormat alloc]
|
||||
initWithAttributes: attr];
|
||||
if (fmt == nil)
|
||||
|
|
|
@ -17,7 +17,7 @@ private:
|
|||
NSOpenGLContext *cocoaCtx;
|
||||
public:
|
||||
void Swap();
|
||||
bool Create(void *window_handle);
|
||||
bool Create(void *window_handle, bool core);
|
||||
bool MakeCurrent();
|
||||
bool ClearCurrent();
|
||||
void Shutdown();
|
||||
|
|
|
@ -84,7 +84,7 @@ err_exit:
|
|||
|
||||
// Create rendering window.
|
||||
// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize()
|
||||
bool cInterfaceEGL::Create(void *window_handle)
|
||||
bool cInterfaceEGL::Create(void *window_handle, bool core)
|
||||
{
|
||||
const char *s;
|
||||
EGLint egl_major, egl_minor;
|
||||
|
|
|
@ -26,7 +26,7 @@ public:
|
|||
void Swap();
|
||||
void SetMode(u32 mode) { s_opengl_mode = mode; }
|
||||
void* GetFuncAddress(const std::string& name);
|
||||
bool Create(void *window_handle);
|
||||
bool Create(void *window_handle, bool core);
|
||||
bool MakeCurrent();
|
||||
void Shutdown();
|
||||
};
|
||||
|
|
|
@ -44,7 +44,7 @@ void cInterfaceGLX::Swap()
|
|||
|
||||
// Create rendering window.
|
||||
// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize()
|
||||
bool cInterfaceGLX::Create(void *window_handle)
|
||||
bool cInterfaceGLX::Create(void *window_handle, bool core)
|
||||
{
|
||||
dpy = XOpenDisplay(nullptr);
|
||||
int screen = DefaultScreen(dpy);
|
||||
|
@ -94,6 +94,9 @@ bool cInterfaceGLX::Create(void *window_handle)
|
|||
// Get an appropriate visual
|
||||
XVisualInfo* vi = glXGetVisualFromFBConfig(dpy, fbconfig);
|
||||
|
||||
s_glxError = false;
|
||||
XErrorHandler oldHandler = XSetErrorHandler(&ctxErrorHandler);
|
||||
|
||||
// Create a GLX context.
|
||||
// We try to get a 3.3 core profile, else we try it with anything we get.
|
||||
int context_attribs[] =
|
||||
|
@ -104,10 +107,12 @@ bool cInterfaceGLX::Create(void *window_handle)
|
|||
GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
|
||||
None
|
||||
};
|
||||
s_glxError = false;
|
||||
XErrorHandler oldHandler = XSetErrorHandler(&ctxErrorHandler);
|
||||
ctx = glXCreateContextAttribs(dpy, fbconfig, 0, True, context_attribs);
|
||||
XSync(dpy, False);
|
||||
ctx = nullptr;
|
||||
if (core)
|
||||
{
|
||||
ctx = glXCreateContextAttribs(dpy, fbconfig, 0, True, context_attribs);
|
||||
XSync(dpy, False);
|
||||
}
|
||||
if (!ctx || s_glxError)
|
||||
{
|
||||
int context_attribs_legacy[] =
|
||||
|
|
|
@ -23,7 +23,7 @@ public:
|
|||
void SwapInterval(int Interval) override;
|
||||
void Swap() override;
|
||||
void* GetFuncAddress(const std::string& name) override;
|
||||
bool Create(void *window_handle) override;
|
||||
bool Create(void *window_handle, bool core) override;
|
||||
bool MakeCurrent() override;
|
||||
bool ClearCurrent() override;
|
||||
void Shutdown() override;
|
||||
|
|
|
@ -57,7 +57,7 @@ bool cInterfaceWGL::PeekMessages()
|
|||
|
||||
// Create rendering window.
|
||||
// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize()
|
||||
bool cInterfaceWGL::Create(void *window_handle)
|
||||
bool cInterfaceWGL::Create(void *window_handle, bool core)
|
||||
{
|
||||
if (window_handle == nullptr)
|
||||
return false;
|
||||
|
|
|
@ -13,7 +13,7 @@ public:
|
|||
void SwapInterval(int Interval);
|
||||
void Swap();
|
||||
void* GetFuncAddress(const std::string& name);
|
||||
bool Create(void *window_handle);
|
||||
bool Create(void *window_handle, bool core);
|
||||
bool MakeCurrent();
|
||||
bool ClearCurrent();
|
||||
void Shutdown();
|
||||
|
|
|
@ -29,7 +29,7 @@ public:
|
|||
virtual void SetMode(u32 mode) { s_opengl_mode = GLInterfaceMode::MODE_OPENGL; }
|
||||
virtual u32 GetMode() { return s_opengl_mode; }
|
||||
virtual void* GetFuncAddress(const std::string& name) { return nullptr; }
|
||||
virtual bool Create(void *window_handle) { return true; }
|
||||
virtual bool Create(void *window_handle, bool core = true) { return true; }
|
||||
virtual bool MakeCurrent() { return true; }
|
||||
virtual bool ClearCurrent() { return true; }
|
||||
virtual void Shutdown() {}
|
||||
|
|
|
@ -78,7 +78,7 @@ bool VideoSoftware::Initialize(void *window_handle)
|
|||
|
||||
InitInterface();
|
||||
GLInterface->SetMode(GLInterfaceMode::MODE_DETECT);
|
||||
if (!GLInterface->Create(window_handle))
|
||||
if (!GLInterface->Create(window_handle, false))
|
||||
{
|
||||
INFO_LOG(VIDEO, "GLInterface::Create failed.");
|
||||
return false;
|
||||
|
|
Loading…
Reference in New Issue