diff options
author | Alwin Esch <alwin.esch@web.de> | 2019-02-10 01:09:15 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-10 01:09:15 +0100 |
commit | efb8798155acc85f76f445dee9ef35a0c07aa75c (patch) | |
tree | 87f37a813a3dc90389eac6318f14fd5d144d375e | |
parent | dc013552b0710b60146bf5693938dbb22bbff3dd (diff) | |
parent | 1ce33cc65c062be273e6a1db34a79a4870dfaeea (diff) |
Merge pull request #15148 from AlwinEsch/fix-gl
X11: fix usage of required configuration values
-rw-r--r-- | xbmc/windowing/X11/GLContextEGL.cpp | 37 | ||||
-rw-r--r-- | xbmc/windowing/X11/GLContextEGL.h | 2 |
2 files changed, 17 insertions, 22 deletions
diff --git a/xbmc/windowing/X11/GLContextEGL.cpp b/xbmc/windowing/X11/GLContextEGL.cpp index 80670a15f0..36ae4c0fb9 100644 --- a/xbmc/windowing/X11/GLContextEGL.cpp +++ b/xbmc/windowing/X11/GLContextEGL.cpp @@ -129,26 +129,19 @@ bool CGLContextEGL::Refresh(bool force, int screen, Window glWindow, bool &newCo return false; } - if (!IsSuitableVisual(vInfo)) - { - CLog::Log(LOGWARNING, "Visual 0x%x of the window is not suitable", (unsigned) vInfo->visualid); - XFree(vInfo); - Destroy(); - return false; - } - - CLog::Log(LOGNOTICE, "Using visual 0x%x", (unsigned) vInfo->visualid); - + unsigned int visualid = static_cast<unsigned int>(vInfo->visualid); m_eglConfig = GetEGLConfig(m_eglDisplay, vInfo); XFree(vInfo); if (m_eglConfig == EGL_NO_CONFIG) { - CLog::Log(LOGERROR, "failed to get eglconfig for visual id"); + CLog::Log(LOGERROR, "failed to get suitable eglconfig for visual 0x%x", visualid); Destroy(); return false; } + CLog::Log(LOGNOTICE, "Using visual 0x%x", visualid); + m_eglSurface = eglCreateWindowSurface(m_eglDisplay, m_eglConfig, glWindow, NULL); if (m_eglSurface == EGL_NO_SURFACE) { @@ -332,21 +325,19 @@ void CGLContextEGL::Detach() } } -bool CGLContextEGL::IsSuitableVisual(XVisualInfo *vInfo) +bool CGLContextEGL::SuitableCheck(EGLDisplay eglDisplay, EGLConfig config) { - EGLConfig config = GetEGLConfig(m_eglDisplay, vInfo); if (config == EGL_NO_CONFIG) - { - CLog::Log(LOGERROR, "Failed to determine egl config for visual info"); return false; - } - EGLint value; - if (!eglGetConfigAttrib(m_eglDisplay, config, EGL_RED_SIZE, &value) || value < 8) + EGLint value; + if (!eglGetConfigAttrib(eglDisplay, config, EGL_RED_SIZE, &value) || value < 8) return false; - if (!eglGetConfigAttrib(m_eglDisplay, config, EGL_GREEN_SIZE, &value) || value < 8) + if (!eglGetConfigAttrib(eglDisplay, config, EGL_GREEN_SIZE, &value) || value < 8) return false; - if (!eglGetConfigAttrib(m_eglDisplay, config, EGL_BLUE_SIZE, &value) || value < 8) + if (!eglGetConfigAttrib(eglDisplay, config, EGL_BLUE_SIZE, &value) || value < 8) + return false; + if (!eglGetConfigAttrib(eglDisplay, config, EGL_DEPTH_SIZE, &value) || value < 24) return false; return true; @@ -382,13 +373,17 @@ EGLConfig CGLContextEGL::GetEGLConfig(EGLDisplay eglDisplay, XVisualInfo *vInfo) } for (EGLint i = 0; i < numConfigs; ++i) { + if (!SuitableCheck(eglDisplay, eglConfigs[i])) + continue; + EGLint value; if (!eglGetConfigAttrib(eglDisplay, eglConfigs[i], EGL_NATIVE_VISUAL_ID, &value)) { CLog::Log(LOGERROR, "Failed to query EGL_NATIVE_VISUAL_ID for egl config."); break; } - if (value == (EGLint)vInfo->visualid) { + if (value == (EGLint)vInfo->visualid) + { eglConfig = eglConfigs[i]; break; } diff --git a/xbmc/windowing/X11/GLContextEGL.h b/xbmc/windowing/X11/GLContextEGL.h index 80ad06050a..a86c957109 100644 --- a/xbmc/windowing/X11/GLContextEGL.h +++ b/xbmc/windowing/X11/GLContextEGL.h @@ -34,7 +34,7 @@ public: EGLContext m_eglContext; EGLConfig m_eglConfig; protected: - bool IsSuitableVisual(XVisualInfo *vInfo); + bool SuitableCheck(EGLDisplay eglDisplay, EGLConfig config); EGLConfig GetEGLConfig(EGLDisplay eglDisplay, XVisualInfo *vInfo); PFNEGLGETSYNCVALUESCHROMIUMPROC eglGetSyncValuesCHROMIUM = nullptr; PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT = nullptr; |