aboutsummaryrefslogtreecommitdiff
path: root/source/Irrlicht/CGLXManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Irrlicht/CGLXManager.cpp')
-rw-r--r--source/Irrlicht/CGLXManager.cpp31
1 files changed, 27 insertions, 4 deletions
diff --git a/source/Irrlicht/CGLXManager.cpp b/source/Irrlicht/CGLXManager.cpp
index 4d5ef48..a0c37ff 100644
--- a/source/Irrlicht/CGLXManager.cpp
+++ b/source/Irrlicht/CGLXManager.cpp
@@ -319,12 +319,35 @@ bool CGLXManager::generateContext()
{
if (GlxWin)
{
- // create glx context
- context = glXCreateNewContext((Display*)CurrentContext.OpenGLLinux.X11Display, (GLXFBConfig)glxFBConfig, GLX_RGBA_TYPE, NULL, True);
+#if defined(GLX_ARB_create_context)
+
+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
+ PFNGLXCREATECONTEXTATTRIBSARBPROC glxCreateContextAttribsARB=(PFNGLXCREATECONTEXTATTRIBSARBPROC)glXGetProcAddress(reinterpret_cast<const GLubyte*>("glXCreateContextAttribsARB"));
+#else
+ PFNGLXCREATECONTEXTATTRIBSARBPROC glxCreateContextAttribsARB=glXCreateContextAttribsARB;
+#endif
+
+ if (glxCreateContextAttribsARB)
+ {
+ 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
+ };
+ context = glxCreateContextAttribsARB((Display*)CurrentContext.OpenGLLinux.X11Display, (GLXFBConfig)glxFBConfig, NULL, True, contextAttrBuffer);
+ // transparently fall back to legacy call
+ }
if (!context)
+#endif
{
- os::Printer::log("Could not create GLX rendering context.", ELL_WARNING);
- return false;
+ // create glx context
+ context = glXCreateNewContext((Display*)CurrentContext.OpenGLLinux.X11Display, (GLXFBConfig)glxFBConfig, GLX_RGBA_TYPE, NULL, True);
+ if (!context)
+ {
+ os::Printer::log("Could not create GLX rendering context.", ELL_WARNING);
+ return false;
+ }
}
}
else