Merge pull request #3066 from degasus/master
GLInterface: Fix VideoSW on linux + OSX (v2)
This commit is contained in:
commit
403df299a6
|
@ -15,7 +15,7 @@ void cInterfaceAGL::Swap()
|
||||||
|
|
||||||
// Create rendering window.
|
// Create rendering window.
|
||||||
// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize()
|
// 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);
|
cocoaWin = reinterpret_cast<NSView*>(window_handle);
|
||||||
NSSize size = [cocoaWin frame].size;
|
NSSize size = [cocoaWin frame].size;
|
||||||
|
@ -33,7 +33,7 @@ bool cInterfaceAGL::Create(void *window_handle)
|
||||||
s_backbuffer_width = size.width;
|
s_backbuffer_width = size.width;
|
||||||
s_backbuffer_height = size.height;
|
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]
|
NSOpenGLPixelFormat *fmt = [[NSOpenGLPixelFormat alloc]
|
||||||
initWithAttributes: attr];
|
initWithAttributes: attr];
|
||||||
if (fmt == nil)
|
if (fmt == nil)
|
||||||
|
|
|
@ -17,7 +17,7 @@ private:
|
||||||
NSOpenGLContext *cocoaCtx;
|
NSOpenGLContext *cocoaCtx;
|
||||||
public:
|
public:
|
||||||
void Swap();
|
void Swap();
|
||||||
bool Create(void *window_handle);
|
bool Create(void *window_handle, bool core);
|
||||||
bool MakeCurrent();
|
bool MakeCurrent();
|
||||||
bool ClearCurrent();
|
bool ClearCurrent();
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
|
|
|
@ -96,7 +96,7 @@ void cInterfaceEGL::DetectMode()
|
||||||
|
|
||||||
// Create rendering window.
|
// Create rendering window.
|
||||||
// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize()
|
// 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;
|
const char *s;
|
||||||
EGLint egl_major, egl_minor;
|
EGLint egl_major, egl_minor;
|
||||||
|
|
|
@ -26,7 +26,7 @@ public:
|
||||||
void Swap();
|
void Swap();
|
||||||
void SetMode(u32 mode) { s_opengl_mode = mode; }
|
void SetMode(u32 mode) { s_opengl_mode = mode; }
|
||||||
void* GetFuncAddress(const std::string& name);
|
void* GetFuncAddress(const std::string& name);
|
||||||
bool Create(void *window_handle);
|
bool Create(void *window_handle, bool core);
|
||||||
bool MakeCurrent();
|
bool MakeCurrent();
|
||||||
bool ClearCurrent();
|
bool ClearCurrent();
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
|
|
|
@ -44,7 +44,7 @@ void cInterfaceGLX::Swap()
|
||||||
|
|
||||||
// Create rendering window.
|
// Create rendering window.
|
||||||
// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize()
|
// 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);
|
dpy = XOpenDisplay(nullptr);
|
||||||
int screen = DefaultScreen(dpy);
|
int screen = DefaultScreen(dpy);
|
||||||
|
@ -107,9 +107,13 @@ bool cInterfaceGLX::Create(void *window_handle)
|
||||||
GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
|
GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
ctx = nullptr;
|
||||||
|
if (core)
|
||||||
|
{
|
||||||
ctx = glXCreateContextAttribs(dpy, fbconfig, 0, True, context_attribs);
|
ctx = glXCreateContextAttribs(dpy, fbconfig, 0, True, context_attribs);
|
||||||
XSync(dpy, False);
|
XSync(dpy, False);
|
||||||
if (!ctx || s_glxError)
|
}
|
||||||
|
if (core && (!ctx || s_glxError))
|
||||||
{
|
{
|
||||||
int context_attribs_33[] =
|
int context_attribs_33[] =
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,7 +23,7 @@ public:
|
||||||
void SwapInterval(int Interval) override;
|
void SwapInterval(int Interval) override;
|
||||||
void Swap() override;
|
void Swap() override;
|
||||||
void* GetFuncAddress(const std::string& name) 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 MakeCurrent() override;
|
||||||
bool ClearCurrent() override;
|
bool ClearCurrent() override;
|
||||||
void Shutdown() override;
|
void Shutdown() override;
|
||||||
|
|
|
@ -57,7 +57,7 @@ bool cInterfaceWGL::PeekMessages()
|
||||||
|
|
||||||
// Create rendering window.
|
// Create rendering window.
|
||||||
// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize()
|
// 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)
|
if (window_handle == nullptr)
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -13,7 +13,7 @@ public:
|
||||||
void SwapInterval(int Interval);
|
void SwapInterval(int Interval);
|
||||||
void Swap();
|
void Swap();
|
||||||
void* GetFuncAddress(const std::string& name);
|
void* GetFuncAddress(const std::string& name);
|
||||||
bool Create(void *window_handle);
|
bool Create(void *window_handle, bool core);
|
||||||
bool MakeCurrent();
|
bool MakeCurrent();
|
||||||
bool ClearCurrent();
|
bool ClearCurrent();
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
|
|
|
@ -29,7 +29,7 @@ public:
|
||||||
virtual void SetMode(u32 mode) { s_opengl_mode = GLInterfaceMode::MODE_OPENGL; }
|
virtual void SetMode(u32 mode) { s_opengl_mode = GLInterfaceMode::MODE_OPENGL; }
|
||||||
virtual u32 GetMode() { return s_opengl_mode; }
|
virtual u32 GetMode() { return s_opengl_mode; }
|
||||||
virtual void* GetFuncAddress(const std::string& name) { return nullptr; }
|
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 MakeCurrent() { return true; }
|
||||||
virtual bool ClearCurrent() { return true; }
|
virtual bool ClearCurrent() { return true; }
|
||||||
virtual void Shutdown() {}
|
virtual void Shutdown() {}
|
||||||
|
|
|
@ -78,7 +78,7 @@ bool VideoSoftware::Initialize(void *window_handle)
|
||||||
|
|
||||||
InitInterface();
|
InitInterface();
|
||||||
GLInterface->SetMode(GLInterfaceMode::MODE_DETECT);
|
GLInterface->SetMode(GLInterfaceMode::MODE_DETECT);
|
||||||
if (!GLInterface->Create(window_handle))
|
if (!GLInterface->Create(window_handle, false))
|
||||||
{
|
{
|
||||||
INFO_LOG(VIDEO, "GLInterface::Create failed.");
|
INFO_LOG(VIDEO, "GLInterface::Create failed.");
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue