aboutsummaryrefslogtreecommitdiff
path: root/source/Irrlicht/CGLXManager.cpp
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2022-07-09 22:04:51 +0200
committersfan5 <sfan5@live.de>2022-07-09 22:04:51 +0200
commit25ae15694488fcb23f03a067d12c318550f24010 (patch)
tree9bdc73255b7335c144e1c46781fee04084964eaf /source/Irrlicht/CGLXManager.cpp
parentc4ca31313f8155e8c531f61d576c13eb07a8fd51 (diff)
downloadirrlicht-25ae15694488fcb23f03a067d12c318550f24010.tar.xz
Fix CreateContextAttribsARB fallback behaviour
fixes minetest/minetest#12518
Diffstat (limited to 'source/Irrlicht/CGLXManager.cpp')
-rw-r--r--source/Irrlicht/CGLXManager.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/source/Irrlicht/CGLXManager.cpp b/source/Irrlicht/CGLXManager.cpp
index a72b6a8..8b6c66f 100644
--- a/source/Irrlicht/CGLXManager.cpp
+++ b/source/Irrlicht/CGLXManager.cpp
@@ -311,6 +311,16 @@ void CGLXManager::destroySurface()
glXDestroyWindow((Display*)CurrentContext.OpenGLLinux.X11Display, GlxWin);
}
+#if defined(GLX_ARB_create_context)
+static int IrrIgnoreError(Display *display, XErrorEvent *event)
+{
+ char msg[256];
+ XGetErrorText(display, event->error_code, msg, 256);
+ os::Printer::log("Ignoring an X error", msg, ELL_DEBUG);
+ return 0;
+}
+#endif
+
bool CGLXManager::generateContext()
{
GLXContext context = 0;
@@ -329,13 +339,16 @@ bool CGLXManager::generateContext()
if (glxCreateContextAttribsARB)
{
+ os::Printer::log("GLX with GLX_ARB_create_context", ELL_DEBUG);
int contextAttrBuffer[] = {
GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
GLX_CONTEXT_MINOR_VERSION_ARB, 0,
// GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_CORE_PROFILE_BIT_ARB,
None
};
+ XErrorHandler old = XSetErrorHandler(IrrIgnoreError);
context = glxCreateContextAttribsARB((Display*)CurrentContext.OpenGLLinux.X11Display, (GLXFBConfig)glxFBConfig, NULL, True, contextAttrBuffer);
+ XSetErrorHandler(old);
// transparently fall back to legacy call
}
if (!context)