glxapi.c revision fd54564f78d4aeae2c39ada7502ec659c14b3eca
1afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*
2afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Mesa 3-D graphics library
3fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul * Version:  7.1
4afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *
5fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
6afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *
7afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Permission is hereby granted, free of charge, to any person obtaining a
8afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * copy of this software and associated documentation files (the "Software"),
9afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * to deal in the Software without restriction, including without limitation
10afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * and/or sell copies of the Software, and to permit persons to whom the
12afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Software is furnished to do so, subject to the following conditions:
13afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *
14afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * The above copyright notice and this permission notice shall be included
15afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * in all copies or substantial portions of the Software.
16afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *
17afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */
24afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
25afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
26e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/*
27e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * This is the GLX API dispatcher.  Calls to the glX* functions are
28b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul * either routed to the real GLX encoders or to Mesa's pseudo-GLX functions.
291d822ea8cfa765802fe63b1a5d8d2bd83118007fBrian Paul * See the glxapi.h file for more details.
30e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul */
31e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
32afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
33e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#include <assert.h>
34e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#include <stdlib.h>
3555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul#include <stdio.h>
361487b3ea3ed0d30fa70655247e65d0ede3eef3afJon Taylor#include <string.h>
37be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul#include "glheader.h"
38e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul#include "glapi.h"
39e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#include "glxapi.h"
40afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
41afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
42b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paulextern struct _glxapi_table *_real_GetGLXDispatchTable(void);
43e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulextern struct _glxapi_table *_mesa_GetGLXDispatchTable(void);
44afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
45afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
46e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstruct display_dispatch {
47e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   Display *Dpy;
48e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   struct _glxapi_table *Table;
49e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   struct display_dispatch *Next;
50e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul};
51afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
52e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstatic struct display_dispatch *DispatchList = NULL;
53afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
54e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
5555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul/* Display -> Dispatch caching */
5655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paulstatic Display *prevDisplay = NULL;
5755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paulstatic struct _glxapi_table *prevTable = NULL;
5855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul
5955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul
60e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstatic struct _glxapi_table *
61e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulget_dispatch(Display *dpy)
62afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
63e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!dpy)
64e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
65e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
66e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   /* search list of display/dispatch pairs for this display */
67e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   {
68e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      const struct display_dispatch *d = DispatchList;
69e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      while (d) {
70e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         if (d->Dpy == dpy) {
71e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            prevDisplay = dpy;
72e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            prevTable = d->Table;
73e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            return d->Table;  /* done! */
74e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         }
75e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         d = d->Next;
76e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      }
77afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
78e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
79b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /* A new display, determine if we should use real GLX
80e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul    * or Mesa's pseudo-GLX.
81e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul    */
82e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   {
83ab7c6ffadccbeb96b6f4ac58fb75e90697cd30c5Ian Romanick      struct _glxapi_table *t = _mesa_GetGLXDispatchTable();
84e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
85e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      if (t) {
86e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         struct display_dispatch *d;
87e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         d = (struct display_dispatch *) malloc(sizeof(struct display_dispatch));
88e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         if (d) {
89e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            d->Dpy = dpy;
90e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            d->Table = t;
91e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            /* insert at head of list */
92e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            d->Next = DispatchList;
93e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            DispatchList = d;
94e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            /* update cache */
95e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            prevDisplay = dpy;
96e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            prevTable = t;
97e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            return t;
98e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         }
99e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      }
100afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
101e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
102e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   /* If we get here that means we can't use real GLX on this display
103e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul    * and the Mesa pseudo-GLX software renderer wasn't compiled in.
104e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul    * Or, we ran out of memory!
105e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul    */
106e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return NULL;
107afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
108afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
109afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1102b17741e1b7999dacf0974b0a2bcbc10adb26219Brian Paul/* Don't use the GET_DISPATCH defined in glthread.h */
1112b17741e1b7999dacf0974b0a2bcbc10adb26219Brian Paul#undef GET_DISPATCH
1122b17741e1b7999dacf0974b0a2bcbc10adb26219Brian Paul
11355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul#define GET_DISPATCH(DPY, TABLE)	\
11455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   if (DPY == prevDisplay) {		\
11555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul      TABLE = prevTable;		\
11655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   }					\
11755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   else if (!DPY) {			\
11855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul      TABLE = NULL;			\
11955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   }					\
12055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   else {				\
12155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul      TABLE = get_dispatch(DPY);	\
12255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   }
12355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul
12455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul
12555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul
126afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
127d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul/**
128d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul * GLX API current context.
129d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul */
130d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#if defined(GLX_USE_TLS)
131d41d29b8bde9bb9c277424a43d0b80838edfe254Brian PaulPUBLIC __thread void * CurrentContext
132d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul    __attribute__((tls_model("initial-exec")));
133d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#elif defined(THREADS)
134d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paulstatic _glthread_TSD ContextTSD;         /**< Per-thread context pointer */
135d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#else
136e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstatic GLXContext CurrentContext = 0;
137d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#endif
138d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul
139d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul
140d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paulstatic void
141d41d29b8bde9bb9c277424a43d0b80838edfe254Brian PaulSetCurrentContext(GLXContext c)
142d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul{
143d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#if defined(GLX_USE_TLS)
144d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul   CurrentContext = context;
145d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#elif defined(THREADS)
146d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul   _glthread_SetTSD(&ContextTSD, c);
147d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#else
148d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul   CurrentContext = c;
149d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#endif
150d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul}
151e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
152e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
153e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/*
154e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * GLX API entrypoints
155e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul */
156e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
157b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_VERSION_1_0 ***/
158e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
159be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulXVisualInfo PUBLIC *
160be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXChooseVisual(Display *dpy, int screen, int *list)
161afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
16255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
16355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
164e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
165e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
166e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->ChooseVisual)(dpy, screen, list);
167afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
168afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
169afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
170be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
171be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCopyContext(Display *dpy, GLXContext src, GLXContext dst, unsigned long mask)
172e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
17355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
17455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
175e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
176e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
177e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->CopyContext)(dpy, src, dst, mask);
178e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
179e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
180afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
181be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContext PUBLIC
182be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateContext(Display *dpy, XVisualInfo *visinfo, GLXContext shareList, Bool direct)
183afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
18455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
18555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
186e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
187e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
188e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->CreateContext)(dpy, visinfo, shareList, direct);
189afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
190afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
191afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
192be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPixmap PUBLIC
193be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateGLXPixmap(Display *dpy, XVisualInfo *visinfo, Pixmap pixmap)
194e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
19555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
19655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
197e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
198e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
199e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->CreateGLXPixmap)(dpy, visinfo, pixmap);
200e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
201e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
202afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
203be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
204be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyContext(Display *dpy, GLXContext ctx)
205afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
20655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
20755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
208e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
209e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
210d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul   if (glXGetCurrentContext() == ctx)
211d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul      SetCurrentContext(NULL);
212e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->DestroyContext)(dpy, ctx);
213afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
214afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
215afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
216be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
217be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyGLXPixmap(Display *dpy, GLXPixmap pixmap)
218e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
21955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
22055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
221e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
222e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
223e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->DestroyGLXPixmap)(dpy, pixmap);
224e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
225e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
226afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
227be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
228be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetConfig(Display *dpy, XVisualInfo *visinfo, int attrib, int *value)
229afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
23055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
23155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
232e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
233e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return GLX_NO_EXTENSION;
234e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->GetConfig)(dpy, visinfo, attrib, value);
235afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
236afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
237afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
238be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContext PUBLIC
239be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentContext(void)
240e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
241d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#if defined(GLX_USE_TLS)
242d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul   return CurrentContext;
243d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#elif defined(THREADS)
24418d1fdebebcb52e7fcf50e62c4c02862d173af51Brian Paul   return (GLXContext) _glthread_GetTSD(&ContextTSD);
245d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#else
246e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return CurrentContext;
247d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#endif
248e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
249e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
250afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
251be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXDrawable PUBLIC
252be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentDrawable(void)
253afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
25412c1bee87fcc3a0912685bb6e83447972e5de64eBrian Paul   __GLXcontext *gc = (__GLXcontext *) glXGetCurrentContext();
2557cf50e137da497a590ec9001a9918972a6246142Brian Paul   return gc ? gc->currentDrawable : 0;
256afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
257afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
258afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
259be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
260be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXIsDirect(Display *dpy, GLXContext ctx)
261e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
26255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
26355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
264e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
265e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
266e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->IsDirect)(dpy, ctx);
267e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
268e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
269afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
270be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
271be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXMakeCurrent(Display *dpy, GLXDrawable drawable, GLXContext ctx)
272afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
273e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   Bool b;
27455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
27555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
27684cac8441fcf5f692cd220e9fa86cab398a4c159Brian Paul   if (!t) {
277e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
27884cac8441fcf5f692cd220e9fa86cab398a4c159Brian Paul   }
279e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   b = (*t->MakeCurrent)(dpy, drawable, ctx);
280e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (b) {
281d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul      SetCurrentContext(ctx);
282afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
283e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return b;
284afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
285afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
286afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
287be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
288be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryExtension(Display *dpy, int *errorb, int *event)
289afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
29055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
29155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
292e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
293e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
294e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->QueryExtension)(dpy, errorb, event);
295afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
296afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
297afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
298be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
299be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryVersion(Display *dpy, int *maj, int *min)
300afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
30155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
30255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
303e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
304e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
305e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->QueryVersion)(dpy, maj, min);
306afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
307afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
308afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
309be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
310be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXSwapBuffers(Display *dpy, GLXDrawable drawable)
311afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
31255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
31355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
314e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
315e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
316e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->SwapBuffers)(dpy, drawable);
317afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
318afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
319afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
320be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
321be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXUseXFont(Font font, int first, int count, int listBase)
322afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
32355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
3247cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
3257cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
326e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
327e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
328e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->UseXFont)(font, first, count, listBase);
329afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
330afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
331afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
332be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
333be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXWaitGL(void)
334afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
33555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
3367cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
3377cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
338e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
339e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
340e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->WaitGL)();
341afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
342afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
343afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
344be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
345be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXWaitX(void)
346afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
34755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
3487cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
3497cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
350e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
351e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
352e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->WaitX)();
353afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
354afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
355afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
356afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
357b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_VERSION_1_1 ***/
358e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
359be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulconst char PUBLIC *
360be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetClientString(Display *dpy, int name)
361afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
36255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
36355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
364e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
365e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
366e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->GetClientString)(dpy, name);
367afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
368afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
369afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
370be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulconst char PUBLIC *
371be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryExtensionsString(Display *dpy, int screen)
372e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
37355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
37455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
375e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
376e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
377e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->QueryExtensionsString)(dpy, screen);
378e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
379e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
380afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
381be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulconst char PUBLIC *
382be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryServerString(Display *dpy, int screen, int name)
383afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
38455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
38555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
386e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
387e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
388e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->QueryServerString)(dpy, screen, name);
389afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
390afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
391afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
392b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_VERSION_1_2 ***/
393afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
394be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulDisplay PUBLIC *
395be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentDisplay(void)
396afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
3977cf50e137da497a590ec9001a9918972a6246142Brian Paul   /* Same code as in libGL's glxext.c */
39812c1bee87fcc3a0912685bb6e83447972e5de64eBrian Paul   __GLXcontext *gc = (__GLXcontext *) glXGetCurrentContext();
3997cf50e137da497a590ec9001a9918972a6246142Brian Paul   if (NULL == gc) return NULL;
4007cf50e137da497a590ec9001a9918972a6246142Brian Paul   return gc->currentDpy;
401afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
402e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
403afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
404afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
405b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_VERSION_1_3 ***/
406afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
407be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXFBConfig PUBLIC *
408be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXChooseFBConfig(Display *dpy, int screen, const int *attribList, int *nitems)
409afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
41055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
41155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
412e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
413e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
414e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->ChooseFBConfig)(dpy, screen, attribList, nitems);
415afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
416afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
417afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
418be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContext PUBLIC
419be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateNewContext(Display *dpy, GLXFBConfig config, int renderType, GLXContext shareList, Bool direct)
420afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
42155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
42255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
423e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
424e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
425e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->CreateNewContext)(dpy, config, renderType, shareList, direct);
426afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
427afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
428afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
429be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPbuffer PUBLIC
430be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreatePbuffer(Display *dpy, GLXFBConfig config, const int *attribList)
431afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
43255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
43355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
434e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
435e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
436e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->CreatePbuffer)(dpy, config, attribList);
437afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
438afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
439afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
440be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPixmap PUBLIC
441be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreatePixmap(Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attribList)
442afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
44355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
44455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
445e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
446e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
447e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->CreatePixmap)(dpy, config, pixmap, attribList);
448afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
449afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
450afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
451be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXWindow PUBLIC
452be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateWindow(Display *dpy, GLXFBConfig config, Window win, const int *attribList)
453afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
45455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
45555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
456e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
457e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
458e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->CreateWindow)(dpy, config, win, attribList);
459afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
460afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
461afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
462be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
463be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyPbuffer(Display *dpy, GLXPbuffer pbuf)
464afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
46555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
46655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
467e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
468e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
469e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->DestroyPbuffer)(dpy, pbuf);
470afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
471afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
472afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
473be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
474be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyPixmap(Display *dpy, GLXPixmap pixmap)
475b82d993b03320818f88f792a9e713f7ed491bfcbBrian Paul{
47655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
47755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
478e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
479e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
480e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->DestroyPixmap)(dpy, pixmap);
481b82d993b03320818f88f792a9e713f7ed491bfcbBrian Paul}
482b82d993b03320818f88f792a9e713f7ed491bfcbBrian Paul
483b82d993b03320818f88f792a9e713f7ed491bfcbBrian Paul
484be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
485be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyWindow(Display *dpy, GLXWindow window)
486ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
48755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
48855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
489e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
490e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
491e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->DestroyWindow)(dpy, window);
492ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
493ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
494ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
495be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXDrawable PUBLIC
496be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentReadDrawable(void)
497ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
49812c1bee87fcc3a0912685bb6e83447972e5de64eBrian Paul   __GLXcontext *gc = (__GLXcontext *) glXGetCurrentContext();
4997cf50e137da497a590ec9001a9918972a6246142Brian Paul   return gc ? gc->currentReadable : 0;
500ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
501ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
502ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
503be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
504be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetFBConfigAttrib(Display *dpy, GLXFBConfig config, int attribute, int *value)
505ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
50655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
50755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
508e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
509e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return GLX_NO_EXTENSION;
510e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->GetFBConfigAttrib)(dpy, config, attribute, value);
511ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
512ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
513ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
514be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXFBConfig PUBLIC *
515be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetFBConfigs(Display *dpy, int screen, int *nelements)
5165605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul{
51755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
51855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
5195605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul   if (!t)
5205605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul      return 0;
5215605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul   return (t->GetFBConfigs)(dpy, screen, nelements);
5225605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul}
5235605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul
524be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
525be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetSelectedEvent(Display *dpy, GLXDrawable drawable, unsigned long *mask)
526ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
52755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
52855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
529e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
530e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
531e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->GetSelectedEvent)(dpy, drawable, mask);
532ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
533ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
534ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
535be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulXVisualInfo PUBLIC *
536be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetVisualFromFBConfig(Display *dpy, GLXFBConfig config)
537ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
53855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
53955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
540e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
541e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
542e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->GetVisualFromFBConfig)(dpy, config);
543ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
544ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
545ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
546be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
547be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXMakeContextCurrent(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx)
548ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
549e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   Bool b;
55055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
55155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
552e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
553e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
554e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   b = (t->MakeContextCurrent)(dpy, draw, read, ctx);
555e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (b) {
556d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul      SetCurrentContext(ctx);
557e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   }
558e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return b;
559ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
560ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
561ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
562be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
563be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryContext(Display *dpy, GLXContext ctx, int attribute, int *value)
564ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
56555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
56655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
567e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   assert(t);
568e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
569e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0; /* XXX correct? */
570e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->QueryContext)(dpy, ctx, attribute, value);
571ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
572ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
573ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
574be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
575be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryDrawable(Display *dpy, GLXDrawable draw, int attribute, unsigned int *value)
576ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
57755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
57855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
579e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
580e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
581e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->QueryDrawable)(dpy, draw, attribute, value);
582ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
583ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
584ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
585be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
586be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXSelectEvent(Display *dpy, GLXDrawable drawable, unsigned long mask)
587ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
58855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
58955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
590e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
591e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
592e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->SelectEvent)(dpy, drawable, mask);
593ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
594ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
595ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
596e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
597b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGI_swap_control ***/
598783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
599be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
600be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXSwapIntervalSGI(int interval)
601783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
60255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
6037cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
6047cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
605783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
606783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
607783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->SwapIntervalSGI)(interval);
608783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
609783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
610783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
611783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
612b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGI_video_sync ***/
613783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
614be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
615be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetVideoSyncSGI(unsigned int *count)
616783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
61755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
6187cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
6197cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
6202d087480b4b1207c058efcccc9a72faedcea4651Brian Paul   if (!t || !glXGetCurrentContext())
6212d087480b4b1207c058efcccc9a72faedcea4651Brian Paul      return GLX_BAD_CONTEXT;
622783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->GetVideoSyncSGI)(count);
623783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
624783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
625be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
626be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count)
627783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
62855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
6297cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
6307cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
6312d087480b4b1207c058efcccc9a72faedcea4651Brian Paul   if (!t || !glXGetCurrentContext())
6322d087480b4b1207c058efcccc9a72faedcea4651Brian Paul      return GLX_BAD_CONTEXT;
633783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->WaitVideoSyncSGI)(divisor, remainder, count);
634783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
635783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
636783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
637783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
638b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGI_make_current_read ***/
639783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
640be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
641be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXMakeCurrentReadSGI(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx)
642783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
64355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
64455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
645783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
6462d087480b4b1207c058efcccc9a72faedcea4651Brian Paul      return False;
647783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->MakeCurrentReadSGI)(dpy, draw, read, ctx);
648783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
649783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
650be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXDrawable PUBLIC
651be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentReadDrawableSGI(void)
652783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
6537cf50e137da497a590ec9001a9918972a6246142Brian Paul   return glXGetCurrentReadDrawable();
654783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
655783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
656783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
657b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul#if defined(_VL_H)
658783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
659be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXVideoSourceSGIX PUBLIC
660be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateGLXVideoSourceSGIX(Display *dpy, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode)
661783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
66255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
66355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
664783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
665783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
666783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->CreateGLXVideoSourceSGIX)(dpy, screen, server, path, nodeClass, drainNode);
667783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
668783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
669be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
670be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyGLXVideoSourceSGIX(Display *dpy, GLXVideoSourceSGIX src)
671783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
67255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
67355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
674783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
675783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
676783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->DestroyGLXVideoSourceSGIX)(dpy, src);
677783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
678783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
679783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif
680783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
681783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
682b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_EXT_import_context ***/
683e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
684be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
685be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXFreeContextEXT(Display *dpy, GLXContext context)
686ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
68755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
68855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
689e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
690e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
691e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->FreeContextEXT)(dpy, context);
692ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
693ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
694be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContextID PUBLIC
695be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetContextIDEXT(const GLXContext context)
696ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
69712c1bee87fcc3a0912685bb6e83447972e5de64eBrian Paul   return ((__GLXcontext *) context)->xid;
698ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
699ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
700be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulDisplay PUBLIC *
701be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentDisplayEXT(void)
702ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
7037cf50e137da497a590ec9001a9918972a6246142Brian Paul   return glXGetCurrentDisplay();
704ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
705ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
706be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContext PUBLIC
707be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXImportContextEXT(Display *dpy, GLXContextID contextID)
708ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
70955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
71055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
711e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
712e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
713e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->ImportContextEXT)(dpy, contextID);
714ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
715ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
716be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
717be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryContextInfoEXT(Display *dpy, GLXContext context, int attribute,int *value)
718ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
71955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
72055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
721e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
722e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;  /* XXX ok? */
723e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->QueryContextInfoEXT)(dpy, context, attribute, value);
724ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
725ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
726e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
727e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
728b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGIX_fbconfig ***/
729ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
730be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
731be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config, int attribute, int *value)
732ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
73355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
73455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
735e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
736e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
737783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->GetFBConfigAttribSGIX)(dpy, config, attribute, value);
738ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
739ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
740be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXFBConfigSGIX PUBLIC *
741be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXChooseFBConfigSGIX(Display *dpy, int screen, int *attrib_list, int *nelements)
742783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
74355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
74455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
745783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
746783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
747783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->ChooseFBConfigSGIX)(dpy, screen, attrib_list, nelements);
748783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
749ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
750be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPixmap PUBLIC
751be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateGLXPixmapWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap)
752ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
75355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
75455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
755e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
756e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
757783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->CreateGLXPixmapWithConfigSGIX)(dpy, config, pixmap);
758783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
759783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
760be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContext PUBLIC
761be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateContextWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct)
762783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
76355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
76455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
765783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
766783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
767783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->CreateContextWithConfigSGIX)(dpy, config, render_type, share_list, direct);
768783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
769783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
770be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulXVisualInfo PUBLIC *
771be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetVisualFromFBConfigSGIX(Display *dpy, GLXFBConfigSGIX config)
772783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
77355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
77455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
775783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
776783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
777783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->GetVisualFromFBConfigSGIX)(dpy, config);
778783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
779783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
780be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXFBConfigSGIX PUBLIC
781be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetFBConfigFromVisualSGIX(Display *dpy, XVisualInfo *vis)
782783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
78355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
78455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
785783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
786783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
787783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->GetFBConfigFromVisualSGIX)(dpy, vis);
788783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
789783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
790783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
791783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
792b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGIX_pbuffer ***/
793783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
794be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPbufferSGIX PUBLIC
795be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateGLXPbufferSGIX(Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list)
796783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
79755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
79855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
799783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
800783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
801783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->CreateGLXPbufferSGIX)(dpy, config, width, height, attrib_list);
802783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
803783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
804be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
805be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf)
806783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
80755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
80855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
809783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
810783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
811783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   (t->DestroyGLXPbufferSGIX)(dpy, pbuf);
812783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
813783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
814be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
815be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value)
816783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
81755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
81855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
819783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
820783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
821783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->QueryGLXPbufferSGIX)(dpy, pbuf, attribute, value);
822783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
823783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
824be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
825be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXSelectEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long mask)
826783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
82755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
82855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
829783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
830783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
831783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   (t->SelectEventSGIX)(dpy, drawable, mask);
832783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
833783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
834be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
835be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetSelectedEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long *mask)
836783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
83755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
83855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
839783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
840783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
841783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   (t->GetSelectedEventSGIX)(dpy, drawable, mask);
842783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
843783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
844783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
845783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
846b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGI_cushion ***/
847783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
848be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
849be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCushionSGI(Display *dpy, Window win, float cushion)
850783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
85155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
85255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
853783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
854783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
855783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   (t->CushionSGI)(dpy, win, cushion);
856ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
857ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
858ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
859ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
860b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGIX_video_resize ***/
8614536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
862be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
863be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXBindChannelToWindowSGIX(Display *dpy, int screen, int channel , Window window)
8644536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
86555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
86655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
8674536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
8684536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul      return 0;
8694536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   return (t->BindChannelToWindowSGIX)(dpy, screen, channel, window);
8704536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
8714536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
872be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
873be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXChannelRectSGIX(Display *dpy, int screen, int channel, int x, int y, int w, int h)
8744536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
87555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
87655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
8774536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
8784536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul      return 0;
8794536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   return (t->ChannelRectSGIX)(dpy, screen, channel, x, y, w, h);
8804536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
8814536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
882be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
883be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryChannelRectSGIX(Display *dpy, int screen, int channel, int *x, int *y, int *w, int *h)
8844536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
88555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
88655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
8874536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
8884536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul      return 0;
8894536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   return (t->QueryChannelRectSGIX)(dpy, screen, channel, x, y, w, h);
8904536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
8914536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
892be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
893be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryChannelDeltasSGIX(Display *dpy, int screen, int channel, int *dx, int *dy, int *dw, int *dh)
8944536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
89555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
89655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
8974536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
8984536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul      return 0;
8994536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   return (t->QueryChannelDeltasSGIX)(dpy, screen, channel, dx, dy, dw, dh);
9004536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9014536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
902be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
903be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXChannelRectSyncSGIX(Display *dpy, int screen, int channel, GLenum synctype)
9044536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
90555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
90655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9074536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
9084536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul      return 0;
9094536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   return (t->ChannelRectSyncSGIX)(dpy, screen, channel, synctype);
9104536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9114536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
9124536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
9134536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
914b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul#if defined(_DM_BUFFER_H_)
9154536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
916be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
917be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXAssociateDMPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer)
9184536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
91955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
92055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9214536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
922783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return False;
923783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->AssociateDMPbufferSGIX)(dpy, pbuffer, params, dmbuffer);
9244536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9254536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
926783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif
9274536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
9284536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
929b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGIX_swap_group ***/
930783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
931be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
932be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXJoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable, GLXDrawable member)
9334536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
93455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
93555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9364536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
937783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
938783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   (*t->JoinSwapGroupSGIX)(dpy, drawable, member);
9394536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9404536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
941783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
942b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGIX_swap_barrier ***/
943783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
944be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
945be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXBindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable, int barrier)
9464536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
94755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
94855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9494536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
950783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
951783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   (*t->BindSwapBarrierSGIX)(dpy, drawable, barrier);
9524536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9534536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
954be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
955be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryMaxSwapBarriersSGIX(Display *dpy, int screen, int *max)
9564536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
95755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
95855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9594536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
960783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return False;
961783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (*t->QueryMaxSwapBarriersSGIX)(dpy, screen, max);
9624536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9634536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
964783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
965783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
966b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SUN_get_transparent_index ***/
967783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
968be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulStatus PUBLIC
969be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetTransparentIndexSUN(Display *dpy, Window overlay, Window underlay, long *pTransparent)
9704536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
97155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
97255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9734536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
974783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return False;
975783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (*t->GetTransparentIndexSUN)(dpy, overlay, underlay, pTransparent);
9764536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9774536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
9784536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
9794536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
980b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_MESA_copy_sub_buffer ***/
981ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
982be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
983be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCopySubBufferMESA(Display *dpy, GLXDrawable drawable, int x, int y, int width, int height)
984afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
98555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
98655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
987e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
988e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
989e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->CopySubBufferMESA)(dpy, drawable, x, y, width, height);
990e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
991e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
992e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
993e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
994b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_MESA_release_buffers ***/
995e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
996be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
997be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXReleaseBuffersMESA(Display *dpy, Window w)
998e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
99955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
100055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
1001e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
1002e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
1003e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->ReleaseBuffersMESA)(dpy, w);
1004afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
1005e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1006afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1007afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1008b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_MESA_pixmap_colormap ***/
1009e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1010be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPixmap PUBLIC
1011be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateGLXPixmapMESA(Display *dpy, XVisualInfo *visinfo, Pixmap pixmap, Colormap cmap)
1012afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
101355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
101455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
1015e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
1016afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return 0;
1017e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->CreateGLXPixmapMESA)(dpy, visinfo, pixmap, cmap);
1018e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
1019e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1020e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1021e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1022b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_MESA_set_3dfx_mode ***/
1023e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1024be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
1025be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXSet3DfxModeMESA(int mode)
1026e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
102755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
10287cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
10297cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
1030e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
1031e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
1032e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->Set3DfxModeMESA)(mode);
1033afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
1034e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1035afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1036afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1037d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul/*** GLX_NV_vertex_array_range ***/
10388fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
1039be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC *
10408fefafa2200d3ea44ec46592b190654a10685b46Brian PaulglXAllocateMemoryNV( GLsizei size,
10418fefafa2200d3ea44ec46592b190654a10685b46Brian Paul                     GLfloat readFrequency,
10428fefafa2200d3ea44ec46592b190654a10685b46Brian Paul                     GLfloat writeFrequency,
10438fefafa2200d3ea44ec46592b190654a10685b46Brian Paul                     GLfloat priority )
10448fefafa2200d3ea44ec46592b190654a10685b46Brian Paul{
10458fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   struct _glxapi_table *t;
10468fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   Display *dpy = glXGetCurrentDisplay();
10478fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   GET_DISPATCH(dpy, t);
10488fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   if (!t)
10498fefafa2200d3ea44ec46592b190654a10685b46Brian Paul      return NULL;
10508fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   return (t->AllocateMemoryNV)(size, readFrequency, writeFrequency, priority);
10518fefafa2200d3ea44ec46592b190654a10685b46Brian Paul}
10528fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
10538fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
1054be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
10558fefafa2200d3ea44ec46592b190654a10685b46Brian PaulglXFreeMemoryNV( GLvoid *pointer )
10568fefafa2200d3ea44ec46592b190654a10685b46Brian Paul{
10578fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   struct _glxapi_table *t;
10588fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   Display *dpy = glXGetCurrentDisplay();
10598fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   GET_DISPATCH(dpy, t);
10608fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   if (!t)
10618fefafa2200d3ea44ec46592b190654a10685b46Brian Paul      return;
10628fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   (t->FreeMemoryNV)(pointer);
10638fefafa2200d3ea44ec46592b190654a10685b46Brian Paul}
10648fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
10658fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
10667cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul
10677cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul
1068d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul/*** GLX_MESA_agp_offset */
1069d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul
1070be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLuint PUBLIC
1071d6113fc20d68f5720740b89c594227d0312bab3eBrian PaulglXGetAGPOffsetMESA( const GLvoid *pointer )
1072d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul{
1073d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   struct _glxapi_table *t;
1074d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   Display *dpy = glXGetCurrentDisplay();
1075d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   GET_DISPATCH(dpy, t);
1076d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   if (!t)
1077d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul      return ~0;
1078d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   return (t->GetAGPOffsetMESA)(pointer);
1079d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul}
1080d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul
1081afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
10827cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul/*** GLX_MESA_allocate_memory */
10837cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul
10847cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paulvoid *
10857cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian PaulglXAllocateMemoryMESA(Display *dpy, int scrn, size_t size,
10867cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul                      float readfreq, float writefreq, float priority)
10877cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul{
10887cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul   /* dummy */
10897cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul   return NULL;
10907cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul}
10917cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul
10927cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paulvoid
10937cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian PaulglXFreeMemoryMESA(Display *dpy, int scrn, void *pointer)
10947cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul{
10957cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul   /* dummy */
10967cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul}
10977cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul
10987cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul
10997cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian PaulGLuint
11007cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian PaulglXGetMemoryOffsetMESA(Display *dpy, int scrn, const void *pointer)
11017cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul{
11027cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul   /* dummy */
11037cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul   return 0;
11047cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul}
11057cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul
11067cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul
1107fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul/*** GLX_EXT_texture_from_pixmap */
1108fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul
1109fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paulvoid
1110fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian PaulglXBindTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer,
1111fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul                   const int *attrib_list)
1112fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul{
1113fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   struct _glxapi_table *t;
1114fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   GET_DISPATCH(dpy, t);
1115fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   if (t)
1116fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul      t->BindTexImageEXT(dpy, drawable, buffer, attrib_list);
1117fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul}
1118fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul
1119fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paulvoid
1120fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian PaulglXReleaseTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer)
1121fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul{
1122fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   struct _glxapi_table *t;
1123fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   GET_DISPATCH(dpy, t);
1124fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   if (t)
1125fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul      t->ReleaseTexImageEXT(dpy, drawable, buffer);
1126fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul}
1127fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul
11287cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul
1129e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/**********************************************************************/
1130e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/* GLX API management functions                                       */
1131e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/**********************************************************************/
1132e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1133e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1134e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulconst char *
1135e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul_glxapi_get_version(void)
1136e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
1137e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return "1.3";
1138e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
1139e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1140afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1141afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*
1142e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * Return array of extension strings.
1143afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */
1144e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulconst char **
1145e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul_glxapi_get_extensions(void)
1146afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
1147e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   static const char *extensions[] = {
11484c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_EXT_import_context
1149e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_EXT_import_context",
1150e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11514c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_SGI_video_sync
1152e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_SGI_video_sync",
1153e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11544c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_copy_sub_buffer
1155e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_MESA_copy_sub_buffer",
1156e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11574c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_release_buffers
1158e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_MESA_release_buffers",
1159e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11604c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_pixmap_colormap
1161e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_MESA_pixmap_colormap",
1162e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11634c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_set_3dfx_mode
1164e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_MESA_set_3dfx_mode",
1165e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11663c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul#ifdef GLX_SGIX_fbconfig
11673c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul      "GLX_SGIX_fbconfig",
11683c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul#endif
11693c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul#ifdef GLX_SGIX_pbuffer
11703c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul      "GLX_SGIX_pbuffer",
11713c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul#endif
1172fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul#ifdef GLX_EXT_texture_from_pixmap,
1173fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul      "GLX_EXT_texture_from_pixmap",
1174fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul#endif
1175e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      NULL
1176e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   };
1177e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return extensions;
1178afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
1179afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1180afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1181afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*
1182e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * Return size of the GLX dispatch table, in entries, not bytes.
1183afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */
1184e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian PaulGLuint
1185e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul_glxapi_get_dispatch_table_size(void)
1186e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
1187e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return sizeof(struct _glxapi_table) / sizeof(void *);
1188e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
1189e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1190e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1191e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstatic int
1192e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulgeneric_no_op_func(void)
1193afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
1194afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   return 0;
1195afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
1196afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1197e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1198e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/*
1199e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * Initialize all functions in given dispatch table to be no-ops
1200e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul */
1201e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulvoid
1202e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul_glxapi_set_no_op_table(struct _glxapi_table *t)
1203e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
1204be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   typedef int (*nop_func)(void);
1205be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   nop_func *dispatch = (nop_func *) t;
1206e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   GLuint n = _glxapi_get_dispatch_table_size();
1207e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   GLuint i;
1208e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   for (i = 0; i < n; i++) {
1209be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul      dispatch[i] = generic_no_op_func;
1210e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   }
1211e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
1212e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1213e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1214e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstruct name_address_pair {
1215e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   const char *Name;
1216be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   __GLXextFuncPtr Address;
1217e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul};
1218e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1219e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstatic struct name_address_pair GLX_functions[] = {
1220b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_VERSION_1_0 ***/
1221be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXChooseVisual", (__GLXextFuncPtr) glXChooseVisual },
1222be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCopyContext", (__GLXextFuncPtr) glXCopyContext },
1223be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateContext", (__GLXextFuncPtr) glXCreateContext },
1224be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateGLXPixmap", (__GLXextFuncPtr) glXCreateGLXPixmap },
1225be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyContext", (__GLXextFuncPtr) glXDestroyContext },
1226be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyGLXPixmap", (__GLXextFuncPtr) glXDestroyGLXPixmap },
1227be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetConfig", (__GLXextFuncPtr) glXGetConfig },
1228be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentContext", (__GLXextFuncPtr) glXGetCurrentContext },
1229be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentDrawable", (__GLXextFuncPtr) glXGetCurrentDrawable },
1230be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXIsDirect", (__GLXextFuncPtr) glXIsDirect },
1231be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXMakeCurrent", (__GLXextFuncPtr) glXMakeCurrent },
1232be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryExtension", (__GLXextFuncPtr) glXQueryExtension },
1233be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryVersion", (__GLXextFuncPtr) glXQueryVersion },
1234be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXSwapBuffers", (__GLXextFuncPtr) glXSwapBuffers },
1235be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXUseXFont", (__GLXextFuncPtr) glXUseXFont },
1236be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXWaitGL", (__GLXextFuncPtr) glXWaitGL },
1237be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXWaitX", (__GLXextFuncPtr) glXWaitX },
1238e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1239b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_VERSION_1_1 ***/
1240be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetClientString", (__GLXextFuncPtr) glXGetClientString },
1241be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryExtensionsString", (__GLXextFuncPtr) glXQueryExtensionsString },
1242be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryServerString", (__GLXextFuncPtr) glXQueryServerString },
124389a42b7e736bd9b0ab090906cab0cd047a6ec12eBrian Paul
1244b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_VERSION_1_2 ***/
1245be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentDisplay", (__GLXextFuncPtr) glXGetCurrentDisplay },
124689a42b7e736bd9b0ab090906cab0cd047a6ec12eBrian Paul
1247b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_VERSION_1_3 ***/
1248be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXChooseFBConfig", (__GLXextFuncPtr) glXChooseFBConfig },
1249be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateNewContext", (__GLXextFuncPtr) glXCreateNewContext },
1250be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreatePbuffer", (__GLXextFuncPtr) glXCreatePbuffer },
1251be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreatePixmap", (__GLXextFuncPtr) glXCreatePixmap },
1252be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateWindow", (__GLXextFuncPtr) glXCreateWindow },
1253be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyPbuffer", (__GLXextFuncPtr) glXDestroyPbuffer },
1254be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyPixmap", (__GLXextFuncPtr) glXDestroyPixmap },
1255be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyWindow", (__GLXextFuncPtr) glXDestroyWindow },
1256be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentReadDrawable", (__GLXextFuncPtr) glXGetCurrentReadDrawable },
1257be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetFBConfigAttrib", (__GLXextFuncPtr) glXGetFBConfigAttrib },
1258be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetFBConfigs", (__GLXextFuncPtr) glXGetFBConfigs },
1259be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetSelectedEvent", (__GLXextFuncPtr) glXGetSelectedEvent },
1260be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetVisualFromFBConfig", (__GLXextFuncPtr) glXGetVisualFromFBConfig },
1261be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXMakeContextCurrent", (__GLXextFuncPtr) glXMakeContextCurrent },
1262be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryContext", (__GLXextFuncPtr) glXQueryContext },
1263be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryDrawable", (__GLXextFuncPtr) glXQueryDrawable },
1264be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXSelectEvent", (__GLXextFuncPtr) glXSelectEvent },
126543c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul
1266ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul   /*** GLX_VERSION_1_4 ***/
1267be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetProcAddress", (__GLXextFuncPtr) glXGetProcAddress },
1268ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul
1269ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGI_swap_control ***/
1270be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXSwapIntervalSGI", (__GLXextFuncPtr) glXSwapIntervalSGI },
1271ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1272b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_SGI_video_sync ***/
1273be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetVideoSyncSGI", (__GLXextFuncPtr) glXGetVideoSyncSGI },
1274be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXWaitVideoSyncSGI", (__GLXextFuncPtr) glXWaitVideoSyncSGI },
1275e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1276ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGI_make_current_read ***/
1277be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXMakeCurrentReadSGI", (__GLXextFuncPtr) glXMakeCurrentReadSGI },
1278be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentReadDrawableSGI", (__GLXextFuncPtr) glXGetCurrentReadDrawableSGI },
1279ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1280ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_video_source ***/
1281ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul#if defined(_VL_H)
1282be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateGLXVideoSourceSGIX", (__GLXextFuncPtr) glXCreateGLXVideoSourceSGIX },
1283be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyGLXVideoSourceSGIX", (__GLXextFuncPtr) glXDestroyGLXVideoSourceSGIX },
1284ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul#endif
1285ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1286ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_EXT_import_context ***/
1287be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXFreeContextEXT", (__GLXextFuncPtr) glXFreeContextEXT },
1288be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetContextIDEXT", (__GLXextFuncPtr) glXGetContextIDEXT },
1289be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentDisplayEXT", (__GLXextFuncPtr) glXGetCurrentDisplayEXT },
1290be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXImportContextEXT", (__GLXextFuncPtr) glXImportContextEXT },
1291be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryContextInfoEXT", (__GLXextFuncPtr) glXQueryContextInfoEXT },
1292ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1293ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_fbconfig ***/
1294be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetFBConfigAttribSGIX", (__GLXextFuncPtr) glXGetFBConfigAttribSGIX },
1295be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXChooseFBConfigSGIX", (__GLXextFuncPtr) glXChooseFBConfigSGIX },
1296be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateGLXPixmapWithConfigSGIX", (__GLXextFuncPtr) glXCreateGLXPixmapWithConfigSGIX },
1297be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateContextWithConfigSGIX", (__GLXextFuncPtr) glXCreateContextWithConfigSGIX },
1298be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetVisualFromFBConfigSGIX", (__GLXextFuncPtr) glXGetVisualFromFBConfigSGIX },
1299be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetFBConfigFromVisualSGIX", (__GLXextFuncPtr) glXGetFBConfigFromVisualSGIX },
1300ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1301ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_pbuffer ***/
1302be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateGLXPbufferSGIX", (__GLXextFuncPtr) glXCreateGLXPbufferSGIX },
1303be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyGLXPbufferSGIX", (__GLXextFuncPtr) glXDestroyGLXPbufferSGIX },
1304be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryGLXPbufferSGIX", (__GLXextFuncPtr) glXQueryGLXPbufferSGIX },
1305be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXSelectEventSGIX", (__GLXextFuncPtr) glXSelectEventSGIX },
1306be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetSelectedEventSGIX", (__GLXextFuncPtr) glXGetSelectedEventSGIX },
1307ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1308ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGI_cushion ***/
1309be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCushionSGI", (__GLXextFuncPtr) glXCushionSGI },
1310ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1311ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_video_resize ***/
1312be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXBindChannelToWindowSGIX", (__GLXextFuncPtr) glXBindChannelToWindowSGIX },
1313be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXChannelRectSGIX", (__GLXextFuncPtr) glXChannelRectSGIX },
1314be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryChannelRectSGIX", (__GLXextFuncPtr) glXQueryChannelRectSGIX },
1315be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryChannelDeltasSGIX", (__GLXextFuncPtr) glXQueryChannelDeltasSGIX },
1316be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXChannelRectSyncSGIX", (__GLXextFuncPtr) glXChannelRectSyncSGIX },
1317ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1318ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_dmbuffer **/
1319ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul#if defined(_DM_BUFFER_H_)
1320be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXAssociateDMPbufferSGIX", (__GLXextFuncPtr) glXAssociateDMPbufferSGIX },
1321ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul#endif
1322ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1323ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_swap_group ***/
1324be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXJoinSwapGroupSGIX", (__GLXextFuncPtr) glXJoinSwapGroupSGIX },
1325ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1326ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_swap_barrier ***/
1327be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXBindSwapBarrierSGIX", (__GLXextFuncPtr) glXBindSwapBarrierSGIX },
1328be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryMaxSwapBarriersSGIX", (__GLXextFuncPtr) glXQueryMaxSwapBarriersSGIX },
1329ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1330ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SUN_get_transparent_index ***/
1331be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetTransparentIndexSUN", (__GLXextFuncPtr) glXGetTransparentIndexSUN },
1332ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1333b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_MESA_copy_sub_buffer ***/
1334be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCopySubBufferMESA", (__GLXextFuncPtr) glXCopySubBufferMESA },
133543c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul
1336b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_MESA_pixmap_colormap ***/
1337be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateGLXPixmapMESA", (__GLXextFuncPtr) glXCreateGLXPixmapMESA },
1338e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1339ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_MESA_release_buffers ***/
1340be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXReleaseBuffersMESA", (__GLXextFuncPtr) glXReleaseBuffersMESA },
1341ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1342b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_MESA_set_3dfx_mode ***/
1343be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXSet3DfxModeMESA", (__GLXextFuncPtr) glXSet3DfxModeMESA },
1344e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1345b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_ARB_get_proc_address ***/
1346be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetProcAddressARB", (__GLXextFuncPtr) glXGetProcAddressARB },
1347e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1348d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   /*** GLX_NV_vertex_array_range ***/
1349be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXAllocateMemoryNV", (__GLXextFuncPtr) glXAllocateMemoryNV },
1350be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXFreeMemoryNV", (__GLXextFuncPtr) glXFreeMemoryNV },
13518fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
1352d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   /*** GLX_MESA_agp_offset ***/
1353be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetAGPOffsetMESA", (__GLXextFuncPtr) glXGetAGPOffsetMESA },
13543c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul
13557cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul   /*** GLX_MESA_allocate_memory ***/
13567cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul   { "glXAllocateMemoryMESA", (__GLXextFuncPtr) glXAllocateMemoryMESA },
13577cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul   { "glXFreeMemoryMESA", (__GLXextFuncPtr) glXFreeMemoryMESA },
13587cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul   { "glXGetMemoryOffsetMESA", (__GLXextFuncPtr) glXGetMemoryOffsetMESA },
13597cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul
1360fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   /*** GLX_EXT_texture_from_pixmap ***/
1361fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   { "glXBindTexImageEXT", (__GLXextFuncPtr) glXBindTexImageEXT },
1362fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   { "glXReleaseTexImageEXT", (__GLXextFuncPtr) glXReleaseTexImageEXT },
1363fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul
1364e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   { NULL, NULL }   /* end of list */
1365e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul};
1366e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
136743c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul
136843c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul
1369e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/*
1370e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * Return address of named glX function, or NULL if not found.
1371e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul */
1372be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul__GLXextFuncPtr
1373e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul_glxapi_get_proc_address(const char *funcName)
137443c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul{
1375e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   GLuint i;
1376e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   for (i = 0; GLX_functions[i].Name; i++) {
1377e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      if (strcmp(GLX_functions[i].Name, funcName) == 0)
1378e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         return GLX_functions[i].Address;
1379e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   }
138043c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul   return NULL;
138189a42b7e736bd9b0ab090906cab0cd047a6ec12eBrian Paul}
1382e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1383e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1384e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1385e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul/*
1386e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul * This function does not get dispatched through the dispatch table
1387e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul * since it's really a "meta" function.
1388e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul */
1389be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul__GLXextFuncPtr
1390be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetProcAddressARB(const GLubyte *procName)
1391e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul{
1392be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   __GLXextFuncPtr f;
1393e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1394be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   f = _glxapi_get_proc_address((const char *) procName);
1395e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul   if (f) {
1396e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul      return f;
1397e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul   }
1398e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1399be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   f = (__GLXextFuncPtr) _glapi_get_proc_address((const char *) procName);
1400e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul   return f;
1401e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul}
1402ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul
1403ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul
1404ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul/* GLX 1.4 */
1405ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paulvoid (*glXGetProcAddress(const GLubyte *procName))()
1406ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul{
1407ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul   return glXGetProcAddressARB(procName);
1408ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul}
1409