blob: 18c9642c065e8e642623a92a5e44901dc104a5c9 [file] [log] [blame]
Brian Paulc7aeb8b2001-03-28 17:39:12 +00001/* $Id: glapi.c,v 1.53 2001/03/28 17:39:12 brianp Exp $ */
Brian Paulfbd8f211999-11-11 01:22:25 +00002
3/*
4 * Mesa 3-D graphics library
Brian Paul3a71d052000-09-05 20:17:37 +00005 * Version: 3.5
Brian Paulfbd8f211999-11-11 01:22:25 +00006 *
Brian Paulab0c8862001-01-23 23:35:47 +00007 * Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
Brian Paulfbd8f211999-11-11 01:22:25 +00008 *
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the "Software"),
11 * to deal in the Software without restriction, including without limitation
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
23 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 */
26
27
Brian Paul7e1161b1999-11-25 18:17:04 +000028/*
29 * This file manages the OpenGL API dispatch layer.
30 * The dispatch table (struct _glapi_table) is basically just a list
31 * of function pointers.
32 * There are functions to set/get the current dispatch table for the
33 * current thread and to manage registration/dispatch of dynamically
34 * added extension functions.
Brian Paul9f943992000-01-28 19:03:33 +000035 *
36 * It's intended that this file and the other glapi*.[ch] files are
37 * flexible enough to be reused in several places: XFree86, DRI-
38 * based libGL.so, and perhaps the SGI SI.
39 *
40 * There are no dependencies on Mesa in this code.
Brian Paulab0c8862001-01-23 23:35:47 +000041 *
42 * Versions (API changes):
43 * 2000/02/23 - original version for Mesa 3.3 and XFree86 4.0
44 * 2001/01/16 - added dispatch override feature for Mesa 3.5
Brian Paul7e1161b1999-11-25 18:17:04 +000045 */
46
47
48
Brian Paul3c27be32000-02-10 21:27:48 +000049#include "glheader.h"
Brian Paulfbd8f211999-11-11 01:22:25 +000050#include "glapi.h"
Brian Paul0c239fc1999-12-16 12:38:11 +000051#include "glapioffsets.h"
52#include "glapitable.h"
Brian Paul9f943992000-01-28 19:03:33 +000053#include "glthread.h"
Brian Paulbb72d321999-12-16 17:31:59 +000054
Brian Paul3c257e12001-03-28 17:19:58 +000055
56
57/***** BEGIN NO-OP DISPATCH *****/
58
59static GLboolean WarnFlag = GL_FALSE;
60
61void
62_glapi_noop_enable_warnings(GLboolean enable)
63{
64 WarnFlag = enable;
65}
66
67static GLboolean
68warn(void)
69{
70 if (WarnFlag || getenv("MESA_DEBUG") || getenv("LIBGL_DEBUG"))
71 return GL_TRUE;
72 else
73 return GL_FALSE;
74}
75
76
77#define KEYWORD1 static
78#define KEYWORD2
79#define NAME(func) NoOp##func
80
81#define F stderr
82
83#define DISPATCH(func, args, msg) \
84 if (warn()) { \
85 fprintf(stderr, "GL User Error: calling "); \
86 fprintf msg; \
87 fprintf(stderr, " without a current context\n"); \
88 }
89
90#define RETURN_DISPATCH(func, args, msg) \
91 if (warn()) { \
92 fprintf(stderr, "GL User Error: calling "); \
93 fprintf msg; \
94 fprintf(stderr, " without a current context\n"); \
95 } \
96 return 0
97
98#define DISPATCH_TABLE_NAME __glapi_noop_table
99#define UNUSED_TABLE_NAME __usused_noop_functions
100
101#define TABLE_ENTRY(name) (void *) NoOp##name
102
103static int NoOpUnused(void)
104{
105 if (warn()) {
106 fprintf(stderr, "GL User Error: calling extension function without a current context\n");
107 }
108 return 0;
109}
110
111#include "glapitemp.h"
112
113/***** END NO-OP DISPATCH *****/
114
115
116
117/***** BEGIN THREAD-SAFE DISPATCH *****/
118/* if we support thread-safety, build a special dispatch table for use
119 * in thread-safety mode (ThreadSafe == GL_TRUE). Each entry in the
120 * dispatch table will call _glthread_GetTSD() to get the actual dispatch
121 * table bound to the current thread, then jump through that table.
122 */
123
124#if defined(THREADS)
125
126static GLboolean ThreadSafe = GL_FALSE; /* In thread-safe mode? */
127static _glthread_TSD DispatchTSD; /* Per-thread dispatch pointer */
128static _glthread_TSD RealDispatchTSD; /* only when using override */
129static _glthread_TSD ContextTSD; /* Per-thread context pointer */
130
131
132#define KEYWORD1 static
133#define KEYWORD2 GLAPIENTRY
134#define NAME(func) _ts_##func
135
136#define DISPATCH(FUNC, ARGS, MESSAGE) \
137 struct _glapi_table *dispatch; \
138 dispatch = (struct _glapi_table *) _glthread_GetTSD(&DispatchTSD); \
139 if (!dispatch) \
140 dispatch = (struct _glapi_table *) __glapi_noop_table; \
141 (dispatch->FUNC) ARGS
142
143#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE) \
144 struct _glapi_table *dispatch; \
145 dispatch = (struct _glapi_table *) _glthread_GetTSD(&DispatchTSD); \
146 if (!dispatch) \
147 dispatch = (struct _glapi_table *) __glapi_noop_table; \
148 return (dispatch->FUNC) ARGS
149
150#define DISPATCH_TABLE_NAME __glapi_threadsafe_table
151#define UNUSED_TABLE_NAME __usused_threadsafe_functions
152
153#define TABLE_ENTRY(name) (void *) _ts_##name
154
155static int _ts_Unused(void)
156{
157 return 0;
158}
159
160#include "glapitemp.h"
161
162#endif
163
164/***** END THREAD-SAFE DISPATCH *****/
165
166
167
Brian Paul8ceb5c32000-02-24 22:14:04 +0000168struct _glapi_table *_glapi_Dispatch = (struct _glapi_table *) __glapi_noop_table;
Brian Paulab0c8862001-01-23 23:35:47 +0000169struct _glapi_table *_glapi_RealDispatch = (struct _glapi_table *) __glapi_noop_table;
Brian Paul0f710251999-12-15 15:02:30 +0000170
Brian Paul8f91fb61999-12-17 14:51:28 +0000171/* Used when thread safety disabled */
Brian Paulf9b97d92000-01-28 20:17:42 +0000172void *_glapi_Context = NULL;
Brian Paul8f91fb61999-12-17 14:51:28 +0000173
Brian Paul0f710251999-12-15 15:02:30 +0000174
Brian Paulbb72d321999-12-16 17:31:59 +0000175static GLuint MaxDispatchOffset = sizeof(struct _glapi_table) / sizeof(void *) - 1;
Brian Paul0f710251999-12-15 15:02:30 +0000176static GLboolean GetSizeCalled = GL_FALSE;
Brian Paulfbd8f211999-11-11 01:22:25 +0000177
Brian Paulab0c8862001-01-23 23:35:47 +0000178static GLboolean DispatchOverride = GL_FALSE;
179
180
Brian Paul3c257e12001-03-28 17:19:58 +0000181/* strdup() is actually not a standard ANSI C or POSIX routine.
182 * Irix will not define it if ANSI mode is in effect.
183 */
184static char *
185str_dup(const char *str)
Randy Frankd7361e12000-03-27 21:13:58 +0000186{
Brian Paulfffb8092000-03-29 18:46:11 +0000187 char *copy;
188 copy = (char*) malloc(strlen(str) + 1);
189 if (!copy)
190 return NULL;
191 strcpy(copy, str);
192 return copy;
Randy Frankd7361e12000-03-27 21:13:58 +0000193}
194
Brian Paul7fb54ae1999-11-19 22:33:50 +0000195
Brian Paulbb72d321999-12-16 17:31:59 +0000196
197/*
198 * We should call this periodically from a function such as glXMakeCurrent
199 * in order to test if multiple threads are being used. When we detect
200 * that situation we should then call _glapi_enable_thread_safety()
201 */
202void
203_glapi_check_multithread(void)
204{
205#if defined(THREADS)
Brian Paul26e14d22000-01-05 04:36:17 +0000206 if (!ThreadSafe) {
Brian Paulbb72d321999-12-16 17:31:59 +0000207 static unsigned long knownID;
208 static GLboolean firstCall = GL_TRUE;
209 if (firstCall) {
210 knownID = _glthread_GetID();
211 firstCall = GL_FALSE;
212 }
213 else if (knownID != _glthread_GetID()) {
Brian Paul26e14d22000-01-05 04:36:17 +0000214 ThreadSafe = GL_TRUE;
Brian Paulbb72d321999-12-16 17:31:59 +0000215 }
216 }
Brian Paul26e14d22000-01-05 04:36:17 +0000217 if (ThreadSafe) {
Brian Paulbb72d321999-12-16 17:31:59 +0000218 /* make sure that this thread's dispatch pointer isn't null */
219 if (!_glapi_get_dispatch()) {
220 _glapi_set_dispatch(NULL);
221 }
222 }
223#endif
224}
225
226
227
228/*
Brian Paul8f91fb61999-12-17 14:51:28 +0000229 * Set the current context pointer for this thread.
230 * The context pointer is an opaque type which should be cast to
231 * void from the real context pointer type.
232 */
233void
Brian Paulf9b97d92000-01-28 20:17:42 +0000234_glapi_set_context(void *context)
Brian Paul8f91fb61999-12-17 14:51:28 +0000235{
236#if defined(THREADS)
Brian Paul3c27be32000-02-10 21:27:48 +0000237 _glthread_SetTSD(&ContextTSD, context);
Brian Paul26e14d22000-01-05 04:36:17 +0000238 if (ThreadSafe)
Brian Paulf9b97d92000-01-28 20:17:42 +0000239 _glapi_Context = NULL;
Brian Paul8f91fb61999-12-17 14:51:28 +0000240 else
Brian Paulf9b97d92000-01-28 20:17:42 +0000241 _glapi_Context = context;
Brian Paul8f91fb61999-12-17 14:51:28 +0000242#else
Brian Paulf9b97d92000-01-28 20:17:42 +0000243 _glapi_Context = context;
Brian Paul8f91fb61999-12-17 14:51:28 +0000244#endif
245}
246
247
248
249/*
250 * Get the current context pointer for this thread.
251 * The context pointer is an opaque type which should be cast from
252 * void to the real context pointer type.
253 */
254void *
Brian Paulf9b97d92000-01-28 20:17:42 +0000255_glapi_get_context(void)
Brian Paul8f91fb61999-12-17 14:51:28 +0000256{
257#if defined(THREADS)
Brian Paul26e14d22000-01-05 04:36:17 +0000258 if (ThreadSafe) {
Brian Paul8f91fb61999-12-17 14:51:28 +0000259 return _glthread_GetTSD(&ContextTSD);
260 }
261 else {
Brian Paulf9b97d92000-01-28 20:17:42 +0000262 return _glapi_Context;
Brian Paul8f91fb61999-12-17 14:51:28 +0000263 }
264#else
Brian Paulf9b97d92000-01-28 20:17:42 +0000265 return _glapi_Context;
Brian Paul8f91fb61999-12-17 14:51:28 +0000266#endif
267}
268
269
270
271/*
Brian Paul7fb54ae1999-11-19 22:33:50 +0000272 * Set the global or per-thread dispatch table pointer.
273 */
274void
275_glapi_set_dispatch(struct _glapi_table *dispatch)
276{
277 if (!dispatch) {
278 /* use the no-op functions */
Brian Paul8ceb5c32000-02-24 22:14:04 +0000279 dispatch = (struct _glapi_table *) __glapi_noop_table;
Brian Paul7fb54ae1999-11-19 22:33:50 +0000280 }
281#ifdef DEBUG
282 else {
283 _glapi_check_table(dispatch);
284 }
285#endif
286
287#if defined(THREADS)
Brian Paulab0c8862001-01-23 23:35:47 +0000288 if (DispatchOverride) {
289 _glthread_SetTSD(&RealDispatchTSD, (void *) dispatch);
Brian Paul3a71d052000-09-05 20:17:37 +0000290 if (ThreadSafe)
Brian Paul3c257e12001-03-28 17:19:58 +0000291 _glapi_RealDispatch = (struct _glapi_table*) __glapi_threadsafe_table;
Brian Paul3a71d052000-09-05 20:17:37 +0000292 else
Brian Paulab0c8862001-01-23 23:35:47 +0000293 _glapi_RealDispatch = dispatch;
Brian Paul3b18a362000-09-26 15:27:20 +0000294 }
295 else {
Brian Paulab0c8862001-01-23 23:35:47 +0000296 /* normal operation */
Brian Paul3b18a362000-09-26 15:27:20 +0000297 _glthread_SetTSD(&DispatchTSD, (void *) dispatch);
Brian Paul3a71d052000-09-05 20:17:37 +0000298 if (ThreadSafe)
Brian Paul3c257e12001-03-28 17:19:58 +0000299 _glapi_Dispatch = (struct _glapi_table *) __glapi_threadsafe_table;
Brian Paul3a71d052000-09-05 20:17:37 +0000300 else
301 _glapi_Dispatch = dispatch;
302 }
Brian Paul3a71d052000-09-05 20:17:37 +0000303#else /*THREADS*/
Brian Paulab0c8862001-01-23 23:35:47 +0000304 if (DispatchOverride) {
305 _glapi_RealDispatch = dispatch;
306 }
307 else {
308 _glapi_Dispatch = dispatch;
309 }
Brian Paul3a71d052000-09-05 20:17:37 +0000310#endif /*THREADS*/
Brian Paul7fb54ae1999-11-19 22:33:50 +0000311}
312
313
Brian Paulbb72d321999-12-16 17:31:59 +0000314
Brian Paul7fb54ae1999-11-19 22:33:50 +0000315/*
Brian Paulbb72d321999-12-16 17:31:59 +0000316 * Return pointer to current dispatch table for calling thread.
Brian Paul7fb54ae1999-11-19 22:33:50 +0000317 */
318struct _glapi_table *
319_glapi_get_dispatch(void)
320{
321#if defined(THREADS)
Brian Paul26e14d22000-01-05 04:36:17 +0000322 if (ThreadSafe) {
Brian Paulab0c8862001-01-23 23:35:47 +0000323 if (DispatchOverride) {
324 return (struct _glapi_table *) _glthread_GetTSD(&RealDispatchTSD);
325 }
326 else {
327 return (struct _glapi_table *) _glthread_GetTSD(&DispatchTSD);
328 }
Brian Paulbb72d321999-12-16 17:31:59 +0000329 }
Brian Paul590d3471999-12-17 12:20:23 +0000330 else {
Brian Paulab0c8862001-01-23 23:35:47 +0000331 if (DispatchOverride) {
332 assert(_glapi_RealDispatch);
333 return _glapi_RealDispatch;
334 }
335 else {
336 assert(_glapi_Dispatch);
337 return _glapi_Dispatch;
338 }
Brian Paul590d3471999-12-17 12:20:23 +0000339 }
Brian Paul7fb54ae1999-11-19 22:33:50 +0000340#else
Brian Paulc2319b42000-01-17 19:28:31 +0000341 return _glapi_Dispatch;
Brian Paul7fb54ae1999-11-19 22:33:50 +0000342#endif
343}
344
345
Brian Paulab0c8862001-01-23 23:35:47 +0000346/*
347 * Notes on dispatch overrride:
348 *
349 * Dispatch override allows an external agent to hook into the GL dispatch
350 * mechanism before execution goes into the core rendering library. For
351 * example, a trace mechanism would insert itself as an overrider, print
352 * logging info for each GL function, then dispatch to the real GL function.
353 *
354 * libGLS (GL Stream library) is another agent that might use override.
355 *
356 * We don't allow more than one layer of overriding at this time.
357 * In the future we may allow nested/layered override. In that case
358 * _glapi_begin_dispatch_override() will return an override layer,
359 * _glapi_end_dispatch_override(layer) will remove an override layer
360 * and _glapi_get_override_dispatch(layer) will return the dispatch
361 * table for a given override layer. layer = 0 will be the "real"
362 * dispatch table.
363 */
364
365/*
366 * Return: dispatch override layer number.
367 */
368int
369_glapi_begin_dispatch_override(struct _glapi_table *override)
Brian Paul3a71d052000-09-05 20:17:37 +0000370{
Brian Paulab0c8862001-01-23 23:35:47 +0000371 struct _glapi_table *real = _glapi_get_dispatch();
372
373 assert(!DispatchOverride); /* can't nest at this time */
374 DispatchOverride = GL_TRUE;
375
376 _glapi_set_dispatch(real);
Brian Paul3a71d052000-09-05 20:17:37 +0000377
378#if defined(THREADS)
Brian Paulab0c8862001-01-23 23:35:47 +0000379 _glthread_SetTSD(&DispatchTSD, (void *) override);
380 if (ThreadSafe)
Brian Paul3c257e12001-03-28 17:19:58 +0000381 _glapi_Dispatch = (struct _glapi_table *) __glapi_threadsafe_table;
Brian Paulab0c8862001-01-23 23:35:47 +0000382 else
383 _glapi_Dispatch = override;
384#else
385 _glapi_Dispatch = override;
386#endif
387 return 1;
388}
389
390
391void
392_glapi_end_dispatch_override(int layer)
393{
394 struct _glapi_table *real = _glapi_get_dispatch();
395 (void) layer;
396 DispatchOverride = GL_FALSE;
397 _glapi_set_dispatch(real);
398 /* the rest of this isn't needed, just play it safe */
399#if defined(THREADS)
400 _glthread_SetTSD(&RealDispatchTSD, NULL);
401#endif
402 _glapi_RealDispatch = NULL;
403}
404
405
406struct _glapi_table *
407_glapi_get_override_dispatch(int layer)
408{
409 if (layer == 0) {
410 return _glapi_get_dispatch();
Brian Paul3a71d052000-09-05 20:17:37 +0000411 }
412 else {
Brian Paulab0c8862001-01-23 23:35:47 +0000413 if (DispatchOverride) {
414#if defined(THREADS)
415 return (struct _glapi_table *) _glthread_GetTSD(&DispatchTSD);
Brian Paul3a71d052000-09-05 20:17:37 +0000416#else
Brian Paulab0c8862001-01-23 23:35:47 +0000417 return _glapi_Dispatch;
Brian Paul3a71d052000-09-05 20:17:37 +0000418#endif
Brian Paulab0c8862001-01-23 23:35:47 +0000419 }
420 else {
421 return NULL;
422 }
423 }
Brian Paul3a71d052000-09-05 20:17:37 +0000424}
Brian Paulab0c8862001-01-23 23:35:47 +0000425
Brian Paul3a71d052000-09-05 20:17:37 +0000426
Brian Paul91bcefa1999-11-27 21:30:40 +0000427
428/*
429 * Return size of dispatch table struct as number of functions (or
430 * slots).
431 */
432GLuint
433_glapi_get_dispatch_table_size(void)
434{
Brian Paul0f710251999-12-15 15:02:30 +0000435 /* return sizeof(struct _glapi_table) / sizeof(void *);*/
436 GetSizeCalled = GL_TRUE;
437 return MaxDispatchOffset + 1;
Brian Paul91bcefa1999-11-27 21:30:40 +0000438}
439
440
441
Brian Paul7fb54ae1999-11-19 22:33:50 +0000442/*
443 * Get API dispatcher version string.
Brian Paul7fb54ae1999-11-19 22:33:50 +0000444 */
445const char *
446_glapi_get_version(void)
447{
Brian Paulab0c8862001-01-23 23:35:47 +0000448 return "20010116"; /* YYYYMMDD */
Brian Paul7fb54ae1999-11-19 22:33:50 +0000449}
450
451
Brian Paul0c239fc1999-12-16 12:38:11 +0000452/*
453 * For each entry in static_functions[] which use this function
454 * we should implement a dispatch function in glapitemp.h and
455 * in glapinoop.c
456 */
Brian Paulb3674092000-01-08 11:01:24 +0000457static int NotImplemented(void)
Brian Paul0c239fc1999-12-16 12:38:11 +0000458{
Brian Paulb3674092000-01-08 11:01:24 +0000459 return 0;
Brian Paul0c239fc1999-12-16 12:38:11 +0000460}
461
462
Brian Paul959f8022000-03-19 01:10:11 +0000463struct name_address_offset {
464 const char *Name;
465 GLvoid *Address;
466 GLuint Offset;
467};
468
Brian Paul0c239fc1999-12-16 12:38:11 +0000469
Brian Paul8ceb5c32000-02-24 22:14:04 +0000470static struct name_address_offset static_functions[] = {
Brian Paul0c239fc1999-12-16 12:38:11 +0000471 /* GL 1.1 */
Brian Paul8ceb5c32000-02-24 22:14:04 +0000472 { "glNewList", (GLvoid *) glNewList, _gloffset_NewList },
473 { "glEndList", (GLvoid *) glEndList, _gloffset_EndList },
474 { "glCallList", (GLvoid *) glCallList, _gloffset_CallList },
475 { "glCallLists", (GLvoid *) glCallLists, _gloffset_CallLists },
476 { "glDeleteLists", (GLvoid *) glDeleteLists, _gloffset_DeleteLists },
477 { "glGenLists", (GLvoid *) glGenLists, _gloffset_GenLists },
478 { "glListBase", (GLvoid *) glListBase, _gloffset_ListBase },
479 { "glBegin", (GLvoid *) glBegin, _gloffset_Begin },
480 { "glBitmap", (GLvoid *) glBitmap, _gloffset_Bitmap },
481 { "glColor3b", (GLvoid *) glColor3b, _gloffset_Color3b },
482 { "glColor3bv", (GLvoid *) glColor3bv, _gloffset_Color3bv },
483 { "glColor3d", (GLvoid *) glColor3d, _gloffset_Color3d },
484 { "glColor3dv", (GLvoid *) glColor3dv, _gloffset_Color3dv },
485 { "glColor3f", (GLvoid *) glColor3f, _gloffset_Color3f },
486 { "glColor3fv", (GLvoid *) glColor3fv, _gloffset_Color3fv },
487 { "glColor3i", (GLvoid *) glColor3i, _gloffset_Color3i },
488 { "glColor3iv", (GLvoid *) glColor3iv, _gloffset_Color3iv },
489 { "glColor3s", (GLvoid *) glColor3s, _gloffset_Color3s },
490 { "glColor3sv", (GLvoid *) glColor3sv, _gloffset_Color3sv },
491 { "glColor3ub", (GLvoid *) glColor3ub, _gloffset_Color3ub },
492 { "glColor3ubv", (GLvoid *) glColor3ubv, _gloffset_Color3ubv },
493 { "glColor3ui", (GLvoid *) glColor3ui, _gloffset_Color3ui },
494 { "glColor3uiv", (GLvoid *) glColor3uiv, _gloffset_Color3uiv },
495 { "glColor3us", (GLvoid *) glColor3us, _gloffset_Color3us },
496 { "glColor3usv", (GLvoid *) glColor3usv, _gloffset_Color3usv },
497 { "glColor4b", (GLvoid *) glColor4b, _gloffset_Color4b },
498 { "glColor4bv", (GLvoid *) glColor4bv, _gloffset_Color4bv },
499 { "glColor4d", (GLvoid *) glColor4d, _gloffset_Color4d },
500 { "glColor4dv", (GLvoid *) glColor4dv, _gloffset_Color4dv },
501 { "glColor4f", (GLvoid *) glColor4f, _gloffset_Color4f },
502 { "glColor4fv", (GLvoid *) glColor4fv, _gloffset_Color4fv },
503 { "glColor4i", (GLvoid *) glColor4i, _gloffset_Color4i },
504 { "glColor4iv", (GLvoid *) glColor4iv, _gloffset_Color4iv },
505 { "glColor4s", (GLvoid *) glColor4s, _gloffset_Color4s },
506 { "glColor4sv", (GLvoid *) glColor4sv, _gloffset_Color4sv },
507 { "glColor4ub", (GLvoid *) glColor4ub, _gloffset_Color4ub },
508 { "glColor4ubv", (GLvoid *) glColor4ubv, _gloffset_Color4ubv },
509 { "glColor4ui", (GLvoid *) glColor4ui, _gloffset_Color4ui },
510 { "glColor4uiv", (GLvoid *) glColor4uiv, _gloffset_Color4uiv },
511 { "glColor4us", (GLvoid *) glColor4us, _gloffset_Color4us },
512 { "glColor4usv", (GLvoid *) glColor4usv, _gloffset_Color4usv },
513 { "glEdgeFlag", (GLvoid *) glEdgeFlag, _gloffset_EdgeFlag },
514 { "glEdgeFlagv", (GLvoid *) glEdgeFlagv, _gloffset_EdgeFlagv },
515 { "glEnd", (GLvoid *) glEnd, _gloffset_End },
516 { "glIndexd", (GLvoid *) glIndexd, _gloffset_Indexd },
517 { "glIndexdv", (GLvoid *) glIndexdv, _gloffset_Indexdv },
518 { "glIndexf", (GLvoid *) glIndexf, _gloffset_Indexf },
519 { "glIndexfv", (GLvoid *) glIndexfv, _gloffset_Indexfv },
520 { "glIndexi", (GLvoid *) glIndexi, _gloffset_Indexi },
521 { "glIndexiv", (GLvoid *) glIndexiv, _gloffset_Indexiv },
522 { "glIndexs", (GLvoid *) glIndexs, _gloffset_Indexs },
523 { "glIndexsv", (GLvoid *) glIndexsv, _gloffset_Indexsv },
524 { "glNormal3b", (GLvoid *) glNormal3b, _gloffset_Normal3b },
525 { "glNormal3bv", (GLvoid *) glNormal3bv, _gloffset_Normal3bv },
526 { "glNormal3d", (GLvoid *) glNormal3d, _gloffset_Normal3d },
527 { "glNormal3dv", (GLvoid *) glNormal3dv, _gloffset_Normal3dv },
528 { "glNormal3f", (GLvoid *) glNormal3f, _gloffset_Normal3f },
529 { "glNormal3fv", (GLvoid *) glNormal3fv, _gloffset_Normal3fv },
530 { "glNormal3i", (GLvoid *) glNormal3i, _gloffset_Normal3i },
531 { "glNormal3iv", (GLvoid *) glNormal3iv, _gloffset_Normal3iv },
532 { "glNormal3s", (GLvoid *) glNormal3s, _gloffset_Normal3s },
533 { "glNormal3sv", (GLvoid *) glNormal3sv, _gloffset_Normal3sv },
534 { "glRasterPos2d", (GLvoid *) glRasterPos2d, _gloffset_RasterPos2d },
535 { "glRasterPos2dv", (GLvoid *) glRasterPos2dv, _gloffset_RasterPos2dv },
536 { "glRasterPos2f", (GLvoid *) glRasterPos2f, _gloffset_RasterPos2f },
537 { "glRasterPos2fv", (GLvoid *) glRasterPos2fv, _gloffset_RasterPos2fv },
538 { "glRasterPos2i", (GLvoid *) glRasterPos2i, _gloffset_RasterPos2i },
539 { "glRasterPos2iv", (GLvoid *) glRasterPos2iv, _gloffset_RasterPos2iv },
540 { "glRasterPos2s", (GLvoid *) glRasterPos2s, _gloffset_RasterPos2s },
541 { "glRasterPos2sv", (GLvoid *) glRasterPos2sv, _gloffset_RasterPos2sv },
542 { "glRasterPos3d", (GLvoid *) glRasterPos3d, _gloffset_RasterPos3d },
543 { "glRasterPos3dv", (GLvoid *) glRasterPos3dv, _gloffset_RasterPos3dv },
544 { "glRasterPos3f", (GLvoid *) glRasterPos3f, _gloffset_RasterPos3f },
545 { "glRasterPos3fv", (GLvoid *) glRasterPos3fv, _gloffset_RasterPos3fv },
546 { "glRasterPos3i", (GLvoid *) glRasterPos3i, _gloffset_RasterPos3i },
547 { "glRasterPos3iv", (GLvoid *) glRasterPos3iv, _gloffset_RasterPos3iv },
548 { "glRasterPos3s", (GLvoid *) glRasterPos3s, _gloffset_RasterPos3s },
549 { "glRasterPos3sv", (GLvoid *) glRasterPos3sv, _gloffset_RasterPos3sv },
550 { "glRasterPos4d", (GLvoid *) glRasterPos4d, _gloffset_RasterPos4d },
551 { "glRasterPos4dv", (GLvoid *) glRasterPos4dv, _gloffset_RasterPos4dv },
552 { "glRasterPos4f", (GLvoid *) glRasterPos4f, _gloffset_RasterPos4f },
553 { "glRasterPos4fv", (GLvoid *) glRasterPos4fv, _gloffset_RasterPos4fv },
554 { "glRasterPos4i", (GLvoid *) glRasterPos4i, _gloffset_RasterPos4i },
555 { "glRasterPos4iv", (GLvoid *) glRasterPos4iv, _gloffset_RasterPos4iv },
556 { "glRasterPos4s", (GLvoid *) glRasterPos4s, _gloffset_RasterPos4s },
557 { "glRasterPos4sv", (GLvoid *) glRasterPos4sv, _gloffset_RasterPos4sv },
558 { "glRectd", (GLvoid *) glRectd, _gloffset_Rectd },
559 { "glRectdv", (GLvoid *) glRectdv, _gloffset_Rectdv },
560 { "glRectf", (GLvoid *) glRectf, _gloffset_Rectf },
561 { "glRectfv", (GLvoid *) glRectfv, _gloffset_Rectfv },
562 { "glRecti", (GLvoid *) glRecti, _gloffset_Recti },
563 { "glRectiv", (GLvoid *) glRectiv, _gloffset_Rectiv },
564 { "glRects", (GLvoid *) glRects, _gloffset_Rects },
565 { "glRectsv", (GLvoid *) glRectsv, _gloffset_Rectsv },
566 { "glTexCoord1d", (GLvoid *) glTexCoord1d, _gloffset_TexCoord1d },
567 { "glTexCoord1dv", (GLvoid *) glTexCoord1dv, _gloffset_TexCoord1dv },
568 { "glTexCoord1f", (GLvoid *) glTexCoord1f, _gloffset_TexCoord1f },
569 { "glTexCoord1fv", (GLvoid *) glTexCoord1fv, _gloffset_TexCoord1fv },
570 { "glTexCoord1i", (GLvoid *) glTexCoord1i, _gloffset_TexCoord1i },
571 { "glTexCoord1iv", (GLvoid *) glTexCoord1iv, _gloffset_TexCoord1iv },
572 { "glTexCoord1s", (GLvoid *) glTexCoord1s, _gloffset_TexCoord1s },
573 { "glTexCoord1sv", (GLvoid *) glTexCoord1sv, _gloffset_TexCoord1sv },
574 { "glTexCoord2d", (GLvoid *) glTexCoord2d, _gloffset_TexCoord2d },
575 { "glTexCoord2dv", (GLvoid *) glTexCoord2dv, _gloffset_TexCoord2dv },
576 { "glTexCoord2f", (GLvoid *) glTexCoord2f, _gloffset_TexCoord2f },
577 { "glTexCoord2fv", (GLvoid *) glTexCoord2fv, _gloffset_TexCoord2fv },
578 { "glTexCoord2i", (GLvoid *) glTexCoord2i, _gloffset_TexCoord2i },
579 { "glTexCoord2iv", (GLvoid *) glTexCoord2iv, _gloffset_TexCoord2iv },
580 { "glTexCoord2s", (GLvoid *) glTexCoord2s, _gloffset_TexCoord2s },
581 { "glTexCoord2sv", (GLvoid *) glTexCoord2sv, _gloffset_TexCoord2sv },
582 { "glTexCoord3d", (GLvoid *) glTexCoord3d, _gloffset_TexCoord3d },
583 { "glTexCoord3dv", (GLvoid *) glTexCoord3dv, _gloffset_TexCoord3dv },
584 { "glTexCoord3f", (GLvoid *) glTexCoord3f, _gloffset_TexCoord3f },
585 { "glTexCoord3fv", (GLvoid *) glTexCoord3fv, _gloffset_TexCoord3fv },
586 { "glTexCoord3i", (GLvoid *) glTexCoord3i, _gloffset_TexCoord3i },
587 { "glTexCoord3iv", (GLvoid *) glTexCoord3iv, _gloffset_TexCoord3iv },
588 { "glTexCoord3s", (GLvoid *) glTexCoord3s, _gloffset_TexCoord3s },
589 { "glTexCoord3sv", (GLvoid *) glTexCoord3sv, _gloffset_TexCoord3sv },
590 { "glTexCoord4d", (GLvoid *) glTexCoord4d, _gloffset_TexCoord4d },
591 { "glTexCoord4dv", (GLvoid *) glTexCoord4dv, _gloffset_TexCoord4dv },
592 { "glTexCoord4f", (GLvoid *) glTexCoord4f, _gloffset_TexCoord4f },
593 { "glTexCoord4fv", (GLvoid *) glTexCoord4fv, _gloffset_TexCoord4fv },
594 { "glTexCoord4i", (GLvoid *) glTexCoord4i, _gloffset_TexCoord4i },
595 { "glTexCoord4iv", (GLvoid *) glTexCoord4iv, _gloffset_TexCoord4iv },
596 { "glTexCoord4s", (GLvoid *) glTexCoord4s, _gloffset_TexCoord4s },
597 { "glTexCoord4sv", (GLvoid *) glTexCoord4sv, _gloffset_TexCoord4sv },
598 { "glVertex2d", (GLvoid *) glVertex2d, _gloffset_Vertex2d },
599 { "glVertex2dv", (GLvoid *) glVertex2dv, _gloffset_Vertex2dv },
600 { "glVertex2f", (GLvoid *) glVertex2f, _gloffset_Vertex2f },
601 { "glVertex2fv", (GLvoid *) glVertex2fv, _gloffset_Vertex2fv },
602 { "glVertex2i", (GLvoid *) glVertex2i, _gloffset_Vertex2i },
603 { "glVertex2iv", (GLvoid *) glVertex2iv, _gloffset_Vertex2iv },
604 { "glVertex2s", (GLvoid *) glVertex2s, _gloffset_Vertex2s },
605 { "glVertex2sv", (GLvoid *) glVertex2sv, _gloffset_Vertex2sv },
606 { "glVertex3d", (GLvoid *) glVertex3d, _gloffset_Vertex3d },
607 { "glVertex3dv", (GLvoid *) glVertex3dv, _gloffset_Vertex3dv },
608 { "glVertex3f", (GLvoid *) glVertex3f, _gloffset_Vertex3f },
609 { "glVertex3fv", (GLvoid *) glVertex3fv, _gloffset_Vertex3fv },
610 { "glVertex3i", (GLvoid *) glVertex3i, _gloffset_Vertex3i },
611 { "glVertex3iv", (GLvoid *) glVertex3iv, _gloffset_Vertex3iv },
612 { "glVertex3s", (GLvoid *) glVertex3s, _gloffset_Vertex3s },
613 { "glVertex3sv", (GLvoid *) glVertex3sv, _gloffset_Vertex3sv },
614 { "glVertex4d", (GLvoid *) glVertex4d, _gloffset_Vertex4d },
615 { "glVertex4dv", (GLvoid *) glVertex4dv, _gloffset_Vertex4dv },
616 { "glVertex4f", (GLvoid *) glVertex4f, _gloffset_Vertex4f },
617 { "glVertex4fv", (GLvoid *) glVertex4fv, _gloffset_Vertex4fv },
618 { "glVertex4i", (GLvoid *) glVertex4i, _gloffset_Vertex4i },
619 { "glVertex4iv", (GLvoid *) glVertex4iv, _gloffset_Vertex4iv },
620 { "glVertex4s", (GLvoid *) glVertex4s, _gloffset_Vertex4s },
621 { "glVertex4sv", (GLvoid *) glVertex4sv, _gloffset_Vertex4sv },
622 { "glClipPlane", (GLvoid *) glClipPlane, _gloffset_ClipPlane },
623 { "glColorMaterial", (GLvoid *) glColorMaterial, _gloffset_ColorMaterial },
624 { "glCullFace", (GLvoid *) glCullFace, _gloffset_CullFace },
625 { "glFogf", (GLvoid *) glFogf, _gloffset_Fogf },
626 { "glFogfv", (GLvoid *) glFogfv, _gloffset_Fogfv },
627 { "glFogi", (GLvoid *) glFogi, _gloffset_Fogi },
628 { "glFogiv", (GLvoid *) glFogiv, _gloffset_Fogiv },
629 { "glFrontFace", (GLvoid *) glFrontFace, _gloffset_FrontFace },
630 { "glHint", (GLvoid *) glHint, _gloffset_Hint },
631 { "glLightf", (GLvoid *) glLightf, _gloffset_Lightf },
632 { "glLightfv", (GLvoid *) glLightfv, _gloffset_Lightfv },
633 { "glLighti", (GLvoid *) glLighti, _gloffset_Lighti },
634 { "glLightiv", (GLvoid *) glLightiv, _gloffset_Lightiv },
635 { "glLightModelf", (GLvoid *) glLightModelf, _gloffset_LightModelf },
636 { "glLightModelfv", (GLvoid *) glLightModelfv, _gloffset_LightModelfv },
637 { "glLightModeli", (GLvoid *) glLightModeli, _gloffset_LightModeli },
638 { "glLightModeliv", (GLvoid *) glLightModeliv, _gloffset_LightModeliv },
639 { "glLineStipple", (GLvoid *) glLineStipple, _gloffset_LineStipple },
640 { "glLineWidth", (GLvoid *) glLineWidth, _gloffset_LineWidth },
641 { "glMaterialf", (GLvoid *) glMaterialf, _gloffset_Materialf },
642 { "glMaterialfv", (GLvoid *) glMaterialfv, _gloffset_Materialfv },
643 { "glMateriali", (GLvoid *) glMateriali, _gloffset_Materiali },
644 { "glMaterialiv", (GLvoid *) glMaterialiv, _gloffset_Materialiv },
645 { "glPointSize", (GLvoid *) glPointSize, _gloffset_PointSize },
646 { "glPolygonMode", (GLvoid *) glPolygonMode, _gloffset_PolygonMode },
647 { "glPolygonStipple", (GLvoid *) glPolygonStipple, _gloffset_PolygonStipple },
648 { "glScissor", (GLvoid *) glScissor, _gloffset_Scissor },
649 { "glShadeModel", (GLvoid *) glShadeModel, _gloffset_ShadeModel },
650 { "glTexParameterf", (GLvoid *) glTexParameterf, _gloffset_TexParameterf },
651 { "glTexParameterfv", (GLvoid *) glTexParameterfv, _gloffset_TexParameterfv },
652 { "glTexParameteri", (GLvoid *) glTexParameteri, _gloffset_TexParameteri },
653 { "glTexParameteriv", (GLvoid *) glTexParameteriv, _gloffset_TexParameteriv },
654 { "glTexImage1D", (GLvoid *) glTexImage1D, _gloffset_TexImage1D },
655 { "glTexImage2D", (GLvoid *) glTexImage2D, _gloffset_TexImage2D },
656 { "glTexEnvf", (GLvoid *) glTexEnvf, _gloffset_TexEnvf },
657 { "glTexEnvfv", (GLvoid *) glTexEnvfv, _gloffset_TexEnvfv },
658 { "glTexEnvi", (GLvoid *) glTexEnvi, _gloffset_TexEnvi },
659 { "glTexEnviv", (GLvoid *) glTexEnviv, _gloffset_TexEnviv },
660 { "glTexGend", (GLvoid *) glTexGend, _gloffset_TexGend },
661 { "glTexGendv", (GLvoid *) glTexGendv, _gloffset_TexGendv },
662 { "glTexGenf", (GLvoid *) glTexGenf, _gloffset_TexGenf },
663 { "glTexGenfv", (GLvoid *) glTexGenfv, _gloffset_TexGenfv },
664 { "glTexGeni", (GLvoid *) glTexGeni, _gloffset_TexGeni },
665 { "glTexGeniv", (GLvoid *) glTexGeniv, _gloffset_TexGeniv },
666 { "glFeedbackBuffer", (GLvoid *) glFeedbackBuffer, _gloffset_FeedbackBuffer },
667 { "glSelectBuffer", (GLvoid *) glSelectBuffer, _gloffset_SelectBuffer },
668 { "glRenderMode", (GLvoid *) glRenderMode, _gloffset_RenderMode },
669 { "glInitNames", (GLvoid *) glInitNames, _gloffset_InitNames },
670 { "glLoadName", (GLvoid *) glLoadName, _gloffset_LoadName },
671 { "glPassThrough", (GLvoid *) glPassThrough, _gloffset_PassThrough },
672 { "glPopName", (GLvoid *) glPopName, _gloffset_PopName },
673 { "glPushName", (GLvoid *) glPushName, _gloffset_PushName },
674 { "glDrawBuffer", (GLvoid *) glDrawBuffer, _gloffset_DrawBuffer },
675 { "glClear", (GLvoid *) glClear, _gloffset_Clear },
676 { "glClearAccum", (GLvoid *) glClearAccum, _gloffset_ClearAccum },
677 { "glClearIndex", (GLvoid *) glClearIndex, _gloffset_ClearIndex },
678 { "glClearColor", (GLvoid *) glClearColor, _gloffset_ClearColor },
679 { "glClearStencil", (GLvoid *) glClearStencil, _gloffset_ClearStencil },
680 { "glClearDepth", (GLvoid *) glClearDepth, _gloffset_ClearDepth },
681 { "glStencilMask", (GLvoid *) glStencilMask, _gloffset_StencilMask },
682 { "glColorMask", (GLvoid *) glColorMask, _gloffset_ColorMask },
683 { "glDepthMask", (GLvoid *) glDepthMask, _gloffset_DepthMask },
684 { "glIndexMask", (GLvoid *) glIndexMask, _gloffset_IndexMask },
685 { "glAccum", (GLvoid *) glAccum, _gloffset_Accum },
686 { "glDisable", (GLvoid *) glDisable, _gloffset_Disable },
687 { "glEnable", (GLvoid *) glEnable, _gloffset_Enable },
688 { "glFinish", (GLvoid *) glFinish, _gloffset_Finish },
689 { "glFlush", (GLvoid *) glFlush, _gloffset_Flush },
690 { "glPopAttrib", (GLvoid *) glPopAttrib, _gloffset_PopAttrib },
691 { "glPushAttrib", (GLvoid *) glPushAttrib, _gloffset_PushAttrib },
692 { "glMap1d", (GLvoid *) glMap1d, _gloffset_Map1d },
693 { "glMap1f", (GLvoid *) glMap1f, _gloffset_Map1f },
694 { "glMap2d", (GLvoid *) glMap2d, _gloffset_Map2d },
695 { "glMap2f", (GLvoid *) glMap2f, _gloffset_Map2f },
696 { "glMapGrid1d", (GLvoid *) glMapGrid1d, _gloffset_MapGrid1d },
697 { "glMapGrid1f", (GLvoid *) glMapGrid1f, _gloffset_MapGrid1f },
698 { "glMapGrid2d", (GLvoid *) glMapGrid2d, _gloffset_MapGrid2d },
699 { "glMapGrid2f", (GLvoid *) glMapGrid2f, _gloffset_MapGrid2f },
700 { "glEvalCoord1d", (GLvoid *) glEvalCoord1d, _gloffset_EvalCoord1d },
701 { "glEvalCoord1dv", (GLvoid *) glEvalCoord1dv, _gloffset_EvalCoord1dv },
702 { "glEvalCoord1f", (GLvoid *) glEvalCoord1f, _gloffset_EvalCoord1f },
703 { "glEvalCoord1fv", (GLvoid *) glEvalCoord1fv, _gloffset_EvalCoord1fv },
704 { "glEvalCoord2d", (GLvoid *) glEvalCoord2d, _gloffset_EvalCoord2d },
705 { "glEvalCoord2dv", (GLvoid *) glEvalCoord2dv, _gloffset_EvalCoord2dv },
706 { "glEvalCoord2f", (GLvoid *) glEvalCoord2f, _gloffset_EvalCoord2f },
707 { "glEvalCoord2fv", (GLvoid *) glEvalCoord2fv, _gloffset_EvalCoord2fv },
708 { "glEvalMesh1", (GLvoid *) glEvalMesh1, _gloffset_EvalMesh1 },
709 { "glEvalPoint1", (GLvoid *) glEvalPoint1, _gloffset_EvalPoint1 },
710 { "glEvalMesh2", (GLvoid *) glEvalMesh2, _gloffset_EvalMesh2 },
711 { "glEvalPoint2", (GLvoid *) glEvalPoint2, _gloffset_EvalPoint2 },
712 { "glAlphaFunc", (GLvoid *) glAlphaFunc, _gloffset_AlphaFunc },
713 { "glBlendFunc", (GLvoid *) glBlendFunc, _gloffset_BlendFunc },
714 { "glLogicOp", (GLvoid *) glLogicOp, _gloffset_LogicOp },
715 { "glStencilFunc", (GLvoid *) glStencilFunc, _gloffset_StencilFunc },
716 { "glStencilOp", (GLvoid *) glStencilOp, _gloffset_StencilOp },
717 { "glDepthFunc", (GLvoid *) glDepthFunc, _gloffset_DepthFunc },
718 { "glPixelZoom", (GLvoid *) glPixelZoom, _gloffset_PixelZoom },
719 { "glPixelTransferf", (GLvoid *) glPixelTransferf, _gloffset_PixelTransferf },
720 { "glPixelTransferi", (GLvoid *) glPixelTransferi, _gloffset_PixelTransferi },
721 { "glPixelStoref", (GLvoid *) glPixelStoref, _gloffset_PixelStoref },
722 { "glPixelStorei", (GLvoid *) glPixelStorei, _gloffset_PixelStorei },
723 { "glPixelMapfv", (GLvoid *) glPixelMapfv, _gloffset_PixelMapfv },
724 { "glPixelMapuiv", (GLvoid *) glPixelMapuiv, _gloffset_PixelMapuiv },
725 { "glPixelMapusv", (GLvoid *) glPixelMapusv, _gloffset_PixelMapusv },
726 { "glReadBuffer", (GLvoid *) glReadBuffer, _gloffset_ReadBuffer },
727 { "glCopyPixels", (GLvoid *) glCopyPixels, _gloffset_CopyPixels },
728 { "glReadPixels", (GLvoid *) glReadPixels, _gloffset_ReadPixels },
729 { "glDrawPixels", (GLvoid *) glDrawPixels, _gloffset_DrawPixels },
730 { "glGetBooleanv", (GLvoid *) glGetBooleanv, _gloffset_GetBooleanv },
731 { "glGetClipPlane", (GLvoid *) glGetClipPlane, _gloffset_GetClipPlane },
732 { "glGetDoublev", (GLvoid *) glGetDoublev, _gloffset_GetDoublev },
733 { "glGetError", (GLvoid *) glGetError, _gloffset_GetError },
734 { "glGetFloatv", (GLvoid *) glGetFloatv, _gloffset_GetFloatv },
735 { "glGetIntegerv", (GLvoid *) glGetIntegerv, _gloffset_GetIntegerv },
736 { "glGetLightfv", (GLvoid *) glGetLightfv, _gloffset_GetLightfv },
737 { "glGetLightiv", (GLvoid *) glGetLightiv, _gloffset_GetLightiv },
738 { "glGetMapdv", (GLvoid *) glGetMapdv, _gloffset_GetMapdv },
739 { "glGetMapfv", (GLvoid *) glGetMapfv, _gloffset_GetMapfv },
740 { "glGetMapiv", (GLvoid *) glGetMapiv, _gloffset_GetMapiv },
741 { "glGetMaterialfv", (GLvoid *) glGetMaterialfv, _gloffset_GetMaterialfv },
742 { "glGetMaterialiv", (GLvoid *) glGetMaterialiv, _gloffset_GetMaterialiv },
743 { "glGetPixelMapfv", (GLvoid *) glGetPixelMapfv, _gloffset_GetPixelMapfv },
744 { "glGetPixelMapuiv", (GLvoid *) glGetPixelMapuiv, _gloffset_GetPixelMapuiv },
745 { "glGetPixelMapusv", (GLvoid *) glGetPixelMapusv, _gloffset_GetPixelMapusv },
746 { "glGetPolygonStipple", (GLvoid *) glGetPolygonStipple, _gloffset_GetPolygonStipple },
747 { "glGetString", (GLvoid *) glGetString, _gloffset_GetString },
748 { "glGetTexEnvfv", (GLvoid *) glGetTexEnvfv, _gloffset_GetTexEnvfv },
749 { "glGetTexEnviv", (GLvoid *) glGetTexEnviv, _gloffset_GetTexEnviv },
750 { "glGetTexGendv", (GLvoid *) glGetTexGendv, _gloffset_GetTexGendv },
751 { "glGetTexGenfv", (GLvoid *) glGetTexGenfv, _gloffset_GetTexGenfv },
752 { "glGetTexGeniv", (GLvoid *) glGetTexGeniv, _gloffset_GetTexGeniv },
753 { "glGetTexImage", (GLvoid *) glGetTexImage, _gloffset_GetTexImage },
754 { "glGetTexParameterfv", (GLvoid *) glGetTexParameterfv, _gloffset_GetTexParameterfv },
755 { "glGetTexParameteriv", (GLvoid *) glGetTexParameteriv, _gloffset_GetTexParameteriv },
756 { "glGetTexLevelParameterfv", (GLvoid *) glGetTexLevelParameterfv, _gloffset_GetTexLevelParameterfv },
757 { "glGetTexLevelParameteriv", (GLvoid *) glGetTexLevelParameteriv, _gloffset_GetTexLevelParameteriv },
758 { "glIsEnabled", (GLvoid *) glIsEnabled, _gloffset_IsEnabled },
759 { "glIsList", (GLvoid *) glIsList, _gloffset_IsList },
760 { "glDepthRange", (GLvoid *) glDepthRange, _gloffset_DepthRange },
761 { "glFrustum", (GLvoid *) glFrustum, _gloffset_Frustum },
762 { "glLoadIdentity", (GLvoid *) glLoadIdentity, _gloffset_LoadIdentity },
763 { "glLoadMatrixf", (GLvoid *) glLoadMatrixf, _gloffset_LoadMatrixf },
764 { "glLoadMatrixd", (GLvoid *) glLoadMatrixd, _gloffset_LoadMatrixd },
765 { "glMatrixMode", (GLvoid *) glMatrixMode, _gloffset_MatrixMode },
766 { "glMultMatrixf", (GLvoid *) glMultMatrixf, _gloffset_MultMatrixf },
767 { "glMultMatrixd", (GLvoid *) glMultMatrixd, _gloffset_MultMatrixd },
768 { "glOrtho", (GLvoid *) glOrtho, _gloffset_Ortho },
769 { "glPopMatrix", (GLvoid *) glPopMatrix, _gloffset_PopMatrix },
770 { "glPushMatrix", (GLvoid *) glPushMatrix, _gloffset_PushMatrix },
771 { "glRotated", (GLvoid *) glRotated, _gloffset_Rotated },
772 { "glRotatef", (GLvoid *) glRotatef, _gloffset_Rotatef },
773 { "glScaled", (GLvoid *) glScaled, _gloffset_Scaled },
774 { "glScalef", (GLvoid *) glScalef, _gloffset_Scalef },
775 { "glTranslated", (GLvoid *) glTranslated, _gloffset_Translated },
776 { "glTranslatef", (GLvoid *) glTranslatef, _gloffset_Translatef },
777 { "glViewport", (GLvoid *) glViewport, _gloffset_Viewport },
778 /* 1.1 */
779 { "glArrayElement", (GLvoid *) glArrayElement, _gloffset_ArrayElement },
780 { "glColorPointer", (GLvoid *) glColorPointer, _gloffset_ColorPointer },
781 { "glDisableClientState", (GLvoid *) glDisableClientState, _gloffset_DisableClientState },
782 { "glDrawArrays", (GLvoid *) glDrawArrays, _gloffset_DrawArrays },
783 { "glDrawElements", (GLvoid *) glDrawElements, _gloffset_DrawElements },
784 { "glEdgeFlagPointer", (GLvoid *) glEdgeFlagPointer, _gloffset_EdgeFlagPointer },
785 { "glEnableClientState", (GLvoid *) glEnableClientState, _gloffset_EnableClientState },
786 { "glGetPointerv", (GLvoid *) glGetPointerv, _gloffset_GetPointerv },
787 { "glIndexPointer", (GLvoid *) glIndexPointer, _gloffset_IndexPointer },
788 { "glInterleavedArrays", (GLvoid *) glInterleavedArrays, _gloffset_InterleavedArrays },
789 { "glNormalPointer", (GLvoid *) glNormalPointer, _gloffset_NormalPointer },
790 { "glTexCoordPointer", (GLvoid *) glTexCoordPointer, _gloffset_TexCoordPointer },
791 { "glVertexPointer", (GLvoid *) glVertexPointer, _gloffset_VertexPointer },
792 { "glPolygonOffset", (GLvoid *) glPolygonOffset, _gloffset_PolygonOffset },
793 { "glCopyTexImage1D", (GLvoid *) glCopyTexImage1D, _gloffset_CopyTexImage1D },
794 { "glCopyTexImage2D", (GLvoid *) glCopyTexImage2D, _gloffset_CopyTexImage2D },
795 { "glCopyTexSubImage1D", (GLvoid *) glCopyTexSubImage1D, _gloffset_CopyTexSubImage1D },
796 { "glCopyTexSubImage2D", (GLvoid *) glCopyTexSubImage2D, _gloffset_CopyTexSubImage2D },
797 { "glTexSubImage1D", (GLvoid *) glTexSubImage1D, _gloffset_TexSubImage1D },
798 { "glTexSubImage2D", (GLvoid *) glTexSubImage2D, _gloffset_TexSubImage2D },
799 { "glAreTexturesResident", (GLvoid *) glAreTexturesResident, _gloffset_AreTexturesResident },
800 { "glBindTexture", (GLvoid *) glBindTexture, _gloffset_BindTexture },
801 { "glDeleteTextures", (GLvoid *) glDeleteTextures, _gloffset_DeleteTextures },
802 { "glGenTextures", (GLvoid *) glGenTextures, _gloffset_GenTextures },
803 { "glIsTexture", (GLvoid *) glIsTexture, _gloffset_IsTexture },
804 { "glPrioritizeTextures", (GLvoid *) glPrioritizeTextures, _gloffset_PrioritizeTextures },
805 { "glIndexub", (GLvoid *) glIndexub, _gloffset_Indexub },
806 { "glIndexubv", (GLvoid *) glIndexubv, _gloffset_Indexubv },
807 { "glPopClientAttrib", (GLvoid *) glPopClientAttrib, _gloffset_PopClientAttrib },
808 { "glPushClientAttrib", (GLvoid *) glPushClientAttrib, _gloffset_PushClientAttrib },
809 /* 1.2 */
Brian Paul77aa8b92000-01-07 07:30:13 +0000810#ifdef GL_VERSION_1_2
Brian Paul44202462000-05-18 18:14:22 +0000811#define NAME(X) (GLvoid *) X
Brian Paul77aa8b92000-01-07 07:30:13 +0000812#else
813#define NAME(X) NotImplemented
814#endif
Brian Paul8ceb5c32000-02-24 22:14:04 +0000815 { "glBlendColor", (GLvoid *) NAME(glBlendColor), _gloffset_BlendColor },
816 { "glBlendEquation", (GLvoid *) NAME(glBlendEquation), _gloffset_BlendEquation },
817 { "glDrawRangeElements", (GLvoid *) NAME(glDrawRangeElements), _gloffset_DrawRangeElements },
818 { "glColorTable", (GLvoid *) NAME(glColorTable), _gloffset_ColorTable },
819 { "glColorTableParameterfv", (GLvoid *) NAME(glColorTableParameterfv), _gloffset_ColorTableParameterfv },
820 { "glColorTableParameteriv", (GLvoid *) NAME(glColorTableParameteriv), _gloffset_ColorTableParameteriv },
821 { "glCopyColorTable", (GLvoid *) NAME(glCopyColorTable), _gloffset_CopyColorTable },
822 { "glGetColorTable", (GLvoid *) NAME(glGetColorTable), _gloffset_GetColorTable },
823 { "glGetColorTableParameterfv", (GLvoid *) NAME(glGetColorTableParameterfv), _gloffset_GetColorTableParameterfv },
824 { "glGetColorTableParameteriv", (GLvoid *) NAME(glGetColorTableParameteriv), _gloffset_GetColorTableParameteriv },
825 { "glColorSubTable", (GLvoid *) NAME(glColorSubTable), _gloffset_ColorSubTable },
826 { "glCopyColorSubTable", (GLvoid *) NAME(glCopyColorSubTable), _gloffset_CopyColorSubTable },
827 { "glConvolutionFilter1D", (GLvoid *) NAME(glConvolutionFilter1D), _gloffset_ConvolutionFilter1D },
828 { "glConvolutionFilter2D", (GLvoid *) NAME(glConvolutionFilter2D), _gloffset_ConvolutionFilter2D },
829 { "glConvolutionParameterf", (GLvoid *) NAME(glConvolutionParameterf), _gloffset_ConvolutionParameterf },
830 { "glConvolutionParameterfv", (GLvoid *) NAME(glConvolutionParameterfv), _gloffset_ConvolutionParameterfv },
831 { "glConvolutionParameteri", (GLvoid *) NAME(glConvolutionParameteri), _gloffset_ConvolutionParameteri },
832 { "glConvolutionParameteriv", (GLvoid *) NAME(glConvolutionParameteriv), _gloffset_ConvolutionParameteriv },
833 { "glCopyConvolutionFilter1D", (GLvoid *) NAME(glCopyConvolutionFilter1D), _gloffset_CopyConvolutionFilter1D },
834 { "glCopyConvolutionFilter2D", (GLvoid *) NAME(glCopyConvolutionFilter2D), _gloffset_CopyConvolutionFilter2D },
835 { "glGetConvolutionFilter", (GLvoid *) NAME(glGetConvolutionFilter), _gloffset_GetConvolutionFilter },
836 { "glGetConvolutionParameterfv", (GLvoid *) NAME(glGetConvolutionParameterfv), _gloffset_GetConvolutionParameterfv },
837 { "glGetConvolutionParameteriv", (GLvoid *) NAME(glGetConvolutionParameteriv), _gloffset_GetConvolutionParameteriv },
838 { "glGetSeparableFilter", (GLvoid *) NAME(glGetSeparableFilter), _gloffset_GetSeparableFilter },
839 { "glSeparableFilter2D", (GLvoid *) NAME(glSeparableFilter2D), _gloffset_SeparableFilter2D },
840 { "glGetHistogram", (GLvoid *) NAME(glGetHistogram), _gloffset_GetHistogram },
841 { "glGetHistogramParameterfv", (GLvoid *) NAME(glGetHistogramParameterfv), _gloffset_GetHistogramParameterfv },
842 { "glGetHistogramParameteriv", (GLvoid *) NAME(glGetHistogramParameteriv), _gloffset_GetHistogramParameteriv },
843 { "glGetMinmax", (GLvoid *) NAME(glGetMinmax), _gloffset_GetMinmax },
844 { "glGetMinmaxParameterfv", (GLvoid *) NAME(glGetMinmaxParameterfv), _gloffset_GetMinmaxParameterfv },
845 { "glGetMinmaxParameteriv", (GLvoid *) NAME(glGetMinmaxParameteriv), _gloffset_GetMinmaxParameteriv },
846 { "glHistogram", (GLvoid *) NAME(glHistogram), _gloffset_Histogram },
847 { "glMinmax", (GLvoid *) NAME(glMinmax), _gloffset_Minmax },
848 { "glResetHistogram", (GLvoid *) NAME(glResetHistogram), _gloffset_ResetHistogram },
849 { "glResetMinmax", (GLvoid *) NAME(glResetMinmax), _gloffset_ResetMinmax },
850 { "glTexImage3D", (GLvoid *) NAME(glTexImage3D), _gloffset_TexImage3D },
851 { "glTexSubImage3D", (GLvoid *) NAME(glTexSubImage3D), _gloffset_TexSubImage3D },
852 { "glCopyTexSubImage3D", (GLvoid *) NAME(glCopyTexSubImage3D), _gloffset_CopyTexSubImage3D },
Brian Paul77aa8b92000-01-07 07:30:13 +0000853#undef NAME
Brian Paul91bcefa1999-11-27 21:30:40 +0000854
Brian Paul44202462000-05-18 18:14:22 +0000855 /* ARB 1. GL_ARB_multitexture */
Brian Paul77aa8b92000-01-07 07:30:13 +0000856#ifdef GL_ARB_multitexture
Brian Paul44202462000-05-18 18:14:22 +0000857#define NAME(X) (GLvoid *) X
Brian Paul77aa8b92000-01-07 07:30:13 +0000858#else
859#define NAME(X) NotImplemented
860#endif
Brian Paul8ceb5c32000-02-24 22:14:04 +0000861 { "glActiveTextureARB", (GLvoid *) NAME(glActiveTextureARB), _gloffset_ActiveTextureARB },
862 { "glClientActiveTextureARB", (GLvoid *) NAME(glClientActiveTextureARB), _gloffset_ClientActiveTextureARB },
863 { "glMultiTexCoord1dARB", (GLvoid *) NAME(glMultiTexCoord1dARB), _gloffset_MultiTexCoord1dARB },
864 { "glMultiTexCoord1dvARB", (GLvoid *) NAME(glMultiTexCoord1dvARB), _gloffset_MultiTexCoord1dvARB },
865 { "glMultiTexCoord1fARB", (GLvoid *) NAME(glMultiTexCoord1fARB), _gloffset_MultiTexCoord1fARB },
866 { "glMultiTexCoord1fvARB", (GLvoid *) NAME(glMultiTexCoord1fvARB), _gloffset_MultiTexCoord1fvARB },
867 { "glMultiTexCoord1iARB", (GLvoid *) NAME(glMultiTexCoord1iARB), _gloffset_MultiTexCoord1iARB },
868 { "glMultiTexCoord1ivARB", (GLvoid *) NAME(glMultiTexCoord1ivARB), _gloffset_MultiTexCoord1ivARB },
869 { "glMultiTexCoord1sARB", (GLvoid *) NAME(glMultiTexCoord1sARB), _gloffset_MultiTexCoord1sARB },
870 { "glMultiTexCoord1svARB", (GLvoid *) NAME(glMultiTexCoord1svARB), _gloffset_MultiTexCoord1svARB },
871 { "glMultiTexCoord2dARB", (GLvoid *) NAME(glMultiTexCoord2dARB), _gloffset_MultiTexCoord2dARB },
872 { "glMultiTexCoord2dvARB", (GLvoid *) NAME(glMultiTexCoord2dvARB), _gloffset_MultiTexCoord2dvARB },
873 { "glMultiTexCoord2fARB", (GLvoid *) NAME(glMultiTexCoord2fARB), _gloffset_MultiTexCoord2fARB },
874 { "glMultiTexCoord2fvARB", (GLvoid *) NAME(glMultiTexCoord2fvARB), _gloffset_MultiTexCoord2fvARB },
875 { "glMultiTexCoord2iARB", (GLvoid *) NAME(glMultiTexCoord2iARB), _gloffset_MultiTexCoord2iARB },
876 { "glMultiTexCoord2ivARB", (GLvoid *) NAME(glMultiTexCoord2ivARB), _gloffset_MultiTexCoord2ivARB },
877 { "glMultiTexCoord2sARB", (GLvoid *) NAME(glMultiTexCoord2sARB), _gloffset_MultiTexCoord2sARB },
878 { "glMultiTexCoord2svARB", (GLvoid *) NAME(glMultiTexCoord2svARB), _gloffset_MultiTexCoord2svARB },
879 { "glMultiTexCoord3dARB", (GLvoid *) NAME(glMultiTexCoord3dARB), _gloffset_MultiTexCoord3dARB },
880 { "glMultiTexCoord3dvARB", (GLvoid *) NAME(glMultiTexCoord3dvARB), _gloffset_MultiTexCoord3dvARB },
881 { "glMultiTexCoord3fARB", (GLvoid *) NAME(glMultiTexCoord3fARB), _gloffset_MultiTexCoord3fARB },
882 { "glMultiTexCoord3fvARB", (GLvoid *) NAME(glMultiTexCoord3fvARB), _gloffset_MultiTexCoord3fvARB },
883 { "glMultiTexCoord3iARB", (GLvoid *) NAME(glMultiTexCoord3iARB), _gloffset_MultiTexCoord3iARB },
884 { "glMultiTexCoord3ivARB", (GLvoid *) NAME(glMultiTexCoord3ivARB), _gloffset_MultiTexCoord3ivARB },
885 { "glMultiTexCoord3sARB", (GLvoid *) NAME(glMultiTexCoord3sARB), _gloffset_MultiTexCoord3sARB },
886 { "glMultiTexCoord3svARB", (GLvoid *) NAME(glMultiTexCoord3svARB), _gloffset_MultiTexCoord3svARB },
887 { "glMultiTexCoord4dARB", (GLvoid *) NAME(glMultiTexCoord4dARB), _gloffset_MultiTexCoord4dARB },
888 { "glMultiTexCoord4dvARB", (GLvoid *) NAME(glMultiTexCoord4dvARB), _gloffset_MultiTexCoord4dvARB },
889 { "glMultiTexCoord4fARB", (GLvoid *) NAME(glMultiTexCoord4fARB), _gloffset_MultiTexCoord4fARB },
890 { "glMultiTexCoord4fvARB", (GLvoid *) NAME(glMultiTexCoord4fvARB), _gloffset_MultiTexCoord4fvARB },
891 { "glMultiTexCoord4iARB", (GLvoid *) NAME(glMultiTexCoord4iARB), _gloffset_MultiTexCoord4iARB },
892 { "glMultiTexCoord4ivARB", (GLvoid *) NAME(glMultiTexCoord4ivARB), _gloffset_MultiTexCoord4ivARB },
893 { "glMultiTexCoord4sARB", (GLvoid *) NAME(glMultiTexCoord4sARB), _gloffset_MultiTexCoord4sARB },
894 { "glMultiTexCoord4svARB", (GLvoid *) NAME(glMultiTexCoord4svARB), _gloffset_MultiTexCoord4svARB },
Brian Paul77aa8b92000-01-07 07:30:13 +0000895#undef NAME
Brian Paul91bcefa1999-11-27 21:30:40 +0000896
Brian Paul44202462000-05-18 18:14:22 +0000897 /* ARB 3. GL_ARB_transpose_matrix */
Brian Paul77aa8b92000-01-07 07:30:13 +0000898#ifdef GL_ARB_transpose_matrix
Brian Paul44202462000-05-18 18:14:22 +0000899#define NAME(X) (GLvoid *) X
Brian Paul77aa8b92000-01-07 07:30:13 +0000900#else
901#define NAME(X) NotImplemented
902#endif
Brian Paul8ceb5c32000-02-24 22:14:04 +0000903 { "glLoadTransposeMatrixdARB", (GLvoid *) NAME(glLoadTransposeMatrixdARB), _gloffset_LoadTransposeMatrixdARB },
904 { "glLoadTransposeMatrixfARB", (GLvoid *) NAME(glLoadTransposeMatrixfARB), _gloffset_LoadTransposeMatrixfARB },
905 { "glMultTransposeMatrixdARB", (GLvoid *) NAME(glMultTransposeMatrixdARB), _gloffset_MultTransposeMatrixdARB },
906 { "glMultTransposeMatrixfARB", (GLvoid *) NAME(glMultTransposeMatrixfARB), _gloffset_MultTransposeMatrixfARB },
Brian Paul77aa8b92000-01-07 07:30:13 +0000907#undef NAME
908
Brian Paul44202462000-05-18 18:14:22 +0000909 /* ARB 5. GL_ARB_multisample */
Brian Paul8ceb5c32000-02-24 22:14:04 +0000910#ifdef GL_ARB_multisample
Brian Paul44202462000-05-18 18:14:22 +0000911#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000912#else
Brian Paul44202462000-05-18 18:14:22 +0000913#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000914#endif
Brian Paul44202462000-05-18 18:14:22 +0000915 { "glSamplePassARB", NAME(glSamplePassARB), _gloffset_SamplePassARB },
916 { "glSampleCoverageARB", NAME(glSampleCoverageARB), _gloffset_SampleCoverageARB },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000917#undef NAME
918
Brian Paul44202462000-05-18 18:14:22 +0000919 /* ARB 12. GL_ARB_texture_compression */
920#if 000
921#if defined(GL_ARB_texture_compression) && defined(_gloffset_CompressedTexImage3DARB)
922#define NAME(X) (GLvoid *) X
923#else
924#define NAME(X) (GLvoid *) NotImplemented
925#endif
926 { "glCompressedTexImage3DARB", NAME(glCompressedTexImage3DARB), _gloffset_CompressedTexImage3DARB },
927 { "glCompressedTexImage2DARB", NAME(glCompressedTexImage2DARB), _gloffset_CompressedTexImage2DARB },
928 { "glCompressedTexImage1DARB", NAME(glCompressedTexImage1DARB), _gloffset_CompressedTexImage1DARB },
929 { "glCompressedTexSubImage3DARB", NAME(glCompressedTexSubImage3DARB), _gloffset_CompressedTexSubImage3DARB },
930 { "glCompressedTexSubImage2DARB", NAME(glCompressedTexSubImage2DARB), _gloffset_CompressedTexSubImage2DARB },
931 { "glCompressedTexSubImage1DARB", NAME(glCompressedTexSubImage1DARB), _gloffset_CompressedTexSubImage1DARB },
932 { "glGetCompressedTexImageARB", NAME(glGetCompressedTexImageARB), _gloffset_GetCompressedTexImageARB },
933#undef NAME
934#endif
935
Brian Paul8ceb5c32000-02-24 22:14:04 +0000936 /* 2. GL_EXT_blend_color */
937#ifdef GL_EXT_blend_color
Brian Paul44202462000-05-18 18:14:22 +0000938#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000939#else
Brian Paul44202462000-05-18 18:14:22 +0000940#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000941#endif
Brian Paul44202462000-05-18 18:14:22 +0000942 { "glBlendColorEXT", NAME(glBlendColorEXT), _gloffset_BlendColor },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000943#undef NAME
944
945 /* 3. GL_EXT_polygon_offset */
946#ifdef GL_EXT_polygon_offset
Brian Paul44202462000-05-18 18:14:22 +0000947#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000948#else
Brian Paul44202462000-05-18 18:14:22 +0000949#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000950#endif
Brian Paul44202462000-05-18 18:14:22 +0000951 { "glPolygonOffsetEXT", NAME(glPolygonOffsetEXT), _gloffset_PolygonOffsetEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000952#undef NAME
953
954 /* 6. GL_EXT_texture3D */
955#ifdef GL_EXT_texture3D
Brian Paul44202462000-05-18 18:14:22 +0000956#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000957#else
Brian Paul44202462000-05-18 18:14:22 +0000958#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000959#endif
Brian Paul44202462000-05-18 18:14:22 +0000960 { "glCopyTexSubImage3DEXT", NAME(glCopyTexSubImage3DEXT), _gloffset_CopyTexSubImage3D },
961 { "glTexImage3DEXT", NAME(glTexImage3DEXT), _gloffset_TexImage3D },
962 { "glTexSubImage3DEXT", NAME(glTexSubImage3DEXT), _gloffset_TexSubImage3D },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000963#undef NAME
964
965 /* 7. GL_SGI_texture_filter4 */
966#ifdef GL_SGI_texture_filter4
Brian Paul44202462000-05-18 18:14:22 +0000967#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000968#else
Brian Paul44202462000-05-18 18:14:22 +0000969#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000970#endif
Brian Paul44202462000-05-18 18:14:22 +0000971 { "glGetTexFilterFuncSGIS", NAME(glGetTexFilterFuncSGIS), _gloffset_GetTexFilterFuncSGIS },
972 { "glTexFilterFuncSGIS", NAME(glTexFilterFuncSGIS), _gloffset_TexFilterFuncSGIS },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000973#undef NAME
974
975 /* 9. GL_EXT_subtexture */
976#ifdef GL_EXT_subtexture
Brian Paul44202462000-05-18 18:14:22 +0000977#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000978#else
Brian Paul44202462000-05-18 18:14:22 +0000979#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000980#endif
Brian Paul44202462000-05-18 18:14:22 +0000981 { "glTexSubImage1DEXT", NAME(glTexSubImage1DEXT), _gloffset_TexSubImage1D },
982 { "glTexSubImage2DEXT", NAME(glTexSubImage2DEXT), _gloffset_TexSubImage2D },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000983#undef NAME
984
985 /* 10. GL_EXT_copy_texture */
986#ifdef GL_EXT_copy_texture
Brian Paul44202462000-05-18 18:14:22 +0000987#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000988#else
Brian Paul44202462000-05-18 18:14:22 +0000989#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000990#endif
Brian Paul44202462000-05-18 18:14:22 +0000991 { "glCopyTexImage1DEXT", NAME(glCopyTexImage1DEXT), _gloffset_CopyTexImage1D },
992 { "glCopyTexImage2DEXT", NAME(glCopyTexImage2DEXT), _gloffset_CopyTexImage2D },
993 { "glCopyTexSubImage1DEXT", NAME(glCopyTexSubImage1DEXT), _gloffset_CopyTexSubImage1D },
994 { "glCopyTexSubImage2DEXT", NAME(glCopyTexSubImage2DEXT), _gloffset_CopyTexSubImage2D },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000995#undef NAME
Jouk Jansen5e3bc0c2000-11-22 07:32:16 +0000996
Brian Paul8ceb5c32000-02-24 22:14:04 +0000997 /* 11. GL_EXT_histogram */
998#ifdef GL_EXT_histogram
Brian Paul44202462000-05-18 18:14:22 +0000999#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001000#else
Brian Paul44202462000-05-18 18:14:22 +00001001#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001002#endif
Brian Paul44202462000-05-18 18:14:22 +00001003 { "glGetHistogramEXT", NAME(glGetHistogramEXT), _gloffset_GetHistogramEXT },
1004 { "glGetHistogramParameterfvEXT", NAME(glGetHistogramParameterfvEXT), _gloffset_GetHistogramParameterfvEXT },
1005 { "glGetHistogramParameterivEXT", NAME(glGetHistogramParameterivEXT), _gloffset_GetHistogramParameterivEXT },
1006 { "glGetMinmaxEXT", NAME(glGetMinmaxEXT), _gloffset_GetMinmaxEXT },
1007 { "glGetMinmaxParameterfvEXT", NAME(glGetMinmaxParameterfvEXT), _gloffset_GetMinmaxParameterfvEXT },
1008 { "glGetMinmaxParameterivEXT", NAME(glGetMinmaxParameterivEXT), _gloffset_GetMinmaxParameterivEXT },
1009 { "glHistogramEXT", NAME(glHistogramEXT), _gloffset_Histogram },
1010 { "glMinmaxEXT", NAME(glMinmaxEXT), _gloffset_Minmax },
1011 { "glResetHistogramEXT", NAME(glResetHistogramEXT), _gloffset_ResetHistogram },
1012 { "glResetMinmaxEXT", NAME(glResetMinmaxEXT), _gloffset_ResetMinmax },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001013#undef NAME
1014
1015 /* 12. GL_EXT_convolution */
1016#ifdef GL_EXT_convolution
Brian Paul44202462000-05-18 18:14:22 +00001017#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001018#else
Brian Paul44202462000-05-18 18:14:22 +00001019#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001020#endif
Brian Paul44202462000-05-18 18:14:22 +00001021 { "glConvolutionFilter1DEXT", NAME(glConvolutionFilter1DEXT), _gloffset_ConvolutionFilter1D },
1022 { "glConvolutionFilter2DEXT", NAME(glConvolutionFilter2DEXT), _gloffset_ConvolutionFilter2D },
1023 { "glConvolutionParameterfEXT", NAME(glConvolutionParameterfEXT), _gloffset_ConvolutionParameterf },
1024 { "glConvolutionParameterfvEXT", NAME(glConvolutionParameterfvEXT), _gloffset_ConvolutionParameterfv },
1025 { "glConvolutionParameteriEXT", NAME(glConvolutionParameteriEXT), _gloffset_ConvolutionParameteri },
1026 { "glConvolutionParameterivEXT", NAME(glConvolutionParameterivEXT), _gloffset_ConvolutionParameteriv },
1027 { "glCopyConvolutionFilter1DEXT", NAME(glCopyConvolutionFilter1DEXT), _gloffset_CopyConvolutionFilter1D },
1028 { "glCopyConvolutionFilter2DEXT", NAME(glCopyConvolutionFilter2DEXT), _gloffset_CopyConvolutionFilter2D },
1029 { "glGetConvolutionFilterEXT", NAME(glGetConvolutionFilterEXT), _gloffset_GetConvolutionFilterEXT },
1030 { "glGetConvolutionParameterivEXT", NAME(glGetConvolutionParameterivEXT), _gloffset_GetConvolutionParameterivEXT },
1031 { "glGetConvolutionParameterfvEXT", NAME(glGetConvolutionParameterfvEXT), _gloffset_GetConvolutionParameterfvEXT },
1032 { "glGetSeparableFilterEXT", NAME(glGetSeparableFilterEXT), _gloffset_GetSeparableFilterEXT },
1033 { "glSeparableFilter2DEXT", NAME(glSeparableFilter2DEXT), _gloffset_SeparableFilter2D },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001034#undef NAME
Jouk Jansen5e3bc0c2000-11-22 07:32:16 +00001035
Brian Paul8ceb5c32000-02-24 22:14:04 +00001036 /* 14. GL_SGI_color_table */
1037#ifdef GL_SGI_color_table
Brian Paul44202462000-05-18 18:14:22 +00001038#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001039#else
Brian Paul44202462000-05-18 18:14:22 +00001040#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001041#endif
Brian Paul44202462000-05-18 18:14:22 +00001042 { "glColorTableSGI", NAME(glColorTableSGI), _gloffset_ColorTable },
1043 { "glColorTableParameterfvSGI", NAME(glColorTableParameterfvSGI), _gloffset_ColorTableParameterfv },
1044 { "glColorTableParameterivSGI", NAME(glColorTableParameterivSGI), _gloffset_ColorTableParameteriv },
1045 { "glCopyColorTableSGI", NAME(glCopyColorTableSGI), _gloffset_CopyColorTable },
1046 { "glGetColorTableSGI", NAME(glGetColorTableSGI), _gloffset_GetColorTableSGI },
1047 { "glGetColorTableParameterfvSGI", NAME(glGetColorTableParameterfvSGI), _gloffset_GetColorTableParameterfvSGI },
1048 { "glGetColorTableParameterivSGI", NAME(glGetColorTableParameterivSGI), _gloffset_GetColorTableParameterivSGI },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001049#undef NAME
1050
1051 /* 15. GL_SGIS_pixel_texture */
1052#ifdef GL_SGIS_pixel_texture
Brian Paul44202462000-05-18 18:14:22 +00001053#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001054#else
Brian Paul44202462000-05-18 18:14:22 +00001055#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001056#endif
Brian Paul44202462000-05-18 18:14:22 +00001057 { "glPixelTexGenParameterfSGIS", NAME(glPixelTexGenParameterfSGIS), _gloffset_PixelTexGenParameterfSGIS },
1058 { "glPixelTexGenParameteriSGIS", NAME(glPixelTexGenParameteriSGIS), _gloffset_PixelTexGenParameteriSGIS },
1059 { "glGetPixelTexGenParameterfvSGIS", NAME(glGetPixelTexGenParameterfvSGIS), _gloffset_GetPixelTexGenParameterfvSGIS },
1060 { "glGetPixelTexGenParameterivSGIS", NAME(glGetPixelTexGenParameterivSGIS), _gloffset_GetPixelTexGenParameterivSGIS },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001061#undef NAME
1062
1063 /* 16. GL_SGIS_texture4D */
1064#ifdef GL_SGIS_texture4D
Brian Paul44202462000-05-18 18:14:22 +00001065#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001066#else
Brian Paul44202462000-05-18 18:14:22 +00001067#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001068#endif
Brian Paul44202462000-05-18 18:14:22 +00001069 { "glTexImage4DSGIS", NAME(glTexImage4DSGIS), _gloffset_TexImage4DSGIS },
1070 { "glTexSubImage4DSGIS", NAME(glTexSubImage4DSGIS), _gloffset_TexSubImage4DSGIS },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001071#undef NAME
1072
1073 /* 20. GL_EXT_texture_object */
1074#ifdef GL_EXT_texture_object
Brian Paul44202462000-05-18 18:14:22 +00001075#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001076#else
Brian Paul44202462000-05-18 18:14:22 +00001077#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001078#endif
Brian Paul44202462000-05-18 18:14:22 +00001079 { "glAreTexturesResidentEXT", NAME(glAreTexturesResidentEXT), _gloffset_AreTexturesResidentEXT },
1080 { "glBindTextureEXT", NAME(glBindTextureEXT), _gloffset_BindTexture },
1081 { "glDeleteTexturesEXT", NAME(glDeleteTexturesEXT), _gloffset_DeleteTextures },
1082 { "glGenTexturesEXT", NAME(glGenTexturesEXT), _gloffset_GenTexturesEXT },
1083 { "glIsTextureEXT", NAME(glIsTextureEXT), _gloffset_IsTextureEXT },
1084 { "glPrioritizeTexturesEXT", NAME(glPrioritizeTexturesEXT), _gloffset_PrioritizeTextures },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001085#undef NAME
1086
1087 /* 21. GL_SGIS_detail_texture */
1088#ifdef GL_SGIS_detail_texture
Brian Paul44202462000-05-18 18:14:22 +00001089#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001090#else
Brian Paul44202462000-05-18 18:14:22 +00001091#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001092#endif
Brian Paul44202462000-05-18 18:14:22 +00001093 { "glDetailTexFuncSGIS", NAME(glDetailTexFuncSGIS), _gloffset_DetailTexFuncSGIS },
1094 { "glGetDetailTexFuncSGIS", NAME(glGetDetailTexFuncSGIS), _gloffset_GetDetailTexFuncSGIS },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001095#undef NAME
1096
1097 /* 22. GL_SGIS_sharpen_texture */
1098#ifdef GL_SGIS_sharpen_texture
Brian Paul44202462000-05-18 18:14:22 +00001099#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001100#else
Brian Paul44202462000-05-18 18:14:22 +00001101#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001102#endif
Brian Paul44202462000-05-18 18:14:22 +00001103 { "glGetSharpenTexFuncSGIS", NAME(glGetSharpenTexFuncSGIS), _gloffset_GetSharpenTexFuncSGIS },
1104 { "glSharpenTexFuncSGIS", NAME(glSharpenTexFuncSGIS), _gloffset_SharpenTexFuncSGIS },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001105#undef NAME
1106
1107 /* 25. GL_SGIS_multisample */
1108#ifdef GL_SGIS_multisample
Brian Paul44202462000-05-18 18:14:22 +00001109#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001110#else
Brian Paul44202462000-05-18 18:14:22 +00001111#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001112#endif
Brian Paul44202462000-05-18 18:14:22 +00001113 { "glSampleMaskSGIS", NAME(glSampleMaskSGIS), _gloffset_SampleMaskSGIS },
1114 { "glSamplePatternSGIS", NAME(glSamplePatternSGIS), _gloffset_SamplePatternSGIS },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001115#undef NAME
1116
1117 /* 30. GL_EXT_vertex_array */
1118#ifdef GL_EXT_vertex_array
Brian Paul44202462000-05-18 18:14:22 +00001119#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001120#else
Brian Paul44202462000-05-18 18:14:22 +00001121#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001122#endif
Brian Paul44202462000-05-18 18:14:22 +00001123 { "glArrayElementEXT", NAME(glArrayElementEXT), _gloffset_ArrayElement },
1124 { "glColorPointerEXT", NAME(glColorPointerEXT), _gloffset_ColorPointerEXT },
1125 { "glDrawArraysEXT", NAME(glDrawArraysEXT), _gloffset_DrawArrays },
1126 { "glEdgeFlagPointerEXT", NAME(glEdgeFlagPointerEXT), _gloffset_EdgeFlagPointerEXT },
1127 { "glGetPointervEXT", NAME(glGetPointervEXT), _gloffset_GetPointerv },
1128 { "glIndexPointerEXT", NAME(glIndexPointerEXT), _gloffset_IndexPointerEXT },
1129 { "glNormalPointerEXT", NAME(glNormalPointerEXT), _gloffset_NormalPointerEXT },
1130 { "glTexCoordPointerEXT", NAME(glTexCoordPointerEXT), _gloffset_TexCoordPointerEXT },
1131 { "glVertexPointerEXT", NAME(glVertexPointerEXT), _gloffset_VertexPointerEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001132#undef NAME
1133
1134 /* 37. GL_EXT_blend_minmax */
1135#ifdef GL_EXT_blend_minmax
Brian Paul44202462000-05-18 18:14:22 +00001136#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001137#else
Brian Paul44202462000-05-18 18:14:22 +00001138#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001139#endif
Brian Paul44202462000-05-18 18:14:22 +00001140 { "glBlendEquationEXT", NAME(glBlendEquationEXT), _gloffset_BlendEquation },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001141#undef NAME
1142
1143 /* 52. GL_SGIX_sprite */
1144#ifdef GL_SGIX_sprite
Brian Paul44202462000-05-18 18:14:22 +00001145#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001146#else
Brian Paul44202462000-05-18 18:14:22 +00001147#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001148#endif
Brian Paul44202462000-05-18 18:14:22 +00001149 { "glSpriteParameterfSGIX", NAME(glSpriteParameterfSGIX), _gloffset_SpriteParameterfSGIX },
1150 { "glSpriteParameterfvSGIX", NAME(glSpriteParameterfvSGIX), _gloffset_SpriteParameterfvSGIX },
1151 { "glSpriteParameteriSGIX", NAME(glSpriteParameteriSGIX), _gloffset_SpriteParameteriSGIX },
1152 { "glSpriteParameterivSGIX", NAME(glSpriteParameterivSGIX), _gloffset_SpriteParameterivSGIX },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001153#undef NAME
1154
1155 /* 54. GL_EXT_point_parameters */
1156#ifdef GL_EXT_point_parameters
Brian Paul44202462000-05-18 18:14:22 +00001157#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001158#else
Brian Paul44202462000-05-18 18:14:22 +00001159#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001160#endif
Brian Paul44202462000-05-18 18:14:22 +00001161 { "glPointParameterfEXT", NAME(glPointParameterfEXT), _gloffset_PointParameterfEXT },
1162 { "glPointParameterfvEXT", NAME(glPointParameterfvEXT), _gloffset_PointParameterfvEXT },
1163 { "glPointParameterfSGIS", NAME(glPointParameterfSGIS), _gloffset_PointParameterfEXT },
1164 { "glPointParameterfvSGIS", NAME(glPointParameterfvSGIS), _gloffset_PointParameterfvEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001165#undef NAME
1166
1167 /* 55. GL_SGIX_instruments */
1168#ifdef GL_SGIX_instruments
Brian Paul44202462000-05-18 18:14:22 +00001169#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001170#else
Brian Paul44202462000-05-18 18:14:22 +00001171#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001172#endif
Brian Paul44202462000-05-18 18:14:22 +00001173 { "glInstrumentsBufferSGIX", NAME(glInstrumentsBufferSGIX), _gloffset_InstrumentsBufferSGIX },
1174 { "glStartInstrumentsSGIX", NAME(glStartInstrumentsSGIX), _gloffset_StartInstrumentsSGIX },
1175 { "glStopInstrumentsSGIX", NAME(glStopInstrumentsSGIX), _gloffset_StopInstrumentsSGIX },
1176 { "glReadInstrumentsSGIX", NAME(glReadInstrumentsSGIX), _gloffset_ReadInstrumentsSGIX },
1177 { "glPollInstrumentsSGIX", NAME(glPollInstrumentsSGIX), _gloffset_PollInstrumentsSGIX },
1178 { "glGetInstrumentsSGIX", NAME(glGetInstrumentsSGIX), _gloffset_GetInstrumentsSGIX },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001179#undef NAME
1180
1181 /* 57. GL_SGIX_framezoom */
1182#ifdef GL_SGIX_framezoom
Brian Paul44202462000-05-18 18:14:22 +00001183#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001184#else
Brian Paul44202462000-05-18 18:14:22 +00001185#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001186#endif
Brian Paul44202462000-05-18 18:14:22 +00001187 { "glFrameZoomSGIX", NAME(glFrameZoomSGIX), _gloffset_FrameZoomSGIX },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001188#undef NAME
1189
1190 /* 58. GL_SGIX_tag_sample_buffer */
1191#ifdef GL_SGIX_tag_sample_buffer
Brian Paul44202462000-05-18 18:14:22 +00001192#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001193#else
Brian Paul44202462000-05-18 18:14:22 +00001194#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001195#endif
Brian Paul44202462000-05-18 18:14:22 +00001196 { "glTagSampleBufferSGIX", NAME(glTagSampleBufferSGIX), _gloffset_TagSampleBufferSGIX },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001197#undef NAME
1198
1199 /* 60. GL_SGIX_reference_plane */
1200#ifdef GL_SGIX_reference_plane
Brian Paul44202462000-05-18 18:14:22 +00001201#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001202#else
Brian Paul44202462000-05-18 18:14:22 +00001203#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001204#endif
Brian Paul44202462000-05-18 18:14:22 +00001205 { "glReferencePlaneSGIX", NAME(glReferencePlaneSGIX), _gloffset_ReferencePlaneSGIX },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001206#undef NAME
1207
1208 /* 61. GL_SGIX_flush_raster */
1209#ifdef GL_SGIX_flush_raster
Brian Paul44202462000-05-18 18:14:22 +00001210#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001211#else
Brian Paul44202462000-05-18 18:14:22 +00001212#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001213#endif
Brian Paul44202462000-05-18 18:14:22 +00001214 { "glFlushRasterSGIX", NAME(glFlushRasterSGIX), _gloffset_FlushRasterSGIX },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001215#undef NAME
1216
1217 /* 66. GL_HP_image_transform */
1218#if 0
1219#ifdef GL_HP_image_transform
Brian Paul44202462000-05-18 18:14:22 +00001220#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001221#else
Brian Paul44202462000-05-18 18:14:22 +00001222#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001223#endif
Brian Paul44202462000-05-18 18:14:22 +00001224 { "glGetImageTransformParameterfvHP", NAME(glGetImageTransformParameterfvHP), _gloffset_GetImageTransformParameterfvHP },
1225 { "glGetImageTransformParameterivHP", NAME(glGetImageTransformParameterivHP), _gloffset_GetImageTransformParameterivHP },
1226 { "glImageTransformParameterfHP", NAME(glImageTransformParameterfHP), _gloffset_ImageTransformParameterfHP },
1227 { "glImageTransformParameterfvHP", NAME(glImageTransformParameterfvHP), _gloffset_ImageTransformParameterfvHP },
1228 { "glImageTransformParameteriHP", NAME(glImageTransformParameteriHP), _gloffset_ImageTransformParameteriHP },
1229 { "glImageTransformParameterivHP", NAME(glImageTransformParameterivHP), _gloffset_ImageTransformParameterivHP },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001230#undef NAME
1231#endif
1232
1233 /* 74. GL_EXT_color_subtable */
1234#ifdef GL_EXT_color_subtable
Brian Paul44202462000-05-18 18:14:22 +00001235#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001236#else
Brian Paul44202462000-05-18 18:14:22 +00001237#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001238#endif
Brian Paul44202462000-05-18 18:14:22 +00001239 { "glColorSubTableEXT", NAME(glColorSubTableEXT), _gloffset_ColorSubTable },
1240 { "glCopyColorSubTableEXT", NAME(glCopyColorSubTableEXT), _gloffset_CopyColorSubTable },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001241#undef NAME
1242
1243 /* 77. GL_PGI_misc_hints */
1244#ifdef GL_PGI_misc_hints
Brian Paul44202462000-05-18 18:14:22 +00001245#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001246#else
Brian Paul44202462000-05-18 18:14:22 +00001247#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001248#endif
Brian Paul44202462000-05-18 18:14:22 +00001249 { "glHintPGI", NAME(glHintPGI), _gloffset_HintPGI },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001250#undef NAME
1251
1252 /* 78. GL_EXT_paletted_texture */
1253#ifdef GL_EXT_paletted_texture
Brian Paul44202462000-05-18 18:14:22 +00001254#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001255#else
Brian Paul44202462000-05-18 18:14:22 +00001256#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001257#endif
Brian Paul44202462000-05-18 18:14:22 +00001258 { "glColorTableEXT", NAME(glColorTableEXT), _gloffset_ColorTable },
1259 { "glGetColorTableEXT", NAME(glGetColorTableEXT), _gloffset_GetColorTable },
1260 { "glGetColorTableParameterfvEXT", NAME(glGetColorTableParameterfvEXT), _gloffset_GetColorTableParameterfv },
1261 { "glGetColorTableParameterivEXT", NAME(glGetColorTableParameterivEXT), _gloffset_GetColorTableParameteriv },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001262#undef NAME
1263
1264 /* 80. GL_SGIX_list_priority */
1265#ifdef GL_SGIX_list_priority
Brian Paul44202462000-05-18 18:14:22 +00001266#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001267#else
Brian Paul44202462000-05-18 18:14:22 +00001268#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001269#endif
Brian Paul44202462000-05-18 18:14:22 +00001270 { "glGetListParameterfvSGIX", NAME(glGetListParameterfvSGIX), _gloffset_GetListParameterfvSGIX },
1271 { "glGetListParameterivSGIX", NAME(glGetListParameterivSGIX), _gloffset_GetListParameterivSGIX },
1272 { "glListParameterfSGIX", NAME(glListParameterfSGIX), _gloffset_ListParameterfSGIX },
1273 { "glListParameterfvSGIX", NAME(glListParameterfvSGIX), _gloffset_ListParameterfvSGIX },
1274 { "glListParameteriSGIX", NAME(glListParameteriSGIX), _gloffset_ListParameteriSGIX },
1275 { "glListParameterivSGIX", NAME(glListParameterivSGIX), _gloffset_ListParameterivSGIX },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001276#undef NAME
1277
1278 /* 94. GL_EXT_index_material */
1279#ifdef GL_EXT_index_material
Brian Paul44202462000-05-18 18:14:22 +00001280#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001281#else
Brian Paul44202462000-05-18 18:14:22 +00001282#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001283#endif
Brian Paul44202462000-05-18 18:14:22 +00001284 { "glIndexMaterialEXT", NAME(glIndexMaterialEXT), _gloffset_IndexMaterialEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001285#undef NAME
1286
1287 /* 95. GL_EXT_index_func */
1288#ifdef GL_EXT_index_func
Brian Paul44202462000-05-18 18:14:22 +00001289#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001290#else
Brian Paul44202462000-05-18 18:14:22 +00001291#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001292#endif
Brian Paul44202462000-05-18 18:14:22 +00001293 { "glIndexFuncEXT", NAME(glIndexFuncEXT), _gloffset_IndexFuncEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001294#undef NAME
1295
1296 /* 97. GL_EXT_compiled_vertex_array */
1297#ifdef GL_EXT_compiled_vertex_array
Brian Paul44202462000-05-18 18:14:22 +00001298#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001299#else
Brian Paul44202462000-05-18 18:14:22 +00001300#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001301#endif
Brian Paul44202462000-05-18 18:14:22 +00001302 { "glLockArraysEXT", NAME(glLockArraysEXT), _gloffset_LockArraysEXT },
1303 { "glUnlockArraysEXT", NAME(glUnlockArraysEXT), _gloffset_UnlockArraysEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001304#undef NAME
1305
1306 /* 98. GL_EXT_cull_vertex */
1307#ifdef GL_EXT_cull_vertex
Brian Paul44202462000-05-18 18:14:22 +00001308#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001309#else
Brian Paul44202462000-05-18 18:14:22 +00001310#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001311#endif
Brian Paul44202462000-05-18 18:14:22 +00001312 { "glCullParameterfvEXT", NAME(glCullParameterfvEXT), _gloffset_CullParameterfvEXT },
1313 { "glCullParameterdvEXT", NAME(glCullParameterdvEXT), _gloffset_CullParameterdvEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001314#undef NAME
1315
1316 /* 102. GL_SGIX_fragment_lighting */
1317#ifdef GL_SGIX_fragment_lighting
Brian Paul44202462000-05-18 18:14:22 +00001318#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001319#else
Brian Paul44202462000-05-18 18:14:22 +00001320#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001321#endif
Brian Paul44202462000-05-18 18:14:22 +00001322 { "glFragmentColorMaterialSGIX", NAME(glFragmentColorMaterialSGIX), _gloffset_FragmentColorMaterialSGIX },
1323 { "glFragmentLightfSGIX", NAME(glFragmentLightfSGIX), _gloffset_FragmentLightfSGIX },
1324 { "glFragmentLightfvSGIX", NAME(glFragmentLightfvSGIX), _gloffset_FragmentLightfvSGIX },
1325 { "glFragmentLightiSGIX", NAME(glFragmentLightiSGIX), _gloffset_FragmentLightiSGIX },
1326 { "glFragmentLightivSGIX", NAME(glFragmentLightivSGIX), _gloffset_FragmentLightivSGIX },
1327 { "glFragmentLightModelfSGIX", NAME(glFragmentLightModelfSGIX), _gloffset_FragmentLightModelfSGIX },
1328 { "glFragmentLightModelfvSGIX", NAME(glFragmentLightModelfvSGIX), _gloffset_FragmentLightModelfvSGIX },
1329 { "glFragmentLightModeliSGIX", NAME(glFragmentLightModeliSGIX), _gloffset_FragmentLightModeliSGIX },
1330 { "glFragmentLightModelivSGIX", NAME(glFragmentLightModelivSGIX), _gloffset_FragmentLightModelivSGIX },
1331 { "glFragmentMaterialfSGIX", NAME(glFragmentMaterialfSGIX), _gloffset_FragmentMaterialfSGIX },
1332 { "glFragmentMaterialfvSGIX", NAME(glFragmentMaterialfvSGIX), _gloffset_FragmentMaterialfvSGIX },
1333 { "glFragmentMaterialiSGIX", NAME(glFragmentMaterialiSGIX), _gloffset_FragmentMaterialiSGIX },
1334 { "glFragmentMaterialivSGIX", NAME(glFragmentMaterialivSGIX), _gloffset_FragmentMaterialivSGIX },
1335 { "glGetFragmentLightfvSGIX", NAME(glGetFragmentLightfvSGIX), _gloffset_GetFragmentLightfvSGIX },
1336 { "glGetFragmentLightivSGIX", NAME(glGetFragmentLightivSGIX), _gloffset_GetFragmentLightivSGIX },
1337 { "glGetFragmentMaterialfvSGIX", NAME(glGetFragmentMaterialfvSGIX), _gloffset_GetFragmentMaterialfvSGIX },
1338 { "glGetFragmentMaterialivSGIX", NAME(glGetFragmentMaterialivSGIX), _gloffset_GetFragmentMaterialivSGIX },
1339 { "glLightEnviSGIX", NAME(glLightEnviSGIX), _gloffset_LightEnviSGIX },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001340#undef NAME
1341
Brian Paul44202462000-05-18 18:14:22 +00001342 /* 112. GL_EXT_draw_range_elements */
1343#if 000
1344#ifdef GL_EXT_draw_range_elements
1345#define NAME(X) (GLvoid *) X
1346#else
1347#define NAME(X) (GLvoid *) NotImplemented
1348#endif
1349 { "glDrawRangeElementsEXT", NAME(glDrawRangeElementsEXT), _gloffset_DrawRangeElementsEXT },
1350#undef NAME
1351#endif
1352
1353 /* 117. GL_EXT_light_texture */
1354#if 000
1355#ifdef GL_EXT_light_texture
1356#define NAME(X) (GLvoid *) X
1357#else
1358#define NAME(X) (GLvoid *) NotImplemented
1359#endif
1360 { "glApplyTextureEXT", NAME(glApplyTextureEXT), _gloffset_ApplyTextureEXT },
1361 { "glTextureLightEXT", NAME(glTextureLightEXT), _gloffset_TextureLightEXT },
1362 { "glTextureMaterialEXT", NAME(glTextureMaterialEXT), _gloffset_TextureMaterialEXT },
1363#undef NAME
1364
1365 /* 135. GL_INTEL_texture_scissor */
1366#ifdef GL_INTEL_texture_scissor
1367#define NAME(X) (GLvoid *) X
1368#else
1369#define NAME(X) (GLvoid *) NotImplemented
1370#endif
1371 { "glTexScissorINTEL", NAME(glTexScissorINTEL), _gloffset_TexScissorINTEL },
1372 { "glTexScissorFuncINTEL", NAME(glTexScissorFuncINTEL), _gloffset_glTexScissorFuncINTEL },
1373#undef NAME
1374
1375 /* 136. GL_INTEL_parallel_arrays */
1376#ifdef GL_INTEL_parallel_arrays
1377#define NAME(X) (GLvoid *) X
1378#else
1379#define NAME(X) (GLvoid *) NotImplemented
1380#endif
1381 { "glVertexPointervINTEL", NAME(glVertexPointervINTEL), _gloffset_VertexPointervINTEL },
1382 { "glNormalPointervINTEL", NAME(glNormalPointervINTEL), _gloffset_NormalPointervINTEL },
1383 { "glColorPointervINTEL", NAME(glColorPointervINTEL), _gloffset_ColorPointervINTEL },
1384 { "glTexCoordPointervINTEL", NAME(glTexCoordPointervINTEL), _gloffset_glxCoordPointervINTEL },
1385#undef NAME
1386#endif
1387
1388 /* 138. GL_EXT_pixel_transform */
1389#if 000
1390#ifdef GL_EXT_pixel_transform
1391#define NAME(X) (GLvoid *) X
1392#else
1393#define NAME(X) (GLvoid *) NotImplemented
1394#endif
1395 { "glPixelTransformParameteriEXT", NAME(glPixelTransformParameteriEXT), _gloffset_PixelTransformParameteriEXT },
1396 { "glPixelTransformParameterfEXT", NAME(glPixelTransformParameterfEXT), _gloffset_PixelTransformParameterfEXT },
1397 { "glPixelTransformParameterivEXT", NAME(glPixelTransformParameterivEXT), _gloffset_PixelTransformParameterivEXT },
1398 { "glPixelTransformParameterfvEXT", NAME(glPixelTransformParameterfvEXT), _gloffset_PixelTransformParameterfvEXT },
1399 { "glGetPixelTransformParameterivEXT", NAME(glGetPixelTransformParameterivEXT), _gloffset_GetPixelTransformParameterivEXT },
1400 { "glGetPixelTransformParameterfvEXT", NAME(glGetPixelTransformParameterfvEXT), _gloffset_GetPixelTransformParameterfvEXT },
1401#undef NAME
Brian Paula14cbff2000-10-27 18:31:21 +00001402#endif
Brian Paul44202462000-05-18 18:14:22 +00001403
1404 /* 145. GL_EXT_secondary_color */
1405#ifdef GL_EXT_secondary_color
1406#define NAME(X) (GLvoid *) X
1407#else
1408#define NAME(X) (GLvoid *) NotImplemented
1409#endif
1410 { "glSecondaryColor3bEXT", NAME(glSecondaryColor3bEXT), _gloffset_SecondaryColor3bEXT },
1411 { "glSecondaryColor3dEXT", NAME(glSecondaryColor3dEXT), _gloffset_SecondaryColor3dEXT },
1412 { "glSecondaryColor3fEXT", NAME(glSecondaryColor3fEXT), _gloffset_SecondaryColor3fEXT },
1413 { "glSecondaryColor3iEXT", NAME(glSecondaryColor3iEXT), _gloffset_SecondaryColor3iEXT },
1414 { "glSecondaryColor3sEXT", NAME(glSecondaryColor3sEXT), _gloffset_SecondaryColor3sEXT },
1415 { "glSecondaryColor3ubEXT", NAME(glSecondaryColor3ubEXT), _gloffset_SecondaryColor3ubEXT },
1416 { "glSecondaryColor3uiEXT", NAME(glSecondaryColor3uiEXT), _gloffset_SecondaryColor3uiEXT },
1417 { "glSecondaryColor3usEXT", NAME(glSecondaryColor3usEXT), _gloffset_SecondaryColor3usEXT },
Brian Paul44202462000-05-18 18:14:22 +00001418 { "glSecondaryColor3bvEXT", NAME(glSecondaryColor3bvEXT), _gloffset_SecondaryColor3bvEXT },
1419 { "glSecondaryColor3dvEXT", NAME(glSecondaryColor3dvEXT), _gloffset_SecondaryColor3dvEXT },
1420 { "glSecondaryColor3fvEXT", NAME(glSecondaryColor3fvEXT), _gloffset_SecondaryColor3fvEXT },
1421 { "glSecondaryColor3ivEXT", NAME(glSecondaryColor3ivEXT), _gloffset_SecondaryColor3ivEXT },
1422 { "glSecondaryColor3svEXT", NAME(glSecondaryColor3svEXT), _gloffset_SecondaryColor3svEXT },
1423 { "glSecondaryColor3ubvEXT", NAME(glSecondaryColor3ubvEXT), _gloffset_SecondaryColor3ubvEXT },
1424 { "glSecondaryColor3uivEXT", NAME(glSecondaryColor3uivEXT), _gloffset_SecondaryColor3uivEXT },
1425 { "glSecondaryColor3usvEXT", NAME(glSecondaryColor3usvEXT), _gloffset_SecondaryColor3usvEXT },
Brian Paul44202462000-05-18 18:14:22 +00001426 { "glSecondaryColorPointerEXT", NAME(glSecondaryColorPointerEXT), _gloffset_SecondaryColorPointerEXT },
1427#undef NAME
1428
1429 /* 147. GL_EXT_texture_perturb_normal */
Brian Paula14cbff2000-10-27 18:31:21 +00001430#if 000
Brian Paul44202462000-05-18 18:14:22 +00001431#ifdef GL_EXT_texture_perturb_normal
1432#define NAME(X) (GLvoid *) X
1433#else
1434#define NAME(X) (GLvoid *) NotImplemented
1435#endif
1436 { "glTextureNormalEXT", NAME(glTextureNormalEXT), _gloffset_TextureNormalEXT },
1437#undef NAME
Brian Paula14cbff2000-10-27 18:31:21 +00001438#endif
Brian Paul44202462000-05-18 18:14:22 +00001439
1440 /* 148. GL_EXT_multi_draw_arrays */
Brian Paula14cbff2000-10-27 18:31:21 +00001441#if 000
Brian Paul44202462000-05-18 18:14:22 +00001442#ifdef GL_EXT_multi_draw_arrays
1443#define NAME(X) (GLvoid *) X
1444#else
1445#define NAME(X) (GLvoid *) NotImplemented
1446#endif
1447 { "glMultiDrawArraysEXT", NAME(glMultiDrawArraysEXT), _gloffset_MultiDrawArraysEXT },
1448#undef NAME
1449#endif
1450
Brian Paul8ceb5c32000-02-24 22:14:04 +00001451 /* 149. GL_EXT_fog_coord */
1452#ifdef GL_EXT_fog_coord
Brian Paul44202462000-05-18 18:14:22 +00001453#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001454#else
Brian Paul44202462000-05-18 18:14:22 +00001455#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001456#endif
Brian Paul44202462000-05-18 18:14:22 +00001457 { "glFogCoordfEXT", NAME(glFogCoordfEXT), _gloffset_FogCoordfEXT },
1458 { "glFogCoordfvEXT", NAME(glFogCoordfvEXT), _gloffset_FogCoordfvEXT },
1459 { "glFogCoorddEXT", NAME(glFogCoorddEXT), _gloffset_FogCoorddEXT },
1460 { "glFogCoorddEXT", NAME(glFogCoorddEXT), _gloffset_FogCoorddEXT },
1461 { "glFogCoordPointerEXT", NAME(glFogCoordPointerEXT), _gloffset_FogCoordPointerEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001462#undef NAME
1463
Brian Paul44202462000-05-18 18:14:22 +00001464 /* 156. GL_EXT_coordinate_frame */
Brian Paula14cbff2000-10-27 18:31:21 +00001465#if 000
Brian Paul44202462000-05-18 18:14:22 +00001466#ifdef GL_EXT_coordinate_frame
1467#define NAME(X) (GLvoid *) X
1468#else
1469#define NAME(X) (GLvoid *) NotImplemented
1470#endif
1471 { "glTangent3bEXT", NAME(glTangent3bEXT), _gloffset_Tangent3bEXT },
1472 { "glTangent3dEXT", NAME(glTangent3dEXT), _gloffset_Tangent3dEXT },
1473 { "glTangent3fEXT", NAME(glTangent3fEXT), _gloffset_Tangent3fEXT },
1474 { "glTangent3iEXT", NAME(glTangent3iEXT), _gloffset_Tangent3iEXT },
1475 { "glTangent3sEXT", NAME(glTangent3sEXT), _gloffset_Tangent3sEXT },
1476 { "glTangent3bvEXT", NAME(glTangent3bvEXT), _gloffset_Tangent3bvEXT },
1477 { "glTangent3dvEXT", NAME(glTangent3dvEXT), _gloffset_Tangent3dvEXT },
1478 { "glTangent3fvEXT", NAME(glTangent3fvEXT), _gloffset_Tangent3fvEXT },
1479 { "glTangent3ivEXT", NAME(glTangent3ivEXT), _gloffset_Tangent3ivEXT },
1480 { "glTangent3svEXT", NAME(glTangent3svEXT), _gloffset_Tangent3svEXT },
1481 { "glBinormal3bEXT", NAME(glBinormal3bEXT), _gloffset_Binormal3bEXT },
1482 { "glBinormal3dEXT", NAME(glBinormal3dEXT), _gloffset_Binormal3dEXT },
1483 { "glBinormal3fEXT", NAME(glBinormal3fEXT), _gloffset_Binormal3fEXT },
1484 { "glBinormal3iEXT", NAME(glBinormal3iEXT), _gloffset_Binormal3iEXT },
1485 { "glBinormal3sEXT", NAME(glBinormal3sEXT), _gloffset_Binormal3sEXT },
1486 { "glBinormal3bvEXT", NAME(glBinormal3bvEXT), _gloffset_Binormal3bvEXT },
1487 { "glBinormal3dvEXT", NAME(glBinormal3dvEXT), _gloffset_Binormal3dvEXT },
1488 { "glBinormal3fvEXT", NAME(glBinormal3fvEXT), _gloffset_Binormal3fvEXT },
1489 { "glBinormal3ivEXT", NAME(glBinormal3ivEXT), _gloffset_Binormal3ivEXT },
1490 { "glBinormal3svEXT", NAME(glBinormal3svEXT), _gloffset_Binormal3svEXT },
1491 { "glTangentPointerEXT", NAME(glTangentPointerEXT), _gloffset_TangentPointerEXT },
1492 { "glBinormalPointerEXT", NAME(glBinormalPointerEXT), _gloffset_BinormalPointerEXT },
1493#undef NAME
Brian Paula14cbff2000-10-27 18:31:21 +00001494#endif
Brian Paul44202462000-05-18 18:14:22 +00001495
1496 /* 164. GL_SUN_global_alpha */
Brian Paula14cbff2000-10-27 18:31:21 +00001497#if 000
Brian Paul44202462000-05-18 18:14:22 +00001498#ifdef GL_SUN_global_alpha
1499#define NAME(X) (GLvoid *) X
1500#else
1501#define NAME(X) (GLvoid *) NotImplemented
1502#endif
1503 { "glGlobalAlphaFactorbSUN", NAME(glGlobalAlphaFactorbSUN), _gloffset_GlobalAlphaFactorbSUN },
1504 { "glGlobalAlphaFactorsSUN", NAME(glGlobalAlphaFactorsSUN), _gloffset_GlobalAlphaFactorsSUN },
1505 { "glGlobalAlphaFactoriSUN", NAME(glGlobalAlphaFactoriSUN), _gloffset_GlobalAlphaFactoriSUN },
1506 { "glGlobalAlphaFactorfSUN", NAME(glGlobalAlphaFactorfSUN), _gloffset_GlobalAlphaFactorfSUN },
1507 { "glGlobalAlphaFactordSUN", NAME(glGlobalAlphaFactordSUN), _gloffset_GlobalAlphaFactordSUN },
1508 { "glGlobalAlphaFactorubSUN", NAME(glGlobalAlphaFactorubSUN), _gloffset_GlobalAlphaFactorubSUN },
1509 { "glGlobalAlphaFactorusSUN", NAME(glGlobalAlphaFactorusSUN), _gloffset_GlobalAlphaFactorusSUN },
1510 { "glGlobalAlphaFactoruiSUN", NAME(glGlobalAlphaFactoruiSUN), _gloffset_GlobalAlphaFactoruiSUN },
1511#undef NAME
Brian Paula14cbff2000-10-27 18:31:21 +00001512#endif
Brian Paul44202462000-05-18 18:14:22 +00001513
1514 /* 165. GL_SUN_triangle_list */
Brian Paula14cbff2000-10-27 18:31:21 +00001515#if 000
Brian Paul44202462000-05-18 18:14:22 +00001516#ifdef GL_SUN_triangle_list
1517#define NAME(X) (GLvoid *) X
1518#else
1519#define NAME(X) (GLvoid *) NotImplemented
1520#endif
1521 { "glReplacementCodeuiSUN", NAME(glReplacementCodeuiSUN), _gloffset_ReplacementCodeuiSUN },
1522 { "glReplacementCodeusSUN", NAME(glReplacementCodeusSUN), _gloffset_ReplacementCodeusSUN },
1523 { "glReplacementCodeubSUN", NAME(glReplacementCodeubSUN), _gloffset_ReplacementCodeubSUN },
1524 { "glReplacementCodeuivSUN", NAME(glReplacementCodeuivSUN), _gloffset_ReplacementCodeuivSUN },
1525 { "glReplacementCodeusvSUN", NAME(glReplacementCodeusvSUN), _gloffset_ReplacementCodeusvSUN },
1526 { "glReplacementCodeubvSUN", NAME(glReplacementCodeubvSUN), _gloffset_ReplacementCodeubvSUN },
1527 { "glReplacementCodePointerSUN", NAME(glReplacementCodePointerSUN), _gloffset_ReplacementCodePointerSUN },
1528#undef NAME
Brian Paula14cbff2000-10-27 18:31:21 +00001529#endif
Brian Paul44202462000-05-18 18:14:22 +00001530
1531 /* 166. GL_SUN_vertex */
Brian Paula14cbff2000-10-27 18:31:21 +00001532#if 000
Brian Paul44202462000-05-18 18:14:22 +00001533#ifdef GL_SUN_vertex
1534#define NAME(X) (GLvoid *) X
1535#else
1536#define NAME(X) (GLvoid *) NotImplemented
1537#endif
1538 { "glColor4ubVertex2fSUN", NAME(glColor4ubVertex2fSUN), _gloffset_Color4ubVertex2fSUN },
1539 { "glColor4ubVertex2fvSUN", NAME(glColor4ubVertex2fvSUN), _gloffset_Color4ubVertex2fvSUN },
1540 { "glColor4ubVertex3fSUN", NAME(glColor4ubVertex3fSUN), _gloffset_Color4ubVertex3fSUN },
1541 { "glColor4ubVertex3fvSUN", NAME(glColor4ubVertex3fvSUN), _gloffset_Color4ubVertex3fvSUN },
1542 { "glColor3fVertex3fSUN", NAME(glColor3fVertex3fSUN), _gloffset_Color3fVertex3fSUN },
1543 { "glColor3fVertex3fvSUN", NAME(glColor3fVertex3fvSUN), _gloffset_Color3fVertex3fvSUN },
1544 { "glNormal3fVertex3fSUN", NAME(glNormal3fVertex3fSUN), _gloffset_Normal3fVertex3fSUN },
1545 { "glNormal3fVertex3fvSUN", NAME(glNormal3fVertex3fvSUN), _gloffset_Normal3fVertex3fvSUN },
1546 { "glColor4fNormal3fVertex3fSUN", NAME(glColor4fNormal3fVertex3fSUN), _gloffset_Color4fNormal3fVertex3fSUN },
1547 { "glColor4fNormal3fVertex3fvSUN", NAME(glColor4fNormal3fVertex3fvSUN), _gloffset_Color4fNormal3fVertex3fvSUN },
1548 { "glTexCoord2fVertex3fSUN", NAME(glTexCoord2fVertex3fSUN), _gloffset_TexCoord2fVertex3fSUN },
1549 { "glTexCoord2fVertex3fvSUN", NAME(glTexCoord2fVertex3fvSUN), _gloffset_TexCoord2fVertex3fvSUN },
1550 { "glTexCoord4fVertex4fSUN", NAME(glTexCoord4fVertex4fSUN), _gloffset_TexCoord4fVertex4fSUN },
1551 { "glTexCoord4fVertex4fvSUN", NAME(glTexCoord4fVertex4fvSUN), _gloffset_TexCoord4fVertex4fvSUN },
1552 { "glTexCoord2fColor4ubVertex3fSUN", NAME(glTexCoord2fColor4ubVertex3fSUN), _gloffset_TexCoord2fColor4ubVertex3fSUN },
1553 { "glTexCoord2fColor4ubVertex3fvSUN", NAME(glTexCoord2fColor4ubVertex3fvSUN), _gloffset_TexCoord2fColor4ubVertex3fvSUN },
1554 { "glTexCoord2fColor3fVertex3fSUN", NAME(glTexCoord2fColor3fVertex3fSUN), _gloffset_TexCoord2fColor3fVertex3fSUN },
1555 { "glTexCoord2fColor3fVertex3fvSUN", NAME(glTexCoord2fColor3fVertex3fvSUN), _gloffset_TexCoord2fColor3fVertex3fvSUN },
1556 { "glTexCoord2fNormal3fVertex3fSUN", NAME(glTexCoord2fNormal3fVertex3fSUN), _gloffset_TexCoord2fNormal3fVertex3fSUN },
1557 { "glTexCoord2fNormal3fVertex3fvSUN", NAME(glTexCoord2fNormal3fVertex3fvSUN), _gloffset_TexCoord2fNormal3fVertex3fvSUN },
1558 { "glTexCoord2fColor4fNormal3fVertex3fSUN", NAME(glTexCoord2fColor4fNormal3fVertex3fSUN), _gloffset_TexCoord2fColor4fNormal3fVertex3fSUN },
1559 { "glTexCoord2fColor4fNormal3fVertex3fvSUN", NAME(glTexCoord2fColor4fNormal3fVertex3fvSUN), _gloffset_TexCoord2fColor4fNormal3fVertex3fvSUN },
1560 { "glTexCoord4fColor4fNormal3fVertex4fSUN", NAME(glTexCoord4fColor4fNormal3fVertex4fSUN), _gloffset_TexCoord4fColor4fNormal3fVertex4fSUN },
1561 { "glTexCoord4fColor4fNormal3fVertex4fvSUN", NAME(glTexCoord4fColor4fNormal3fVertex4fvSUN), _gloffset_TexCoord4fColor4fNormal3fVertex4fvSUN },
1562 { "glReplacementCodeuiVertex3fSUN", NAME(glReplacementCodeuiVertex3fSUN), _gloffset_ReplacementCodeuiVertex3fSUN },
1563 { "glReplacementCodeuiVertex3fvSUN", NAME(glReplacementCodeuiVertex3fvSUN), _gloffset_ReplacementCodeuiVertex3fvSUN },
1564 { "glReplacementCodeuiColor4ubVertex3fSUN", NAME(glReplacementCodeuiColor4ubVertex3fSUN), _gloffset_ReplacementCodeuiColor4ubVertex3fSUN },
1565 { "glReplacementCodeuiColor4ubVertex3fvSUN", NAME(glReplacementCodeuiColor4ubVertex3fvSUN), _gloffset_ReplacementCodeuiColor4ubVertex3fvSUN },
1566 { "glReplacementCodeuiColor3fVertex3fSUN", NAME(glReplacementCodeuiColor3fVertex3fSUN), _gloffset_ReplacementCodeuiColor3fVertex3fSUN },
1567 { "glReplacementCodeuiColor3fVertex3fvSUN", NAME(glReplacementCodeuiColor3fVertex3fvSUN), _gloffset_ReplacementCodeuiColor3fVertex3fvSUN },
1568 { "glReplacementCodeuiNormal3fVertex3fSUN", NAME(glReplacementCodeuiNormal3fVertex3fSUN), _gloffset_ReplacementCodeuiNormal3fVertex3fSUN },
1569 { "glReplacementCodeuiNormal3fVertex3fvSUN", NAME(glReplacementCodeuiNormal3fVertex3fvSUN), _gloffset_ReplacementCodeuiNormal3fVertex3fvSUN },
1570 { "glReplacementCodeuiColor4fNormal3fVertex3fSUN", NAME(glReplacementCodeuiColor4fNormal3fVertex3fSUN), _gloffset_ReplacementCodeuiColor4fNormal3fVertex3fSUN },
1571 { "glReplacementCodeuiColor4fNormal3fVertex3fvSUN", NAME(glReplacementCodeuiColor4fNormal3fVertex3fvSUN), _gloffset_ReplacementCodeuiColor4fNormal3fVertex3fvSUN },
1572 { "glReplacementCodeuiTexCoord2fVertex3fSUN", NAME(glReplacementCodeuiTexCoord2fVertex3fSUN), _gloffset_ReplacementCodeuiTexCoord2fVertex3fSUN },
1573 { "glReplacementCodeuiTexCoord2fVertex3fvSUN", NAME(glReplacementCodeuiTexCoord2fVertex3fvSUN), _gloffset_ReplacementCodeuiTexCoord2fVertex3fvSUN },
1574 { "glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN", NAME(glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN), _gloffset_ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN },
1575 { "glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN", NAME(glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN), _gloffset_ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN },
1576 { "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN", NAME(glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN), _gloffset_ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN },
1577 { "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN", NAME(glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN), _gloffset_ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN },
1578#undef NAME
1579#endif
1580
Brian Paul8ceb5c32000-02-24 22:14:04 +00001581 /* 173. GL_EXT/INGR_blend_func_separate */
1582#ifdef GL_EXT_blend_func_separate
Brian Paul44202462000-05-18 18:14:22 +00001583#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001584#else
Brian Paul44202462000-05-18 18:14:22 +00001585#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001586#endif
Brian Paul44202462000-05-18 18:14:22 +00001587 { "glBlendFuncSeparateEXT", NAME(glBlendFuncSeparateEXT), _gloffset_BlendFuncSeparateEXT },
1588 { "glBlendFuncSeparateINGR", NAME(glBlendFuncSeparateEXT), _gloffset_BlendFuncSeparateEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001589#undef NAME
1590
1591 /* 188. GL_EXT_vertex_weighting */
1592#ifdef GL_EXT_vertex_weighting
Brian Paul44202462000-05-18 18:14:22 +00001593#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001594#else
Brian Paul44202462000-05-18 18:14:22 +00001595#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001596#endif
Brian Paul44202462000-05-18 18:14:22 +00001597 { "glVertexWeightfEXT", NAME(glVertexWeightfEXT), _gloffset_VertexWeightfEXT },
1598 { "glVertexWeightfvEXT", NAME(glVertexWeightfvEXT), _gloffset_VertexWeightfvEXT },
1599 { "glVertexWeightPointerEXT", NAME(glVertexWeightPointerEXT), _gloffset_VertexWeightPointerEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001600#undef NAME
1601
1602 /* 190. GL_NV_vertex_array_range */
1603#ifdef GL_NV_vertex_array_range
Brian Paul44202462000-05-18 18:14:22 +00001604#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001605#else
Brian Paul44202462000-05-18 18:14:22 +00001606#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001607#endif
Brian Paul44202462000-05-18 18:14:22 +00001608 { "glFlushVertexArrayRangeNV", NAME(glFlushVertexArrayRangeNV), _gloffset_FlushVertexArrayRangeNV },
1609 { "glVertexArrayRangeNV", NAME(glVertexArrayRangeNV), _gloffset_VertexArrayRangeNV },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001610#undef NAME
1611
1612 /* 191. GL_NV_register_combiners */
1613#ifdef GL_NV_register_combiners
Brian Paul44202462000-05-18 18:14:22 +00001614#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001615#else
Brian Paul44202462000-05-18 18:14:22 +00001616#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001617#endif
Brian Paul44202462000-05-18 18:14:22 +00001618 { "glCombinerParameterfvNV", NAME(glCombinerParameterfvNV), _gloffset_CombinerParameterfvNV },
1619 { "glCombinerParameterfNV", NAME(glCombinerParameterfNV), _gloffset_CombinerParameterfNV },
1620 { "glCombinerParameterivNV", NAME(glCombinerParameterivNV), _gloffset_CombinerParameterivNV },
1621 { "glCombinerParameteriNV", NAME(glCombinerParameteriNV), _gloffset_CombinerParameteriNV },
1622 { "glCombinerInputNV", NAME(glCombinerInputNV), _gloffset_CombinerInputNV },
1623 { "glCombinerOutputNV", NAME(glCombinerOutputNV), _gloffset_CombinerOutputNV },
1624 { "glFinalCombinerInputNV", NAME(glFinalCombinerInputNV), _gloffset_FinalCombinerInputNV },
1625 { "glGetCombinerInputParameterfvNV", NAME(glGetCombinerInputParameterfvNV), _gloffset_GetCombinerInputParameterfvNV },
1626 { "glGetCombinerInputParameterivNV", NAME(glGetCombinerInputParameterivNV), _gloffset_GetCombinerInputParameterivNV },
1627 { "glGetCombinerOutputParameterfvNV", NAME(glGetCombinerOutputParameterfvNV), _gloffset_GetCombinerOutputParameterfvNV },
1628 { "glGetCombinerOutputParameterivNV", NAME(glGetCombinerOutputParameterivNV), _gloffset_GetCombinerOutputParameterivNV },
1629 { "glGetFinalCombinerInputParameterfvNV", NAME(glGetFinalCombinerInputParameterfvNV), _gloffset_GetFinalCombinerInputParameterfvNV },
1630 { "glGetFinalCombinerInputParameterivNV", NAME(glGetFinalCombinerInputParameterivNV), _gloffset_GetFinalCombinerInputParameterivNV },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001631#undef NAME
1632
1633 /* 196. GL_MESA_resize_buffers */
1634#ifdef MESA_resize_buffers
Brian Paul44202462000-05-18 18:14:22 +00001635#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001636#else
Brian Paul44202462000-05-18 18:14:22 +00001637#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001638#endif
Brian Paul44202462000-05-18 18:14:22 +00001639 { "glResizeBuffersMESA", NAME(glResizeBuffersMESA), _gloffset_ResizeBuffersMESA },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001640#undef NAME
1641
1642 /* 197. GL_MESA_window_pos */
1643#ifdef MESA_window_pos
Brian Paul44202462000-05-18 18:14:22 +00001644#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001645#else
Brian Paul44202462000-05-18 18:14:22 +00001646#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001647#endif
Brian Paul44202462000-05-18 18:14:22 +00001648 { "glWindowPos4fMESA", NAME(glWindowPos4fMESA), _gloffset_WindowPos4fMESA },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001649#undef NAME
1650
Brian Paul44202462000-05-18 18:14:22 +00001651 /* 209. WGL_EXT_multisample */
1652#ifdef WGL_EXT_multisample
1653#define NAME(X) (GLvoid *) X
1654#else
1655#define NAME(X) (GLvoid *) NotImplemented
1656#endif
1657 { "glSampleMaskEXT", NAME(glSampleMaskEXT), _gloffset_SampleMaskSGIS },
1658 { "glSamplePatternEXT", NAME(glSamplePatternEXT), _gloffset_SamplePatternSGIS },
1659#undef NAME
Brian Paulcd963881999-12-10 20:01:06 +00001660
Brian Paul67661b01999-12-15 12:52:31 +00001661 { NULL, NULL } /* end of list marker */
Brian Paul91bcefa1999-11-27 21:30:40 +00001662};
Brian Paul7fb54ae1999-11-19 22:33:50 +00001663
Brian Paul959f8022000-03-19 01:10:11 +00001664
1665
1666/*
1667 * Return dispatch table offset of the named static (built-in) function.
1668 * Return -1 if function not found.
1669 */
1670static GLint
1671get_static_proc_offset(const char *funcName)
1672{
1673 GLuint i;
1674 for (i = 0; static_functions[i].Name; i++) {
1675 if (strcmp(static_functions[i].Name, funcName) == 0) {
1676 return static_functions[i].Offset;
1677 }
1678 }
1679 return -1;
1680}
1681
1682
1683/*
1684 * Return dispatch function address the named static (built-in) function.
1685 * Return NULL if function not found.
1686 */
1687static GLvoid *
1688get_static_proc_address(const char *funcName)
1689{
Brian Paul9c7ca852000-10-19 20:13:12 +00001690 GLint i;
1691 for (i = 0; static_functions[i].Name; i++) {
1692 if (strcmp(static_functions[i].Name, funcName) == 0) {
1693 return static_functions[i].Address;
1694 }
1695 }
1696 return NULL;
Brian Paul959f8022000-03-19 01:10:11 +00001697}
1698
1699
1700
1701/**********************************************************************
1702 * Extension function management.
1703 */
1704
1705
1706#define MAX_EXTENSION_FUNCS 1000
1707
1708static struct name_address_offset ExtEntryTable[MAX_EXTENSION_FUNCS];
1709static GLuint NumExtEntryPoints = 0;
1710
1711
1712
1713/*
1714 * Generate a dispatch function (entrypoint) which jumps through
1715 * the given slot number (offset) in the current dispatch table.
1716 * We need assembly language in order to accomplish this.
1717 */
1718static void *
1719generate_entrypoint(GLuint functionOffset)
1720{
1721#if defined(USE_X86_ASM)
1722 /*
1723 * This x86 code contributed by Josh Vanderhoof.
1724 *
1725 * 0: a1 10 32 54 76 movl __glapi_Dispatch,%eax
1726 * 00 01 02 03 04
1727 * 5: 85 c0 testl %eax,%eax
1728 * 05 06
1729 * 7: 74 06 je f <entrypoint+0xf>
1730 * 07 08
1731 * 9: ff a0 10 32 54 76 jmp *0x76543210(%eax)
1732 * 09 0a 0b 0c 0d 0e
1733 * f: e8 fc ff ff ff call __glapi_get_dispatch
1734 * 0f 10 11 12 13
1735 * 14: ff a0 10 32 54 76 jmp *0x76543210(%eax)
1736 * 14 15 16 17 18 19
1737 */
1738 static const unsigned char temp[] = {
1739 0xa1, 0x00, 0x00, 0x00, 0x00,
1740 0x85, 0xc0,
1741 0x74, 0x06,
1742 0xff, 0xa0, 0x00, 0x00, 0x00, 0x00,
1743 0xe8, 0x00, 0x00, 0x00, 0x00,
1744 0xff, 0xa0, 0x00, 0x00, 0x00, 0x00
1745 };
1746 unsigned char *code = malloc(sizeof(temp));
1747 unsigned int next_insn;
1748 if (code) {
1749 memcpy(code, temp, sizeof(temp));
1750
1751 *(unsigned int *)(code + 0x01) = (unsigned int)&_glapi_Dispatch;
1752 *(unsigned int *)(code + 0x0b) = (unsigned int)functionOffset * 4;
1753 next_insn = (unsigned int)(code + 0x14);
1754 *(unsigned int *)(code + 0x10) = (unsigned int)_glapi_get_dispatch - next_insn;
1755 *(unsigned int *)(code + 0x16) = (unsigned int)functionOffset * 4;
1756 }
1757 return code;
1758#else
1759 return NULL;
1760#endif
1761}
1762
1763
1764
1765/*
1766 * Add a new extension function entrypoint.
1767 * Return: GL_TRUE = success or GL_FALSE = failure
1768 */
1769GLboolean
1770_glapi_add_entrypoint(const char *funcName, GLuint offset)
1771{
Brian Paul959f8022000-03-19 01:10:11 +00001772 /* first check if the named function is already statically present */
1773 {
1774 GLint index = get_static_proc_offset(funcName);
1775 if (index >= 0) {
Brian Paulb51b0a82001-03-07 05:06:11 +00001776 return (GLboolean) ((GLuint) index == offset); /* bad offset! */
Brian Paul959f8022000-03-19 01:10:11 +00001777 }
1778 }
1779
1780 {
1781 /* make sure this offset/name pair is legal */
1782 const char *name = _glapi_get_proc_name(offset);
1783 if (name && strcmp(name, funcName) != 0)
1784 return GL_FALSE; /* bad name! */
1785 }
1786
1787 {
1788 /* be sure index and name match known data */
1789 GLuint i;
1790 for (i = 0; i < NumExtEntryPoints; i++) {
1791 if (strcmp(ExtEntryTable[i].Name, funcName) == 0) {
1792 /* function already registered with api */
1793 if (ExtEntryTable[i].Offset == offset) {
1794 return GL_TRUE; /* offsets match */
1795 }
1796 else {
1797 return GL_FALSE; /* bad offset! */
1798 }
1799 }
1800 }
1801
Brian Paul2c3a6202000-05-24 17:53:30 +00001802 /* Make sure we don't try to add a new entrypoint after someone
1803 * has already called _glapi_get_dispatch_table_size()! If that's
1804 * happened the caller's information would become out of date.
1805 */
1806 if (GetSizeCalled)
1807 return GL_FALSE;
1808
Brian Paul959f8022000-03-19 01:10:11 +00001809 /* make sure we have space */
1810 if (NumExtEntryPoints >= MAX_EXTENSION_FUNCS) {
1811 return GL_FALSE;
1812 }
1813 else {
1814 void *entrypoint = generate_entrypoint(offset);
1815 if (!entrypoint)
1816 return GL_FALSE;
1817
Brian Paulfffb8092000-03-29 18:46:11 +00001818 ExtEntryTable[NumExtEntryPoints].Name = str_dup(funcName);
Brian Paul959f8022000-03-19 01:10:11 +00001819 ExtEntryTable[NumExtEntryPoints].Offset = offset;
1820 ExtEntryTable[NumExtEntryPoints].Address = entrypoint;
1821 NumExtEntryPoints++;
1822
1823 if (offset > MaxDispatchOffset)
1824 MaxDispatchOffset = offset;
1825
1826 return GL_TRUE; /* success */
1827 }
1828 }
1829
1830 /* should never get here, but play it safe */
1831 return GL_FALSE;
1832}
1833
1834
1835
1836#if 0000 /* prototype code for dynamic extension slot allocation */
1837
1838static int NextFreeOffset = 409; /*XXX*/
1839#define MAX_DISPATCH_TABLE_SIZE 1000
1840
1841/*
1842 * Dynamically allocate a dispatch slot for an extension entrypoint
1843 * and generate the assembly language dispatch stub.
1844 * Return the dispatch offset for the function or -1 if no room or error.
1845 */
1846GLint
1847_glapi_add_entrypoint2(const char *funcName)
1848{
1849 int offset;
1850
1851 /* first see if extension func is already known */
1852 offset = _glapi_get_proc_offset(funcName);
1853 if (offset >= 0)
1854 return offset;
1855
1856 if (NumExtEntryPoints < MAX_EXTENSION_FUNCS
1857 && NextFreeOffset < MAX_DISPATCH_TABLE_SIZE) {
1858 void *entryPoint;
1859 offset = NextFreeOffset;
1860 entryPoint = generate_entrypoint(offset);
1861 if (entryPoint) {
1862 NextFreeOffset++;
Brian Paulfffb8092000-03-29 18:46:11 +00001863 ExtEntryTable[NumExtEntryPoints].Name = str_dup(funcName);
Brian Paul959f8022000-03-19 01:10:11 +00001864 ExtEntryTable[NumExtEntryPoints].Offset = offset;
1865 ExtEntryTable[NumExtEntryPoints].Address = entryPoint;
1866 NumExtEntryPoints++;
1867 return offset;
1868 }
1869 }
1870 return -1;
1871}
1872
1873#endif
1874
1875
1876
1877/*
1878 * Return offset of entrypoint for named function within dispatch table.
1879 */
1880GLint
1881_glapi_get_proc_offset(const char *funcName)
1882{
1883 /* search extension functions first */
Brian Paulb51b0a82001-03-07 05:06:11 +00001884 GLuint i;
Brian Paul959f8022000-03-19 01:10:11 +00001885 for (i = 0; i < NumExtEntryPoints; i++) {
1886 if (strcmp(ExtEntryTable[i].Name, funcName) == 0) {
1887 return ExtEntryTable[i].Offset;
1888 }
1889 }
1890
1891 /* search static functions */
1892 return get_static_proc_offset(funcName);
1893}
1894
1895
1896
1897/*
1898 * Return entrypoint for named function.
1899 */
1900const GLvoid *
1901_glapi_get_proc_address(const char *funcName)
1902{
1903 /* search extension functions first */
Brian Paulb51b0a82001-03-07 05:06:11 +00001904 GLuint i;
Brian Paul959f8022000-03-19 01:10:11 +00001905 for (i = 0; i < NumExtEntryPoints; i++) {
1906 if (strcmp(ExtEntryTable[i].Name, funcName) == 0) {
1907 return ExtEntryTable[i].Address;
1908 }
1909 }
1910
1911 /* search static functions */
1912 return get_static_proc_address(funcName);
1913}
1914
1915
1916
1917
1918/*
1919 * Return the name of the function at the given dispatch offset.
1920 * This is only intended for debugging.
1921 */
1922const char *
1923_glapi_get_proc_name(GLuint offset)
1924{
1925 const GLuint n = sizeof(static_functions) / sizeof(struct name_address_offset);
1926 GLuint i;
1927 for (i = 0; i < n; i++) {
1928 if (static_functions[i].Offset == offset)
1929 return static_functions[i].Name;
1930 }
1931
1932 /* search added extension functions */
1933 for (i = 0; i < NumExtEntryPoints; i++) {
1934 if (ExtEntryTable[i].Offset == offset) {
1935 return ExtEntryTable[i].Name;
1936 }
1937 }
1938 return NULL;
1939}
1940
1941
1942
1943/*
1944 * Make sure there are no NULL pointers in the given dispatch table.
1945 * Intented for debugging purposes.
1946 */
1947void
1948_glapi_check_table(const struct _glapi_table *table)
1949{
1950 const GLuint entries = _glapi_get_dispatch_table_size();
1951 const void **tab = (const void **) table;
1952 GLuint i;
1953 for (i = 1; i < entries; i++) {
1954 assert(tab[i]);
1955 }
1956
1957#ifdef DEBUG
1958 /* Do some spot checks to be sure that the dispatch table
1959 * slots are assigned correctly.
1960 */
1961 {
1962 GLuint BeginOffset = _glapi_get_proc_offset("glBegin");
1963 char *BeginFunc = (char*) &table->Begin;
1964 GLuint offset = (BeginFunc - (char *) table) / sizeof(void *);
1965 assert(BeginOffset == _gloffset_Begin);
1966 assert(BeginOffset == offset);
1967 }
1968 {
1969 GLuint viewportOffset = _glapi_get_proc_offset("glViewport");
1970 char *viewportFunc = (char*) &table->Viewport;
1971 GLuint offset = (viewportFunc - (char *) table) / sizeof(void *);
1972 assert(viewportOffset == _gloffset_Viewport);
1973 assert(viewportOffset == offset);
1974 }
1975 {
1976 GLuint VertexPointerOffset = _glapi_get_proc_offset("glVertexPointer");
1977 char *VertexPointerFunc = (char*) &table->VertexPointer;
1978 GLuint offset = (VertexPointerFunc - (char *) table) / sizeof(void *);
1979 assert(VertexPointerOffset == _gloffset_VertexPointer);
1980 assert(VertexPointerOffset == offset);
1981 }
1982 {
1983 GLuint ResetMinMaxOffset = _glapi_get_proc_offset("glResetMinmax");
1984 char *ResetMinMaxFunc = (char*) &table->ResetMinmax;
1985 GLuint offset = (ResetMinMaxFunc - (char *) table) / sizeof(void *);
1986 assert(ResetMinMaxOffset == _gloffset_ResetMinmax);
1987 assert(ResetMinMaxOffset == offset);
1988 }
1989 {
1990 GLuint blendColorOffset = _glapi_get_proc_offset("glBlendColor");
1991 char *blendColorFunc = (char*) &table->BlendColor;
1992 GLuint offset = (blendColorFunc - (char *) table) / sizeof(void *);
1993 assert(blendColorOffset == _gloffset_BlendColor);
1994 assert(blendColorOffset == offset);
1995 }
1996 {
1997 GLuint istextureOffset = _glapi_get_proc_offset("glIsTextureEXT");
1998 char *istextureFunc = (char*) &table->IsTextureEXT;
1999 GLuint offset = (istextureFunc - (char *) table) / sizeof(void *);
2000 assert(istextureOffset == _gloffset_IsTextureEXT);
2001 assert(istextureOffset == offset);
2002 }
Brian Paula14cbff2000-10-27 18:31:21 +00002003 {
2004 GLuint secondaryColor3fOffset = _glapi_get_proc_offset("glSecondaryColor3fEXT");
2005 char *secondaryColor3fFunc = (char*) &table->SecondaryColor3fEXT;
2006 GLuint offset = (secondaryColor3fFunc - (char *) table) / sizeof(void *);
2007 assert(secondaryColor3fOffset == _gloffset_SecondaryColor3fEXT);
2008 assert(secondaryColor3fOffset == offset);
2009 assert(_glapi_get_proc_address("glSecondaryColor3fEXT") == (void *) &glSecondaryColor3fEXT);
2010 }
Brian Paul959f8022000-03-19 01:10:11 +00002011#endif
2012}