aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlwin Esch <alwin.esch@web.de>2019-02-10 01:09:15 +0100
committerGitHub <noreply@github.com>2019-02-10 01:09:15 +0100
commitefb8798155acc85f76f445dee9ef35a0c07aa75c (patch)
tree87f37a813a3dc90389eac6318f14fd5d144d375e
parentdc013552b0710b60146bf5693938dbb22bbff3dd (diff)
parent1ce33cc65c062be273e6a1db34a79a4870dfaeea (diff)
Merge pull request #15148 from AlwinEsch/fix-gl
X11: fix usage of required configuration values
-rw-r--r--xbmc/windowing/X11/GLContextEGL.cpp37
-rw-r--r--xbmc/windowing/X11/GLContextEGL.h2
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;