diff options
-rw-r--r-- | progs/xdemos/pbutil.c | 38 | ||||
-rw-r--r-- | progs/xdemos/pbutil.h | 8 |
2 files changed, 45 insertions, 1 deletions
diff --git a/progs/xdemos/pbutil.c b/progs/xdemos/pbutil.c index 479abc983c..d0bbd1b0fc 100644 --- a/progs/xdemos/pbutil.c +++ b/progs/xdemos/pbutil.c @@ -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) diff --git a/progs/xdemos/pbutil.h b/progs/xdemos/pbutil.h index e877f20625..e95b2565a2 100644 --- a/progs/xdemos/pbutil.h +++ b/progs/xdemos/pbutil.h @@ -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); |