1afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/*
2afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Mesa 3-D graphics library
3fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian * Version:  7.1
4afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg *
5fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
6afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg *
7afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Permission is hereby granted, free of charge, to any person obtaining a
8afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * copy of this software and associated documentation files (the "Software"),
9afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * to deal in the Software without restriction, including without limitation
10afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * and/or sell copies of the Software, and to permit persons to whom the
12afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Software is furnished to do so, subject to the following conditions:
13afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg *
14afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * The above copyright notice and this permission notice shall be included
15afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * in all copies or substantial portions of the Software.
16afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg *
17afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
24afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
25afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
26e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/*
27e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * This is the GLX API dispatcher.  Calls to the glX* functions are
28b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul * either routed to the real GLX encoders or to Mesa's pseudo-GLX functions.
291d822ea8cfa765802fe63b1a5d8d2bd83118007fBrian Paul * See the glxapi.h file for more details.
30e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul */
31e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
32afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
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"
41afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
42afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
43b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paulextern struct _glxapi_table *_real_GetGLXDispatchTable(void);
44e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulextern struct _glxapi_table *_mesa_GetGLXDispatchTable(void);
45afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
46afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
47e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstruct display_dispatch {
48e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   Display *Dpy;
49e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   struct _glxapi_table *Table;
50e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   struct display_dispatch *Next;
51e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul};
52afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
53888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
54888429360a30090b9ecd17bfd160a88141195235Chia-I Wu/**
55888429360a30090b9ecd17bfd160a88141195235Chia-I Wu * When GLX_INDIRECT_RENDERING is defined, some symbols are missing in
56888429360a30090b9ecd17bfd160a88141195235Chia-I Wu * libglapi.a.  We need to define them here.
57888429360a30090b9ecd17bfd160a88141195235Chia-I Wu */
58888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#ifdef GLX_INDIRECT_RENDERING
59888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
60bdd250080593c6d0d5addcaff0b2a5c880d7a3b2Chia-I Wu#include "glapi/glapitable.h"
61888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
62888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#define KEYWORD1 PUBLIC
63888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
64888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#if defined(USE_MGL_NAMESPACE)
65888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#define NAME(func)  mgl##func
66888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#else
67888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#define NAME(func)  gl##func
68888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#endif
69888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
70888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#define DISPATCH(FUNC, ARGS, MESSAGE)		\
71b5022ad03584f119b27c143b53e7ed80e8c12ffbChia-I Wu   GET_DISPATCH()->FUNC ARGS
72888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
73888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE) 	\
74b5022ad03584f119b27c143b53e7ed80e8c12ffbChia-I Wu   return GET_DISPATCH()->FUNC ARGS
75888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
76888429360a30090b9ecd17bfd160a88141195235Chia-I Wu/* skip normal ones */
77888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#define _GLAPI_SKIP_NORMAL_ENTRY_POINTS
78888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#include "glapi/glapitemp.h"
79888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
80888429360a30090b9ecd17bfd160a88141195235Chia-I Wu#endif /* GLX_INDIRECT_RENDERING */
81888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
82888429360a30090b9ecd17bfd160a88141195235Chia-I Wu
83e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstatic struct display_dispatch *DispatchList = NULL;
84afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
85e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
8655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul/* Display -> Dispatch caching */
8755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paulstatic Display *prevDisplay = NULL;
8855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paulstatic struct _glxapi_table *prevTable = NULL;
8955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul
9055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul
91e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstatic struct _glxapi_table *
92e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulget_dispatch(Display *dpy)
93afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
94e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!dpy)
95e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
96e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
97e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   /* search list of display/dispatch pairs for this display */
98e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   {
99e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      const struct display_dispatch *d = DispatchList;
100e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      while (d) {
101e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         if (d->Dpy == dpy) {
102e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            prevDisplay = dpy;
103e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            prevTable = d->Table;
104e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            return d->Table;  /* done! */
105e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         }
106e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         d = d->Next;
107e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      }
108afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
109e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
110b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /* A new display, determine if we should use real GLX
111e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul    * or Mesa's pseudo-GLX.
112e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul    */
113e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   {
114ab7c6ffadccbeb96b6f4ac58fb75e90697cd30c5Ian Romanick      struct _glxapi_table *t = _mesa_GetGLXDispatchTable();
115e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
116e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      if (t) {
117e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         struct display_dispatch *d;
118e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         d = (struct display_dispatch *) malloc(sizeof(struct display_dispatch));
119e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         if (d) {
120e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            d->Dpy = dpy;
121e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            d->Table = t;
122e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            /* insert at head of list */
123e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            d->Next = DispatchList;
124e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            DispatchList = d;
125e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            /* update cache */
126e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            prevDisplay = dpy;
127e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            prevTable = t;
128e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul            return t;
129e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         }
130e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      }
131afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
132e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
133e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   /* If we get here that means we can't use real GLX on this display
134e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul    * and the Mesa pseudo-GLX software renderer wasn't compiled in.
135e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul    * Or, we ran out of memory!
136e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul    */
137e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return NULL;
138afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
139afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
140afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1412b17741e1b7999dacf0974b0a2bcbc10adb26219Brian Paul/* Don't use the GET_DISPATCH defined in glthread.h */
1422b17741e1b7999dacf0974b0a2bcbc10adb26219Brian Paul#undef GET_DISPATCH
1432b17741e1b7999dacf0974b0a2bcbc10adb26219Brian Paul
14455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul#define GET_DISPATCH(DPY, TABLE)	\
14555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   if (DPY == prevDisplay) {		\
14655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul      TABLE = prevTable;		\
14755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   }					\
14855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   else if (!DPY) {			\
14955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul      TABLE = NULL;			\
15055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   }					\
15155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   else {				\
15255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul      TABLE = get_dispatch(DPY);	\
15355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   }
15455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul
15555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul
15655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul
157afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
158d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul/**
159d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul * GLX API current context.
160d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul */
161d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#if defined(GLX_USE_TLS)
162d41d29b8bde9bb9c277424a43d0b80838edfe254Brian PaulPUBLIC __thread void * CurrentContext
163d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul    __attribute__((tls_model("initial-exec")));
164d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#elif defined(THREADS)
165d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paulstatic _glthread_TSD ContextTSD;         /**< Per-thread context pointer */
166d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#else
167e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstatic GLXContext CurrentContext = 0;
168d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#endif
169d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul
170d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul
171d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paulstatic void
172d41d29b8bde9bb9c277424a43d0b80838edfe254Brian PaulSetCurrentContext(GLXContext c)
173d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul{
174d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#if defined(GLX_USE_TLS)
175c1ba308e6499a6eb3f970b81a3f25d63da988d1cBrian   CurrentContext = c;
176d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#elif defined(THREADS)
177d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul   _glthread_SetTSD(&ContextTSD, c);
178d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#else
179d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul   CurrentContext = c;
180d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#endif
181d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul}
182e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
183e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
184e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/*
185e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * GLX API entrypoints
186e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul */
187e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
188b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_VERSION_1_0 ***/
189e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
190be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulXVisualInfo PUBLIC *
191be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXChooseVisual(Display *dpy, int screen, int *list)
192afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
19355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
19455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
195e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
196e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
197e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->ChooseVisual)(dpy, screen, list);
198afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
199afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
200afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
201be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
202be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCopyContext(Display *dpy, GLXContext src, GLXContext dst, unsigned long mask)
203e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
20455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
20555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
206e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
207e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
208e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->CopyContext)(dpy, src, dst, mask);
209e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
210e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
211afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
212be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContext PUBLIC
213be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateContext(Display *dpy, XVisualInfo *visinfo, GLXContext shareList, Bool direct)
214afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
21555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
21655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
217e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
218e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
219e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->CreateContext)(dpy, visinfo, shareList, direct);
220afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
221afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
222afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
223be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPixmap PUBLIC
224be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateGLXPixmap(Display *dpy, XVisualInfo *visinfo, Pixmap pixmap)
225e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
22655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
22755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
228e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
229e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
230e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->CreateGLXPixmap)(dpy, visinfo, pixmap);
231e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
232e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
233afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
234be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
235be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyContext(Display *dpy, GLXContext ctx)
236afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
23755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
23855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
239e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
240e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
241d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul   if (glXGetCurrentContext() == ctx)
242d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul      SetCurrentContext(NULL);
243e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->DestroyContext)(dpy, ctx);
244afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
245afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
246afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
247be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
248be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyGLXPixmap(Display *dpy, GLXPixmap pixmap)
249e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
25055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
25155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
252e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
253e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
254e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->DestroyGLXPixmap)(dpy, pixmap);
255e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
256e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
257afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
258be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
259be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetConfig(Display *dpy, XVisualInfo *visinfo, int attrib, int *value)
260afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
26155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
26255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
263e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
264e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return GLX_NO_EXTENSION;
265e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->GetConfig)(dpy, visinfo, attrib, value);
266afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
267afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
268afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
269be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContext PUBLIC
270be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentContext(void)
271e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
272d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#if defined(GLX_USE_TLS)
273d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul   return CurrentContext;
274d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#elif defined(THREADS)
27518d1fdebebcb52e7fcf50e62c4c02862d173af51Brian   return (GLXContext) _glthread_GetTSD(&ContextTSD);
276d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#else
277e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return CurrentContext;
278d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul#endif
279e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
280e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
281afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
282be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXDrawable PUBLIC
283be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentDrawable(void)
284afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
28512c1bee87fcc3a0912685bb6e83447972e5de64eBrian Paul   __GLXcontext *gc = (__GLXcontext *) glXGetCurrentContext();
2867cf50e137da497a590ec9001a9918972a6246142Brian Paul   return gc ? gc->currentDrawable : 0;
287afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
288afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
289afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
290be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
291be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXIsDirect(Display *dpy, GLXContext ctx)
292e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
29355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
29455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
295e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
296e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
297e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->IsDirect)(dpy, ctx);
298e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
299e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
300afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
301be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
302be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXMakeCurrent(Display *dpy, GLXDrawable drawable, GLXContext ctx)
303afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
304e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   Bool b;
30555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
30655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
30784cac8441fcf5f692cd220e9fa86cab398a4c159Brian Paul   if (!t) {
308e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
30984cac8441fcf5f692cd220e9fa86cab398a4c159Brian Paul   }
310e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   b = (*t->MakeCurrent)(dpy, drawable, ctx);
311e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (b) {
312d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul      SetCurrentContext(ctx);
313afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   }
314e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return b;
315afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
316afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
317afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
318be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
319be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryExtension(Display *dpy, int *errorb, int *event)
320afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
32155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
32255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
323e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
324e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
325e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->QueryExtension)(dpy, errorb, event);
326afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
327afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
328afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
329be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
330be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryVersion(Display *dpy, int *maj, int *min)
331afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
33255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
33355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
334e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
335e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
336e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->QueryVersion)(dpy, maj, min);
337afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
338afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
339afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
340be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
341be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXSwapBuffers(Display *dpy, GLXDrawable drawable)
342afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
34355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
34455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
345e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
346e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
347e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->SwapBuffers)(dpy, drawable);
348afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
349afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
350afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
351be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
352be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXUseXFont(Font font, int first, int count, int listBase)
353afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
35455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
3557cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
3567cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
357e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
358e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
359e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->UseXFont)(font, first, count, listBase);
360afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
361afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
362afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
363be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
364be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXWaitGL(void)
365afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
36655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
3677cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
3687cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
369e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
370e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
371e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->WaitGL)();
372afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
373afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
374afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
375be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
376be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXWaitX(void)
377afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
37855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
3797cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
3807cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
381e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
382e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
383e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->WaitX)();
384afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
385afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
386afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
387afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
388b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_VERSION_1_1 ***/
389e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
390be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulconst char PUBLIC *
391be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetClientString(Display *dpy, int name)
392afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
39355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
39455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
395e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
396e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
397e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->GetClientString)(dpy, name);
398afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
399afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
400afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
401be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulconst char PUBLIC *
402be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryExtensionsString(Display *dpy, int screen)
403e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
40455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
40555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
406e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
407e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
408e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->QueryExtensionsString)(dpy, screen);
409e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
410e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
411afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
412be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulconst char PUBLIC *
413be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryServerString(Display *dpy, int screen, int name)
414afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
41555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
41655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
417e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
418e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
419e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->QueryServerString)(dpy, screen, name);
420afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
421afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
422afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
423b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_VERSION_1_2 ***/
424afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
425be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulDisplay PUBLIC *
426be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentDisplay(void)
427afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
4287cf50e137da497a590ec9001a9918972a6246142Brian Paul   /* Same code as in libGL's glxext.c */
42912c1bee87fcc3a0912685bb6e83447972e5de64eBrian Paul   __GLXcontext *gc = (__GLXcontext *) glXGetCurrentContext();
4307cf50e137da497a590ec9001a9918972a6246142Brian Paul   if (NULL == gc) return NULL;
4317cf50e137da497a590ec9001a9918972a6246142Brian Paul   return gc->currentDpy;
432afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
433e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
434afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
435afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
436b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_VERSION_1_3 ***/
437afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
438be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXFBConfig PUBLIC *
439be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXChooseFBConfig(Display *dpy, int screen, const int *attribList, int *nitems)
440afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
44155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
44255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
443e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
444e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
445e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->ChooseFBConfig)(dpy, screen, attribList, nitems);
446afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
447afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
448afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
449be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContext PUBLIC
450be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateNewContext(Display *dpy, GLXFBConfig config, int renderType, GLXContext shareList, Bool direct)
451afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
45255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
45355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
454e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
455e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
456e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->CreateNewContext)(dpy, config, renderType, shareList, direct);
457afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
458afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
459afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
460be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPbuffer PUBLIC
461be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreatePbuffer(Display *dpy, GLXFBConfig config, const int *attribList)
462afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
46355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
46455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
465e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
466e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
467e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->CreatePbuffer)(dpy, config, attribList);
468afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
469afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
470afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
471be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPixmap PUBLIC
472be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreatePixmap(Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attribList)
473afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
47455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
47555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
476e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
477e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
478e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->CreatePixmap)(dpy, config, pixmap, attribList);
479afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
480afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
481afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
482be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXWindow PUBLIC
483be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateWindow(Display *dpy, GLXFBConfig config, Window win, const int *attribList)
484afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
48555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
48655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
487e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
488e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
489e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->CreateWindow)(dpy, config, win, attribList);
490afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
491afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
492afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
493be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
494be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyPbuffer(Display *dpy, GLXPbuffer pbuf)
495afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
49655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
49755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
498e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
499e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
500e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->DestroyPbuffer)(dpy, pbuf);
501afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
502afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
503afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
504be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
505be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyPixmap(Display *dpy, GLXPixmap pixmap)
506b82d993b03320818f88f792a9e713f7ed491bfcbBrian Paul{
50755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
50855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
509e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
510e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
511e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->DestroyPixmap)(dpy, pixmap);
512b82d993b03320818f88f792a9e713f7ed491bfcbBrian Paul}
513b82d993b03320818f88f792a9e713f7ed491bfcbBrian Paul
514b82d993b03320818f88f792a9e713f7ed491bfcbBrian Paul
515be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
516be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyWindow(Display *dpy, GLXWindow window)
517ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
51855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
51955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
520e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
521e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
522e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->DestroyWindow)(dpy, window);
523ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
524ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
525ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
526be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXDrawable PUBLIC
527be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentReadDrawable(void)
528ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
52912c1bee87fcc3a0912685bb6e83447972e5de64eBrian Paul   __GLXcontext *gc = (__GLXcontext *) glXGetCurrentContext();
5307cf50e137da497a590ec9001a9918972a6246142Brian Paul   return gc ? gc->currentReadable : 0;
531ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
532ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
533ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
534be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
535be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetFBConfigAttrib(Display *dpy, GLXFBConfig config, int attribute, int *value)
536ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
53755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
53855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
539e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
540e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return GLX_NO_EXTENSION;
541e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->GetFBConfigAttrib)(dpy, config, attribute, value);
542ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
543ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
544ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
545be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXFBConfig PUBLIC *
546be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetFBConfigs(Display *dpy, int screen, int *nelements)
5475605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul{
54855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
54955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
5505605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul   if (!t)
5515605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul      return 0;
5525605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul   return (t->GetFBConfigs)(dpy, screen, nelements);
5535605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul}
5545605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul
555be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
556be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetSelectedEvent(Display *dpy, GLXDrawable drawable, unsigned long *mask)
557ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
55855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
55955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
560e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
561e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
562e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->GetSelectedEvent)(dpy, drawable, mask);
563ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
564ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
565ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
566be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulXVisualInfo PUBLIC *
567be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetVisualFromFBConfig(Display *dpy, GLXFBConfig config)
568ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
56955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
57055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
571e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
572e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return NULL;
573e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->GetVisualFromFBConfig)(dpy, config);
574ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
575ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
576ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
577be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
578be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXMakeContextCurrent(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx)
579ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
580e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   Bool b;
58155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
58255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
583e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
584e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
585e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   b = (t->MakeContextCurrent)(dpy, draw, read, ctx);
586e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (b) {
587d41d29b8bde9bb9c277424a43d0b80838edfe254Brian Paul      SetCurrentContext(ctx);
588e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   }
589e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return b;
590ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
591ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
592ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
593be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
594be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryContext(Display *dpy, GLXContext ctx, int attribute, int *value)
595ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
59655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
59755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
598e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   assert(t);
599e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
600e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0; /* XXX correct? */
601e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->QueryContext)(dpy, ctx, attribute, value);
602ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
603ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
604ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
605be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
606be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryDrawable(Display *dpy, GLXDrawable draw, int attribute, unsigned int *value)
607ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
60855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
60955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
610e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
611e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
612e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->QueryDrawable)(dpy, draw, attribute, value);
613ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
614ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
615ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
616be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
617be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXSelectEvent(Display *dpy, GLXDrawable drawable, unsigned long mask)
618ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
61955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
62055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
621e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
622e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
623e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->SelectEvent)(dpy, drawable, mask);
624ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
625ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
626ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
627e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
628b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGI_swap_control ***/
629783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
630be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
631be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXSwapIntervalSGI(int interval)
632783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
63355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
6347cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
6357cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
636783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
637783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
638783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->SwapIntervalSGI)(interval);
639783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
640783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
641783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
642783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
643b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGI_video_sync ***/
644783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
645be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
646be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetVideoSyncSGI(unsigned int *count)
647783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
64855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
6497cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
6507cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
6512d087480b4b1207c058efcccc9a72faedcea4651Brian Paul   if (!t || !glXGetCurrentContext())
6522d087480b4b1207c058efcccc9a72faedcea4651Brian Paul      return GLX_BAD_CONTEXT;
653783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->GetVideoSyncSGI)(count);
654783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
655783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
656be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
657be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count)
658783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
65955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
6607cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
6617cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
6622d087480b4b1207c058efcccc9a72faedcea4651Brian Paul   if (!t || !glXGetCurrentContext())
6632d087480b4b1207c058efcccc9a72faedcea4651Brian Paul      return GLX_BAD_CONTEXT;
664783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->WaitVideoSyncSGI)(divisor, remainder, count);
665783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
666783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
667783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
668783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
669b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGI_make_current_read ***/
670783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
671be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
672be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXMakeCurrentReadSGI(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx)
673783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
67455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
67555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
676783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
6772d087480b4b1207c058efcccc9a72faedcea4651Brian Paul      return False;
678783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->MakeCurrentReadSGI)(dpy, draw, read, ctx);
679783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
680783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
681be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXDrawable PUBLIC
682be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentReadDrawableSGI(void)
683783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
6847cf50e137da497a590ec9001a9918972a6246142Brian Paul   return glXGetCurrentReadDrawable();
685783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
686783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
687783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
688b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul#if defined(_VL_H)
689783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
690be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXVideoSourceSGIX PUBLIC
691be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateGLXVideoSourceSGIX(Display *dpy, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode)
692783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
69355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
69455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
695783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
696783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
697783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->CreateGLXVideoSourceSGIX)(dpy, screen, server, path, nodeClass, drainNode);
698783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
699783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
700be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
701be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyGLXVideoSourceSGIX(Display *dpy, GLXVideoSourceSGIX src)
702783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
70355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
70455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
705783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
706783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
707783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->DestroyGLXVideoSourceSGIX)(dpy, src);
708783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
709783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
710783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif
711783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
712783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
713b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_EXT_import_context ***/
714e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
715be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
716be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXFreeContextEXT(Display *dpy, GLXContext context)
717ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
71855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
71955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
720e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
721e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
722e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->FreeContextEXT)(dpy, context);
723ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
724ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
725be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContextID PUBLIC
726be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetContextIDEXT(const GLXContext context)
727ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
72812c1bee87fcc3a0912685bb6e83447972e5de64eBrian Paul   return ((__GLXcontext *) context)->xid;
729ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
730ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
731be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulDisplay PUBLIC *
732be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetCurrentDisplayEXT(void)
733ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
7347cf50e137da497a590ec9001a9918972a6246142Brian Paul   return glXGetCurrentDisplay();
735ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
736ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
737be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContext PUBLIC
738be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXImportContextEXT(Display *dpy, GLXContextID contextID)
739ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
74055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
74155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
742e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
743e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
744e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->ImportContextEXT)(dpy, contextID);
745ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
746ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
747be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
748be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryContextInfoEXT(Display *dpy, GLXContext context, int attribute,int *value)
749ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
75055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
75155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
752e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
753e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;  /* XXX ok? */
754e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->QueryContextInfoEXT)(dpy, context, attribute, value);
755ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
756ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
757e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
758e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
759b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGIX_fbconfig ***/
760ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
761be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
762be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config, int attribute, int *value)
763ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
76455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
76555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
766e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
767e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
768783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->GetFBConfigAttribSGIX)(dpy, config, attribute, value);
769ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
770ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
771be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXFBConfigSGIX PUBLIC *
772be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXChooseFBConfigSGIX(Display *dpy, int screen, int *attrib_list, int *nelements)
773783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
77455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
77555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
776783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
777783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
778783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->ChooseFBConfigSGIX)(dpy, screen, attrib_list, nelements);
779783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
780ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
781be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPixmap PUBLIC
782be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateGLXPixmapWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap)
783ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul{
78455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
78555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
786e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
787e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return 0;
788783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->CreateGLXPixmapWithConfigSGIX)(dpy, config, pixmap);
789783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
790783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
791be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXContext PUBLIC
792be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateContextWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct)
793783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
79455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
79555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
796783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
797783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
798783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->CreateContextWithConfigSGIX)(dpy, config, render_type, share_list, direct);
799783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
800783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
801be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulXVisualInfo PUBLIC *
802be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetVisualFromFBConfigSGIX(Display *dpy, GLXFBConfigSGIX config)
803783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
80455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
80555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
806783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
807783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
808783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->GetVisualFromFBConfigSGIX)(dpy, config);
809783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
810783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
811be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXFBConfigSGIX PUBLIC
812be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetFBConfigFromVisualSGIX(Display *dpy, XVisualInfo *vis)
813783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
81455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
81555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
816783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
817783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
818783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->GetFBConfigFromVisualSGIX)(dpy, vis);
819783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
820783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
821783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
822783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
823b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGIX_pbuffer ***/
824783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
825be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPbufferSGIX PUBLIC
826be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateGLXPbufferSGIX(Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list)
827783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
82855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
82955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
830783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
831783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
832783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->CreateGLXPbufferSGIX)(dpy, config, width, height, attrib_list);
833783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
834783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
835be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
836be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXDestroyGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf)
837783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
83855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
83955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
840783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
841783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
842783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   (t->DestroyGLXPbufferSGIX)(dpy, pbuf);
843783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
844783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
845be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
846be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value)
847783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
84855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
84955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
850783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
851783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return 0;
852783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->QueryGLXPbufferSGIX)(dpy, pbuf, attribute, value);
853783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
854783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
855be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
856be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXSelectEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long mask)
857783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
85855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
85955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
860783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
861783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
862783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   (t->SelectEventSGIX)(dpy, drawable, mask);
863783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
864783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
865be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
866be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetSelectedEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long *mask)
867783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
86855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
86955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
870783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
871783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
872783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   (t->GetSelectedEventSGIX)(dpy, drawable, mask);
873783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul}
874783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
875783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
876783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
877b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGI_cushion ***/
878783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
879be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
880be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCushionSGI(Display *dpy, Window win, float cushion)
881783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{
88255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
88355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
884783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   if (!t)
885783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
886783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   (t->CushionSGI)(dpy, win, cushion);
887ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul}
888ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
889ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
890ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
891b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGIX_video_resize ***/
8924536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
893be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
894be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXBindChannelToWindowSGIX(Display *dpy, int screen, int channel , Window window)
8954536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
89655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
89755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
8984536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
8994536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul      return 0;
9004536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   return (t->BindChannelToWindowSGIX)(dpy, screen, channel, window);
9014536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9024536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
903be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
904be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXChannelRectSGIX(Display *dpy, int screen, int channel, int x, int y, int w, int h)
9054536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
90655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
90755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9084536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
9094536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul      return 0;
9104536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   return (t->ChannelRectSGIX)(dpy, screen, channel, x, y, w, h);
9114536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9124536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
913be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
914be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryChannelRectSGIX(Display *dpy, int screen, int channel, int *x, int *y, int *w, int *h)
9154536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
91655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
91755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9184536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
9194536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul      return 0;
9204536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   return (t->QueryChannelRectSGIX)(dpy, screen, channel, x, y, w, h);
9214536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9224536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
923be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
924be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryChannelDeltasSGIX(Display *dpy, int screen, int channel, int *dx, int *dy, int *dw, int *dh)
9254536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
92655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
92755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9284536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
9294536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul      return 0;
9304536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   return (t->QueryChannelDeltasSGIX)(dpy, screen, channel, dx, dy, dw, dh);
9314536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9324536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
933be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulint PUBLIC
934be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXChannelRectSyncSGIX(Display *dpy, int screen, int channel, GLenum synctype)
9354536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
93655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
93755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9384536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
9394536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul      return 0;
9404536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   return (t->ChannelRectSyncSGIX)(dpy, screen, channel, synctype);
9414536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9424536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
9434536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
9444536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
945b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul#if defined(_DM_BUFFER_H_)
9464536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
947be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
948be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXAssociateDMPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer)
9494536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
95055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
95155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9524536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
953783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return False;
954783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (t->AssociateDMPbufferSGIX)(dpy, pbuffer, params, dmbuffer);
9554536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9564536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
957783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif
9584536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
9594536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
960b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGIX_swap_group ***/
961783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
962be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
963be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXJoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable, GLXDrawable member)
9644536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
96555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
96655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9674536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
968783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
969783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   (*t->JoinSwapGroupSGIX)(dpy, drawable, member);
9704536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9714536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
972783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
973b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SGIX_swap_barrier ***/
974783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
975be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
976be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXBindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable, int barrier)
9774536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
97855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
97955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9804536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
981783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return;
982783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   (*t->BindSwapBarrierSGIX)(dpy, drawable, barrier);
9834536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9844536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
985be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
986be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXQueryMaxSwapBarriersSGIX(Display *dpy, int screen, int *max)
9874536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
98855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
98955ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
9904536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
991783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return False;
992783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (*t->QueryMaxSwapBarriersSGIX)(dpy, screen, max);
9934536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
9944536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
995783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
996783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
997b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_SUN_get_transparent_index ***/
998783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul
999be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulStatus PUBLIC
1000be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetTransparentIndexSUN(Display *dpy, Window overlay, Window underlay, long *pTransparent)
10014536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul{
100255ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
100355ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
10044536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul   if (!t)
1005783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul      return False;
1006783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul   return (*t->GetTransparentIndexSUN)(dpy, overlay, underlay, pTransparent);
10074536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul}
10084536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
10094536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
10104536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul
1011b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_MESA_copy_sub_buffer ***/
1012ad6fd8ed4daa9a1e4167476bdcd0b65195a8045aBrian Paul
1013be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
1014be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCopySubBufferMESA(Display *dpy, GLXDrawable drawable, int x, int y, int width, int height)
1015afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
101655ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
101755ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
1018e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
1019e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return;
1020e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   (t->CopySubBufferMESA)(dpy, drawable, x, y, width, height);
1021e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
1022e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1023e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1024e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1025b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_MESA_release_buffers ***/
1026e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1027be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
1028be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXReleaseBuffersMESA(Display *dpy, Window w)
1029e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
103055ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
103155ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
1032e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
1033e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
1034e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->ReleaseBuffersMESA)(dpy, w);
1035afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
1036e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1037afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1038afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1039b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_MESA_pixmap_colormap ***/
1040e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1041be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLXPixmap PUBLIC
1042be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXCreateGLXPixmapMESA(Display *dpy, XVisualInfo *visinfo, Pixmap pixmap, Colormap cmap)
1043afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
104455ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
104555ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   GET_DISPATCH(dpy, t);
1046e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
1047afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg      return 0;
1048e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->CreateGLXPixmapMESA)(dpy, visinfo, pixmap, cmap);
1049e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
1050e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1051e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1052e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1053b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul/*** GLX_MESA_set_3dfx_mode ***/
1054e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1055be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulBool PUBLIC
1056be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXSet3DfxModeMESA(int mode)
1057e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
105855ed11bac511bb9ba80c1e2d2115d91e32621be4Brian Paul   struct _glxapi_table *t;
10597cf50e137da497a590ec9001a9918972a6246142Brian Paul   Display *dpy = glXGetCurrentDisplay();
10607cf50e137da497a590ec9001a9918972a6246142Brian Paul   GET_DISPATCH(dpy, t);
1061e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   if (!t)
1062e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      return False;
1063e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return (t->Set3DfxModeMESA)(mode);
1064afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
1065e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1066afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1067afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1068d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul/*** GLX_NV_vertex_array_range ***/
10698fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
1070be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC *
10718fefafa2200d3ea44ec46592b190654a10685b46Brian PaulglXAllocateMemoryNV( GLsizei size,
10728fefafa2200d3ea44ec46592b190654a10685b46Brian Paul                     GLfloat readFrequency,
10738fefafa2200d3ea44ec46592b190654a10685b46Brian Paul                     GLfloat writeFrequency,
10748fefafa2200d3ea44ec46592b190654a10685b46Brian Paul                     GLfloat priority )
10758fefafa2200d3ea44ec46592b190654a10685b46Brian Paul{
10768fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   struct _glxapi_table *t;
10778fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   Display *dpy = glXGetCurrentDisplay();
10788fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   GET_DISPATCH(dpy, t);
10798fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   if (!t)
10808fefafa2200d3ea44ec46592b190654a10685b46Brian Paul      return NULL;
10818fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   return (t->AllocateMemoryNV)(size, readFrequency, writeFrequency, priority);
10828fefafa2200d3ea44ec46592b190654a10685b46Brian Paul}
10838fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
10848fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
1085be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paulvoid PUBLIC
10868fefafa2200d3ea44ec46592b190654a10685b46Brian PaulglXFreeMemoryNV( GLvoid *pointer )
10878fefafa2200d3ea44ec46592b190654a10685b46Brian Paul{
10888fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   struct _glxapi_table *t;
10898fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   Display *dpy = glXGetCurrentDisplay();
10908fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   GET_DISPATCH(dpy, t);
10918fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   if (!t)
10928fefafa2200d3ea44ec46592b190654a10685b46Brian Paul      return;
10938fefafa2200d3ea44ec46592b190654a10685b46Brian Paul   (t->FreeMemoryNV)(pointer);
10948fefafa2200d3ea44ec46592b190654a10685b46Brian Paul}
10958fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
10968fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
10977cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul
10987cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul
1099d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul/*** GLX_MESA_agp_offset */
1100d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul
1101be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulGLuint PUBLIC
1102d6113fc20d68f5720740b89c594227d0312bab3eBrian PaulglXGetAGPOffsetMESA( const GLvoid *pointer )
1103d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul{
1104d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   struct _glxapi_table *t;
1105d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   Display *dpy = glXGetCurrentDisplay();
1106d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   GET_DISPATCH(dpy, t);
1107d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   if (!t)
1108d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul      return ~0;
1109d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   return (t->GetAGPOffsetMESA)(pointer);
1110d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul}
1111d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul
1112afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1113fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian/*** GLX_EXT_texture_from_pixmap */
1114fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian
111573060ec7ebaa6a304402caa60610f94dac2cf24bBrian Paulvoid PUBLIC
1116fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrianglXBindTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer,
1117fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian                   const int *attrib_list)
1118fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian{
1119fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian   struct _glxapi_table *t;
1120fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian   GET_DISPATCH(dpy, t);
1121fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian   if (t)
1122fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian      t->BindTexImageEXT(dpy, drawable, buffer, attrib_list);
1123fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian}
1124fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian
112573060ec7ebaa6a304402caa60610f94dac2cf24bBrian Paulvoid PUBLIC
1126fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrianglXReleaseTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer)
1127fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian{
1128fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian   struct _glxapi_table *t;
1129fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian   GET_DISPATCH(dpy, t);
1130fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian   if (t)
1131fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian      t->ReleaseTexImageEXT(dpy, drawable, buffer);
1132fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian}
1133fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian
11347cd2ae9d97377bc68f66ce3c7734f56e3f5dfa6bBrian Paul
1135e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/**********************************************************************/
1136e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/* GLX API management functions                                       */
1137e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/**********************************************************************/
1138e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1139e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1140e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulconst char *
1141e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul_glxapi_get_version(void)
1142e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
1143e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return "1.3";
1144e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
1145e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1146afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1147afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/*
1148e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * Return array of extension strings.
1149afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
1150e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulconst char **
1151e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul_glxapi_get_extensions(void)
1152afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
1153e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   static const char *extensions[] = {
11544c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_EXT_import_context
1155e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_EXT_import_context",
1156e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11574c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_SGI_video_sync
1158e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_SGI_video_sync",
1159e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11604c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_copy_sub_buffer
1161e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_MESA_copy_sub_buffer",
1162e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11634c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_release_buffers
1164e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_MESA_release_buffers",
1165e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11664c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_pixmap_colormap
1167e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_MESA_pixmap_colormap",
1168e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11694c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_set_3dfx_mode
1170e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      "GLX_MESA_set_3dfx_mode",
1171e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul#endif
11723c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul#ifdef GLX_SGIX_fbconfig
11733c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul      "GLX_SGIX_fbconfig",
11743c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul#endif
11753c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul#ifdef GLX_SGIX_pbuffer
11763c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul      "GLX_SGIX_pbuffer",
11773c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul#endif
1178c1ba308e6499a6eb3f970b81a3f25d63da988d1cBrian#ifdef GLX_EXT_texture_from_pixmap
1179fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian      "GLX_EXT_texture_from_pixmap",
1180fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian#endif
11817f170573ea486f2f2dd474c2590346f1a0110773Jesse Barnes#ifdef GLX_INTEL_swap_event
11827f170573ea486f2f2dd474c2590346f1a0110773Jesse Barnes      "GLX_INTEL_swap_event",
11837f170573ea486f2f2dd474c2590346f1a0110773Jesse Barnes#endif
1184e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      NULL
1185e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   };
1186e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return extensions;
1187afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
1188afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1189afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1190afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/*
1191e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * Return size of the GLX dispatch table, in entries, not bytes.
1192afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
1193e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian PaulGLuint
1194e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul_glxapi_get_dispatch_table_size(void)
1195e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
1196e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   return sizeof(struct _glxapi_table) / sizeof(void *);
1197e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
1198e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1199e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1200e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstatic int
1201e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulgeneric_no_op_func(void)
1202afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{
1203afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   return 0;
1204afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
1205afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
1206e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1207e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/*
1208e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * Initialize all functions in given dispatch table to be no-ops
1209e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul */
1210e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulvoid
1211e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul_glxapi_set_no_op_table(struct _glxapi_table *t)
1212e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul{
1213be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   typedef int (*nop_func)(void);
1214be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   nop_func *dispatch = (nop_func *) t;
1215e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   GLuint n = _glxapi_get_dispatch_table_size();
1216e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   GLuint i;
1217e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   for (i = 0; i < n; i++) {
1218be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul      dispatch[i] = generic_no_op_func;
1219e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   }
1220e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul}
1221e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1222e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1223e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstruct name_address_pair {
1224e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   const char *Name;
1225be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   __GLXextFuncPtr Address;
1226e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul};
1227e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1228e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paulstatic struct name_address_pair GLX_functions[] = {
1229b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_VERSION_1_0 ***/
1230be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXChooseVisual", (__GLXextFuncPtr) glXChooseVisual },
1231be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCopyContext", (__GLXextFuncPtr) glXCopyContext },
1232be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateContext", (__GLXextFuncPtr) glXCreateContext },
1233be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateGLXPixmap", (__GLXextFuncPtr) glXCreateGLXPixmap },
1234be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyContext", (__GLXextFuncPtr) glXDestroyContext },
1235be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyGLXPixmap", (__GLXextFuncPtr) glXDestroyGLXPixmap },
1236be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetConfig", (__GLXextFuncPtr) glXGetConfig },
1237be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentContext", (__GLXextFuncPtr) glXGetCurrentContext },
1238be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentDrawable", (__GLXextFuncPtr) glXGetCurrentDrawable },
1239be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXIsDirect", (__GLXextFuncPtr) glXIsDirect },
1240be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXMakeCurrent", (__GLXextFuncPtr) glXMakeCurrent },
1241be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryExtension", (__GLXextFuncPtr) glXQueryExtension },
1242be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryVersion", (__GLXextFuncPtr) glXQueryVersion },
1243be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXSwapBuffers", (__GLXextFuncPtr) glXSwapBuffers },
1244be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXUseXFont", (__GLXextFuncPtr) glXUseXFont },
1245be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXWaitGL", (__GLXextFuncPtr) glXWaitGL },
1246be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXWaitX", (__GLXextFuncPtr) glXWaitX },
1247e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1248b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_VERSION_1_1 ***/
1249be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetClientString", (__GLXextFuncPtr) glXGetClientString },
1250be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryExtensionsString", (__GLXextFuncPtr) glXQueryExtensionsString },
1251be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryServerString", (__GLXextFuncPtr) glXQueryServerString },
125289a42b7e736bd9b0ab090906cab0cd047a6ec12eBrian Paul
1253b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_VERSION_1_2 ***/
1254be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentDisplay", (__GLXextFuncPtr) glXGetCurrentDisplay },
125589a42b7e736bd9b0ab090906cab0cd047a6ec12eBrian Paul
1256b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_VERSION_1_3 ***/
1257be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXChooseFBConfig", (__GLXextFuncPtr) glXChooseFBConfig },
1258be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateNewContext", (__GLXextFuncPtr) glXCreateNewContext },
1259be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreatePbuffer", (__GLXextFuncPtr) glXCreatePbuffer },
1260be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreatePixmap", (__GLXextFuncPtr) glXCreatePixmap },
1261be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateWindow", (__GLXextFuncPtr) glXCreateWindow },
1262be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyPbuffer", (__GLXextFuncPtr) glXDestroyPbuffer },
1263be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyPixmap", (__GLXextFuncPtr) glXDestroyPixmap },
1264be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyWindow", (__GLXextFuncPtr) glXDestroyWindow },
1265be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentReadDrawable", (__GLXextFuncPtr) glXGetCurrentReadDrawable },
1266be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetFBConfigAttrib", (__GLXextFuncPtr) glXGetFBConfigAttrib },
1267be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetFBConfigs", (__GLXextFuncPtr) glXGetFBConfigs },
1268be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetSelectedEvent", (__GLXextFuncPtr) glXGetSelectedEvent },
1269be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetVisualFromFBConfig", (__GLXextFuncPtr) glXGetVisualFromFBConfig },
1270be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXMakeContextCurrent", (__GLXextFuncPtr) glXMakeContextCurrent },
1271be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryContext", (__GLXextFuncPtr) glXQueryContext },
1272be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryDrawable", (__GLXextFuncPtr) glXQueryDrawable },
1273be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXSelectEvent", (__GLXextFuncPtr) glXSelectEvent },
127443c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul
1275ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul   /*** GLX_VERSION_1_4 ***/
1276be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetProcAddress", (__GLXextFuncPtr) glXGetProcAddress },
1277ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul
1278ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGI_swap_control ***/
1279be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXSwapIntervalSGI", (__GLXextFuncPtr) glXSwapIntervalSGI },
1280ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1281b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_SGI_video_sync ***/
1282be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetVideoSyncSGI", (__GLXextFuncPtr) glXGetVideoSyncSGI },
1283be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXWaitVideoSyncSGI", (__GLXextFuncPtr) glXWaitVideoSyncSGI },
1284e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1285ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGI_make_current_read ***/
1286be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXMakeCurrentReadSGI", (__GLXextFuncPtr) glXMakeCurrentReadSGI },
1287be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentReadDrawableSGI", (__GLXextFuncPtr) glXGetCurrentReadDrawableSGI },
1288ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1289ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_video_source ***/
1290ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul#if defined(_VL_H)
1291be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateGLXVideoSourceSGIX", (__GLXextFuncPtr) glXCreateGLXVideoSourceSGIX },
1292be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyGLXVideoSourceSGIX", (__GLXextFuncPtr) glXDestroyGLXVideoSourceSGIX },
1293ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul#endif
1294ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1295ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_EXT_import_context ***/
1296be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXFreeContextEXT", (__GLXextFuncPtr) glXFreeContextEXT },
1297be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetContextIDEXT", (__GLXextFuncPtr) glXGetContextIDEXT },
1298be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetCurrentDisplayEXT", (__GLXextFuncPtr) glXGetCurrentDisplayEXT },
1299be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXImportContextEXT", (__GLXextFuncPtr) glXImportContextEXT },
1300be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryContextInfoEXT", (__GLXextFuncPtr) glXQueryContextInfoEXT },
1301ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1302ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_fbconfig ***/
1303be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetFBConfigAttribSGIX", (__GLXextFuncPtr) glXGetFBConfigAttribSGIX },
1304be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXChooseFBConfigSGIX", (__GLXextFuncPtr) glXChooseFBConfigSGIX },
1305be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateGLXPixmapWithConfigSGIX", (__GLXextFuncPtr) glXCreateGLXPixmapWithConfigSGIX },
1306be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateContextWithConfigSGIX", (__GLXextFuncPtr) glXCreateContextWithConfigSGIX },
1307be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetVisualFromFBConfigSGIX", (__GLXextFuncPtr) glXGetVisualFromFBConfigSGIX },
1308be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetFBConfigFromVisualSGIX", (__GLXextFuncPtr) glXGetFBConfigFromVisualSGIX },
1309ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1310ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_pbuffer ***/
1311be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateGLXPbufferSGIX", (__GLXextFuncPtr) glXCreateGLXPbufferSGIX },
1312be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXDestroyGLXPbufferSGIX", (__GLXextFuncPtr) glXDestroyGLXPbufferSGIX },
1313be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryGLXPbufferSGIX", (__GLXextFuncPtr) glXQueryGLXPbufferSGIX },
1314be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXSelectEventSGIX", (__GLXextFuncPtr) glXSelectEventSGIX },
1315be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetSelectedEventSGIX", (__GLXextFuncPtr) glXGetSelectedEventSGIX },
1316ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1317ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGI_cushion ***/
1318be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCushionSGI", (__GLXextFuncPtr) glXCushionSGI },
1319ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1320ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_video_resize ***/
1321be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXBindChannelToWindowSGIX", (__GLXextFuncPtr) glXBindChannelToWindowSGIX },
1322be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXChannelRectSGIX", (__GLXextFuncPtr) glXChannelRectSGIX },
1323be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryChannelRectSGIX", (__GLXextFuncPtr) glXQueryChannelRectSGIX },
1324be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryChannelDeltasSGIX", (__GLXextFuncPtr) glXQueryChannelDeltasSGIX },
1325be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXChannelRectSyncSGIX", (__GLXextFuncPtr) glXChannelRectSyncSGIX },
1326ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1327ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_dmbuffer **/
1328ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul#if defined(_DM_BUFFER_H_)
1329be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXAssociateDMPbufferSGIX", (__GLXextFuncPtr) glXAssociateDMPbufferSGIX },
1330ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul#endif
1331ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1332ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_swap_group ***/
1333be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXJoinSwapGroupSGIX", (__GLXextFuncPtr) glXJoinSwapGroupSGIX },
1334ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1335ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SGIX_swap_barrier ***/
1336be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXBindSwapBarrierSGIX", (__GLXextFuncPtr) glXBindSwapBarrierSGIX },
1337be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXQueryMaxSwapBarriersSGIX", (__GLXextFuncPtr) glXQueryMaxSwapBarriersSGIX },
1338ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1339ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_SUN_get_transparent_index ***/
1340be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetTransparentIndexSUN", (__GLXextFuncPtr) glXGetTransparentIndexSUN },
1341ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1342b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_MESA_copy_sub_buffer ***/
1343be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCopySubBufferMESA", (__GLXextFuncPtr) glXCopySubBufferMESA },
134443c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul
1345b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_MESA_pixmap_colormap ***/
1346be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXCreateGLXPixmapMESA", (__GLXextFuncPtr) glXCreateGLXPixmapMESA },
1347e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1348ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul   /*** GLX_MESA_release_buffers ***/
1349be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXReleaseBuffersMESA", (__GLXextFuncPtr) glXReleaseBuffersMESA },
1350ffa10b1c3b3c944438d0a75c84acdbd92091c35cBrian Paul
1351b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_MESA_set_3dfx_mode ***/
1352be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXSet3DfxModeMESA", (__GLXextFuncPtr) glXSet3DfxModeMESA },
1353e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
1354b0bb4f6226a18e0a6eb40046c7f7b5a841c75edaBrian Paul   /*** GLX_ARB_get_proc_address ***/
1355be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetProcAddressARB", (__GLXextFuncPtr) glXGetProcAddressARB },
1356e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1357d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   /*** GLX_NV_vertex_array_range ***/
1358be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXAllocateMemoryNV", (__GLXextFuncPtr) glXAllocateMemoryNV },
1359be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXFreeMemoryNV", (__GLXextFuncPtr) glXFreeMemoryNV },
13608fefafa2200d3ea44ec46592b190654a10685b46Brian Paul
1361d6113fc20d68f5720740b89c594227d0312bab3eBrian Paul   /*** GLX_MESA_agp_offset ***/
1362be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   { "glXGetAGPOffsetMESA", (__GLXextFuncPtr) glXGetAGPOffsetMESA },
13633c5bfac63bcbc4028c552fe74d904e6a3416ff36Brian Paul
1364fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian   /*** GLX_EXT_texture_from_pixmap ***/
1365fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian   { "glXBindTexImageEXT", (__GLXextFuncPtr) glXBindTexImageEXT },
1366fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian   { "glXReleaseTexImageEXT", (__GLXextFuncPtr) glXReleaseTexImageEXT },
1367fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian
1368e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   { NULL, NULL }   /* end of list */
1369e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul};
1370e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul
137143c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul
137243c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul
1373e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul/*
1374e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul * Return address of named glX function, or NULL if not found.
1375e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul */
1376be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul__GLXextFuncPtr
1377e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul_glxapi_get_proc_address(const char *funcName)
137843c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul{
1379e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   GLuint i;
1380e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   for (i = 0; GLX_functions[i].Name; i++) {
13817399d56ec6019e00297eef57f802a53698baa8adTom Fogal#ifdef MANGLE
13827399d56ec6019e00297eef57f802a53698baa8adTom Fogal      /* skip the "m" prefix on the name */
13837399d56ec6019e00297eef57f802a53698baa8adTom Fogal      if (strcmp(GLX_functions[i].Name, funcName+1) == 0)
13847399d56ec6019e00297eef57f802a53698baa8adTom Fogal#else
1385e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul      if (strcmp(GLX_functions[i].Name, funcName) == 0)
13867399d56ec6019e00297eef57f802a53698baa8adTom Fogal#endif
1387e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul         return GLX_functions[i].Address;
1388e17ba7120fee25e57e7e19fc55d4dbb7b5634f1fBrian Paul   }
138943c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul   return NULL;
139089a42b7e736bd9b0ab090906cab0cd047a6ec12eBrian Paul}
1391e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1392e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1393e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1394e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul/*
1395e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul * This function does not get dispatched through the dispatch table
1396e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul * since it's really a "meta" function.
1397e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul */
139873060ec7ebaa6a304402caa60610f94dac2cf24bBrian Paul__GLXextFuncPtr PUBLIC
1399be2de8b299c9fc7bdc22372ed799e894a8582c62Brian PaulglXGetProcAddressARB(const GLubyte *procName)
1400e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul{
1401be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   __GLXextFuncPtr f;
1402e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1403be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   f = _glxapi_get_proc_address((const char *) procName);
1404e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul   if (f) {
1405e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul      return f;
1406e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul   }
1407e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul
1408be2de8b299c9fc7bdc22372ed799e894a8582c62Brian Paul   f = (__GLXextFuncPtr) _glapi_get_proc_address((const char *) procName);
1409e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul   return f;
1410e7d9d974712646fc41cde8d73e1fb3bf78655405Brian Paul}
1411ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul
1412ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul
1413ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul/* GLX 1.4 */
141473060ec7ebaa6a304402caa60610f94dac2cf24bBrian Paulvoid PUBLIC
141573060ec7ebaa6a304402caa60610f94dac2cf24bBrian Paul(*glXGetProcAddress(const GLubyte *procName))()
1416ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul{
1417ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul   return glXGetProcAddressARB(procName);
1418ba57e5297d60eef37e43dd4d7f10d1e62f5e97ceBrian Paul}
1419