diff options
author | sfan5 <sfan5@live.de> | 2022-07-09 22:04:51 +0200 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2022-07-09 22:04:51 +0200 |
commit | 25ae15694488fcb23f03a067d12c318550f24010 (patch) | |
tree | 9bdc73255b7335c144e1c46781fee04084964eaf /source/Irrlicht/CGLXManager.cpp | |
parent | c4ca31313f8155e8c531f61d576c13eb07a8fd51 (diff) | |
download | irrlicht-25ae15694488fcb23f03a067d12c318550f24010.tar.xz |
Fix CreateContextAttribsARB fallback behaviour
fixes minetest/minetest#12518
Diffstat (limited to 'source/Irrlicht/CGLXManager.cpp')
-rw-r--r-- | source/Irrlicht/CGLXManager.cpp | 13 |
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)
|