added wrappers/helpers for creating/destroying rendering contexts
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 6 Apr 2005 22:41:46 +0000 (22:41 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 6 Apr 2005 22:41:46 +0000 (22:41 +0000)
progs/xdemos/pbutil.c
progs/xdemos/pbutil.h

index 479abc983caa048966f0ee56d5c075f3ba57b3b8..d0bbd1b0fce56a9df74a0df29eaa1a18d0969508 100644 (file)
@@ -9,7 +9,6 @@
  * to the GLX_SGIX_fbconfig/pbuffer extensions.
  */
 
-
 #include <stdio.h>
 #include <string.h>
 #include "pbutil.h"
@@ -293,6 +292,43 @@ PrintFBConfigInfo(Display *dpy, int screen, FBCONFIG config, Bool horizFormat)
 
 
 
+GLXContext
+CreateContext(Display *dpy, int screen, FBCONFIG config)
+{
+   int pbSupport = QueryPbuffers(dpy, screen);
+#if defined(GLX_VERSION_1_3)
+   if (pbSupport == 1) {
+      /* GLX 1.3 */
+      GLXContext c;
+      c = glXCreateNewContext(dpy, config, GLX_RGBA_TYPE, NULL, True);
+      if (!c) {
+         /* try indirect */
+         c = glXCreateNewContext(dpy, config, GLX_RGBA_TYPE, NULL, False);
+      }
+      return c;
+   }
+#endif
+#if defined(GLX_SGIX_fbconfig) && defined(GLX_SGIX_pbuffer)
+   if (pbSupport == 2) {
+      GLXContext c;
+      c = glXCreateContextWithConfigSGIX(dpy, config, GLX_RGBA_TYPE_SGIX, NULL, True);
+      if (!c) {
+         c = glXCreateContextWithConfigSGIX(dpy, config, GLX_RGBA_TYPE_SGIX, NULL, False);
+      }
+      return c;
+   }
+#endif
+   return 0;
+}
+
+
+void
+DestroyContext(Display *dpy, GLXContext ctx)
+{
+   glXDestroyContext(dpy, ctx);
+}
+
+
 /* This is only used by CreatePbuffer() */
 static int XErrorFlag = 0;
 static int HandleXError(Display *dpy, XErrorEvent *event)
index e877f20625d7ace72e889fc867a31919dd0e10d5..e95b2565a23172d883b2e5ea09d0eb1e3bdb3081 100644 (file)
@@ -46,6 +46,14 @@ extern XVisualInfo *
 GetVisualFromFBConfig(Display *dpy, int screen, FBCONFIG config);
 
 
+extern GLXContext
+CreateContext(Display *dpy, int screen, FBCONFIG config);
+
+
+extern void
+DestroyContext(Display *dpy, GLXContext ctx);
+
+
 extern PBUFFER
 CreatePbuffer(Display *dpy, int screen, FBCONFIG config,
              int width, int height, Bool preserve, Bool largest);