diff options
| author | Stenzek <stenzek@gmail.com> | 2017-07-27 11:57:32 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2017-07-30 12:38:50 +1000 |
| commit | 447aeb8f7746e10dbae0f36a8aa52dbec22158dd (patch) | |
| tree | 92c2a60a1228f8a145af9e8f7d5ebe5d49ca5186 /Source | |
| parent | aff44684a4b904974b2d01ba604976f4baac000e (diff) | |
EGLInterface: Create shared context with same attributes as main context
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/Core/Common/GL/GLInterface/EGL.cpp | 26 | ||||
| -rw-r--r-- | Source/Core/Common/GL/GLInterface/EGL.h | 2 |
2 files changed, 8 insertions, 20 deletions
diff --git a/Source/Core/Common/GL/GLInterface/EGL.cpp b/Source/Core/Common/GL/GLInterface/EGL.cpp index 32cd705d73..8e85511fc7 100644 --- a/Source/Core/Common/GL/GLInterface/EGL.cpp +++ b/Source/Core/Common/GL/GLInterface/EGL.cpp @@ -212,7 +212,10 @@ bool cInterfaceEGL::Create(void* window_handle, bool stereo, bool core) egl_ctx = eglCreateContext(egl_dpy, m_config, EGL_NO_CONTEXT, &core_attribs[0]); if (egl_ctx) + { + m_attribs = std::move(core_attribs); break; + } } } @@ -220,6 +223,7 @@ bool cInterfaceEGL::Create(void* window_handle, bool stereo, bool core) { m_core = false; egl_ctx = eglCreateContext(egl_dpy, m_config, EGL_NO_CONTEXT, &ctx_attribs[0]); + m_attribs = std::move(ctx_attribs); } if (!egl_ctx) @@ -255,31 +259,13 @@ bool cInterfaceEGL::Create(cInterfaceBase* main_context) m_is_shared = true; m_has_handle = false; - EGLint ctx_attribs[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE}; - - switch (egl_context->GetMode()) - { - case GLInterfaceMode::MODE_OPENGL: - ctx_attribs[0] = EGL_NONE; - break; - case GLInterfaceMode::MODE_OPENGLES2: - ctx_attribs[1] = 2; - break; - case GLInterfaceMode::MODE_OPENGLES3: - ctx_attribs[1] = 3; - break; - default: - INFO_LOG(VIDEO, "Unknown opengl mode set"); - return false; - break; - } - if (egl_context->GetMode() == GLInterfaceMode::MODE_OPENGL) eglBindAPI(EGL_OPENGL_API); else eglBindAPI(EGL_OPENGL_ES_API); - egl_ctx = eglCreateContext(egl_dpy, m_config, egl_context->egl_ctx, ctx_attribs); + egl_ctx = + eglCreateContext(egl_dpy, m_config, egl_context->egl_ctx, egl_context->m_attribs.data()); if (!egl_ctx) { INFO_LOG(VIDEO, "Error: eglCreateContext failed 0x%04x", eglGetError()); diff --git a/Source/Core/Common/GL/GLInterface/EGL.h b/Source/Core/Common/GL/GLInterface/EGL.h index 69a351851f..16a716e3c2 100644 --- a/Source/Core/Common/GL/GLInterface/EGL.h +++ b/Source/Core/Common/GL/GLInterface/EGL.h @@ -7,6 +7,7 @@ #include <EGL/egl.h> #include <EGL/eglext.h> #include <string> +#include <vector> #include "Common/GL/GLInterfaceBase.h" @@ -17,6 +18,7 @@ private: bool m_has_handle; EGLNativeWindowType m_host_window; bool m_supports_surfaceless = false; + std::vector<int> m_attribs; bool CreateWindowSurface(); void DestroyWindowSurface(); |
