1afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*
2afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Mesa 3-D graphics library
3afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *
4fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
5afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *
6afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Permission is hereby granted, free of charge, to any person obtaining a
7afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * copy of this software and associated documentation files (the "Software"),
8afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * to deal in the Software without restriction, including without limitation
9afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * and/or sell copies of the Software, and to permit persons to whom the
11afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * Software is furnished to do so, subject to the following conditions:
12afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *
13afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * The above copyright notice and this permission notice shall be included
14afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * in all copies or substantial portions of the Software.
15afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach *
16afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
193d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
203d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
213d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
223d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * OTHER DEALINGS IN THE SOFTWARE.
23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */
24afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
25afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
26e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/*
279b8e267976c824170a0dff9cb542feef855e9b2aBrian Paul * This is the GLX API dispatcher.  It uses a dispatch table but that's
289b8e267976c824170a0dff9cb542feef855e9b2aBrian Paul * not really needed anymore since the table always points to the "fake"
299b8e267976c824170a0dff9cb542feef855e9b2aBrian Paul * GLX functions.
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>
37bf5e573926b2b007cb238afae86207e075603f1eBrian Paul#include "main/glheader.h"
38f2c023291a1f2887294d2aac504f8b82857ad092Brian Paul#include "main/compiler.h"
39bf5e573926b2b007cb238afae86207e075603f1eBrian Paul#include "glapi/glapi.h"
40e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#include "glxapi.h"
41afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
42afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
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
52888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
53888429360a30090b9ecd17bfd160a88141195235Chia-I Wu/**
54888429360a30090b9ecd17bfd160a88141195235Chia-I Wu * When GLX_INDIRECT_RENDERING is defined, some symbols are missing in
55888429360a30090b9ecd17bfd160a88141195235Chia-I Wu * libglapi.a.  We need to define them here.
56888429360a30090b9ecd17bfd160a88141195235Chia-I Wu */
57888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#ifdef GLX_INDIRECT_RENDERING
58888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
59bdd250080593c6d0d5addcaff0b2a5c880d7a3b2Chia-I Wu#include "glapi/glapitable.h"
60888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
61888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#define KEYWORD1 PUBLIC
62888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
63888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#if defined(USE_MGL_NAMESPACE)
64888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#define NAME(func)  mgl##func
65888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#else
66888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#define NAME(func)  gl##func
67888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#endif
68888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
69888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#define DISPATCH(FUNC, ARGS, MESSAGE)		\
70b5022ad03584f119b27c143b53e7ed80e8c12ffbChia-I Wu   GET_DISPATCH()->FUNC ARGS
71888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
72888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE) 	\
73b5022ad03584f119b27c143b53e7ed80e8c12ffbChia-I Wu   return GET_DISPATCH()->FUNC ARGS
74888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
75888429360a30090b9ecd17bfd160a88141195235Chia-I Wu/* skip normal ones */
76888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#define _GLAPI_SKIP_NORMAL_ENTRY_POINTS
77888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#include "glapi/glapitemp.h"
78888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
79888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#endif /* GLX_INDIRECT_RENDERING */
80888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
81888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
82e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstatic struct display_dispatch *DispatchList = NULL;
83afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
84e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
8555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul/* Display -> Dispatch caching */
8655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paulstatic Display *prevDisplay = NULL;
8755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paulstatic struct _glxapi_table *prevTable = NULL;
8855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul
8955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul
90e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstatic struct _glxapi_table *
91e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulget_dispatch(Display *dpy)
92afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
93e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!dpy)
94e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
95e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
96e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   /* search list of display/dispatch pairs for this display */
97e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   {
98e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      const struct display_dispatch *d = DispatchList;
99e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      while (d) {
100e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         if (d->Dpy == dpy) {
101e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            prevDisplay = dpy;
102e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            prevTable = d->Table;
103e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            return d->Table;  /* done! */
104e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         }
105e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         d = d->Next;
106e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      }
107afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
108e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1099b8e267976c824170a0dff9cb542feef855e9b2aBrian Paul   /* Setup the dispatch table */
110e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   {
111ab7c6ffadccbeb96b6f4ac58fb75e90697cd30c5Ian Romanick      struct _glxapi_table *t = _mesa_GetGLXDispatchTable();
112e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
113e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      if (t) {
114e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         struct display_dispatch *d;
1152b7a972e3f36bfcdc6fbe2b59d7ffdcde49c9405Matt Turner         d = malloc(sizeof(struct display_dispatch));
116e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         if (d) {
117e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            d->Dpy = dpy;
118e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            d->Table = t;
119e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            /* insert at head of list */
120e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            d->Next = DispatchList;
121e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            DispatchList = d;
122e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            /* update cache */
123e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            prevDisplay = dpy;
124e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            prevTable = t;
125e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            return t;
126e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         }
127e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      }
128afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   }
129e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
130e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return NULL;
131afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
132afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
133afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
134db806cacfd8d91e9da5614e1be6e050bc318ec6aBrian Paul/* Don't use the GET_DISPATCH macro */
1352b17741e1b7999dacf0974b0a2bcbc10adb26219Brian Paul#undef GET_DISPATCH
1362b17741e1b7999dacf0974b0a2bcbc10adb26219Brian Paul
13755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul#define GET_DISPATCH(DPY, TABLE)	\
13855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   if (DPY == prevDisplay) {		\
13955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul      TABLE = prevTable;		\
14055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   }					\
14155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   else if (!DPY) {			\
14255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul      TABLE = NULL;			\
14355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   }					\
14455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   else {				\
14555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul      TABLE = get_dispatch(DPY);	\
14655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   }
14755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul
14855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul
149e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/*
150e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * GLX API entrypoints
151e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul */
152e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
153b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_VERSION_1_0 ***/
154e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
155be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulXVisualInfo PUBLIC *
156be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXChooseVisual(Display *dpy, int screen, int *list)
157afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
15855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
15955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
160e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
161e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
162dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->ChooseVisual(dpy, screen, list);
163afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
164afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
165afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
166be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
167be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCopyContext(Display *dpy, GLXContext src, GLXContext dst, unsigned long mask)
168e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
16955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
17055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
171e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
172e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
173dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->CopyContext(dpy, src, dst, mask);
174e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
175e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
176afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
177be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContext PUBLIC
178be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateContext(Display *dpy, XVisualInfo *visinfo, GLXContext shareList, Bool direct)
179afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
18055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
18155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
182e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
183e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
184dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->CreateContext(dpy, visinfo, shareList, direct);
185afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
186afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
187afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
188be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPixmap PUBLIC
189be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateGLXPixmap(Display *dpy, XVisualInfo *visinfo, Pixmap pixmap)
190e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
19155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
19255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
193e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
194e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
195dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->CreateGLXPixmap(dpy, visinfo, pixmap);
196e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
197e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
198afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
199be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
200be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyContext(Display *dpy, GLXContext ctx)
201afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
20255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
20355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
204e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
205e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
206dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->DestroyContext(dpy, ctx);
207afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
208afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
209afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
210be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
211be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyGLXPixmap(Display *dpy, GLXPixmap pixmap)
212e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
21355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
21455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
215e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
216e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
217dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->DestroyGLXPixmap(dpy, pixmap);
218e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
219e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
220afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
221be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
222be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetConfig(Display *dpy, XVisualInfo *visinfo, int attrib, int *value)
223afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
22455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
22555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
226e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
227e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return GLX_NO_EXTENSION;
228dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->GetConfig(dpy, visinfo, attrib, value);
229afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
230afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
231afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
232bc76e9f28d089f6e1689d8efc41f2a89030c44f6Brian Paul/* declare here to avoid including xmesa.h */
233bc76e9f28d089f6e1689d8efc41f2a89030c44f6Brian Paulextern void *XMesaGetCurrentContext(void);
234bc76e9f28d089f6e1689d8efc41f2a89030c44f6Brian Paul
235be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContext PUBLIC
236be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentContext(void)
237e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
238bc76e9f28d089f6e1689d8efc41f2a89030c44f6Brian Paul   return (GLXContext) XMesaGetCurrentContext();
239e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
240e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
241afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
242be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXDrawable PUBLIC
243be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentDrawable(void)
244afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
24512c1bee87fcc3a0912685bb6e83447972e5de64eBrian Paul   __GLXcontext *gc = (__GLXcontext *) glXGetCurrentContext();
2467cf50e137da497a590ec9001a9918972a6246142Brian Paul   return gc ? gc->currentDrawable : 0;
247afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
248afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
249afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
250be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
251be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXIsDirect(Display *dpy, GLXContext ctx)
252e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
25355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
25455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
255e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
256e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
257dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->IsDirect(dpy, ctx);
258e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
259e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
260afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
261be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
262be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXMakeCurrent(Display *dpy, GLXDrawable drawable, GLXContext ctx)
263afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
264e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   Bool b;
26555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
26655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
26784cac8441fcf5f692cd220e9fa86cab398a4c159Brian Paul   if (!t) {
268e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
26984cac8441fcf5f692cd220e9fa86cab398a4c159Brian Paul   }
270dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   b = t->MakeCurrent(dpy, drawable, ctx);
271e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return b;
272afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
273afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
274afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
275be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
276be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryExtension(Display *dpy, int *errorb, int *event)
277afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
27855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
27955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
280e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
281e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
282dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->QueryExtension(dpy, errorb, event);
283afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
284afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
285afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
286be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
287be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryVersion(Display *dpy, int *maj, int *min)
288afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
28955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
29055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
291e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
292e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
293dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->QueryVersion(dpy, maj, min);
294afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
295afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
296afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
297be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
298be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXSwapBuffers(Display *dpy, GLXDrawable drawable)
299afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
30055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
30155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
302e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
303e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
304dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->SwapBuffers(dpy, drawable);
305afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
306afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
307afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
308be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
309be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXUseXFont(Font font, int first, int count, int listBase)
310afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
31155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
3127cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
3137cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
314e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
315e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
316dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->UseXFont(font, first, count, listBase);
317afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
318afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
319afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
320be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
321be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXWaitGL(void)
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;
328dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->WaitGL();
329afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
330afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
331afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
332be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
333be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXWaitX(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;
340dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->WaitX();
341afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
342afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
343afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
344afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
345b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_VERSION_1_1 ***/
346e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
347be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulconst char PUBLIC *
348be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetClientString(Display *dpy, int name)
349afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
35055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
35155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
352e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
353e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
354dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->GetClientString(dpy, name);
355afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
356afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
357afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
358be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulconst char PUBLIC *
359be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryExtensionsString(Display *dpy, int screen)
360e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
36155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
36255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
363e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
364e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
365dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->QueryExtensionsString(dpy, screen);
366e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
367e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
368afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
369be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulconst char PUBLIC *
370be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryServerString(Display *dpy, int screen, int name)
371afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
37255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
37355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
374e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
375e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
376dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->QueryServerString(dpy, screen, name);
377afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
378afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
379afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
380b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_VERSION_1_2 ***/
381afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
382be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulDisplay PUBLIC *
383be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentDisplay(void)
384afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
3857cf50e137da497a590ec9001a9918972a6246142Brian Paul   /* Same code as in libGL's glxext.c */
38612c1bee87fcc3a0912685bb6e83447972e5de64eBrian Paul   __GLXcontext *gc = (__GLXcontext *) glXGetCurrentContext();
3877cf50e137da497a590ec9001a9918972a6246142Brian Paul   if (NULL == gc) return NULL;
3887cf50e137da497a590ec9001a9918972a6246142Brian Paul   return gc->currentDpy;
389afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
390e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
391afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
392afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
393b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_VERSION_1_3 ***/
394afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
395be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXFBConfig PUBLIC *
396be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXChooseFBConfig(Display *dpy, int screen, const int *attribList, int *nitems)
397afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
39855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
39955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
400e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
401e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
402dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->ChooseFBConfig(dpy, screen, attribList, nitems);
403afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
404afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
405afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
406be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContext PUBLIC
407be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateNewContext(Display *dpy, GLXFBConfig config, int renderType, GLXContext shareList, Bool direct)
408afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
40955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
41055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
411e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
412e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
413dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->CreateNewContext(dpy, config, renderType, shareList, direct);
414afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
415afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
416afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
417be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPbuffer PUBLIC
418be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreatePbuffer(Display *dpy, GLXFBConfig config, const int *attribList)
419afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
42055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
42155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
422e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
423e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
424dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->CreatePbuffer(dpy, config, attribList);
425afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
426afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
427afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
428be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPixmap PUBLIC
429be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreatePixmap(Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attribList)
430afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
43155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
43255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
433e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
434e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
435dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->CreatePixmap(dpy, config, pixmap, attribList);
436afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
437afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
438afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
439be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXWindow PUBLIC
440be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateWindow(Display *dpy, GLXFBConfig config, Window win, const int *attribList)
441afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
44255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
44355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
444e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
445e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
446dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->CreateWindow(dpy, config, win, attribList);
447afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
448afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
449afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
450be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
451be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyPbuffer(Display *dpy, GLXPbuffer pbuf)
452afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
45355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
45455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
455e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
456e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
457dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->DestroyPbuffer(dpy, pbuf);
458afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
459afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
460afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
461be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
462be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyPixmap(Display *dpy, GLXPixmap pixmap)
463b82d993b03320818f88f792a9e713f7ed491bfcbBrian Paul{
46455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
46555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
466e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
467e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
468dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->DestroyPixmap(dpy, pixmap);
469b82d993b03320818f88f792a9e713f7ed491bfcbBrian Paul}
470b82d993b03320818f88f792a9e713f7ed491bfcbBrian Paul
471b82d993b03320818f88f792a9e713f7ed491bfcbBrian Paul
472be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
473be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyWindow(Display *dpy, GLXWindow window)
474ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
47555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
47655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
477e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
478e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
479dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->DestroyWindow(dpy, window);
480ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
481ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
482ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
483be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXDrawable PUBLIC
484be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentReadDrawable(void)
485ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
48612c1bee87fcc3a0912685bb6e83447972e5de64eBrian Paul   __GLXcontext *gc = (__GLXcontext *) glXGetCurrentContext();
4877cf50e137da497a590ec9001a9918972a6246142Brian Paul   return gc ? gc->currentReadable : 0;
488ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
489ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
490ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
491be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
492be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetFBConfigAttrib(Display *dpy, GLXFBConfig config, int attribute, int *value)
493ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
49455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
49555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
496e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
497e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return GLX_NO_EXTENSION;
498dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->GetFBConfigAttrib(dpy, config, attribute, value);
499ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
500ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
501ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
502be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXFBConfig PUBLIC *
503be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetFBConfigs(Display *dpy, int screen, int *nelements)
5045605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul{
50555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
50655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
5075605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul   if (!t)
5085605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul      return 0;
509dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->GetFBConfigs(dpy, screen, nelements);
5105605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul}
5115605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul
512be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
513be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetSelectedEvent(Display *dpy, GLXDrawable drawable, unsigned long *mask)
514ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
51555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
51655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
517e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
518e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
519dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->GetSelectedEvent(dpy, drawable, mask);
520ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
521ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
522ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
523be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulXVisualInfo PUBLIC *
524be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetVisualFromFBConfig(Display *dpy, GLXFBConfig config)
525ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
52655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
52755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
528e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
529e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
530dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->GetVisualFromFBConfig(dpy, config);
531ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
532ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
533ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
534be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
535be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXMakeContextCurrent(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx)
536ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
537e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   Bool b;
53855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
53955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
540e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
541e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
542dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   b = t->MakeContextCurrent(dpy, draw, read, ctx);
543e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return b;
544ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
545ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
546ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
547be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
548be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryContext(Display *dpy, GLXContext ctx, int attribute, int *value)
549ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
55055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
55155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
552e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   assert(t);
553e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
554e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0; /* XXX correct? */
555dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->QueryContext(dpy, ctx, attribute, value);
556ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
557ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
558ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
559be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
560be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryDrawable(Display *dpy, GLXDrawable draw, int attribute, unsigned int *value)
561ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
56255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
56355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
564e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
565e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
566dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->QueryDrawable(dpy, draw, attribute, value);
567ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
568ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
569ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
570be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
571be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXSelectEvent(Display *dpy, GLXDrawable drawable, unsigned long mask)
572ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
57355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
57455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
575e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
576e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
577dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->SelectEvent(dpy, drawable, mask);
578ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
579ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
580ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
581e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
582b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGI_swap_control ***/
583783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
584be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
585be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXSwapIntervalSGI(int interval)
586783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
58755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
5887cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
5897cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
590783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
591783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
592dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->SwapIntervalSGI(interval);
593783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
594783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
595783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
596783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
597b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGI_video_sync ***/
598783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
599be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
600be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetVideoSyncSGI(unsigned int *count)
601783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
60255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
6037cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
6047cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
6052d087480b4b1207c058efcccc9a72faedcea4651Brian Paul   if (!t || !glXGetCurrentContext())
6062d087480b4b1207c058efcccc9a72faedcea4651Brian Paul      return GLX_BAD_CONTEXT;
607dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->GetVideoSyncSGI(count);
608783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
609783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
610be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
611be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count)
612783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
61355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
6147cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
6157cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
6162d087480b4b1207c058efcccc9a72faedcea4651Brian Paul   if (!t || !glXGetCurrentContext())
6172d087480b4b1207c058efcccc9a72faedcea4651Brian Paul      return GLX_BAD_CONTEXT;
618dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->WaitVideoSyncSGI(divisor, remainder, count);
619783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
620783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
621783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
622783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
623b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGI_make_current_read ***/
624783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
625be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
626be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXMakeCurrentReadSGI(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx)
627783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
62855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
62955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
630783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
6312d087480b4b1207c058efcccc9a72faedcea4651Brian Paul      return False;
632dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->MakeCurrentReadSGI(dpy, draw, read, ctx);
633783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
634783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
635be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXDrawable PUBLIC
636be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentReadDrawableSGI(void)
637783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
6387cf50e137da497a590ec9001a9918972a6246142Brian Paul   return glXGetCurrentReadDrawable();
639783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
640783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
641783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
642b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul#if defined(_VL_H)
643783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
644be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXVideoSourceSGIX PUBLIC
645be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateGLXVideoSourceSGIX(Display *dpy, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode)
646783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
64755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
64855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
649783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
650783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
651dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->CreateGLXVideoSourceSGIX(dpy, screen, server, path, nodeClass, drainNode);
652783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
653783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
654be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
655be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyGLXVideoSourceSGIX(Display *dpy, GLXVideoSourceSGIX src)
656783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
65755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
65855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
659783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
660783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
661dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->DestroyGLXVideoSourceSGIX(dpy, src);
662783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
663783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
664783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif
665783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
666783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
667b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_EXT_import_context ***/
668e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
669be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
670be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXFreeContextEXT(Display *dpy, GLXContext context)
671ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
67255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
67355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
674e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
675e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
676dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->FreeContextEXT(dpy, context);
677ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
678ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
679be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContextID PUBLIC
680be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetContextIDEXT(const GLXContext context)
681ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
68212c1bee87fcc3a0912685bb6e83447972e5de64eBrian Paul   return ((__GLXcontext *) context)->xid;
683ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
684ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
685be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulDisplay PUBLIC *
686be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentDisplayEXT(void)
687ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
6887cf50e137da497a590ec9001a9918972a6246142Brian Paul   return glXGetCurrentDisplay();
689ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
690ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
691be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContext PUBLIC
692be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXImportContextEXT(Display *dpy, GLXContextID contextID)
693ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
69455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
69555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
696e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
697e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
698dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->ImportContextEXT(dpy, contextID);
699ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
700ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
701be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
702be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryContextInfoEXT(Display *dpy, GLXContext context, int attribute,int *value)
703ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
70455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
70555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
706e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
707e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;  /* XXX ok? */
708dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->QueryContextInfoEXT(dpy, context, attribute, value);
709ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
710ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
711e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
712e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
713b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGIX_fbconfig ***/
714ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
715be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
716be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config, int attribute, int *value)
717ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
71855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
71955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
720e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
721e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
722dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->GetFBConfigAttribSGIX(dpy, config, attribute, value);
723ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
724ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
725be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXFBConfigSGIX PUBLIC *
726be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXChooseFBConfigSGIX(Display *dpy, int screen, int *attrib_list, int *nelements)
727783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
72855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
72955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
730783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
731783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
732dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->ChooseFBConfigSGIX(dpy, screen, attrib_list, nelements);
733783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
734ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
735be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPixmap PUBLIC
736be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateGLXPixmapWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap)
737ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
73855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
73955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
740e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
741e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
742dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->CreateGLXPixmapWithConfigSGIX(dpy, config, pixmap);
743783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
744783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
745be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContext PUBLIC
746be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateContextWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct)
747783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
74855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
74955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
750783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
751783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
752dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->CreateContextWithConfigSGIX(dpy, config, render_type, share_list, direct);
753783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
754783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
755be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulXVisualInfo PUBLIC *
756be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetVisualFromFBConfigSGIX(Display *dpy, GLXFBConfigSGIX config)
757783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
75855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
75955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
760783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
761783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
762dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->GetVisualFromFBConfigSGIX(dpy, config);
763783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
764783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
765be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXFBConfigSGIX PUBLIC
766be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetFBConfigFromVisualSGIX(Display *dpy, XVisualInfo *vis)
767783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
76855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
76955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
770783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
771783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
772dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->GetFBConfigFromVisualSGIX(dpy, vis);
773783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
774783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
775783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
776783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
777b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGIX_pbuffer ***/
778783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
779be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPbufferSGIX PUBLIC
780be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateGLXPbufferSGIX(Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list)
781783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
78255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
78355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
784783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
785783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
786dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->CreateGLXPbufferSGIX(dpy, config, width, height, attrib_list);
787783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
788783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
789be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
790be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf)
791783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
79255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
79355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
794783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
795783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
796dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->DestroyGLXPbufferSGIX(dpy, pbuf);
797783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
798783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
799be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
800be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value)
801783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
80255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
80355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
804783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
805783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
806dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->QueryGLXPbufferSGIX(dpy, pbuf, attribute, value);
807783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
808783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
809be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
810be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXSelectEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long mask)
811783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
81255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
81355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
814783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
815783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
816dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->SelectEventSGIX(dpy, drawable, mask);
817783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
818783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
819be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
820be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetSelectedEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long *mask)
821783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
82255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
82355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
824783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
825783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
826dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->GetSelectedEventSGIX(dpy, drawable, mask);
827783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
828783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
829783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
830783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
831b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGI_cushion ***/
832783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
833be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
834be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCushionSGI(Display *dpy, Window win, float cushion)
835783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
83655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
83755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
838783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
839783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
840dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->CushionSGI(dpy, win, cushion);
841ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
842ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
843ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
844ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
845b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGIX_video_resize ***/
8464536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
847be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
848be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXBindChannelToWindowSGIX(Display *dpy, int screen, int channel , Window window)
8494536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
85055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
85155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
8524536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
8534536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul      return 0;
854dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->BindChannelToWindowSGIX(dpy, screen, channel, window);
8554536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
8564536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
857be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
858be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXChannelRectSGIX(Display *dpy, int screen, int channel, int x, int y, int w, int h)
8594536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
86055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
86155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
8624536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
8634536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul      return 0;
864dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->ChannelRectSGIX(dpy, screen, channel, x, y, w, h);
8654536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
8664536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
867be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
868be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryChannelRectSGIX(Display *dpy, int screen, int channel, int *x, int *y, int *w, int *h)
8694536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
87055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
87155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
8724536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
8734536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul      return 0;
874dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->QueryChannelRectSGIX(dpy, screen, channel, x, y, w, h);
8754536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
8764536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
877be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
878be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryChannelDeltasSGIX(Display *dpy, int screen, int channel, int *dx, int *dy, int *dw, int *dh)
8794536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
88055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
88155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
8824536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
8834536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul      return 0;
884dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->QueryChannelDeltasSGIX(dpy, screen, channel, dx, dy, dw, dh);
8854536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
8864536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
887be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
888be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXChannelRectSyncSGIX(Display *dpy, int screen, int channel, GLenum synctype)
8894536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
89055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
89155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
8924536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
8934536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul      return 0;
894dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->ChannelRectSyncSGIX(dpy, screen, channel, synctype);
8954536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
8964536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
8974536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
8984536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
899b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul#if defined(_DM_BUFFER_H_)
9004536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
901be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
902be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXAssociateDMPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer)
9034536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
90455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
90555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9064536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
907783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return False;
908dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->AssociateDMPbufferSGIX(dpy, pbuffer, params, dmbuffer);
9094536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9104536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
911783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif
9124536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
9134536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
914b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGIX_swap_group ***/
915783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
916be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
917be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXJoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable, GLXDrawable member)
9184536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
91955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
92055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9214536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
922783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
923dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->JoinSwapGroupSGIX(dpy, drawable, member);
9244536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9254536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
926783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
927b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGIX_swap_barrier ***/
928783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
929be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
930be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXBindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable, int barrier)
9314536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
93255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
93355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9344536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
935783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
936dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->BindSwapBarrierSGIX(dpy, drawable, barrier);
9374536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9384536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
939be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
940be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryMaxSwapBarriersSGIX(Display *dpy, int screen, int *max)
9414536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
94255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
94355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9444536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
945783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return False;
946dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->QueryMaxSwapBarriersSGIX(dpy, screen, max);
9474536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9484536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
949783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
950783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
951b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SUN_get_transparent_index ***/
952783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
953be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulStatus PUBLIC
954be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetTransparentIndexSUN(Display *dpy, Window overlay, Window underlay, long *pTransparent)
9554536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
95655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
95755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9584536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
959783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return False;
960dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->GetTransparentIndexSUN(dpy, overlay, underlay, pTransparent);
9614536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9624536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
9634536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
9644536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
965b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_MESA_copy_sub_buffer ***/
966ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
967be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
968be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCopySubBufferMESA(Display *dpy, GLXDrawable drawable, int x, int y, int width, int height)
969afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
97055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
97155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
972e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
973e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
974dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->CopySubBufferMESA(dpy, drawable, x, y, width, height);
975e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
976e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
977e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
978e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
979b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_MESA_release_buffers ***/
980e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
981be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
982be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXReleaseBuffersMESA(Display *dpy, Window w)
983e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
98455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
98555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
986e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
987e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
988dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->ReleaseBuffersMESA(dpy, w);
989afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
990e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
991afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
992afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
993b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_MESA_pixmap_colormap ***/
994e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
995be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPixmap PUBLIC
996be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateGLXPixmapMESA(Display *dpy, XVisualInfo *visinfo, Pixmap pixmap, Colormap cmap)
997afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
99855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
99955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
1000e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
1001afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach      return 0;
1002dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->CreateGLXPixmapMESA(dpy, visinfo, pixmap, cmap);
1003e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
1004e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1005e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1006e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1007b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_MESA_set_3dfx_mode ***/
1008e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1009be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
1010be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXSet3DfxModeMESA(int mode)
1011e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
101255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
10137cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
10147cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
1015e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
1016e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
1017dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->Set3DfxModeMESA(mode);
1018afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
1019e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1020afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1021afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1022d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul/*** GLX_NV_vertex_array_range ***/
10238fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
1024be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC *
10258fefafa2200d3ea44ec46592b190654a10685b46Brian PaulglXAllocateMemoryNV( GLsizei size,
10268fefafa2200d3ea44ec46592b190654a10685b46Brian Paul                     GLfloat readFrequency,
10278fefafa2200d3ea44ec46592b190654a10685b46Brian Paul                     GLfloat writeFrequency,
10288fefafa2200d3ea44ec46592b190654a10685b46Brian Paul                     GLfloat priority )
10298fefafa2200d3ea44ec46592b190654a10685b46Brian Paul{
10308fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   struct _glxapi_table *t;
10318fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   Display *dpy = glXGetCurrentDisplay();
10328fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   GET_DISPATCH(dpy, t);
10338fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   if (!t)
10348fefafa2200d3ea44ec46592b190654a10685b46Brian Paul      return NULL;
1035dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->AllocateMemoryNV(size, readFrequency, writeFrequency, priority);
10368fefafa2200d3ea44ec46592b190654a10685b46Brian Paul}
10378fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
10388fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
1039be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
10408fefafa2200d3ea44ec46592b190654a10685b46Brian PaulglXFreeMemoryNV( GLvoid *pointer )
10418fefafa2200d3ea44ec46592b190654a10685b46Brian Paul{
10428fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   struct _glxapi_table *t;
10438fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   Display *dpy = glXGetCurrentDisplay();
10448fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   GET_DISPATCH(dpy, t);
10458fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   if (!t)
10468fefafa2200d3ea44ec46592b190654a10685b46Brian Paul      return;
1047dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   t->FreeMemoryNV(pointer);
10488fefafa2200d3ea44ec46592b190654a10685b46Brian Paul}
10498fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
10508fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
10517cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul
10527cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul
1053d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul/*** GLX_MESA_agp_offset */
1054d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul
1055be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLuint PUBLIC
1056d6113fc20d68f5720740b89c594227d0312bab3eBrian PaulglXGetAGPOffsetMESA( const GLvoid *pointer )
1057d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul{
1058d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   struct _glxapi_table *t;
1059d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   Display *dpy = glXGetCurrentDisplay();
1060d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   GET_DISPATCH(dpy, t);
1061d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   if (!t)
1062d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul      return ~0;
1063dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->GetAGPOffsetMESA(pointer);
1064d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul}
1065d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul
1066afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1067fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul/*** GLX_EXT_texture_from_pixmap */
1068fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul
106973060ec7ebaa6a304402caa60610f94dac2cf24bBrian Paulvoid PUBLIC
1070fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian PaulglXBindTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer,
1071fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul                   const int *attrib_list)
1072fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul{
1073fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   struct _glxapi_table *t;
1074fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   GET_DISPATCH(dpy, t);
1075fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   if (t)
1076fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul      t->BindTexImageEXT(dpy, drawable, buffer, attrib_list);
1077fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul}
1078fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul
107973060ec7ebaa6a304402caa60610f94dac2cf24bBrian Paulvoid PUBLIC
1080fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian PaulglXReleaseTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer)
1081fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul{
1082fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   struct _glxapi_table *t;
1083fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   GET_DISPATCH(dpy, t);
1084fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   if (t)
1085fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul      t->ReleaseTexImageEXT(dpy, drawable, buffer);
1086fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul}
1087fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul
10887cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul
1089e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/**********************************************************************/
1090e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/* GLX API management functions                                       */
1091e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/**********************************************************************/
1092e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1093e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1094e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulconst char *
1095e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul_glxapi_get_version(void)
1096e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
1097e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return "1.3";
1098e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
1099e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1100afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1101afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*
1102e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * Return array of extension strings.
1103afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */
1104e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulconst char **
1105e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul_glxapi_get_extensions(void)
1106afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
1107e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   static const char *extensions[] = {
11084c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_EXT_import_context
1109e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_EXT_import_context",
1110e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11114c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_SGI_video_sync
1112e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_SGI_video_sync",
1113e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11144c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_copy_sub_buffer
1115e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_MESA_copy_sub_buffer",
1116e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11174c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_release_buffers
1118e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_MESA_release_buffers",
1119e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11204c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_pixmap_colormap
1121e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_MESA_pixmap_colormap",
1122e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11234c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_set_3dfx_mode
1124e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_MESA_set_3dfx_mode",
1125e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11263c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul#ifdef GLX_SGIX_fbconfig
11273c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul      "GLX_SGIX_fbconfig",
11283c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul#endif
11293c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul#ifdef GLX_SGIX_pbuffer
11303c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul      "GLX_SGIX_pbuffer",
11313c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul#endif
1132c1ba308e6499a6eb3f970b81a3f25d63da988d1cBrian Paul#ifdef GLX_EXT_texture_from_pixmap
1133fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul      "GLX_EXT_texture_from_pixmap",
1134fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul#endif
11357f170573ea486f2f2dd474c2590346f1a0110773Jesse Barnes#ifdef GLX_INTEL_swap_event
11367f170573ea486f2f2dd474c2590346f1a0110773Jesse Barnes      "GLX_INTEL_swap_event",
11377f170573ea486f2f2dd474c2590346f1a0110773Jesse Barnes#endif
1138e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      NULL
1139e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   };
1140e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return extensions;
1141afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
1142afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1143afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1144afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach/*
1145e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * Return size of the GLX dispatch table, in entries, not bytes.
1146afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach */
1147e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian PaulGLuint
1148e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul_glxapi_get_dispatch_table_size(void)
1149e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
1150e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return sizeof(struct _glxapi_table) / sizeof(void *);
1151e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
1152e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1153e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1154e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstatic int
1155e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulgeneric_no_op_func(void)
1156afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach{
1157afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach   return 0;
1158afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach}
1159afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cJochen Gerlach
1160e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1161e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/*
1162e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * Initialize all functions in given dispatch table to be no-ops
1163e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul */
1164e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulvoid
1165e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul_glxapi_set_no_op_table(struct _glxapi_table *t)
1166e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
1167be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   typedef int (*nop_func)(void);
1168be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   nop_func *dispatch = (nop_func *) t;
1169e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   GLuint n = _glxapi_get_dispatch_table_size();
1170e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   GLuint i;
1171e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   for (i = 0; i < n; i++) {
1172be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul      dispatch[i] = generic_no_op_func;
1173e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   }
1174e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
1175e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1176e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1177e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstruct name_address_pair {
1178e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   const char *Name;
1179be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   __GLXextFuncPtr Address;
1180e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul};
1181e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1182e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstatic struct name_address_pair GLX_functions[] = {
1183b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_VERSION_1_0 ***/
1184be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXChooseVisual", (__GLXextFuncPtr) glXChooseVisual },
1185be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCopyContext", (__GLXextFuncPtr) glXCopyContext },
1186be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateContext", (__GLXextFuncPtr) glXCreateContext },
1187be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateGLXPixmap", (__GLXextFuncPtr) glXCreateGLXPixmap },
1188be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyContext", (__GLXextFuncPtr) glXDestroyContext },
1189be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyGLXPixmap", (__GLXextFuncPtr) glXDestroyGLXPixmap },
1190be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetConfig", (__GLXextFuncPtr) glXGetConfig },
1191be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentContext", (__GLXextFuncPtr) glXGetCurrentContext },
1192be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentDrawable", (__GLXextFuncPtr) glXGetCurrentDrawable },
1193be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXIsDirect", (__GLXextFuncPtr) glXIsDirect },
1194be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXMakeCurrent", (__GLXextFuncPtr) glXMakeCurrent },
1195be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryExtension", (__GLXextFuncPtr) glXQueryExtension },
1196be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryVersion", (__GLXextFuncPtr) glXQueryVersion },
1197be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXSwapBuffers", (__GLXextFuncPtr) glXSwapBuffers },
1198be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXUseXFont", (__GLXextFuncPtr) glXUseXFont },
1199be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXWaitGL", (__GLXextFuncPtr) glXWaitGL },
1200be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXWaitX", (__GLXextFuncPtr) glXWaitX },
1201e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1202b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_VERSION_1_1 ***/
1203be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetClientString", (__GLXextFuncPtr) glXGetClientString },
1204be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryExtensionsString", (__GLXextFuncPtr) glXQueryExtensionsString },
1205be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryServerString", (__GLXextFuncPtr) glXQueryServerString },
120689a42b7e736bd9b0ab090906cab0cd047a6ec12eBrian Paul
1207b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_VERSION_1_2 ***/
1208be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentDisplay", (__GLXextFuncPtr) glXGetCurrentDisplay },
120989a42b7e736bd9b0ab090906cab0cd047a6ec12eBrian Paul
1210b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_VERSION_1_3 ***/
1211be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXChooseFBConfig", (__GLXextFuncPtr) glXChooseFBConfig },
1212be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateNewContext", (__GLXextFuncPtr) glXCreateNewContext },
1213be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreatePbuffer", (__GLXextFuncPtr) glXCreatePbuffer },
1214be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreatePixmap", (__GLXextFuncPtr) glXCreatePixmap },
1215be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateWindow", (__GLXextFuncPtr) glXCreateWindow },
1216be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyPbuffer", (__GLXextFuncPtr) glXDestroyPbuffer },
1217be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyPixmap", (__GLXextFuncPtr) glXDestroyPixmap },
1218be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyWindow", (__GLXextFuncPtr) glXDestroyWindow },
1219be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentReadDrawable", (__GLXextFuncPtr) glXGetCurrentReadDrawable },
1220be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetFBConfigAttrib", (__GLXextFuncPtr) glXGetFBConfigAttrib },
1221be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetFBConfigs", (__GLXextFuncPtr) glXGetFBConfigs },
1222be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetSelectedEvent", (__GLXextFuncPtr) glXGetSelectedEvent },
1223be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetVisualFromFBConfig", (__GLXextFuncPtr) glXGetVisualFromFBConfig },
1224be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXMakeContextCurrent", (__GLXextFuncPtr) glXMakeContextCurrent },
1225be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryContext", (__GLXextFuncPtr) glXQueryContext },
1226be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryDrawable", (__GLXextFuncPtr) glXQueryDrawable },
1227be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXSelectEvent", (__GLXextFuncPtr) glXSelectEvent },
122843c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul
1229ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul   /*** GLX_VERSION_1_4 ***/
1230be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetProcAddress", (__GLXextFuncPtr) glXGetProcAddress },
1231ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul
1232ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGI_swap_control ***/
1233be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXSwapIntervalSGI", (__GLXextFuncPtr) glXSwapIntervalSGI },
1234ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1235b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_SGI_video_sync ***/
1236be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetVideoSyncSGI", (__GLXextFuncPtr) glXGetVideoSyncSGI },
1237be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXWaitVideoSyncSGI", (__GLXextFuncPtr) glXWaitVideoSyncSGI },
1238e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1239ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGI_make_current_read ***/
1240be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXMakeCurrentReadSGI", (__GLXextFuncPtr) glXMakeCurrentReadSGI },
1241be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentReadDrawableSGI", (__GLXextFuncPtr) glXGetCurrentReadDrawableSGI },
1242ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1243ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_video_source ***/
1244ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul#if defined(_VL_H)
1245be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateGLXVideoSourceSGIX", (__GLXextFuncPtr) glXCreateGLXVideoSourceSGIX },
1246be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyGLXVideoSourceSGIX", (__GLXextFuncPtr) glXDestroyGLXVideoSourceSGIX },
1247ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul#endif
1248ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1249ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_EXT_import_context ***/
1250be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXFreeContextEXT", (__GLXextFuncPtr) glXFreeContextEXT },
1251be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetContextIDEXT", (__GLXextFuncPtr) glXGetContextIDEXT },
1252be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentDisplayEXT", (__GLXextFuncPtr) glXGetCurrentDisplayEXT },
1253be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXImportContextEXT", (__GLXextFuncPtr) glXImportContextEXT },
1254be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryContextInfoEXT", (__GLXextFuncPtr) glXQueryContextInfoEXT },
1255ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1256ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_fbconfig ***/
1257be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetFBConfigAttribSGIX", (__GLXextFuncPtr) glXGetFBConfigAttribSGIX },
1258be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXChooseFBConfigSGIX", (__GLXextFuncPtr) glXChooseFBConfigSGIX },
1259be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateGLXPixmapWithConfigSGIX", (__GLXextFuncPtr) glXCreateGLXPixmapWithConfigSGIX },
1260be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateContextWithConfigSGIX", (__GLXextFuncPtr) glXCreateContextWithConfigSGIX },
1261be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetVisualFromFBConfigSGIX", (__GLXextFuncPtr) glXGetVisualFromFBConfigSGIX },
1262be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetFBConfigFromVisualSGIX", (__GLXextFuncPtr) glXGetFBConfigFromVisualSGIX },
1263ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1264ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_pbuffer ***/
1265be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateGLXPbufferSGIX", (__GLXextFuncPtr) glXCreateGLXPbufferSGIX },
1266be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyGLXPbufferSGIX", (__GLXextFuncPtr) glXDestroyGLXPbufferSGIX },
1267be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryGLXPbufferSGIX", (__GLXextFuncPtr) glXQueryGLXPbufferSGIX },
1268be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXSelectEventSGIX", (__GLXextFuncPtr) glXSelectEventSGIX },
1269be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetSelectedEventSGIX", (__GLXextFuncPtr) glXGetSelectedEventSGIX },
1270ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1271ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGI_cushion ***/
1272be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCushionSGI", (__GLXextFuncPtr) glXCushionSGI },
1273ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1274ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_video_resize ***/
1275be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXBindChannelToWindowSGIX", (__GLXextFuncPtr) glXBindChannelToWindowSGIX },
1276be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXChannelRectSGIX", (__GLXextFuncPtr) glXChannelRectSGIX },
1277be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryChannelRectSGIX", (__GLXextFuncPtr) glXQueryChannelRectSGIX },
1278be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryChannelDeltasSGIX", (__GLXextFuncPtr) glXQueryChannelDeltasSGIX },
1279be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXChannelRectSyncSGIX", (__GLXextFuncPtr) glXChannelRectSyncSGIX },
1280ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1281ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_dmbuffer **/
1282ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul#if defined(_DM_BUFFER_H_)
1283be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXAssociateDMPbufferSGIX", (__GLXextFuncPtr) glXAssociateDMPbufferSGIX },
1284ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul#endif
1285ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1286ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_swap_group ***/
1287be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXJoinSwapGroupSGIX", (__GLXextFuncPtr) glXJoinSwapGroupSGIX },
1288ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1289ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_swap_barrier ***/
1290be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXBindSwapBarrierSGIX", (__GLXextFuncPtr) glXBindSwapBarrierSGIX },
1291be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryMaxSwapBarriersSGIX", (__GLXextFuncPtr) glXQueryMaxSwapBarriersSGIX },
1292ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1293ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SUN_get_transparent_index ***/
1294be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetTransparentIndexSUN", (__GLXextFuncPtr) glXGetTransparentIndexSUN },
1295ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1296b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_MESA_copy_sub_buffer ***/
1297be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCopySubBufferMESA", (__GLXextFuncPtr) glXCopySubBufferMESA },
129843c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul
1299b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_MESA_pixmap_colormap ***/
1300be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateGLXPixmapMESA", (__GLXextFuncPtr) glXCreateGLXPixmapMESA },
1301e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1302ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_MESA_release_buffers ***/
1303be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXReleaseBuffersMESA", (__GLXextFuncPtr) glXReleaseBuffersMESA },
1304ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1305b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_MESA_set_3dfx_mode ***/
1306be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXSet3DfxModeMESA", (__GLXextFuncPtr) glXSet3DfxModeMESA },
1307e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1308b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_ARB_get_proc_address ***/
1309be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetProcAddressARB", (__GLXextFuncPtr) glXGetProcAddressARB },
1310e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1311d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   /*** GLX_NV_vertex_array_range ***/
1312be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXAllocateMemoryNV", (__GLXextFuncPtr) glXAllocateMemoryNV },
1313be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXFreeMemoryNV", (__GLXextFuncPtr) glXFreeMemoryNV },
13148fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
1315d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   /*** GLX_MESA_agp_offset ***/
1316be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetAGPOffsetMESA", (__GLXextFuncPtr) glXGetAGPOffsetMESA },
13173c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul
1318fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   /*** GLX_EXT_texture_from_pixmap ***/
1319fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   { "glXBindTexImageEXT", (__GLXextFuncPtr) glXBindTexImageEXT },
1320fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul   { "glXReleaseTexImageEXT", (__GLXextFuncPtr) glXReleaseTexImageEXT },
1321fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian Paul
132275b713455c77931e5e90c30e65ac99d74dfb17f0Brian Paul   /*** GLX_ARB_create_context ***/
132375b713455c77931e5e90c30e65ac99d74dfb17f0Brian Paul   { "glXCreateContextAttribsARB", (__GLXextFuncPtr) glXCreateContextAttribsARB },
132475b713455c77931e5e90c30e65ac99d74dfb17f0Brian Paul
1325e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   { NULL, NULL }   /* end of list */
1326e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul};
1327e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
132843c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul
132943c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul
1330e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/*
1331e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * Return address of named glX function, or NULL if not found.
1332e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul */
1333be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul__GLXextFuncPtr
1334e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul_glxapi_get_proc_address(const char *funcName)
133543c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul{
1336e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   GLuint i;
1337e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   for (i = 0; GLX_functions[i].Name; i++) {
13387399d56ec6019e00297eef57f802a53698baa8adTom Fogal#ifdef MANGLE
13397399d56ec6019e00297eef57f802a53698baa8adTom Fogal      /* skip the "m" prefix on the name */
13407399d56ec6019e00297eef57f802a53698baa8adTom Fogal      if (strcmp(GLX_functions[i].Name, funcName+1) == 0)
13417399d56ec6019e00297eef57f802a53698baa8adTom Fogal#else
1342e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      if (strcmp(GLX_functions[i].Name, funcName) == 0)
13437399d56ec6019e00297eef57f802a53698baa8adTom Fogal#endif
1344e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         return GLX_functions[i].Address;
1345e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   }
134643c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul   return NULL;
134789a42b7e736bd9b0ab090906cab0cd047a6ec12eBrian Paul}
1348e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1349e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1350e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1351e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul/*
1352e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul * This function does not get dispatched through the dispatch table
1353e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul * since it's really a "meta" function.
1354e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul */
135573060ec7ebaa6a304402caa60610f94dac2cf24bBrian Paul__GLXextFuncPtr PUBLIC
1356be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetProcAddressARB(const GLubyte *procName)
1357e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul{
1358be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   __GLXextFuncPtr f;
1359e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1360be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   f = _glxapi_get_proc_address((const char *) procName);
1361e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul   if (f) {
1362e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul      return f;
1363e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul   }
1364e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1365be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   f = (__GLXextFuncPtr) _glapi_get_proc_address((const char *) procName);
1366e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul   return f;
1367e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul}
1368ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul
1369ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul
1370ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul/* GLX 1.4 */
137173060ec7ebaa6a304402caa60610f94dac2cf24bBrian Paulvoid PUBLIC
137273060ec7ebaa6a304402caa60610f94dac2cf24bBrian Paul(*glXGetProcAddress(const GLubyte *procName))()
1373ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul{
1374ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul   return glXGetProcAddressARB(procName);
1375ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul}
137675b713455c77931e5e90c30e65ac99d74dfb17f0Brian Paul
137775b713455c77931e5e90c30e65ac99d74dfb17f0Brian Paul
137875b713455c77931e5e90c30e65ac99d74dfb17f0Brian Paul/**
137975b713455c77931e5e90c30e65ac99d74dfb17f0Brian Paul * Added in GLX_ARB_create_context.
138075b713455c77931e5e90c30e65ac99d74dfb17f0Brian Paul */
138175b713455c77931e5e90c30e65ac99d74dfb17f0Brian PaulGLXContext PUBLIC
138275b713455c77931e5e90c30e65ac99d74dfb17f0Brian PaulglXCreateContextAttribsARB(Display *dpy, GLXFBConfig config,
138375b713455c77931e5e90c30e65ac99d74dfb17f0Brian Paul                           GLXContext share_context, Bool direct,
138475b713455c77931e5e90c30e65ac99d74dfb17f0Brian Paul                           const int *attrib_list)
138575b713455c77931e5e90c30e65ac99d74dfb17f0Brian Paul{
138675b713455c77931e5e90c30e65ac99d74dfb17f0Brian Paul   struct _glxapi_table *t;
138775b713455c77931e5e90c30e65ac99d74dfb17f0Brian Paul   GET_DISPATCH(dpy, t);
138875b713455c77931e5e90c30e65ac99d74dfb17f0Brian Paul   if (!t)
138975b713455c77931e5e90c30e65ac99d74dfb17f0Brian Paul      return 0;
1390dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding   return t->CreateContextAttribs(dpy, config, share_context, direct,
1391dc18ec8b24e206c60de681a505bf66ae74e37742Boyan Ding                                  attrib_list);
139275b713455c77931e5e90c30e65ac99d74dfb17f0Brian Paul}
1393