diff --git a/gtk/src/gtk_glx_context.cpp b/gtk/src/gtk_glx_context.cpp index a18e8534..86c0b172 100644 --- a/gtk/src/gtk_glx_context.cpp +++ b/gtk/src/gtk_glx_context.cpp @@ -12,6 +12,9 @@ GTKGLXContext::GTKGLXContext () display = NULL; vi = NULL; context = NULL; + + version_major = -1; + version_minor = -1; } GTKGLXContext::~GTKGLXContext () @@ -32,7 +35,6 @@ bool GTKGLXContext::attach (GtkWidget *widget) GdkWindow *window; GLXFBConfig *fbconfigs; int num_fbconfigs; - int screen; int attribs[] = { GLX_DOUBLEBUFFER, True, @@ -55,6 +57,10 @@ bool GTKGLXContext::attach (GtkWidget *widget) screen = gdk_x11_screen_get_screen_number (gdk_screen); display = GDK_DISPLAY_XDISPLAY (gdk_display); + glXQueryVersion (display, &version_major, &version_minor); + if (version_major < 2 && version_minor < 3) + return false; + fbconfigs = glXChooseFBConfig (display, screen, attribs, &num_fbconfigs); if (!fbconfigs || num_fbconfigs < 1) { @@ -89,7 +95,12 @@ bool GTKGLXContext::create_context () None }; - context = glXCreateContextAttribsARB (display, fbconfig, NULL, True, context_attribs); + const char *extensions = glXQueryExtensionsString (display, screen); + + if (strstr (extensions, "GLX_ARB_create_context")) + context = glXCreateContextAttribsARB (display, fbconfig, NULL, True, context_attribs); + if (!context) + context = glXCreateNewContext (display, fbconfig, GLX_RGBA_TYPE, NULL, True); if (!context) { diff --git a/gtk/src/gtk_glx_context.h b/gtk/src/gtk_glx_context.h index 64d8da72..48f8292f 100644 --- a/gtk/src/gtk_glx_context.h +++ b/gtk/src/gtk_glx_context.h @@ -26,6 +26,10 @@ struct GTKGLXContext : OpenGLContext GLXContext context; GLXFBConfig fbconfig; Display *display; + int screen; XVisualInfo *vi; Window xid; + + int version_major; + int version_minor; };