blob: 82c48ea0658f40ab7e6ebcbdb7d06be8d0493593 [file] [log] [blame]
Brian Paulb51b0a82001-03-07 05:06:11 +00001/* $Id: glapi.c,v 1.50 2001/03/07 05:06:11 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"
51#include "glapinoop.h"
Brian Paul0c239fc1999-12-16 12:38:11 +000052#include "glapioffsets.h"
53#include "glapitable.h"
Brian Paul9f943992000-01-28 19:03:33 +000054#include "glthread.h"
Brian Paulbb72d321999-12-16 17:31:59 +000055
Brian Paul0f710251999-12-15 15:02:30 +000056/* This is used when thread safety is disabled */
Brian Paul8ceb5c32000-02-24 22:14:04 +000057struct _glapi_table *_glapi_Dispatch = (struct _glapi_table *) __glapi_noop_table;
Brian Paulab0c8862001-01-23 23:35:47 +000058struct _glapi_table *_glapi_RealDispatch = (struct _glapi_table *) __glapi_noop_table;
Brian Paul0f710251999-12-15 15:02:30 +000059
Brian Paul8f91fb61999-12-17 14:51:28 +000060/* Used when thread safety disabled */
Brian Paulf9b97d92000-01-28 20:17:42 +000061void *_glapi_Context = NULL;
Brian Paul8f91fb61999-12-17 14:51:28 +000062
Brian Paul0f710251999-12-15 15:02:30 +000063
Brian Paul7fb54ae1999-11-19 22:33:50 +000064#if defined(THREADS)
Brian Paulbb72d321999-12-16 17:31:59 +000065
Brian Paul77aa8b92000-01-07 07:30:13 +000066/* Flag to indicate whether thread-safe dispatch is enabled */
67static GLboolean ThreadSafe = GL_FALSE;
68
Brian Paulbb72d321999-12-16 17:31:59 +000069static _glthread_TSD DispatchTSD;
Brian Paulab0c8862001-01-23 23:35:47 +000070static _glthread_TSD RealDispatchTSD; /* only when using override */
Brian Paulbb72d321999-12-16 17:31:59 +000071
Brian Paul8f91fb61999-12-17 14:51:28 +000072static _glthread_TSD ContextTSD;
73
Brian Paul0f710251999-12-15 15:02:30 +000074#endif
75
76
77
Brian Paulbb72d321999-12-16 17:31:59 +000078static GLuint MaxDispatchOffset = sizeof(struct _glapi_table) / sizeof(void *) - 1;
Brian Paul0f710251999-12-15 15:02:30 +000079static GLboolean GetSizeCalled = GL_FALSE;
Brian Paulfbd8f211999-11-11 01:22:25 +000080
Brian Paulab0c8862001-01-23 23:35:47 +000081static GLboolean DispatchOverride = GL_FALSE;
82
83
84
Randy Frankd7361e12000-03-27 21:13:58 +000085/* strdup is actually not a standard ANSI C or POSIX routine
86 Irix will not define it if ANSI mode is in effect. */
Brian Paulfffb8092000-03-29 18:46:11 +000087static char *str_dup(const char *str)
Randy Frankd7361e12000-03-27 21:13:58 +000088{
Brian Paulfffb8092000-03-29 18:46:11 +000089 char *copy;
90 copy = (char*) malloc(strlen(str) + 1);
91 if (!copy)
92 return NULL;
93 strcpy(copy, str);
94 return copy;
Randy Frankd7361e12000-03-27 21:13:58 +000095}
96
Brian Paul7fb54ae1999-11-19 22:33:50 +000097
Brian Paulbb72d321999-12-16 17:31:59 +000098
99/*
100 * We should call this periodically from a function such as glXMakeCurrent
101 * in order to test if multiple threads are being used. When we detect
102 * that situation we should then call _glapi_enable_thread_safety()
103 */
104void
105_glapi_check_multithread(void)
106{
107#if defined(THREADS)
Brian Paul26e14d22000-01-05 04:36:17 +0000108 if (!ThreadSafe) {
Brian Paulbb72d321999-12-16 17:31:59 +0000109 static unsigned long knownID;
110 static GLboolean firstCall = GL_TRUE;
111 if (firstCall) {
112 knownID = _glthread_GetID();
113 firstCall = GL_FALSE;
114 }
115 else if (knownID != _glthread_GetID()) {
Brian Paul26e14d22000-01-05 04:36:17 +0000116 ThreadSafe = GL_TRUE;
Brian Paulbb72d321999-12-16 17:31:59 +0000117 }
118 }
Brian Paul26e14d22000-01-05 04:36:17 +0000119 if (ThreadSafe) {
Brian Paulbb72d321999-12-16 17:31:59 +0000120 /* make sure that this thread's dispatch pointer isn't null */
121 if (!_glapi_get_dispatch()) {
122 _glapi_set_dispatch(NULL);
123 }
124 }
125#endif
126}
127
128
129
130/*
Brian Paul8f91fb61999-12-17 14:51:28 +0000131 * Set the current context pointer for this thread.
132 * The context pointer is an opaque type which should be cast to
133 * void from the real context pointer type.
134 */
135void
Brian Paulf9b97d92000-01-28 20:17:42 +0000136_glapi_set_context(void *context)
Brian Paul8f91fb61999-12-17 14:51:28 +0000137{
138#if defined(THREADS)
Brian Paul3c27be32000-02-10 21:27:48 +0000139 _glthread_SetTSD(&ContextTSD, context);
Brian Paul26e14d22000-01-05 04:36:17 +0000140 if (ThreadSafe)
Brian Paulf9b97d92000-01-28 20:17:42 +0000141 _glapi_Context = NULL;
Brian Paul8f91fb61999-12-17 14:51:28 +0000142 else
Brian Paulf9b97d92000-01-28 20:17:42 +0000143 _glapi_Context = context;
Brian Paul8f91fb61999-12-17 14:51:28 +0000144#else
Brian Paulf9b97d92000-01-28 20:17:42 +0000145 _glapi_Context = context;
Brian Paul8f91fb61999-12-17 14:51:28 +0000146#endif
147}
148
149
150
151/*
152 * Get the current context pointer for this thread.
153 * The context pointer is an opaque type which should be cast from
154 * void to the real context pointer type.
155 */
156void *
Brian Paulf9b97d92000-01-28 20:17:42 +0000157_glapi_get_context(void)
Brian Paul8f91fb61999-12-17 14:51:28 +0000158{
159#if defined(THREADS)
Brian Paul26e14d22000-01-05 04:36:17 +0000160 if (ThreadSafe) {
Brian Paul8f91fb61999-12-17 14:51:28 +0000161 return _glthread_GetTSD(&ContextTSD);
162 }
163 else {
Brian Paulf9b97d92000-01-28 20:17:42 +0000164 return _glapi_Context;
Brian Paul8f91fb61999-12-17 14:51:28 +0000165 }
166#else
Brian Paulf9b97d92000-01-28 20:17:42 +0000167 return _glapi_Context;
Brian Paul8f91fb61999-12-17 14:51:28 +0000168#endif
169}
170
171
172
173/*
Brian Paul7fb54ae1999-11-19 22:33:50 +0000174 * Set the global or per-thread dispatch table pointer.
175 */
176void
177_glapi_set_dispatch(struct _glapi_table *dispatch)
178{
179 if (!dispatch) {
180 /* use the no-op functions */
Brian Paul8ceb5c32000-02-24 22:14:04 +0000181 dispatch = (struct _glapi_table *) __glapi_noop_table;
Brian Paul7fb54ae1999-11-19 22:33:50 +0000182 }
183#ifdef DEBUG
184 else {
185 _glapi_check_table(dispatch);
186 }
187#endif
188
189#if defined(THREADS)
Brian Paulab0c8862001-01-23 23:35:47 +0000190 if (DispatchOverride) {
191 _glthread_SetTSD(&RealDispatchTSD, (void *) dispatch);
Brian Paul3a71d052000-09-05 20:17:37 +0000192 if (ThreadSafe)
Brian Paulab0c8862001-01-23 23:35:47 +0000193 _glapi_RealDispatch = NULL;
Brian Paul3a71d052000-09-05 20:17:37 +0000194 else
Brian Paulab0c8862001-01-23 23:35:47 +0000195 _glapi_RealDispatch = dispatch;
Brian Paul3b18a362000-09-26 15:27:20 +0000196 }
197 else {
Brian Paulab0c8862001-01-23 23:35:47 +0000198 /* normal operation */
Brian Paul3b18a362000-09-26 15:27:20 +0000199 _glthread_SetTSD(&DispatchTSD, (void *) dispatch);
Brian Paul3a71d052000-09-05 20:17:37 +0000200 if (ThreadSafe)
201 _glapi_Dispatch = NULL;
202 else
203 _glapi_Dispatch = dispatch;
204 }
Brian Paul3a71d052000-09-05 20:17:37 +0000205#else /*THREADS*/
Brian Paulab0c8862001-01-23 23:35:47 +0000206 if (DispatchOverride) {
207 _glapi_RealDispatch = dispatch;
208 }
209 else {
210 _glapi_Dispatch = dispatch;
211 }
Brian Paul3a71d052000-09-05 20:17:37 +0000212#endif /*THREADS*/
Brian Paul7fb54ae1999-11-19 22:33:50 +0000213}
214
215
Brian Paulbb72d321999-12-16 17:31:59 +0000216
Brian Paul7fb54ae1999-11-19 22:33:50 +0000217/*
Brian Paulbb72d321999-12-16 17:31:59 +0000218 * Return pointer to current dispatch table for calling thread.
Brian Paul7fb54ae1999-11-19 22:33:50 +0000219 */
220struct _glapi_table *
221_glapi_get_dispatch(void)
222{
223#if defined(THREADS)
Brian Paul26e14d22000-01-05 04:36:17 +0000224 if (ThreadSafe) {
Brian Paulab0c8862001-01-23 23:35:47 +0000225 if (DispatchOverride) {
226 return (struct _glapi_table *) _glthread_GetTSD(&RealDispatchTSD);
227 }
228 else {
229 return (struct _glapi_table *) _glthread_GetTSD(&DispatchTSD);
230 }
Brian Paulbb72d321999-12-16 17:31:59 +0000231 }
Brian Paul590d3471999-12-17 12:20:23 +0000232 else {
Brian Paulab0c8862001-01-23 23:35:47 +0000233 if (DispatchOverride) {
234 assert(_glapi_RealDispatch);
235 return _glapi_RealDispatch;
236 }
237 else {
238 assert(_glapi_Dispatch);
239 return _glapi_Dispatch;
240 }
Brian Paul590d3471999-12-17 12:20:23 +0000241 }
Brian Paul7fb54ae1999-11-19 22:33:50 +0000242#else
Brian Paulc2319b42000-01-17 19:28:31 +0000243 return _glapi_Dispatch;
Brian Paul7fb54ae1999-11-19 22:33:50 +0000244#endif
245}
246
247
Brian Paulab0c8862001-01-23 23:35:47 +0000248/*
249 * Notes on dispatch overrride:
250 *
251 * Dispatch override allows an external agent to hook into the GL dispatch
252 * mechanism before execution goes into the core rendering library. For
253 * example, a trace mechanism would insert itself as an overrider, print
254 * logging info for each GL function, then dispatch to the real GL function.
255 *
256 * libGLS (GL Stream library) is another agent that might use override.
257 *
258 * We don't allow more than one layer of overriding at this time.
259 * In the future we may allow nested/layered override. In that case
260 * _glapi_begin_dispatch_override() will return an override layer,
261 * _glapi_end_dispatch_override(layer) will remove an override layer
262 * and _glapi_get_override_dispatch(layer) will return the dispatch
263 * table for a given override layer. layer = 0 will be the "real"
264 * dispatch table.
265 */
266
267/*
268 * Return: dispatch override layer number.
269 */
270int
271_glapi_begin_dispatch_override(struct _glapi_table *override)
Brian Paul3a71d052000-09-05 20:17:37 +0000272{
Brian Paulab0c8862001-01-23 23:35:47 +0000273 struct _glapi_table *real = _glapi_get_dispatch();
274
275 assert(!DispatchOverride); /* can't nest at this time */
276 DispatchOverride = GL_TRUE;
277
278 _glapi_set_dispatch(real);
Brian Paul3a71d052000-09-05 20:17:37 +0000279
280#if defined(THREADS)
Brian Paulab0c8862001-01-23 23:35:47 +0000281 _glthread_SetTSD(&DispatchTSD, (void *) override);
282 if (ThreadSafe)
283 _glapi_Dispatch = NULL;
284 else
285 _glapi_Dispatch = override;
286#else
287 _glapi_Dispatch = override;
288#endif
289 return 1;
290}
291
292
293void
294_glapi_end_dispatch_override(int layer)
295{
296 struct _glapi_table *real = _glapi_get_dispatch();
297 (void) layer;
298 DispatchOverride = GL_FALSE;
299 _glapi_set_dispatch(real);
300 /* the rest of this isn't needed, just play it safe */
301#if defined(THREADS)
302 _glthread_SetTSD(&RealDispatchTSD, NULL);
303#endif
304 _glapi_RealDispatch = NULL;
305}
306
307
308struct _glapi_table *
309_glapi_get_override_dispatch(int layer)
310{
311 if (layer == 0) {
312 return _glapi_get_dispatch();
Brian Paul3a71d052000-09-05 20:17:37 +0000313 }
314 else {
Brian Paulab0c8862001-01-23 23:35:47 +0000315 if (DispatchOverride) {
316#if defined(THREADS)
317 return (struct _glapi_table *) _glthread_GetTSD(&DispatchTSD);
Brian Paul3a71d052000-09-05 20:17:37 +0000318#else
Brian Paulab0c8862001-01-23 23:35:47 +0000319 return _glapi_Dispatch;
Brian Paul3a71d052000-09-05 20:17:37 +0000320#endif
Brian Paulab0c8862001-01-23 23:35:47 +0000321 }
322 else {
323 return NULL;
324 }
325 }
Brian Paul3a71d052000-09-05 20:17:37 +0000326}
Brian Paulab0c8862001-01-23 23:35:47 +0000327
Brian Paul3a71d052000-09-05 20:17:37 +0000328
Brian Paul91bcefa1999-11-27 21:30:40 +0000329
330/*
331 * Return size of dispatch table struct as number of functions (or
332 * slots).
333 */
334GLuint
335_glapi_get_dispatch_table_size(void)
336{
Brian Paul0f710251999-12-15 15:02:30 +0000337 /* return sizeof(struct _glapi_table) / sizeof(void *);*/
338 GetSizeCalled = GL_TRUE;
339 return MaxDispatchOffset + 1;
Brian Paul91bcefa1999-11-27 21:30:40 +0000340}
341
342
343
Brian Paul7fb54ae1999-11-19 22:33:50 +0000344/*
345 * Get API dispatcher version string.
Brian Paul7fb54ae1999-11-19 22:33:50 +0000346 */
347const char *
348_glapi_get_version(void)
349{
Brian Paulab0c8862001-01-23 23:35:47 +0000350 return "20010116"; /* YYYYMMDD */
Brian Paul7fb54ae1999-11-19 22:33:50 +0000351}
352
353
Brian Paul0c239fc1999-12-16 12:38:11 +0000354/*
355 * For each entry in static_functions[] which use this function
356 * we should implement a dispatch function in glapitemp.h and
357 * in glapinoop.c
358 */
Brian Paulb3674092000-01-08 11:01:24 +0000359static int NotImplemented(void)
Brian Paul0c239fc1999-12-16 12:38:11 +0000360{
Brian Paulb3674092000-01-08 11:01:24 +0000361 return 0;
Brian Paul0c239fc1999-12-16 12:38:11 +0000362}
363
364
Brian Paul959f8022000-03-19 01:10:11 +0000365struct name_address_offset {
366 const char *Name;
367 GLvoid *Address;
368 GLuint Offset;
369};
370
Brian Paul0c239fc1999-12-16 12:38:11 +0000371
Brian Paul8ceb5c32000-02-24 22:14:04 +0000372static struct name_address_offset static_functions[] = {
Brian Paul0c239fc1999-12-16 12:38:11 +0000373 /* GL 1.1 */
Brian Paul8ceb5c32000-02-24 22:14:04 +0000374 { "glNewList", (GLvoid *) glNewList, _gloffset_NewList },
375 { "glEndList", (GLvoid *) glEndList, _gloffset_EndList },
376 { "glCallList", (GLvoid *) glCallList, _gloffset_CallList },
377 { "glCallLists", (GLvoid *) glCallLists, _gloffset_CallLists },
378 { "glDeleteLists", (GLvoid *) glDeleteLists, _gloffset_DeleteLists },
379 { "glGenLists", (GLvoid *) glGenLists, _gloffset_GenLists },
380 { "glListBase", (GLvoid *) glListBase, _gloffset_ListBase },
381 { "glBegin", (GLvoid *) glBegin, _gloffset_Begin },
382 { "glBitmap", (GLvoid *) glBitmap, _gloffset_Bitmap },
383 { "glColor3b", (GLvoid *) glColor3b, _gloffset_Color3b },
384 { "glColor3bv", (GLvoid *) glColor3bv, _gloffset_Color3bv },
385 { "glColor3d", (GLvoid *) glColor3d, _gloffset_Color3d },
386 { "glColor3dv", (GLvoid *) glColor3dv, _gloffset_Color3dv },
387 { "glColor3f", (GLvoid *) glColor3f, _gloffset_Color3f },
388 { "glColor3fv", (GLvoid *) glColor3fv, _gloffset_Color3fv },
389 { "glColor3i", (GLvoid *) glColor3i, _gloffset_Color3i },
390 { "glColor3iv", (GLvoid *) glColor3iv, _gloffset_Color3iv },
391 { "glColor3s", (GLvoid *) glColor3s, _gloffset_Color3s },
392 { "glColor3sv", (GLvoid *) glColor3sv, _gloffset_Color3sv },
393 { "glColor3ub", (GLvoid *) glColor3ub, _gloffset_Color3ub },
394 { "glColor3ubv", (GLvoid *) glColor3ubv, _gloffset_Color3ubv },
395 { "glColor3ui", (GLvoid *) glColor3ui, _gloffset_Color3ui },
396 { "glColor3uiv", (GLvoid *) glColor3uiv, _gloffset_Color3uiv },
397 { "glColor3us", (GLvoid *) glColor3us, _gloffset_Color3us },
398 { "glColor3usv", (GLvoid *) glColor3usv, _gloffset_Color3usv },
399 { "glColor4b", (GLvoid *) glColor4b, _gloffset_Color4b },
400 { "glColor4bv", (GLvoid *) glColor4bv, _gloffset_Color4bv },
401 { "glColor4d", (GLvoid *) glColor4d, _gloffset_Color4d },
402 { "glColor4dv", (GLvoid *) glColor4dv, _gloffset_Color4dv },
403 { "glColor4f", (GLvoid *) glColor4f, _gloffset_Color4f },
404 { "glColor4fv", (GLvoid *) glColor4fv, _gloffset_Color4fv },
405 { "glColor4i", (GLvoid *) glColor4i, _gloffset_Color4i },
406 { "glColor4iv", (GLvoid *) glColor4iv, _gloffset_Color4iv },
407 { "glColor4s", (GLvoid *) glColor4s, _gloffset_Color4s },
408 { "glColor4sv", (GLvoid *) glColor4sv, _gloffset_Color4sv },
409 { "glColor4ub", (GLvoid *) glColor4ub, _gloffset_Color4ub },
410 { "glColor4ubv", (GLvoid *) glColor4ubv, _gloffset_Color4ubv },
411 { "glColor4ui", (GLvoid *) glColor4ui, _gloffset_Color4ui },
412 { "glColor4uiv", (GLvoid *) glColor4uiv, _gloffset_Color4uiv },
413 { "glColor4us", (GLvoid *) glColor4us, _gloffset_Color4us },
414 { "glColor4usv", (GLvoid *) glColor4usv, _gloffset_Color4usv },
415 { "glEdgeFlag", (GLvoid *) glEdgeFlag, _gloffset_EdgeFlag },
416 { "glEdgeFlagv", (GLvoid *) glEdgeFlagv, _gloffset_EdgeFlagv },
417 { "glEnd", (GLvoid *) glEnd, _gloffset_End },
418 { "glIndexd", (GLvoid *) glIndexd, _gloffset_Indexd },
419 { "glIndexdv", (GLvoid *) glIndexdv, _gloffset_Indexdv },
420 { "glIndexf", (GLvoid *) glIndexf, _gloffset_Indexf },
421 { "glIndexfv", (GLvoid *) glIndexfv, _gloffset_Indexfv },
422 { "glIndexi", (GLvoid *) glIndexi, _gloffset_Indexi },
423 { "glIndexiv", (GLvoid *) glIndexiv, _gloffset_Indexiv },
424 { "glIndexs", (GLvoid *) glIndexs, _gloffset_Indexs },
425 { "glIndexsv", (GLvoid *) glIndexsv, _gloffset_Indexsv },
426 { "glNormal3b", (GLvoid *) glNormal3b, _gloffset_Normal3b },
427 { "glNormal3bv", (GLvoid *) glNormal3bv, _gloffset_Normal3bv },
428 { "glNormal3d", (GLvoid *) glNormal3d, _gloffset_Normal3d },
429 { "glNormal3dv", (GLvoid *) glNormal3dv, _gloffset_Normal3dv },
430 { "glNormal3f", (GLvoid *) glNormal3f, _gloffset_Normal3f },
431 { "glNormal3fv", (GLvoid *) glNormal3fv, _gloffset_Normal3fv },
432 { "glNormal3i", (GLvoid *) glNormal3i, _gloffset_Normal3i },
433 { "glNormal3iv", (GLvoid *) glNormal3iv, _gloffset_Normal3iv },
434 { "glNormal3s", (GLvoid *) glNormal3s, _gloffset_Normal3s },
435 { "glNormal3sv", (GLvoid *) glNormal3sv, _gloffset_Normal3sv },
436 { "glRasterPos2d", (GLvoid *) glRasterPos2d, _gloffset_RasterPos2d },
437 { "glRasterPos2dv", (GLvoid *) glRasterPos2dv, _gloffset_RasterPos2dv },
438 { "glRasterPos2f", (GLvoid *) glRasterPos2f, _gloffset_RasterPos2f },
439 { "glRasterPos2fv", (GLvoid *) glRasterPos2fv, _gloffset_RasterPos2fv },
440 { "glRasterPos2i", (GLvoid *) glRasterPos2i, _gloffset_RasterPos2i },
441 { "glRasterPos2iv", (GLvoid *) glRasterPos2iv, _gloffset_RasterPos2iv },
442 { "glRasterPos2s", (GLvoid *) glRasterPos2s, _gloffset_RasterPos2s },
443 { "glRasterPos2sv", (GLvoid *) glRasterPos2sv, _gloffset_RasterPos2sv },
444 { "glRasterPos3d", (GLvoid *) glRasterPos3d, _gloffset_RasterPos3d },
445 { "glRasterPos3dv", (GLvoid *) glRasterPos3dv, _gloffset_RasterPos3dv },
446 { "glRasterPos3f", (GLvoid *) glRasterPos3f, _gloffset_RasterPos3f },
447 { "glRasterPos3fv", (GLvoid *) glRasterPos3fv, _gloffset_RasterPos3fv },
448 { "glRasterPos3i", (GLvoid *) glRasterPos3i, _gloffset_RasterPos3i },
449 { "glRasterPos3iv", (GLvoid *) glRasterPos3iv, _gloffset_RasterPos3iv },
450 { "glRasterPos3s", (GLvoid *) glRasterPos3s, _gloffset_RasterPos3s },
451 { "glRasterPos3sv", (GLvoid *) glRasterPos3sv, _gloffset_RasterPos3sv },
452 { "glRasterPos4d", (GLvoid *) glRasterPos4d, _gloffset_RasterPos4d },
453 { "glRasterPos4dv", (GLvoid *) glRasterPos4dv, _gloffset_RasterPos4dv },
454 { "glRasterPos4f", (GLvoid *) glRasterPos4f, _gloffset_RasterPos4f },
455 { "glRasterPos4fv", (GLvoid *) glRasterPos4fv, _gloffset_RasterPos4fv },
456 { "glRasterPos4i", (GLvoid *) glRasterPos4i, _gloffset_RasterPos4i },
457 { "glRasterPos4iv", (GLvoid *) glRasterPos4iv, _gloffset_RasterPos4iv },
458 { "glRasterPos4s", (GLvoid *) glRasterPos4s, _gloffset_RasterPos4s },
459 { "glRasterPos4sv", (GLvoid *) glRasterPos4sv, _gloffset_RasterPos4sv },
460 { "glRectd", (GLvoid *) glRectd, _gloffset_Rectd },
461 { "glRectdv", (GLvoid *) glRectdv, _gloffset_Rectdv },
462 { "glRectf", (GLvoid *) glRectf, _gloffset_Rectf },
463 { "glRectfv", (GLvoid *) glRectfv, _gloffset_Rectfv },
464 { "glRecti", (GLvoid *) glRecti, _gloffset_Recti },
465 { "glRectiv", (GLvoid *) glRectiv, _gloffset_Rectiv },
466 { "glRects", (GLvoid *) glRects, _gloffset_Rects },
467 { "glRectsv", (GLvoid *) glRectsv, _gloffset_Rectsv },
468 { "glTexCoord1d", (GLvoid *) glTexCoord1d, _gloffset_TexCoord1d },
469 { "glTexCoord1dv", (GLvoid *) glTexCoord1dv, _gloffset_TexCoord1dv },
470 { "glTexCoord1f", (GLvoid *) glTexCoord1f, _gloffset_TexCoord1f },
471 { "glTexCoord1fv", (GLvoid *) glTexCoord1fv, _gloffset_TexCoord1fv },
472 { "glTexCoord1i", (GLvoid *) glTexCoord1i, _gloffset_TexCoord1i },
473 { "glTexCoord1iv", (GLvoid *) glTexCoord1iv, _gloffset_TexCoord1iv },
474 { "glTexCoord1s", (GLvoid *) glTexCoord1s, _gloffset_TexCoord1s },
475 { "glTexCoord1sv", (GLvoid *) glTexCoord1sv, _gloffset_TexCoord1sv },
476 { "glTexCoord2d", (GLvoid *) glTexCoord2d, _gloffset_TexCoord2d },
477 { "glTexCoord2dv", (GLvoid *) glTexCoord2dv, _gloffset_TexCoord2dv },
478 { "glTexCoord2f", (GLvoid *) glTexCoord2f, _gloffset_TexCoord2f },
479 { "glTexCoord2fv", (GLvoid *) glTexCoord2fv, _gloffset_TexCoord2fv },
480 { "glTexCoord2i", (GLvoid *) glTexCoord2i, _gloffset_TexCoord2i },
481 { "glTexCoord2iv", (GLvoid *) glTexCoord2iv, _gloffset_TexCoord2iv },
482 { "glTexCoord2s", (GLvoid *) glTexCoord2s, _gloffset_TexCoord2s },
483 { "glTexCoord2sv", (GLvoid *) glTexCoord2sv, _gloffset_TexCoord2sv },
484 { "glTexCoord3d", (GLvoid *) glTexCoord3d, _gloffset_TexCoord3d },
485 { "glTexCoord3dv", (GLvoid *) glTexCoord3dv, _gloffset_TexCoord3dv },
486 { "glTexCoord3f", (GLvoid *) glTexCoord3f, _gloffset_TexCoord3f },
487 { "glTexCoord3fv", (GLvoid *) glTexCoord3fv, _gloffset_TexCoord3fv },
488 { "glTexCoord3i", (GLvoid *) glTexCoord3i, _gloffset_TexCoord3i },
489 { "glTexCoord3iv", (GLvoid *) glTexCoord3iv, _gloffset_TexCoord3iv },
490 { "glTexCoord3s", (GLvoid *) glTexCoord3s, _gloffset_TexCoord3s },
491 { "glTexCoord3sv", (GLvoid *) glTexCoord3sv, _gloffset_TexCoord3sv },
492 { "glTexCoord4d", (GLvoid *) glTexCoord4d, _gloffset_TexCoord4d },
493 { "glTexCoord4dv", (GLvoid *) glTexCoord4dv, _gloffset_TexCoord4dv },
494 { "glTexCoord4f", (GLvoid *) glTexCoord4f, _gloffset_TexCoord4f },
495 { "glTexCoord4fv", (GLvoid *) glTexCoord4fv, _gloffset_TexCoord4fv },
496 { "glTexCoord4i", (GLvoid *) glTexCoord4i, _gloffset_TexCoord4i },
497 { "glTexCoord4iv", (GLvoid *) glTexCoord4iv, _gloffset_TexCoord4iv },
498 { "glTexCoord4s", (GLvoid *) glTexCoord4s, _gloffset_TexCoord4s },
499 { "glTexCoord4sv", (GLvoid *) glTexCoord4sv, _gloffset_TexCoord4sv },
500 { "glVertex2d", (GLvoid *) glVertex2d, _gloffset_Vertex2d },
501 { "glVertex2dv", (GLvoid *) glVertex2dv, _gloffset_Vertex2dv },
502 { "glVertex2f", (GLvoid *) glVertex2f, _gloffset_Vertex2f },
503 { "glVertex2fv", (GLvoid *) glVertex2fv, _gloffset_Vertex2fv },
504 { "glVertex2i", (GLvoid *) glVertex2i, _gloffset_Vertex2i },
505 { "glVertex2iv", (GLvoid *) glVertex2iv, _gloffset_Vertex2iv },
506 { "glVertex2s", (GLvoid *) glVertex2s, _gloffset_Vertex2s },
507 { "glVertex2sv", (GLvoid *) glVertex2sv, _gloffset_Vertex2sv },
508 { "glVertex3d", (GLvoid *) glVertex3d, _gloffset_Vertex3d },
509 { "glVertex3dv", (GLvoid *) glVertex3dv, _gloffset_Vertex3dv },
510 { "glVertex3f", (GLvoid *) glVertex3f, _gloffset_Vertex3f },
511 { "glVertex3fv", (GLvoid *) glVertex3fv, _gloffset_Vertex3fv },
512 { "glVertex3i", (GLvoid *) glVertex3i, _gloffset_Vertex3i },
513 { "glVertex3iv", (GLvoid *) glVertex3iv, _gloffset_Vertex3iv },
514 { "glVertex3s", (GLvoid *) glVertex3s, _gloffset_Vertex3s },
515 { "glVertex3sv", (GLvoid *) glVertex3sv, _gloffset_Vertex3sv },
516 { "glVertex4d", (GLvoid *) glVertex4d, _gloffset_Vertex4d },
517 { "glVertex4dv", (GLvoid *) glVertex4dv, _gloffset_Vertex4dv },
518 { "glVertex4f", (GLvoid *) glVertex4f, _gloffset_Vertex4f },
519 { "glVertex4fv", (GLvoid *) glVertex4fv, _gloffset_Vertex4fv },
520 { "glVertex4i", (GLvoid *) glVertex4i, _gloffset_Vertex4i },
521 { "glVertex4iv", (GLvoid *) glVertex4iv, _gloffset_Vertex4iv },
522 { "glVertex4s", (GLvoid *) glVertex4s, _gloffset_Vertex4s },
523 { "glVertex4sv", (GLvoid *) glVertex4sv, _gloffset_Vertex4sv },
524 { "glClipPlane", (GLvoid *) glClipPlane, _gloffset_ClipPlane },
525 { "glColorMaterial", (GLvoid *) glColorMaterial, _gloffset_ColorMaterial },
526 { "glCullFace", (GLvoid *) glCullFace, _gloffset_CullFace },
527 { "glFogf", (GLvoid *) glFogf, _gloffset_Fogf },
528 { "glFogfv", (GLvoid *) glFogfv, _gloffset_Fogfv },
529 { "glFogi", (GLvoid *) glFogi, _gloffset_Fogi },
530 { "glFogiv", (GLvoid *) glFogiv, _gloffset_Fogiv },
531 { "glFrontFace", (GLvoid *) glFrontFace, _gloffset_FrontFace },
532 { "glHint", (GLvoid *) glHint, _gloffset_Hint },
533 { "glLightf", (GLvoid *) glLightf, _gloffset_Lightf },
534 { "glLightfv", (GLvoid *) glLightfv, _gloffset_Lightfv },
535 { "glLighti", (GLvoid *) glLighti, _gloffset_Lighti },
536 { "glLightiv", (GLvoid *) glLightiv, _gloffset_Lightiv },
537 { "glLightModelf", (GLvoid *) glLightModelf, _gloffset_LightModelf },
538 { "glLightModelfv", (GLvoid *) glLightModelfv, _gloffset_LightModelfv },
539 { "glLightModeli", (GLvoid *) glLightModeli, _gloffset_LightModeli },
540 { "glLightModeliv", (GLvoid *) glLightModeliv, _gloffset_LightModeliv },
541 { "glLineStipple", (GLvoid *) glLineStipple, _gloffset_LineStipple },
542 { "glLineWidth", (GLvoid *) glLineWidth, _gloffset_LineWidth },
543 { "glMaterialf", (GLvoid *) glMaterialf, _gloffset_Materialf },
544 { "glMaterialfv", (GLvoid *) glMaterialfv, _gloffset_Materialfv },
545 { "glMateriali", (GLvoid *) glMateriali, _gloffset_Materiali },
546 { "glMaterialiv", (GLvoid *) glMaterialiv, _gloffset_Materialiv },
547 { "glPointSize", (GLvoid *) glPointSize, _gloffset_PointSize },
548 { "glPolygonMode", (GLvoid *) glPolygonMode, _gloffset_PolygonMode },
549 { "glPolygonStipple", (GLvoid *) glPolygonStipple, _gloffset_PolygonStipple },
550 { "glScissor", (GLvoid *) glScissor, _gloffset_Scissor },
551 { "glShadeModel", (GLvoid *) glShadeModel, _gloffset_ShadeModel },
552 { "glTexParameterf", (GLvoid *) glTexParameterf, _gloffset_TexParameterf },
553 { "glTexParameterfv", (GLvoid *) glTexParameterfv, _gloffset_TexParameterfv },
554 { "glTexParameteri", (GLvoid *) glTexParameteri, _gloffset_TexParameteri },
555 { "glTexParameteriv", (GLvoid *) glTexParameteriv, _gloffset_TexParameteriv },
556 { "glTexImage1D", (GLvoid *) glTexImage1D, _gloffset_TexImage1D },
557 { "glTexImage2D", (GLvoid *) glTexImage2D, _gloffset_TexImage2D },
558 { "glTexEnvf", (GLvoid *) glTexEnvf, _gloffset_TexEnvf },
559 { "glTexEnvfv", (GLvoid *) glTexEnvfv, _gloffset_TexEnvfv },
560 { "glTexEnvi", (GLvoid *) glTexEnvi, _gloffset_TexEnvi },
561 { "glTexEnviv", (GLvoid *) glTexEnviv, _gloffset_TexEnviv },
562 { "glTexGend", (GLvoid *) glTexGend, _gloffset_TexGend },
563 { "glTexGendv", (GLvoid *) glTexGendv, _gloffset_TexGendv },
564 { "glTexGenf", (GLvoid *) glTexGenf, _gloffset_TexGenf },
565 { "glTexGenfv", (GLvoid *) glTexGenfv, _gloffset_TexGenfv },
566 { "glTexGeni", (GLvoid *) glTexGeni, _gloffset_TexGeni },
567 { "glTexGeniv", (GLvoid *) glTexGeniv, _gloffset_TexGeniv },
568 { "glFeedbackBuffer", (GLvoid *) glFeedbackBuffer, _gloffset_FeedbackBuffer },
569 { "glSelectBuffer", (GLvoid *) glSelectBuffer, _gloffset_SelectBuffer },
570 { "glRenderMode", (GLvoid *) glRenderMode, _gloffset_RenderMode },
571 { "glInitNames", (GLvoid *) glInitNames, _gloffset_InitNames },
572 { "glLoadName", (GLvoid *) glLoadName, _gloffset_LoadName },
573 { "glPassThrough", (GLvoid *) glPassThrough, _gloffset_PassThrough },
574 { "glPopName", (GLvoid *) glPopName, _gloffset_PopName },
575 { "glPushName", (GLvoid *) glPushName, _gloffset_PushName },
576 { "glDrawBuffer", (GLvoid *) glDrawBuffer, _gloffset_DrawBuffer },
577 { "glClear", (GLvoid *) glClear, _gloffset_Clear },
578 { "glClearAccum", (GLvoid *) glClearAccum, _gloffset_ClearAccum },
579 { "glClearIndex", (GLvoid *) glClearIndex, _gloffset_ClearIndex },
580 { "glClearColor", (GLvoid *) glClearColor, _gloffset_ClearColor },
581 { "glClearStencil", (GLvoid *) glClearStencil, _gloffset_ClearStencil },
582 { "glClearDepth", (GLvoid *) glClearDepth, _gloffset_ClearDepth },
583 { "glStencilMask", (GLvoid *) glStencilMask, _gloffset_StencilMask },
584 { "glColorMask", (GLvoid *) glColorMask, _gloffset_ColorMask },
585 { "glDepthMask", (GLvoid *) glDepthMask, _gloffset_DepthMask },
586 { "glIndexMask", (GLvoid *) glIndexMask, _gloffset_IndexMask },
587 { "glAccum", (GLvoid *) glAccum, _gloffset_Accum },
588 { "glDisable", (GLvoid *) glDisable, _gloffset_Disable },
589 { "glEnable", (GLvoid *) glEnable, _gloffset_Enable },
590 { "glFinish", (GLvoid *) glFinish, _gloffset_Finish },
591 { "glFlush", (GLvoid *) glFlush, _gloffset_Flush },
592 { "glPopAttrib", (GLvoid *) glPopAttrib, _gloffset_PopAttrib },
593 { "glPushAttrib", (GLvoid *) glPushAttrib, _gloffset_PushAttrib },
594 { "glMap1d", (GLvoid *) glMap1d, _gloffset_Map1d },
595 { "glMap1f", (GLvoid *) glMap1f, _gloffset_Map1f },
596 { "glMap2d", (GLvoid *) glMap2d, _gloffset_Map2d },
597 { "glMap2f", (GLvoid *) glMap2f, _gloffset_Map2f },
598 { "glMapGrid1d", (GLvoid *) glMapGrid1d, _gloffset_MapGrid1d },
599 { "glMapGrid1f", (GLvoid *) glMapGrid1f, _gloffset_MapGrid1f },
600 { "glMapGrid2d", (GLvoid *) glMapGrid2d, _gloffset_MapGrid2d },
601 { "glMapGrid2f", (GLvoid *) glMapGrid2f, _gloffset_MapGrid2f },
602 { "glEvalCoord1d", (GLvoid *) glEvalCoord1d, _gloffset_EvalCoord1d },
603 { "glEvalCoord1dv", (GLvoid *) glEvalCoord1dv, _gloffset_EvalCoord1dv },
604 { "glEvalCoord1f", (GLvoid *) glEvalCoord1f, _gloffset_EvalCoord1f },
605 { "glEvalCoord1fv", (GLvoid *) glEvalCoord1fv, _gloffset_EvalCoord1fv },
606 { "glEvalCoord2d", (GLvoid *) glEvalCoord2d, _gloffset_EvalCoord2d },
607 { "glEvalCoord2dv", (GLvoid *) glEvalCoord2dv, _gloffset_EvalCoord2dv },
608 { "glEvalCoord2f", (GLvoid *) glEvalCoord2f, _gloffset_EvalCoord2f },
609 { "glEvalCoord2fv", (GLvoid *) glEvalCoord2fv, _gloffset_EvalCoord2fv },
610 { "glEvalMesh1", (GLvoid *) glEvalMesh1, _gloffset_EvalMesh1 },
611 { "glEvalPoint1", (GLvoid *) glEvalPoint1, _gloffset_EvalPoint1 },
612 { "glEvalMesh2", (GLvoid *) glEvalMesh2, _gloffset_EvalMesh2 },
613 { "glEvalPoint2", (GLvoid *) glEvalPoint2, _gloffset_EvalPoint2 },
614 { "glAlphaFunc", (GLvoid *) glAlphaFunc, _gloffset_AlphaFunc },
615 { "glBlendFunc", (GLvoid *) glBlendFunc, _gloffset_BlendFunc },
616 { "glLogicOp", (GLvoid *) glLogicOp, _gloffset_LogicOp },
617 { "glStencilFunc", (GLvoid *) glStencilFunc, _gloffset_StencilFunc },
618 { "glStencilOp", (GLvoid *) glStencilOp, _gloffset_StencilOp },
619 { "glDepthFunc", (GLvoid *) glDepthFunc, _gloffset_DepthFunc },
620 { "glPixelZoom", (GLvoid *) glPixelZoom, _gloffset_PixelZoom },
621 { "glPixelTransferf", (GLvoid *) glPixelTransferf, _gloffset_PixelTransferf },
622 { "glPixelTransferi", (GLvoid *) glPixelTransferi, _gloffset_PixelTransferi },
623 { "glPixelStoref", (GLvoid *) glPixelStoref, _gloffset_PixelStoref },
624 { "glPixelStorei", (GLvoid *) glPixelStorei, _gloffset_PixelStorei },
625 { "glPixelMapfv", (GLvoid *) glPixelMapfv, _gloffset_PixelMapfv },
626 { "glPixelMapuiv", (GLvoid *) glPixelMapuiv, _gloffset_PixelMapuiv },
627 { "glPixelMapusv", (GLvoid *) glPixelMapusv, _gloffset_PixelMapusv },
628 { "glReadBuffer", (GLvoid *) glReadBuffer, _gloffset_ReadBuffer },
629 { "glCopyPixels", (GLvoid *) glCopyPixels, _gloffset_CopyPixels },
630 { "glReadPixels", (GLvoid *) glReadPixels, _gloffset_ReadPixels },
631 { "glDrawPixels", (GLvoid *) glDrawPixels, _gloffset_DrawPixels },
632 { "glGetBooleanv", (GLvoid *) glGetBooleanv, _gloffset_GetBooleanv },
633 { "glGetClipPlane", (GLvoid *) glGetClipPlane, _gloffset_GetClipPlane },
634 { "glGetDoublev", (GLvoid *) glGetDoublev, _gloffset_GetDoublev },
635 { "glGetError", (GLvoid *) glGetError, _gloffset_GetError },
636 { "glGetFloatv", (GLvoid *) glGetFloatv, _gloffset_GetFloatv },
637 { "glGetIntegerv", (GLvoid *) glGetIntegerv, _gloffset_GetIntegerv },
638 { "glGetLightfv", (GLvoid *) glGetLightfv, _gloffset_GetLightfv },
639 { "glGetLightiv", (GLvoid *) glGetLightiv, _gloffset_GetLightiv },
640 { "glGetMapdv", (GLvoid *) glGetMapdv, _gloffset_GetMapdv },
641 { "glGetMapfv", (GLvoid *) glGetMapfv, _gloffset_GetMapfv },
642 { "glGetMapiv", (GLvoid *) glGetMapiv, _gloffset_GetMapiv },
643 { "glGetMaterialfv", (GLvoid *) glGetMaterialfv, _gloffset_GetMaterialfv },
644 { "glGetMaterialiv", (GLvoid *) glGetMaterialiv, _gloffset_GetMaterialiv },
645 { "glGetPixelMapfv", (GLvoid *) glGetPixelMapfv, _gloffset_GetPixelMapfv },
646 { "glGetPixelMapuiv", (GLvoid *) glGetPixelMapuiv, _gloffset_GetPixelMapuiv },
647 { "glGetPixelMapusv", (GLvoid *) glGetPixelMapusv, _gloffset_GetPixelMapusv },
648 { "glGetPolygonStipple", (GLvoid *) glGetPolygonStipple, _gloffset_GetPolygonStipple },
649 { "glGetString", (GLvoid *) glGetString, _gloffset_GetString },
650 { "glGetTexEnvfv", (GLvoid *) glGetTexEnvfv, _gloffset_GetTexEnvfv },
651 { "glGetTexEnviv", (GLvoid *) glGetTexEnviv, _gloffset_GetTexEnviv },
652 { "glGetTexGendv", (GLvoid *) glGetTexGendv, _gloffset_GetTexGendv },
653 { "glGetTexGenfv", (GLvoid *) glGetTexGenfv, _gloffset_GetTexGenfv },
654 { "glGetTexGeniv", (GLvoid *) glGetTexGeniv, _gloffset_GetTexGeniv },
655 { "glGetTexImage", (GLvoid *) glGetTexImage, _gloffset_GetTexImage },
656 { "glGetTexParameterfv", (GLvoid *) glGetTexParameterfv, _gloffset_GetTexParameterfv },
657 { "glGetTexParameteriv", (GLvoid *) glGetTexParameteriv, _gloffset_GetTexParameteriv },
658 { "glGetTexLevelParameterfv", (GLvoid *) glGetTexLevelParameterfv, _gloffset_GetTexLevelParameterfv },
659 { "glGetTexLevelParameteriv", (GLvoid *) glGetTexLevelParameteriv, _gloffset_GetTexLevelParameteriv },
660 { "glIsEnabled", (GLvoid *) glIsEnabled, _gloffset_IsEnabled },
661 { "glIsList", (GLvoid *) glIsList, _gloffset_IsList },
662 { "glDepthRange", (GLvoid *) glDepthRange, _gloffset_DepthRange },
663 { "glFrustum", (GLvoid *) glFrustum, _gloffset_Frustum },
664 { "glLoadIdentity", (GLvoid *) glLoadIdentity, _gloffset_LoadIdentity },
665 { "glLoadMatrixf", (GLvoid *) glLoadMatrixf, _gloffset_LoadMatrixf },
666 { "glLoadMatrixd", (GLvoid *) glLoadMatrixd, _gloffset_LoadMatrixd },
667 { "glMatrixMode", (GLvoid *) glMatrixMode, _gloffset_MatrixMode },
668 { "glMultMatrixf", (GLvoid *) glMultMatrixf, _gloffset_MultMatrixf },
669 { "glMultMatrixd", (GLvoid *) glMultMatrixd, _gloffset_MultMatrixd },
670 { "glOrtho", (GLvoid *) glOrtho, _gloffset_Ortho },
671 { "glPopMatrix", (GLvoid *) glPopMatrix, _gloffset_PopMatrix },
672 { "glPushMatrix", (GLvoid *) glPushMatrix, _gloffset_PushMatrix },
673 { "glRotated", (GLvoid *) glRotated, _gloffset_Rotated },
674 { "glRotatef", (GLvoid *) glRotatef, _gloffset_Rotatef },
675 { "glScaled", (GLvoid *) glScaled, _gloffset_Scaled },
676 { "glScalef", (GLvoid *) glScalef, _gloffset_Scalef },
677 { "glTranslated", (GLvoid *) glTranslated, _gloffset_Translated },
678 { "glTranslatef", (GLvoid *) glTranslatef, _gloffset_Translatef },
679 { "glViewport", (GLvoid *) glViewport, _gloffset_Viewport },
680 /* 1.1 */
681 { "glArrayElement", (GLvoid *) glArrayElement, _gloffset_ArrayElement },
682 { "glColorPointer", (GLvoid *) glColorPointer, _gloffset_ColorPointer },
683 { "glDisableClientState", (GLvoid *) glDisableClientState, _gloffset_DisableClientState },
684 { "glDrawArrays", (GLvoid *) glDrawArrays, _gloffset_DrawArrays },
685 { "glDrawElements", (GLvoid *) glDrawElements, _gloffset_DrawElements },
686 { "glEdgeFlagPointer", (GLvoid *) glEdgeFlagPointer, _gloffset_EdgeFlagPointer },
687 { "glEnableClientState", (GLvoid *) glEnableClientState, _gloffset_EnableClientState },
688 { "glGetPointerv", (GLvoid *) glGetPointerv, _gloffset_GetPointerv },
689 { "glIndexPointer", (GLvoid *) glIndexPointer, _gloffset_IndexPointer },
690 { "glInterleavedArrays", (GLvoid *) glInterleavedArrays, _gloffset_InterleavedArrays },
691 { "glNormalPointer", (GLvoid *) glNormalPointer, _gloffset_NormalPointer },
692 { "glTexCoordPointer", (GLvoid *) glTexCoordPointer, _gloffset_TexCoordPointer },
693 { "glVertexPointer", (GLvoid *) glVertexPointer, _gloffset_VertexPointer },
694 { "glPolygonOffset", (GLvoid *) glPolygonOffset, _gloffset_PolygonOffset },
695 { "glCopyTexImage1D", (GLvoid *) glCopyTexImage1D, _gloffset_CopyTexImage1D },
696 { "glCopyTexImage2D", (GLvoid *) glCopyTexImage2D, _gloffset_CopyTexImage2D },
697 { "glCopyTexSubImage1D", (GLvoid *) glCopyTexSubImage1D, _gloffset_CopyTexSubImage1D },
698 { "glCopyTexSubImage2D", (GLvoid *) glCopyTexSubImage2D, _gloffset_CopyTexSubImage2D },
699 { "glTexSubImage1D", (GLvoid *) glTexSubImage1D, _gloffset_TexSubImage1D },
700 { "glTexSubImage2D", (GLvoid *) glTexSubImage2D, _gloffset_TexSubImage2D },
701 { "glAreTexturesResident", (GLvoid *) glAreTexturesResident, _gloffset_AreTexturesResident },
702 { "glBindTexture", (GLvoid *) glBindTexture, _gloffset_BindTexture },
703 { "glDeleteTextures", (GLvoid *) glDeleteTextures, _gloffset_DeleteTextures },
704 { "glGenTextures", (GLvoid *) glGenTextures, _gloffset_GenTextures },
705 { "glIsTexture", (GLvoid *) glIsTexture, _gloffset_IsTexture },
706 { "glPrioritizeTextures", (GLvoid *) glPrioritizeTextures, _gloffset_PrioritizeTextures },
707 { "glIndexub", (GLvoid *) glIndexub, _gloffset_Indexub },
708 { "glIndexubv", (GLvoid *) glIndexubv, _gloffset_Indexubv },
709 { "glPopClientAttrib", (GLvoid *) glPopClientAttrib, _gloffset_PopClientAttrib },
710 { "glPushClientAttrib", (GLvoid *) glPushClientAttrib, _gloffset_PushClientAttrib },
711 /* 1.2 */
Brian Paul77aa8b92000-01-07 07:30:13 +0000712#ifdef GL_VERSION_1_2
Brian Paul44202462000-05-18 18:14:22 +0000713#define NAME(X) (GLvoid *) X
Brian Paul77aa8b92000-01-07 07:30:13 +0000714#else
715#define NAME(X) NotImplemented
716#endif
Brian Paul8ceb5c32000-02-24 22:14:04 +0000717 { "glBlendColor", (GLvoid *) NAME(glBlendColor), _gloffset_BlendColor },
718 { "glBlendEquation", (GLvoid *) NAME(glBlendEquation), _gloffset_BlendEquation },
719 { "glDrawRangeElements", (GLvoid *) NAME(glDrawRangeElements), _gloffset_DrawRangeElements },
720 { "glColorTable", (GLvoid *) NAME(glColorTable), _gloffset_ColorTable },
721 { "glColorTableParameterfv", (GLvoid *) NAME(glColorTableParameterfv), _gloffset_ColorTableParameterfv },
722 { "glColorTableParameteriv", (GLvoid *) NAME(glColorTableParameteriv), _gloffset_ColorTableParameteriv },
723 { "glCopyColorTable", (GLvoid *) NAME(glCopyColorTable), _gloffset_CopyColorTable },
724 { "glGetColorTable", (GLvoid *) NAME(glGetColorTable), _gloffset_GetColorTable },
725 { "glGetColorTableParameterfv", (GLvoid *) NAME(glGetColorTableParameterfv), _gloffset_GetColorTableParameterfv },
726 { "glGetColorTableParameteriv", (GLvoid *) NAME(glGetColorTableParameteriv), _gloffset_GetColorTableParameteriv },
727 { "glColorSubTable", (GLvoid *) NAME(glColorSubTable), _gloffset_ColorSubTable },
728 { "glCopyColorSubTable", (GLvoid *) NAME(glCopyColorSubTable), _gloffset_CopyColorSubTable },
729 { "glConvolutionFilter1D", (GLvoid *) NAME(glConvolutionFilter1D), _gloffset_ConvolutionFilter1D },
730 { "glConvolutionFilter2D", (GLvoid *) NAME(glConvolutionFilter2D), _gloffset_ConvolutionFilter2D },
731 { "glConvolutionParameterf", (GLvoid *) NAME(glConvolutionParameterf), _gloffset_ConvolutionParameterf },
732 { "glConvolutionParameterfv", (GLvoid *) NAME(glConvolutionParameterfv), _gloffset_ConvolutionParameterfv },
733 { "glConvolutionParameteri", (GLvoid *) NAME(glConvolutionParameteri), _gloffset_ConvolutionParameteri },
734 { "glConvolutionParameteriv", (GLvoid *) NAME(glConvolutionParameteriv), _gloffset_ConvolutionParameteriv },
735 { "glCopyConvolutionFilter1D", (GLvoid *) NAME(glCopyConvolutionFilter1D), _gloffset_CopyConvolutionFilter1D },
736 { "glCopyConvolutionFilter2D", (GLvoid *) NAME(glCopyConvolutionFilter2D), _gloffset_CopyConvolutionFilter2D },
737 { "glGetConvolutionFilter", (GLvoid *) NAME(glGetConvolutionFilter), _gloffset_GetConvolutionFilter },
738 { "glGetConvolutionParameterfv", (GLvoid *) NAME(glGetConvolutionParameterfv), _gloffset_GetConvolutionParameterfv },
739 { "glGetConvolutionParameteriv", (GLvoid *) NAME(glGetConvolutionParameteriv), _gloffset_GetConvolutionParameteriv },
740 { "glGetSeparableFilter", (GLvoid *) NAME(glGetSeparableFilter), _gloffset_GetSeparableFilter },
741 { "glSeparableFilter2D", (GLvoid *) NAME(glSeparableFilter2D), _gloffset_SeparableFilter2D },
742 { "glGetHistogram", (GLvoid *) NAME(glGetHistogram), _gloffset_GetHistogram },
743 { "glGetHistogramParameterfv", (GLvoid *) NAME(glGetHistogramParameterfv), _gloffset_GetHistogramParameterfv },
744 { "glGetHistogramParameteriv", (GLvoid *) NAME(glGetHistogramParameteriv), _gloffset_GetHistogramParameteriv },
745 { "glGetMinmax", (GLvoid *) NAME(glGetMinmax), _gloffset_GetMinmax },
746 { "glGetMinmaxParameterfv", (GLvoid *) NAME(glGetMinmaxParameterfv), _gloffset_GetMinmaxParameterfv },
747 { "glGetMinmaxParameteriv", (GLvoid *) NAME(glGetMinmaxParameteriv), _gloffset_GetMinmaxParameteriv },
748 { "glHistogram", (GLvoid *) NAME(glHistogram), _gloffset_Histogram },
749 { "glMinmax", (GLvoid *) NAME(glMinmax), _gloffset_Minmax },
750 { "glResetHistogram", (GLvoid *) NAME(glResetHistogram), _gloffset_ResetHistogram },
751 { "glResetMinmax", (GLvoid *) NAME(glResetMinmax), _gloffset_ResetMinmax },
752 { "glTexImage3D", (GLvoid *) NAME(glTexImage3D), _gloffset_TexImage3D },
753 { "glTexSubImage3D", (GLvoid *) NAME(glTexSubImage3D), _gloffset_TexSubImage3D },
754 { "glCopyTexSubImage3D", (GLvoid *) NAME(glCopyTexSubImage3D), _gloffset_CopyTexSubImage3D },
Brian Paul77aa8b92000-01-07 07:30:13 +0000755#undef NAME
Brian Paul91bcefa1999-11-27 21:30:40 +0000756
Brian Paul44202462000-05-18 18:14:22 +0000757 /* ARB 1. GL_ARB_multitexture */
Brian Paul77aa8b92000-01-07 07:30:13 +0000758#ifdef GL_ARB_multitexture
Brian Paul44202462000-05-18 18:14:22 +0000759#define NAME(X) (GLvoid *) X
Brian Paul77aa8b92000-01-07 07:30:13 +0000760#else
761#define NAME(X) NotImplemented
762#endif
Brian Paul8ceb5c32000-02-24 22:14:04 +0000763 { "glActiveTextureARB", (GLvoid *) NAME(glActiveTextureARB), _gloffset_ActiveTextureARB },
764 { "glClientActiveTextureARB", (GLvoid *) NAME(glClientActiveTextureARB), _gloffset_ClientActiveTextureARB },
765 { "glMultiTexCoord1dARB", (GLvoid *) NAME(glMultiTexCoord1dARB), _gloffset_MultiTexCoord1dARB },
766 { "glMultiTexCoord1dvARB", (GLvoid *) NAME(glMultiTexCoord1dvARB), _gloffset_MultiTexCoord1dvARB },
767 { "glMultiTexCoord1fARB", (GLvoid *) NAME(glMultiTexCoord1fARB), _gloffset_MultiTexCoord1fARB },
768 { "glMultiTexCoord1fvARB", (GLvoid *) NAME(glMultiTexCoord1fvARB), _gloffset_MultiTexCoord1fvARB },
769 { "glMultiTexCoord1iARB", (GLvoid *) NAME(glMultiTexCoord1iARB), _gloffset_MultiTexCoord1iARB },
770 { "glMultiTexCoord1ivARB", (GLvoid *) NAME(glMultiTexCoord1ivARB), _gloffset_MultiTexCoord1ivARB },
771 { "glMultiTexCoord1sARB", (GLvoid *) NAME(glMultiTexCoord1sARB), _gloffset_MultiTexCoord1sARB },
772 { "glMultiTexCoord1svARB", (GLvoid *) NAME(glMultiTexCoord1svARB), _gloffset_MultiTexCoord1svARB },
773 { "glMultiTexCoord2dARB", (GLvoid *) NAME(glMultiTexCoord2dARB), _gloffset_MultiTexCoord2dARB },
774 { "glMultiTexCoord2dvARB", (GLvoid *) NAME(glMultiTexCoord2dvARB), _gloffset_MultiTexCoord2dvARB },
775 { "glMultiTexCoord2fARB", (GLvoid *) NAME(glMultiTexCoord2fARB), _gloffset_MultiTexCoord2fARB },
776 { "glMultiTexCoord2fvARB", (GLvoid *) NAME(glMultiTexCoord2fvARB), _gloffset_MultiTexCoord2fvARB },
777 { "glMultiTexCoord2iARB", (GLvoid *) NAME(glMultiTexCoord2iARB), _gloffset_MultiTexCoord2iARB },
778 { "glMultiTexCoord2ivARB", (GLvoid *) NAME(glMultiTexCoord2ivARB), _gloffset_MultiTexCoord2ivARB },
779 { "glMultiTexCoord2sARB", (GLvoid *) NAME(glMultiTexCoord2sARB), _gloffset_MultiTexCoord2sARB },
780 { "glMultiTexCoord2svARB", (GLvoid *) NAME(glMultiTexCoord2svARB), _gloffset_MultiTexCoord2svARB },
781 { "glMultiTexCoord3dARB", (GLvoid *) NAME(glMultiTexCoord3dARB), _gloffset_MultiTexCoord3dARB },
782 { "glMultiTexCoord3dvARB", (GLvoid *) NAME(glMultiTexCoord3dvARB), _gloffset_MultiTexCoord3dvARB },
783 { "glMultiTexCoord3fARB", (GLvoid *) NAME(glMultiTexCoord3fARB), _gloffset_MultiTexCoord3fARB },
784 { "glMultiTexCoord3fvARB", (GLvoid *) NAME(glMultiTexCoord3fvARB), _gloffset_MultiTexCoord3fvARB },
785 { "glMultiTexCoord3iARB", (GLvoid *) NAME(glMultiTexCoord3iARB), _gloffset_MultiTexCoord3iARB },
786 { "glMultiTexCoord3ivARB", (GLvoid *) NAME(glMultiTexCoord3ivARB), _gloffset_MultiTexCoord3ivARB },
787 { "glMultiTexCoord3sARB", (GLvoid *) NAME(glMultiTexCoord3sARB), _gloffset_MultiTexCoord3sARB },
788 { "glMultiTexCoord3svARB", (GLvoid *) NAME(glMultiTexCoord3svARB), _gloffset_MultiTexCoord3svARB },
789 { "glMultiTexCoord4dARB", (GLvoid *) NAME(glMultiTexCoord4dARB), _gloffset_MultiTexCoord4dARB },
790 { "glMultiTexCoord4dvARB", (GLvoid *) NAME(glMultiTexCoord4dvARB), _gloffset_MultiTexCoord4dvARB },
791 { "glMultiTexCoord4fARB", (GLvoid *) NAME(glMultiTexCoord4fARB), _gloffset_MultiTexCoord4fARB },
792 { "glMultiTexCoord4fvARB", (GLvoid *) NAME(glMultiTexCoord4fvARB), _gloffset_MultiTexCoord4fvARB },
793 { "glMultiTexCoord4iARB", (GLvoid *) NAME(glMultiTexCoord4iARB), _gloffset_MultiTexCoord4iARB },
794 { "glMultiTexCoord4ivARB", (GLvoid *) NAME(glMultiTexCoord4ivARB), _gloffset_MultiTexCoord4ivARB },
795 { "glMultiTexCoord4sARB", (GLvoid *) NAME(glMultiTexCoord4sARB), _gloffset_MultiTexCoord4sARB },
796 { "glMultiTexCoord4svARB", (GLvoid *) NAME(glMultiTexCoord4svARB), _gloffset_MultiTexCoord4svARB },
Brian Paul77aa8b92000-01-07 07:30:13 +0000797#undef NAME
Brian Paul91bcefa1999-11-27 21:30:40 +0000798
Brian Paul44202462000-05-18 18:14:22 +0000799 /* ARB 3. GL_ARB_transpose_matrix */
Brian Paul77aa8b92000-01-07 07:30:13 +0000800#ifdef GL_ARB_transpose_matrix
Brian Paul44202462000-05-18 18:14:22 +0000801#define NAME(X) (GLvoid *) X
Brian Paul77aa8b92000-01-07 07:30:13 +0000802#else
803#define NAME(X) NotImplemented
804#endif
Brian Paul8ceb5c32000-02-24 22:14:04 +0000805 { "glLoadTransposeMatrixdARB", (GLvoid *) NAME(glLoadTransposeMatrixdARB), _gloffset_LoadTransposeMatrixdARB },
806 { "glLoadTransposeMatrixfARB", (GLvoid *) NAME(glLoadTransposeMatrixfARB), _gloffset_LoadTransposeMatrixfARB },
807 { "glMultTransposeMatrixdARB", (GLvoid *) NAME(glMultTransposeMatrixdARB), _gloffset_MultTransposeMatrixdARB },
808 { "glMultTransposeMatrixfARB", (GLvoid *) NAME(glMultTransposeMatrixfARB), _gloffset_MultTransposeMatrixfARB },
Brian Paul77aa8b92000-01-07 07:30:13 +0000809#undef NAME
810
Brian Paul44202462000-05-18 18:14:22 +0000811 /* ARB 5. GL_ARB_multisample */
Brian Paul8ceb5c32000-02-24 22:14:04 +0000812#ifdef GL_ARB_multisample
Brian Paul44202462000-05-18 18:14:22 +0000813#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000814#else
Brian Paul44202462000-05-18 18:14:22 +0000815#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000816#endif
Brian Paul44202462000-05-18 18:14:22 +0000817 { "glSamplePassARB", NAME(glSamplePassARB), _gloffset_SamplePassARB },
818 { "glSampleCoverageARB", NAME(glSampleCoverageARB), _gloffset_SampleCoverageARB },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000819#undef NAME
820
Brian Paul44202462000-05-18 18:14:22 +0000821 /* ARB 12. GL_ARB_texture_compression */
822#if 000
823#if defined(GL_ARB_texture_compression) && defined(_gloffset_CompressedTexImage3DARB)
824#define NAME(X) (GLvoid *) X
825#else
826#define NAME(X) (GLvoid *) NotImplemented
827#endif
828 { "glCompressedTexImage3DARB", NAME(glCompressedTexImage3DARB), _gloffset_CompressedTexImage3DARB },
829 { "glCompressedTexImage2DARB", NAME(glCompressedTexImage2DARB), _gloffset_CompressedTexImage2DARB },
830 { "glCompressedTexImage1DARB", NAME(glCompressedTexImage1DARB), _gloffset_CompressedTexImage1DARB },
831 { "glCompressedTexSubImage3DARB", NAME(glCompressedTexSubImage3DARB), _gloffset_CompressedTexSubImage3DARB },
832 { "glCompressedTexSubImage2DARB", NAME(glCompressedTexSubImage2DARB), _gloffset_CompressedTexSubImage2DARB },
833 { "glCompressedTexSubImage1DARB", NAME(glCompressedTexSubImage1DARB), _gloffset_CompressedTexSubImage1DARB },
834 { "glGetCompressedTexImageARB", NAME(glGetCompressedTexImageARB), _gloffset_GetCompressedTexImageARB },
835#undef NAME
836#endif
837
Brian Paul8ceb5c32000-02-24 22:14:04 +0000838 /* 2. GL_EXT_blend_color */
839#ifdef GL_EXT_blend_color
Brian Paul44202462000-05-18 18:14:22 +0000840#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000841#else
Brian Paul44202462000-05-18 18:14:22 +0000842#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000843#endif
Brian Paul44202462000-05-18 18:14:22 +0000844 { "glBlendColorEXT", NAME(glBlendColorEXT), _gloffset_BlendColor },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000845#undef NAME
846
847 /* 3. GL_EXT_polygon_offset */
848#ifdef GL_EXT_polygon_offset
Brian Paul44202462000-05-18 18:14:22 +0000849#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000850#else
Brian Paul44202462000-05-18 18:14:22 +0000851#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000852#endif
Brian Paul44202462000-05-18 18:14:22 +0000853 { "glPolygonOffsetEXT", NAME(glPolygonOffsetEXT), _gloffset_PolygonOffsetEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000854#undef NAME
855
856 /* 6. GL_EXT_texture3D */
857#ifdef GL_EXT_texture3D
Brian Paul44202462000-05-18 18:14:22 +0000858#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000859#else
Brian Paul44202462000-05-18 18:14:22 +0000860#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000861#endif
Brian Paul44202462000-05-18 18:14:22 +0000862 { "glCopyTexSubImage3DEXT", NAME(glCopyTexSubImage3DEXT), _gloffset_CopyTexSubImage3D },
863 { "glTexImage3DEXT", NAME(glTexImage3DEXT), _gloffset_TexImage3D },
864 { "glTexSubImage3DEXT", NAME(glTexSubImage3DEXT), _gloffset_TexSubImage3D },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000865#undef NAME
866
867 /* 7. GL_SGI_texture_filter4 */
868#ifdef GL_SGI_texture_filter4
Brian Paul44202462000-05-18 18:14:22 +0000869#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000870#else
Brian Paul44202462000-05-18 18:14:22 +0000871#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000872#endif
Brian Paul44202462000-05-18 18:14:22 +0000873 { "glGetTexFilterFuncSGIS", NAME(glGetTexFilterFuncSGIS), _gloffset_GetTexFilterFuncSGIS },
874 { "glTexFilterFuncSGIS", NAME(glTexFilterFuncSGIS), _gloffset_TexFilterFuncSGIS },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000875#undef NAME
876
877 /* 9. GL_EXT_subtexture */
878#ifdef GL_EXT_subtexture
Brian Paul44202462000-05-18 18:14:22 +0000879#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000880#else
Brian Paul44202462000-05-18 18:14:22 +0000881#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000882#endif
Brian Paul44202462000-05-18 18:14:22 +0000883 { "glTexSubImage1DEXT", NAME(glTexSubImage1DEXT), _gloffset_TexSubImage1D },
884 { "glTexSubImage2DEXT", NAME(glTexSubImage2DEXT), _gloffset_TexSubImage2D },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000885#undef NAME
886
887 /* 10. GL_EXT_copy_texture */
888#ifdef GL_EXT_copy_texture
Brian Paul44202462000-05-18 18:14:22 +0000889#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000890#else
Brian Paul44202462000-05-18 18:14:22 +0000891#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000892#endif
Brian Paul44202462000-05-18 18:14:22 +0000893 { "glCopyTexImage1DEXT", NAME(glCopyTexImage1DEXT), _gloffset_CopyTexImage1D },
894 { "glCopyTexImage2DEXT", NAME(glCopyTexImage2DEXT), _gloffset_CopyTexImage2D },
895 { "glCopyTexSubImage1DEXT", NAME(glCopyTexSubImage1DEXT), _gloffset_CopyTexSubImage1D },
896 { "glCopyTexSubImage2DEXT", NAME(glCopyTexSubImage2DEXT), _gloffset_CopyTexSubImage2D },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000897#undef NAME
Jouk Jansen5e3bc0c2000-11-22 07:32:16 +0000898
Brian Paul8ceb5c32000-02-24 22:14:04 +0000899 /* 11. GL_EXT_histogram */
900#ifdef GL_EXT_histogram
Brian Paul44202462000-05-18 18:14:22 +0000901#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000902#else
Brian Paul44202462000-05-18 18:14:22 +0000903#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000904#endif
Brian Paul44202462000-05-18 18:14:22 +0000905 { "glGetHistogramEXT", NAME(glGetHistogramEXT), _gloffset_GetHistogramEXT },
906 { "glGetHistogramParameterfvEXT", NAME(glGetHistogramParameterfvEXT), _gloffset_GetHistogramParameterfvEXT },
907 { "glGetHistogramParameterivEXT", NAME(glGetHistogramParameterivEXT), _gloffset_GetHistogramParameterivEXT },
908 { "glGetMinmaxEXT", NAME(glGetMinmaxEXT), _gloffset_GetMinmaxEXT },
909 { "glGetMinmaxParameterfvEXT", NAME(glGetMinmaxParameterfvEXT), _gloffset_GetMinmaxParameterfvEXT },
910 { "glGetMinmaxParameterivEXT", NAME(glGetMinmaxParameterivEXT), _gloffset_GetMinmaxParameterivEXT },
911 { "glHistogramEXT", NAME(glHistogramEXT), _gloffset_Histogram },
912 { "glMinmaxEXT", NAME(glMinmaxEXT), _gloffset_Minmax },
913 { "glResetHistogramEXT", NAME(glResetHistogramEXT), _gloffset_ResetHistogram },
914 { "glResetMinmaxEXT", NAME(glResetMinmaxEXT), _gloffset_ResetMinmax },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000915#undef NAME
916
917 /* 12. GL_EXT_convolution */
918#ifdef GL_EXT_convolution
Brian Paul44202462000-05-18 18:14:22 +0000919#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000920#else
Brian Paul44202462000-05-18 18:14:22 +0000921#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000922#endif
Brian Paul44202462000-05-18 18:14:22 +0000923 { "glConvolutionFilter1DEXT", NAME(glConvolutionFilter1DEXT), _gloffset_ConvolutionFilter1D },
924 { "glConvolutionFilter2DEXT", NAME(glConvolutionFilter2DEXT), _gloffset_ConvolutionFilter2D },
925 { "glConvolutionParameterfEXT", NAME(glConvolutionParameterfEXT), _gloffset_ConvolutionParameterf },
926 { "glConvolutionParameterfvEXT", NAME(glConvolutionParameterfvEXT), _gloffset_ConvolutionParameterfv },
927 { "glConvolutionParameteriEXT", NAME(glConvolutionParameteriEXT), _gloffset_ConvolutionParameteri },
928 { "glConvolutionParameterivEXT", NAME(glConvolutionParameterivEXT), _gloffset_ConvolutionParameteriv },
929 { "glCopyConvolutionFilter1DEXT", NAME(glCopyConvolutionFilter1DEXT), _gloffset_CopyConvolutionFilter1D },
930 { "glCopyConvolutionFilter2DEXT", NAME(glCopyConvolutionFilter2DEXT), _gloffset_CopyConvolutionFilter2D },
931 { "glGetConvolutionFilterEXT", NAME(glGetConvolutionFilterEXT), _gloffset_GetConvolutionFilterEXT },
932 { "glGetConvolutionParameterivEXT", NAME(glGetConvolutionParameterivEXT), _gloffset_GetConvolutionParameterivEXT },
933 { "glGetConvolutionParameterfvEXT", NAME(glGetConvolutionParameterfvEXT), _gloffset_GetConvolutionParameterfvEXT },
934 { "glGetSeparableFilterEXT", NAME(glGetSeparableFilterEXT), _gloffset_GetSeparableFilterEXT },
935 { "glSeparableFilter2DEXT", NAME(glSeparableFilter2DEXT), _gloffset_SeparableFilter2D },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000936#undef NAME
Jouk Jansen5e3bc0c2000-11-22 07:32:16 +0000937
Brian Paul8ceb5c32000-02-24 22:14:04 +0000938 /* 14. GL_SGI_color_table */
939#ifdef GL_SGI_color_table
Brian Paul44202462000-05-18 18:14:22 +0000940#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000941#else
Brian Paul44202462000-05-18 18:14:22 +0000942#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000943#endif
Brian Paul44202462000-05-18 18:14:22 +0000944 { "glColorTableSGI", NAME(glColorTableSGI), _gloffset_ColorTable },
945 { "glColorTableParameterfvSGI", NAME(glColorTableParameterfvSGI), _gloffset_ColorTableParameterfv },
946 { "glColorTableParameterivSGI", NAME(glColorTableParameterivSGI), _gloffset_ColorTableParameteriv },
947 { "glCopyColorTableSGI", NAME(glCopyColorTableSGI), _gloffset_CopyColorTable },
948 { "glGetColorTableSGI", NAME(glGetColorTableSGI), _gloffset_GetColorTableSGI },
949 { "glGetColorTableParameterfvSGI", NAME(glGetColorTableParameterfvSGI), _gloffset_GetColorTableParameterfvSGI },
950 { "glGetColorTableParameterivSGI", NAME(glGetColorTableParameterivSGI), _gloffset_GetColorTableParameterivSGI },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000951#undef NAME
952
953 /* 15. GL_SGIS_pixel_texture */
954#ifdef GL_SGIS_pixel_texture
Brian Paul44202462000-05-18 18:14:22 +0000955#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000956#else
Brian Paul44202462000-05-18 18:14:22 +0000957#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000958#endif
Brian Paul44202462000-05-18 18:14:22 +0000959 { "glPixelTexGenParameterfSGIS", NAME(glPixelTexGenParameterfSGIS), _gloffset_PixelTexGenParameterfSGIS },
960 { "glPixelTexGenParameteriSGIS", NAME(glPixelTexGenParameteriSGIS), _gloffset_PixelTexGenParameteriSGIS },
961 { "glGetPixelTexGenParameterfvSGIS", NAME(glGetPixelTexGenParameterfvSGIS), _gloffset_GetPixelTexGenParameterfvSGIS },
962 { "glGetPixelTexGenParameterivSGIS", NAME(glGetPixelTexGenParameterivSGIS), _gloffset_GetPixelTexGenParameterivSGIS },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000963#undef NAME
964
965 /* 16. GL_SGIS_texture4D */
966#ifdef GL_SGIS_texture4D
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 { "glTexImage4DSGIS", NAME(glTexImage4DSGIS), _gloffset_TexImage4DSGIS },
972 { "glTexSubImage4DSGIS", NAME(glTexSubImage4DSGIS), _gloffset_TexSubImage4DSGIS },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000973#undef NAME
974
975 /* 20. GL_EXT_texture_object */
976#ifdef GL_EXT_texture_object
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 { "glAreTexturesResidentEXT", NAME(glAreTexturesResidentEXT), _gloffset_AreTexturesResidentEXT },
982 { "glBindTextureEXT", NAME(glBindTextureEXT), _gloffset_BindTexture },
983 { "glDeleteTexturesEXT", NAME(glDeleteTexturesEXT), _gloffset_DeleteTextures },
984 { "glGenTexturesEXT", NAME(glGenTexturesEXT), _gloffset_GenTexturesEXT },
985 { "glIsTextureEXT", NAME(glIsTextureEXT), _gloffset_IsTextureEXT },
986 { "glPrioritizeTexturesEXT", NAME(glPrioritizeTexturesEXT), _gloffset_PrioritizeTextures },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000987#undef NAME
988
989 /* 21. GL_SGIS_detail_texture */
990#ifdef GL_SGIS_detail_texture
Brian Paul44202462000-05-18 18:14:22 +0000991#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +0000992#else
Brian Paul44202462000-05-18 18:14:22 +0000993#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +0000994#endif
Brian Paul44202462000-05-18 18:14:22 +0000995 { "glDetailTexFuncSGIS", NAME(glDetailTexFuncSGIS), _gloffset_DetailTexFuncSGIS },
996 { "glGetDetailTexFuncSGIS", NAME(glGetDetailTexFuncSGIS), _gloffset_GetDetailTexFuncSGIS },
Brian Paul8ceb5c32000-02-24 22:14:04 +0000997#undef NAME
998
999 /* 22. GL_SGIS_sharpen_texture */
1000#ifdef GL_SGIS_sharpen_texture
Brian Paul44202462000-05-18 18:14:22 +00001001#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001002#else
Brian Paul44202462000-05-18 18:14:22 +00001003#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001004#endif
Brian Paul44202462000-05-18 18:14:22 +00001005 { "glGetSharpenTexFuncSGIS", NAME(glGetSharpenTexFuncSGIS), _gloffset_GetSharpenTexFuncSGIS },
1006 { "glSharpenTexFuncSGIS", NAME(glSharpenTexFuncSGIS), _gloffset_SharpenTexFuncSGIS },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001007#undef NAME
1008
1009 /* 25. GL_SGIS_multisample */
1010#ifdef GL_SGIS_multisample
Brian Paul44202462000-05-18 18:14:22 +00001011#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001012#else
Brian Paul44202462000-05-18 18:14:22 +00001013#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001014#endif
Brian Paul44202462000-05-18 18:14:22 +00001015 { "glSampleMaskSGIS", NAME(glSampleMaskSGIS), _gloffset_SampleMaskSGIS },
1016 { "glSamplePatternSGIS", NAME(glSamplePatternSGIS), _gloffset_SamplePatternSGIS },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001017#undef NAME
1018
1019 /* 30. GL_EXT_vertex_array */
1020#ifdef GL_EXT_vertex_array
Brian Paul44202462000-05-18 18:14:22 +00001021#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001022#else
Brian Paul44202462000-05-18 18:14:22 +00001023#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001024#endif
Brian Paul44202462000-05-18 18:14:22 +00001025 { "glArrayElementEXT", NAME(glArrayElementEXT), _gloffset_ArrayElement },
1026 { "glColorPointerEXT", NAME(glColorPointerEXT), _gloffset_ColorPointerEXT },
1027 { "glDrawArraysEXT", NAME(glDrawArraysEXT), _gloffset_DrawArrays },
1028 { "glEdgeFlagPointerEXT", NAME(glEdgeFlagPointerEXT), _gloffset_EdgeFlagPointerEXT },
1029 { "glGetPointervEXT", NAME(glGetPointervEXT), _gloffset_GetPointerv },
1030 { "glIndexPointerEXT", NAME(glIndexPointerEXT), _gloffset_IndexPointerEXT },
1031 { "glNormalPointerEXT", NAME(glNormalPointerEXT), _gloffset_NormalPointerEXT },
1032 { "glTexCoordPointerEXT", NAME(glTexCoordPointerEXT), _gloffset_TexCoordPointerEXT },
1033 { "glVertexPointerEXT", NAME(glVertexPointerEXT), _gloffset_VertexPointerEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001034#undef NAME
1035
1036 /* 37. GL_EXT_blend_minmax */
1037#ifdef GL_EXT_blend_minmax
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 { "glBlendEquationEXT", NAME(glBlendEquationEXT), _gloffset_BlendEquation },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001043#undef NAME
1044
1045 /* 52. GL_SGIX_sprite */
1046#ifdef GL_SGIX_sprite
Brian Paul44202462000-05-18 18:14:22 +00001047#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001048#else
Brian Paul44202462000-05-18 18:14:22 +00001049#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001050#endif
Brian Paul44202462000-05-18 18:14:22 +00001051 { "glSpriteParameterfSGIX", NAME(glSpriteParameterfSGIX), _gloffset_SpriteParameterfSGIX },
1052 { "glSpriteParameterfvSGIX", NAME(glSpriteParameterfvSGIX), _gloffset_SpriteParameterfvSGIX },
1053 { "glSpriteParameteriSGIX", NAME(glSpriteParameteriSGIX), _gloffset_SpriteParameteriSGIX },
1054 { "glSpriteParameterivSGIX", NAME(glSpriteParameterivSGIX), _gloffset_SpriteParameterivSGIX },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001055#undef NAME
1056
1057 /* 54. GL_EXT_point_parameters */
1058#ifdef GL_EXT_point_parameters
Brian Paul44202462000-05-18 18:14:22 +00001059#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001060#else
Brian Paul44202462000-05-18 18:14:22 +00001061#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001062#endif
Brian Paul44202462000-05-18 18:14:22 +00001063 { "glPointParameterfEXT", NAME(glPointParameterfEXT), _gloffset_PointParameterfEXT },
1064 { "glPointParameterfvEXT", NAME(glPointParameterfvEXT), _gloffset_PointParameterfvEXT },
1065 { "glPointParameterfSGIS", NAME(glPointParameterfSGIS), _gloffset_PointParameterfEXT },
1066 { "glPointParameterfvSGIS", NAME(glPointParameterfvSGIS), _gloffset_PointParameterfvEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001067#undef NAME
1068
1069 /* 55. GL_SGIX_instruments */
1070#ifdef GL_SGIX_instruments
Brian Paul44202462000-05-18 18:14:22 +00001071#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001072#else
Brian Paul44202462000-05-18 18:14:22 +00001073#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001074#endif
Brian Paul44202462000-05-18 18:14:22 +00001075 { "glInstrumentsBufferSGIX", NAME(glInstrumentsBufferSGIX), _gloffset_InstrumentsBufferSGIX },
1076 { "glStartInstrumentsSGIX", NAME(glStartInstrumentsSGIX), _gloffset_StartInstrumentsSGIX },
1077 { "glStopInstrumentsSGIX", NAME(glStopInstrumentsSGIX), _gloffset_StopInstrumentsSGIX },
1078 { "glReadInstrumentsSGIX", NAME(glReadInstrumentsSGIX), _gloffset_ReadInstrumentsSGIX },
1079 { "glPollInstrumentsSGIX", NAME(glPollInstrumentsSGIX), _gloffset_PollInstrumentsSGIX },
1080 { "glGetInstrumentsSGIX", NAME(glGetInstrumentsSGIX), _gloffset_GetInstrumentsSGIX },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001081#undef NAME
1082
1083 /* 57. GL_SGIX_framezoom */
1084#ifdef GL_SGIX_framezoom
Brian Paul44202462000-05-18 18:14:22 +00001085#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001086#else
Brian Paul44202462000-05-18 18:14:22 +00001087#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001088#endif
Brian Paul44202462000-05-18 18:14:22 +00001089 { "glFrameZoomSGIX", NAME(glFrameZoomSGIX), _gloffset_FrameZoomSGIX },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001090#undef NAME
1091
1092 /* 58. GL_SGIX_tag_sample_buffer */
1093#ifdef GL_SGIX_tag_sample_buffer
Brian Paul44202462000-05-18 18:14:22 +00001094#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001095#else
Brian Paul44202462000-05-18 18:14:22 +00001096#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001097#endif
Brian Paul44202462000-05-18 18:14:22 +00001098 { "glTagSampleBufferSGIX", NAME(glTagSampleBufferSGIX), _gloffset_TagSampleBufferSGIX },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001099#undef NAME
1100
1101 /* 60. GL_SGIX_reference_plane */
1102#ifdef GL_SGIX_reference_plane
Brian Paul44202462000-05-18 18:14:22 +00001103#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001104#else
Brian Paul44202462000-05-18 18:14:22 +00001105#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001106#endif
Brian Paul44202462000-05-18 18:14:22 +00001107 { "glReferencePlaneSGIX", NAME(glReferencePlaneSGIX), _gloffset_ReferencePlaneSGIX },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001108#undef NAME
1109
1110 /* 61. GL_SGIX_flush_raster */
1111#ifdef GL_SGIX_flush_raster
Brian Paul44202462000-05-18 18:14:22 +00001112#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001113#else
Brian Paul44202462000-05-18 18:14:22 +00001114#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001115#endif
Brian Paul44202462000-05-18 18:14:22 +00001116 { "glFlushRasterSGIX", NAME(glFlushRasterSGIX), _gloffset_FlushRasterSGIX },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001117#undef NAME
1118
1119 /* 66. GL_HP_image_transform */
1120#if 0
1121#ifdef GL_HP_image_transform
Brian Paul44202462000-05-18 18:14:22 +00001122#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001123#else
Brian Paul44202462000-05-18 18:14:22 +00001124#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001125#endif
Brian Paul44202462000-05-18 18:14:22 +00001126 { "glGetImageTransformParameterfvHP", NAME(glGetImageTransformParameterfvHP), _gloffset_GetImageTransformParameterfvHP },
1127 { "glGetImageTransformParameterivHP", NAME(glGetImageTransformParameterivHP), _gloffset_GetImageTransformParameterivHP },
1128 { "glImageTransformParameterfHP", NAME(glImageTransformParameterfHP), _gloffset_ImageTransformParameterfHP },
1129 { "glImageTransformParameterfvHP", NAME(glImageTransformParameterfvHP), _gloffset_ImageTransformParameterfvHP },
1130 { "glImageTransformParameteriHP", NAME(glImageTransformParameteriHP), _gloffset_ImageTransformParameteriHP },
1131 { "glImageTransformParameterivHP", NAME(glImageTransformParameterivHP), _gloffset_ImageTransformParameterivHP },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001132#undef NAME
1133#endif
1134
1135 /* 74. GL_EXT_color_subtable */
1136#ifdef GL_EXT_color_subtable
Brian Paul44202462000-05-18 18:14:22 +00001137#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001138#else
Brian Paul44202462000-05-18 18:14:22 +00001139#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001140#endif
Brian Paul44202462000-05-18 18:14:22 +00001141 { "glColorSubTableEXT", NAME(glColorSubTableEXT), _gloffset_ColorSubTable },
1142 { "glCopyColorSubTableEXT", NAME(glCopyColorSubTableEXT), _gloffset_CopyColorSubTable },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001143#undef NAME
1144
1145 /* 77. GL_PGI_misc_hints */
1146#ifdef GL_PGI_misc_hints
Brian Paul44202462000-05-18 18:14:22 +00001147#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001148#else
Brian Paul44202462000-05-18 18:14:22 +00001149#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001150#endif
Brian Paul44202462000-05-18 18:14:22 +00001151 { "glHintPGI", NAME(glHintPGI), _gloffset_HintPGI },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001152#undef NAME
1153
1154 /* 78. GL_EXT_paletted_texture */
1155#ifdef GL_EXT_paletted_texture
Brian Paul44202462000-05-18 18:14:22 +00001156#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001157#else
Brian Paul44202462000-05-18 18:14:22 +00001158#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001159#endif
Brian Paul44202462000-05-18 18:14:22 +00001160 { "glColorTableEXT", NAME(glColorTableEXT), _gloffset_ColorTable },
1161 { "glGetColorTableEXT", NAME(glGetColorTableEXT), _gloffset_GetColorTable },
1162 { "glGetColorTableParameterfvEXT", NAME(glGetColorTableParameterfvEXT), _gloffset_GetColorTableParameterfv },
1163 { "glGetColorTableParameterivEXT", NAME(glGetColorTableParameterivEXT), _gloffset_GetColorTableParameteriv },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001164#undef NAME
1165
1166 /* 80. GL_SGIX_list_priority */
1167#ifdef GL_SGIX_list_priority
Brian Paul44202462000-05-18 18:14:22 +00001168#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001169#else
Brian Paul44202462000-05-18 18:14:22 +00001170#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001171#endif
Brian Paul44202462000-05-18 18:14:22 +00001172 { "glGetListParameterfvSGIX", NAME(glGetListParameterfvSGIX), _gloffset_GetListParameterfvSGIX },
1173 { "glGetListParameterivSGIX", NAME(glGetListParameterivSGIX), _gloffset_GetListParameterivSGIX },
1174 { "glListParameterfSGIX", NAME(glListParameterfSGIX), _gloffset_ListParameterfSGIX },
1175 { "glListParameterfvSGIX", NAME(glListParameterfvSGIX), _gloffset_ListParameterfvSGIX },
1176 { "glListParameteriSGIX", NAME(glListParameteriSGIX), _gloffset_ListParameteriSGIX },
1177 { "glListParameterivSGIX", NAME(glListParameterivSGIX), _gloffset_ListParameterivSGIX },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001178#undef NAME
1179
1180 /* 94. GL_EXT_index_material */
1181#ifdef GL_EXT_index_material
Brian Paul44202462000-05-18 18:14:22 +00001182#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001183#else
Brian Paul44202462000-05-18 18:14:22 +00001184#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001185#endif
Brian Paul44202462000-05-18 18:14:22 +00001186 { "glIndexMaterialEXT", NAME(glIndexMaterialEXT), _gloffset_IndexMaterialEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001187#undef NAME
1188
1189 /* 95. GL_EXT_index_func */
1190#ifdef GL_EXT_index_func
Brian Paul44202462000-05-18 18:14:22 +00001191#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001192#else
Brian Paul44202462000-05-18 18:14:22 +00001193#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001194#endif
Brian Paul44202462000-05-18 18:14:22 +00001195 { "glIndexFuncEXT", NAME(glIndexFuncEXT), _gloffset_IndexFuncEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001196#undef NAME
1197
1198 /* 97. GL_EXT_compiled_vertex_array */
1199#ifdef GL_EXT_compiled_vertex_array
Brian Paul44202462000-05-18 18:14:22 +00001200#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001201#else
Brian Paul44202462000-05-18 18:14:22 +00001202#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001203#endif
Brian Paul44202462000-05-18 18:14:22 +00001204 { "glLockArraysEXT", NAME(glLockArraysEXT), _gloffset_LockArraysEXT },
1205 { "glUnlockArraysEXT", NAME(glUnlockArraysEXT), _gloffset_UnlockArraysEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001206#undef NAME
1207
1208 /* 98. GL_EXT_cull_vertex */
1209#ifdef GL_EXT_cull_vertex
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 { "glCullParameterfvEXT", NAME(glCullParameterfvEXT), _gloffset_CullParameterfvEXT },
1215 { "glCullParameterdvEXT", NAME(glCullParameterdvEXT), _gloffset_CullParameterdvEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001216#undef NAME
1217
1218 /* 102. GL_SGIX_fragment_lighting */
1219#ifdef GL_SGIX_fragment_lighting
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 { "glFragmentColorMaterialSGIX", NAME(glFragmentColorMaterialSGIX), _gloffset_FragmentColorMaterialSGIX },
1225 { "glFragmentLightfSGIX", NAME(glFragmentLightfSGIX), _gloffset_FragmentLightfSGIX },
1226 { "glFragmentLightfvSGIX", NAME(glFragmentLightfvSGIX), _gloffset_FragmentLightfvSGIX },
1227 { "glFragmentLightiSGIX", NAME(glFragmentLightiSGIX), _gloffset_FragmentLightiSGIX },
1228 { "glFragmentLightivSGIX", NAME(glFragmentLightivSGIX), _gloffset_FragmentLightivSGIX },
1229 { "glFragmentLightModelfSGIX", NAME(glFragmentLightModelfSGIX), _gloffset_FragmentLightModelfSGIX },
1230 { "glFragmentLightModelfvSGIX", NAME(glFragmentLightModelfvSGIX), _gloffset_FragmentLightModelfvSGIX },
1231 { "glFragmentLightModeliSGIX", NAME(glFragmentLightModeliSGIX), _gloffset_FragmentLightModeliSGIX },
1232 { "glFragmentLightModelivSGIX", NAME(glFragmentLightModelivSGIX), _gloffset_FragmentLightModelivSGIX },
1233 { "glFragmentMaterialfSGIX", NAME(glFragmentMaterialfSGIX), _gloffset_FragmentMaterialfSGIX },
1234 { "glFragmentMaterialfvSGIX", NAME(glFragmentMaterialfvSGIX), _gloffset_FragmentMaterialfvSGIX },
1235 { "glFragmentMaterialiSGIX", NAME(glFragmentMaterialiSGIX), _gloffset_FragmentMaterialiSGIX },
1236 { "glFragmentMaterialivSGIX", NAME(glFragmentMaterialivSGIX), _gloffset_FragmentMaterialivSGIX },
1237 { "glGetFragmentLightfvSGIX", NAME(glGetFragmentLightfvSGIX), _gloffset_GetFragmentLightfvSGIX },
1238 { "glGetFragmentLightivSGIX", NAME(glGetFragmentLightivSGIX), _gloffset_GetFragmentLightivSGIX },
1239 { "glGetFragmentMaterialfvSGIX", NAME(glGetFragmentMaterialfvSGIX), _gloffset_GetFragmentMaterialfvSGIX },
1240 { "glGetFragmentMaterialivSGIX", NAME(glGetFragmentMaterialivSGIX), _gloffset_GetFragmentMaterialivSGIX },
1241 { "glLightEnviSGIX", NAME(glLightEnviSGIX), _gloffset_LightEnviSGIX },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001242#undef NAME
1243
Brian Paul44202462000-05-18 18:14:22 +00001244 /* 112. GL_EXT_draw_range_elements */
1245#if 000
1246#ifdef GL_EXT_draw_range_elements
1247#define NAME(X) (GLvoid *) X
1248#else
1249#define NAME(X) (GLvoid *) NotImplemented
1250#endif
1251 { "glDrawRangeElementsEXT", NAME(glDrawRangeElementsEXT), _gloffset_DrawRangeElementsEXT },
1252#undef NAME
1253#endif
1254
1255 /* 117. GL_EXT_light_texture */
1256#if 000
1257#ifdef GL_EXT_light_texture
1258#define NAME(X) (GLvoid *) X
1259#else
1260#define NAME(X) (GLvoid *) NotImplemented
1261#endif
1262 { "glApplyTextureEXT", NAME(glApplyTextureEXT), _gloffset_ApplyTextureEXT },
1263 { "glTextureLightEXT", NAME(glTextureLightEXT), _gloffset_TextureLightEXT },
1264 { "glTextureMaterialEXT", NAME(glTextureMaterialEXT), _gloffset_TextureMaterialEXT },
1265#undef NAME
1266
1267 /* 135. GL_INTEL_texture_scissor */
1268#ifdef GL_INTEL_texture_scissor
1269#define NAME(X) (GLvoid *) X
1270#else
1271#define NAME(X) (GLvoid *) NotImplemented
1272#endif
1273 { "glTexScissorINTEL", NAME(glTexScissorINTEL), _gloffset_TexScissorINTEL },
1274 { "glTexScissorFuncINTEL", NAME(glTexScissorFuncINTEL), _gloffset_glTexScissorFuncINTEL },
1275#undef NAME
1276
1277 /* 136. GL_INTEL_parallel_arrays */
1278#ifdef GL_INTEL_parallel_arrays
1279#define NAME(X) (GLvoid *) X
1280#else
1281#define NAME(X) (GLvoid *) NotImplemented
1282#endif
1283 { "glVertexPointervINTEL", NAME(glVertexPointervINTEL), _gloffset_VertexPointervINTEL },
1284 { "glNormalPointervINTEL", NAME(glNormalPointervINTEL), _gloffset_NormalPointervINTEL },
1285 { "glColorPointervINTEL", NAME(glColorPointervINTEL), _gloffset_ColorPointervINTEL },
1286 { "glTexCoordPointervINTEL", NAME(glTexCoordPointervINTEL), _gloffset_glxCoordPointervINTEL },
1287#undef NAME
1288#endif
1289
1290 /* 138. GL_EXT_pixel_transform */
1291#if 000
1292#ifdef GL_EXT_pixel_transform
1293#define NAME(X) (GLvoid *) X
1294#else
1295#define NAME(X) (GLvoid *) NotImplemented
1296#endif
1297 { "glPixelTransformParameteriEXT", NAME(glPixelTransformParameteriEXT), _gloffset_PixelTransformParameteriEXT },
1298 { "glPixelTransformParameterfEXT", NAME(glPixelTransformParameterfEXT), _gloffset_PixelTransformParameterfEXT },
1299 { "glPixelTransformParameterivEXT", NAME(glPixelTransformParameterivEXT), _gloffset_PixelTransformParameterivEXT },
1300 { "glPixelTransformParameterfvEXT", NAME(glPixelTransformParameterfvEXT), _gloffset_PixelTransformParameterfvEXT },
1301 { "glGetPixelTransformParameterivEXT", NAME(glGetPixelTransformParameterivEXT), _gloffset_GetPixelTransformParameterivEXT },
1302 { "glGetPixelTransformParameterfvEXT", NAME(glGetPixelTransformParameterfvEXT), _gloffset_GetPixelTransformParameterfvEXT },
1303#undef NAME
Brian Paula14cbff2000-10-27 18:31:21 +00001304#endif
Brian Paul44202462000-05-18 18:14:22 +00001305
1306 /* 145. GL_EXT_secondary_color */
1307#ifdef GL_EXT_secondary_color
1308#define NAME(X) (GLvoid *) X
1309#else
1310#define NAME(X) (GLvoid *) NotImplemented
1311#endif
1312 { "glSecondaryColor3bEXT", NAME(glSecondaryColor3bEXT), _gloffset_SecondaryColor3bEXT },
1313 { "glSecondaryColor3dEXT", NAME(glSecondaryColor3dEXT), _gloffset_SecondaryColor3dEXT },
1314 { "glSecondaryColor3fEXT", NAME(glSecondaryColor3fEXT), _gloffset_SecondaryColor3fEXT },
1315 { "glSecondaryColor3iEXT", NAME(glSecondaryColor3iEXT), _gloffset_SecondaryColor3iEXT },
1316 { "glSecondaryColor3sEXT", NAME(glSecondaryColor3sEXT), _gloffset_SecondaryColor3sEXT },
1317 { "glSecondaryColor3ubEXT", NAME(glSecondaryColor3ubEXT), _gloffset_SecondaryColor3ubEXT },
1318 { "glSecondaryColor3uiEXT", NAME(glSecondaryColor3uiEXT), _gloffset_SecondaryColor3uiEXT },
1319 { "glSecondaryColor3usEXT", NAME(glSecondaryColor3usEXT), _gloffset_SecondaryColor3usEXT },
Brian Paul44202462000-05-18 18:14:22 +00001320 { "glSecondaryColor3bvEXT", NAME(glSecondaryColor3bvEXT), _gloffset_SecondaryColor3bvEXT },
1321 { "glSecondaryColor3dvEXT", NAME(glSecondaryColor3dvEXT), _gloffset_SecondaryColor3dvEXT },
1322 { "glSecondaryColor3fvEXT", NAME(glSecondaryColor3fvEXT), _gloffset_SecondaryColor3fvEXT },
1323 { "glSecondaryColor3ivEXT", NAME(glSecondaryColor3ivEXT), _gloffset_SecondaryColor3ivEXT },
1324 { "glSecondaryColor3svEXT", NAME(glSecondaryColor3svEXT), _gloffset_SecondaryColor3svEXT },
1325 { "glSecondaryColor3ubvEXT", NAME(glSecondaryColor3ubvEXT), _gloffset_SecondaryColor3ubvEXT },
1326 { "glSecondaryColor3uivEXT", NAME(glSecondaryColor3uivEXT), _gloffset_SecondaryColor3uivEXT },
1327 { "glSecondaryColor3usvEXT", NAME(glSecondaryColor3usvEXT), _gloffset_SecondaryColor3usvEXT },
Brian Paul44202462000-05-18 18:14:22 +00001328 { "glSecondaryColorPointerEXT", NAME(glSecondaryColorPointerEXT), _gloffset_SecondaryColorPointerEXT },
1329#undef NAME
1330
1331 /* 147. GL_EXT_texture_perturb_normal */
Brian Paula14cbff2000-10-27 18:31:21 +00001332#if 000
Brian Paul44202462000-05-18 18:14:22 +00001333#ifdef GL_EXT_texture_perturb_normal
1334#define NAME(X) (GLvoid *) X
1335#else
1336#define NAME(X) (GLvoid *) NotImplemented
1337#endif
1338 { "glTextureNormalEXT", NAME(glTextureNormalEXT), _gloffset_TextureNormalEXT },
1339#undef NAME
Brian Paula14cbff2000-10-27 18:31:21 +00001340#endif
Brian Paul44202462000-05-18 18:14:22 +00001341
1342 /* 148. GL_EXT_multi_draw_arrays */
Brian Paula14cbff2000-10-27 18:31:21 +00001343#if 000
Brian Paul44202462000-05-18 18:14:22 +00001344#ifdef GL_EXT_multi_draw_arrays
1345#define NAME(X) (GLvoid *) X
1346#else
1347#define NAME(X) (GLvoid *) NotImplemented
1348#endif
1349 { "glMultiDrawArraysEXT", NAME(glMultiDrawArraysEXT), _gloffset_MultiDrawArraysEXT },
1350#undef NAME
1351#endif
1352
Brian Paul8ceb5c32000-02-24 22:14:04 +00001353 /* 149. GL_EXT_fog_coord */
1354#ifdef GL_EXT_fog_coord
Brian Paul44202462000-05-18 18:14:22 +00001355#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001356#else
Brian Paul44202462000-05-18 18:14:22 +00001357#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001358#endif
Brian Paul44202462000-05-18 18:14:22 +00001359 { "glFogCoordfEXT", NAME(glFogCoordfEXT), _gloffset_FogCoordfEXT },
1360 { "glFogCoordfvEXT", NAME(glFogCoordfvEXT), _gloffset_FogCoordfvEXT },
1361 { "glFogCoorddEXT", NAME(glFogCoorddEXT), _gloffset_FogCoorddEXT },
1362 { "glFogCoorddEXT", NAME(glFogCoorddEXT), _gloffset_FogCoorddEXT },
1363 { "glFogCoordPointerEXT", NAME(glFogCoordPointerEXT), _gloffset_FogCoordPointerEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001364#undef NAME
1365
Brian Paul44202462000-05-18 18:14:22 +00001366 /* 156. GL_EXT_coordinate_frame */
Brian Paula14cbff2000-10-27 18:31:21 +00001367#if 000
Brian Paul44202462000-05-18 18:14:22 +00001368#ifdef GL_EXT_coordinate_frame
1369#define NAME(X) (GLvoid *) X
1370#else
1371#define NAME(X) (GLvoid *) NotImplemented
1372#endif
1373 { "glTangent3bEXT", NAME(glTangent3bEXT), _gloffset_Tangent3bEXT },
1374 { "glTangent3dEXT", NAME(glTangent3dEXT), _gloffset_Tangent3dEXT },
1375 { "glTangent3fEXT", NAME(glTangent3fEXT), _gloffset_Tangent3fEXT },
1376 { "glTangent3iEXT", NAME(glTangent3iEXT), _gloffset_Tangent3iEXT },
1377 { "glTangent3sEXT", NAME(glTangent3sEXT), _gloffset_Tangent3sEXT },
1378 { "glTangent3bvEXT", NAME(glTangent3bvEXT), _gloffset_Tangent3bvEXT },
1379 { "glTangent3dvEXT", NAME(glTangent3dvEXT), _gloffset_Tangent3dvEXT },
1380 { "glTangent3fvEXT", NAME(glTangent3fvEXT), _gloffset_Tangent3fvEXT },
1381 { "glTangent3ivEXT", NAME(glTangent3ivEXT), _gloffset_Tangent3ivEXT },
1382 { "glTangent3svEXT", NAME(glTangent3svEXT), _gloffset_Tangent3svEXT },
1383 { "glBinormal3bEXT", NAME(glBinormal3bEXT), _gloffset_Binormal3bEXT },
1384 { "glBinormal3dEXT", NAME(glBinormal3dEXT), _gloffset_Binormal3dEXT },
1385 { "glBinormal3fEXT", NAME(glBinormal3fEXT), _gloffset_Binormal3fEXT },
1386 { "glBinormal3iEXT", NAME(glBinormal3iEXT), _gloffset_Binormal3iEXT },
1387 { "glBinormal3sEXT", NAME(glBinormal3sEXT), _gloffset_Binormal3sEXT },
1388 { "glBinormal3bvEXT", NAME(glBinormal3bvEXT), _gloffset_Binormal3bvEXT },
1389 { "glBinormal3dvEXT", NAME(glBinormal3dvEXT), _gloffset_Binormal3dvEXT },
1390 { "glBinormal3fvEXT", NAME(glBinormal3fvEXT), _gloffset_Binormal3fvEXT },
1391 { "glBinormal3ivEXT", NAME(glBinormal3ivEXT), _gloffset_Binormal3ivEXT },
1392 { "glBinormal3svEXT", NAME(glBinormal3svEXT), _gloffset_Binormal3svEXT },
1393 { "glTangentPointerEXT", NAME(glTangentPointerEXT), _gloffset_TangentPointerEXT },
1394 { "glBinormalPointerEXT", NAME(glBinormalPointerEXT), _gloffset_BinormalPointerEXT },
1395#undef NAME
Brian Paula14cbff2000-10-27 18:31:21 +00001396#endif
Brian Paul44202462000-05-18 18:14:22 +00001397
1398 /* 164. GL_SUN_global_alpha */
Brian Paula14cbff2000-10-27 18:31:21 +00001399#if 000
Brian Paul44202462000-05-18 18:14:22 +00001400#ifdef GL_SUN_global_alpha
1401#define NAME(X) (GLvoid *) X
1402#else
1403#define NAME(X) (GLvoid *) NotImplemented
1404#endif
1405 { "glGlobalAlphaFactorbSUN", NAME(glGlobalAlphaFactorbSUN), _gloffset_GlobalAlphaFactorbSUN },
1406 { "glGlobalAlphaFactorsSUN", NAME(glGlobalAlphaFactorsSUN), _gloffset_GlobalAlphaFactorsSUN },
1407 { "glGlobalAlphaFactoriSUN", NAME(glGlobalAlphaFactoriSUN), _gloffset_GlobalAlphaFactoriSUN },
1408 { "glGlobalAlphaFactorfSUN", NAME(glGlobalAlphaFactorfSUN), _gloffset_GlobalAlphaFactorfSUN },
1409 { "glGlobalAlphaFactordSUN", NAME(glGlobalAlphaFactordSUN), _gloffset_GlobalAlphaFactordSUN },
1410 { "glGlobalAlphaFactorubSUN", NAME(glGlobalAlphaFactorubSUN), _gloffset_GlobalAlphaFactorubSUN },
1411 { "glGlobalAlphaFactorusSUN", NAME(glGlobalAlphaFactorusSUN), _gloffset_GlobalAlphaFactorusSUN },
1412 { "glGlobalAlphaFactoruiSUN", NAME(glGlobalAlphaFactoruiSUN), _gloffset_GlobalAlphaFactoruiSUN },
1413#undef NAME
Brian Paula14cbff2000-10-27 18:31:21 +00001414#endif
Brian Paul44202462000-05-18 18:14:22 +00001415
1416 /* 165. GL_SUN_triangle_list */
Brian Paula14cbff2000-10-27 18:31:21 +00001417#if 000
Brian Paul44202462000-05-18 18:14:22 +00001418#ifdef GL_SUN_triangle_list
1419#define NAME(X) (GLvoid *) X
1420#else
1421#define NAME(X) (GLvoid *) NotImplemented
1422#endif
1423 { "glReplacementCodeuiSUN", NAME(glReplacementCodeuiSUN), _gloffset_ReplacementCodeuiSUN },
1424 { "glReplacementCodeusSUN", NAME(glReplacementCodeusSUN), _gloffset_ReplacementCodeusSUN },
1425 { "glReplacementCodeubSUN", NAME(glReplacementCodeubSUN), _gloffset_ReplacementCodeubSUN },
1426 { "glReplacementCodeuivSUN", NAME(glReplacementCodeuivSUN), _gloffset_ReplacementCodeuivSUN },
1427 { "glReplacementCodeusvSUN", NAME(glReplacementCodeusvSUN), _gloffset_ReplacementCodeusvSUN },
1428 { "glReplacementCodeubvSUN", NAME(glReplacementCodeubvSUN), _gloffset_ReplacementCodeubvSUN },
1429 { "glReplacementCodePointerSUN", NAME(glReplacementCodePointerSUN), _gloffset_ReplacementCodePointerSUN },
1430#undef NAME
Brian Paula14cbff2000-10-27 18:31:21 +00001431#endif
Brian Paul44202462000-05-18 18:14:22 +00001432
1433 /* 166. GL_SUN_vertex */
Brian Paula14cbff2000-10-27 18:31:21 +00001434#if 000
Brian Paul44202462000-05-18 18:14:22 +00001435#ifdef GL_SUN_vertex
1436#define NAME(X) (GLvoid *) X
1437#else
1438#define NAME(X) (GLvoid *) NotImplemented
1439#endif
1440 { "glColor4ubVertex2fSUN", NAME(glColor4ubVertex2fSUN), _gloffset_Color4ubVertex2fSUN },
1441 { "glColor4ubVertex2fvSUN", NAME(glColor4ubVertex2fvSUN), _gloffset_Color4ubVertex2fvSUN },
1442 { "glColor4ubVertex3fSUN", NAME(glColor4ubVertex3fSUN), _gloffset_Color4ubVertex3fSUN },
1443 { "glColor4ubVertex3fvSUN", NAME(glColor4ubVertex3fvSUN), _gloffset_Color4ubVertex3fvSUN },
1444 { "glColor3fVertex3fSUN", NAME(glColor3fVertex3fSUN), _gloffset_Color3fVertex3fSUN },
1445 { "glColor3fVertex3fvSUN", NAME(glColor3fVertex3fvSUN), _gloffset_Color3fVertex3fvSUN },
1446 { "glNormal3fVertex3fSUN", NAME(glNormal3fVertex3fSUN), _gloffset_Normal3fVertex3fSUN },
1447 { "glNormal3fVertex3fvSUN", NAME(glNormal3fVertex3fvSUN), _gloffset_Normal3fVertex3fvSUN },
1448 { "glColor4fNormal3fVertex3fSUN", NAME(glColor4fNormal3fVertex3fSUN), _gloffset_Color4fNormal3fVertex3fSUN },
1449 { "glColor4fNormal3fVertex3fvSUN", NAME(glColor4fNormal3fVertex3fvSUN), _gloffset_Color4fNormal3fVertex3fvSUN },
1450 { "glTexCoord2fVertex3fSUN", NAME(glTexCoord2fVertex3fSUN), _gloffset_TexCoord2fVertex3fSUN },
1451 { "glTexCoord2fVertex3fvSUN", NAME(glTexCoord2fVertex3fvSUN), _gloffset_TexCoord2fVertex3fvSUN },
1452 { "glTexCoord4fVertex4fSUN", NAME(glTexCoord4fVertex4fSUN), _gloffset_TexCoord4fVertex4fSUN },
1453 { "glTexCoord4fVertex4fvSUN", NAME(glTexCoord4fVertex4fvSUN), _gloffset_TexCoord4fVertex4fvSUN },
1454 { "glTexCoord2fColor4ubVertex3fSUN", NAME(glTexCoord2fColor4ubVertex3fSUN), _gloffset_TexCoord2fColor4ubVertex3fSUN },
1455 { "glTexCoord2fColor4ubVertex3fvSUN", NAME(glTexCoord2fColor4ubVertex3fvSUN), _gloffset_TexCoord2fColor4ubVertex3fvSUN },
1456 { "glTexCoord2fColor3fVertex3fSUN", NAME(glTexCoord2fColor3fVertex3fSUN), _gloffset_TexCoord2fColor3fVertex3fSUN },
1457 { "glTexCoord2fColor3fVertex3fvSUN", NAME(glTexCoord2fColor3fVertex3fvSUN), _gloffset_TexCoord2fColor3fVertex3fvSUN },
1458 { "glTexCoord2fNormal3fVertex3fSUN", NAME(glTexCoord2fNormal3fVertex3fSUN), _gloffset_TexCoord2fNormal3fVertex3fSUN },
1459 { "glTexCoord2fNormal3fVertex3fvSUN", NAME(glTexCoord2fNormal3fVertex3fvSUN), _gloffset_TexCoord2fNormal3fVertex3fvSUN },
1460 { "glTexCoord2fColor4fNormal3fVertex3fSUN", NAME(glTexCoord2fColor4fNormal3fVertex3fSUN), _gloffset_TexCoord2fColor4fNormal3fVertex3fSUN },
1461 { "glTexCoord2fColor4fNormal3fVertex3fvSUN", NAME(glTexCoord2fColor4fNormal3fVertex3fvSUN), _gloffset_TexCoord2fColor4fNormal3fVertex3fvSUN },
1462 { "glTexCoord4fColor4fNormal3fVertex4fSUN", NAME(glTexCoord4fColor4fNormal3fVertex4fSUN), _gloffset_TexCoord4fColor4fNormal3fVertex4fSUN },
1463 { "glTexCoord4fColor4fNormal3fVertex4fvSUN", NAME(glTexCoord4fColor4fNormal3fVertex4fvSUN), _gloffset_TexCoord4fColor4fNormal3fVertex4fvSUN },
1464 { "glReplacementCodeuiVertex3fSUN", NAME(glReplacementCodeuiVertex3fSUN), _gloffset_ReplacementCodeuiVertex3fSUN },
1465 { "glReplacementCodeuiVertex3fvSUN", NAME(glReplacementCodeuiVertex3fvSUN), _gloffset_ReplacementCodeuiVertex3fvSUN },
1466 { "glReplacementCodeuiColor4ubVertex3fSUN", NAME(glReplacementCodeuiColor4ubVertex3fSUN), _gloffset_ReplacementCodeuiColor4ubVertex3fSUN },
1467 { "glReplacementCodeuiColor4ubVertex3fvSUN", NAME(glReplacementCodeuiColor4ubVertex3fvSUN), _gloffset_ReplacementCodeuiColor4ubVertex3fvSUN },
1468 { "glReplacementCodeuiColor3fVertex3fSUN", NAME(glReplacementCodeuiColor3fVertex3fSUN), _gloffset_ReplacementCodeuiColor3fVertex3fSUN },
1469 { "glReplacementCodeuiColor3fVertex3fvSUN", NAME(glReplacementCodeuiColor3fVertex3fvSUN), _gloffset_ReplacementCodeuiColor3fVertex3fvSUN },
1470 { "glReplacementCodeuiNormal3fVertex3fSUN", NAME(glReplacementCodeuiNormal3fVertex3fSUN), _gloffset_ReplacementCodeuiNormal3fVertex3fSUN },
1471 { "glReplacementCodeuiNormal3fVertex3fvSUN", NAME(glReplacementCodeuiNormal3fVertex3fvSUN), _gloffset_ReplacementCodeuiNormal3fVertex3fvSUN },
1472 { "glReplacementCodeuiColor4fNormal3fVertex3fSUN", NAME(glReplacementCodeuiColor4fNormal3fVertex3fSUN), _gloffset_ReplacementCodeuiColor4fNormal3fVertex3fSUN },
1473 { "glReplacementCodeuiColor4fNormal3fVertex3fvSUN", NAME(glReplacementCodeuiColor4fNormal3fVertex3fvSUN), _gloffset_ReplacementCodeuiColor4fNormal3fVertex3fvSUN },
1474 { "glReplacementCodeuiTexCoord2fVertex3fSUN", NAME(glReplacementCodeuiTexCoord2fVertex3fSUN), _gloffset_ReplacementCodeuiTexCoord2fVertex3fSUN },
1475 { "glReplacementCodeuiTexCoord2fVertex3fvSUN", NAME(glReplacementCodeuiTexCoord2fVertex3fvSUN), _gloffset_ReplacementCodeuiTexCoord2fVertex3fvSUN },
1476 { "glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN", NAME(glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN), _gloffset_ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN },
1477 { "glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN", NAME(glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN), _gloffset_ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN },
1478 { "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN", NAME(glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN), _gloffset_ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN },
1479 { "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN", NAME(glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN), _gloffset_ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN },
1480#undef NAME
1481#endif
1482
Brian Paul8ceb5c32000-02-24 22:14:04 +00001483 /* 173. GL_EXT/INGR_blend_func_separate */
1484#ifdef GL_EXT_blend_func_separate
Brian Paul44202462000-05-18 18:14:22 +00001485#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001486#else
Brian Paul44202462000-05-18 18:14:22 +00001487#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001488#endif
Brian Paul44202462000-05-18 18:14:22 +00001489 { "glBlendFuncSeparateEXT", NAME(glBlendFuncSeparateEXT), _gloffset_BlendFuncSeparateEXT },
1490 { "glBlendFuncSeparateINGR", NAME(glBlendFuncSeparateEXT), _gloffset_BlendFuncSeparateEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001491#undef NAME
1492
1493 /* 188. GL_EXT_vertex_weighting */
1494#ifdef GL_EXT_vertex_weighting
Brian Paul44202462000-05-18 18:14:22 +00001495#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001496#else
Brian Paul44202462000-05-18 18:14:22 +00001497#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001498#endif
Brian Paul44202462000-05-18 18:14:22 +00001499 { "glVertexWeightfEXT", NAME(glVertexWeightfEXT), _gloffset_VertexWeightfEXT },
1500 { "glVertexWeightfvEXT", NAME(glVertexWeightfvEXT), _gloffset_VertexWeightfvEXT },
1501 { "glVertexWeightPointerEXT", NAME(glVertexWeightPointerEXT), _gloffset_VertexWeightPointerEXT },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001502#undef NAME
1503
1504 /* 190. GL_NV_vertex_array_range */
1505#ifdef GL_NV_vertex_array_range
Brian Paul44202462000-05-18 18:14:22 +00001506#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001507#else
Brian Paul44202462000-05-18 18:14:22 +00001508#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001509#endif
Brian Paul44202462000-05-18 18:14:22 +00001510 { "glFlushVertexArrayRangeNV", NAME(glFlushVertexArrayRangeNV), _gloffset_FlushVertexArrayRangeNV },
1511 { "glVertexArrayRangeNV", NAME(glVertexArrayRangeNV), _gloffset_VertexArrayRangeNV },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001512#undef NAME
1513
1514 /* 191. GL_NV_register_combiners */
1515#ifdef GL_NV_register_combiners
Brian Paul44202462000-05-18 18:14:22 +00001516#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001517#else
Brian Paul44202462000-05-18 18:14:22 +00001518#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001519#endif
Brian Paul44202462000-05-18 18:14:22 +00001520 { "glCombinerParameterfvNV", NAME(glCombinerParameterfvNV), _gloffset_CombinerParameterfvNV },
1521 { "glCombinerParameterfNV", NAME(glCombinerParameterfNV), _gloffset_CombinerParameterfNV },
1522 { "glCombinerParameterivNV", NAME(glCombinerParameterivNV), _gloffset_CombinerParameterivNV },
1523 { "glCombinerParameteriNV", NAME(glCombinerParameteriNV), _gloffset_CombinerParameteriNV },
1524 { "glCombinerInputNV", NAME(glCombinerInputNV), _gloffset_CombinerInputNV },
1525 { "glCombinerOutputNV", NAME(glCombinerOutputNV), _gloffset_CombinerOutputNV },
1526 { "glFinalCombinerInputNV", NAME(glFinalCombinerInputNV), _gloffset_FinalCombinerInputNV },
1527 { "glGetCombinerInputParameterfvNV", NAME(glGetCombinerInputParameterfvNV), _gloffset_GetCombinerInputParameterfvNV },
1528 { "glGetCombinerInputParameterivNV", NAME(glGetCombinerInputParameterivNV), _gloffset_GetCombinerInputParameterivNV },
1529 { "glGetCombinerOutputParameterfvNV", NAME(glGetCombinerOutputParameterfvNV), _gloffset_GetCombinerOutputParameterfvNV },
1530 { "glGetCombinerOutputParameterivNV", NAME(glGetCombinerOutputParameterivNV), _gloffset_GetCombinerOutputParameterivNV },
1531 { "glGetFinalCombinerInputParameterfvNV", NAME(glGetFinalCombinerInputParameterfvNV), _gloffset_GetFinalCombinerInputParameterfvNV },
1532 { "glGetFinalCombinerInputParameterivNV", NAME(glGetFinalCombinerInputParameterivNV), _gloffset_GetFinalCombinerInputParameterivNV },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001533#undef NAME
1534
1535 /* 196. GL_MESA_resize_buffers */
1536#ifdef MESA_resize_buffers
Brian Paul44202462000-05-18 18:14:22 +00001537#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001538#else
Brian Paul44202462000-05-18 18:14:22 +00001539#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001540#endif
Brian Paul44202462000-05-18 18:14:22 +00001541 { "glResizeBuffersMESA", NAME(glResizeBuffersMESA), _gloffset_ResizeBuffersMESA },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001542#undef NAME
1543
1544 /* 197. GL_MESA_window_pos */
1545#ifdef MESA_window_pos
Brian Paul44202462000-05-18 18:14:22 +00001546#define NAME(X) (GLvoid *) X
Brian Paul8ceb5c32000-02-24 22:14:04 +00001547#else
Brian Paul44202462000-05-18 18:14:22 +00001548#define NAME(X) (GLvoid *) NotImplemented
Brian Paul8ceb5c32000-02-24 22:14:04 +00001549#endif
Brian Paul44202462000-05-18 18:14:22 +00001550 { "glWindowPos4fMESA", NAME(glWindowPos4fMESA), _gloffset_WindowPos4fMESA },
Brian Paul8ceb5c32000-02-24 22:14:04 +00001551#undef NAME
1552
Brian Paul44202462000-05-18 18:14:22 +00001553 /* 209. WGL_EXT_multisample */
1554#ifdef WGL_EXT_multisample
1555#define NAME(X) (GLvoid *) X
1556#else
1557#define NAME(X) (GLvoid *) NotImplemented
1558#endif
1559 { "glSampleMaskEXT", NAME(glSampleMaskEXT), _gloffset_SampleMaskSGIS },
1560 { "glSamplePatternEXT", NAME(glSamplePatternEXT), _gloffset_SamplePatternSGIS },
1561#undef NAME
Brian Paulcd963881999-12-10 20:01:06 +00001562
Brian Paul67661b01999-12-15 12:52:31 +00001563 { NULL, NULL } /* end of list marker */
Brian Paul91bcefa1999-11-27 21:30:40 +00001564};
Brian Paul7fb54ae1999-11-19 22:33:50 +00001565
Brian Paul959f8022000-03-19 01:10:11 +00001566
1567
1568/*
1569 * Return dispatch table offset of the named static (built-in) function.
1570 * Return -1 if function not found.
1571 */
1572static GLint
1573get_static_proc_offset(const char *funcName)
1574{
1575 GLuint i;
1576 for (i = 0; static_functions[i].Name; i++) {
1577 if (strcmp(static_functions[i].Name, funcName) == 0) {
1578 return static_functions[i].Offset;
1579 }
1580 }
1581 return -1;
1582}
1583
1584
1585/*
1586 * Return dispatch function address the named static (built-in) function.
1587 * Return NULL if function not found.
1588 */
1589static GLvoid *
1590get_static_proc_address(const char *funcName)
1591{
Brian Paul9c7ca852000-10-19 20:13:12 +00001592 GLint i;
1593 for (i = 0; static_functions[i].Name; i++) {
1594 if (strcmp(static_functions[i].Name, funcName) == 0) {
1595 return static_functions[i].Address;
1596 }
1597 }
1598 return NULL;
Brian Paul959f8022000-03-19 01:10:11 +00001599}
1600
1601
1602
1603/**********************************************************************
1604 * Extension function management.
1605 */
1606
1607
1608#define MAX_EXTENSION_FUNCS 1000
1609
1610static struct name_address_offset ExtEntryTable[MAX_EXTENSION_FUNCS];
1611static GLuint NumExtEntryPoints = 0;
1612
1613
1614
1615/*
1616 * Generate a dispatch function (entrypoint) which jumps through
1617 * the given slot number (offset) in the current dispatch table.
1618 * We need assembly language in order to accomplish this.
1619 */
1620static void *
1621generate_entrypoint(GLuint functionOffset)
1622{
1623#if defined(USE_X86_ASM)
1624 /*
1625 * This x86 code contributed by Josh Vanderhoof.
1626 *
1627 * 0: a1 10 32 54 76 movl __glapi_Dispatch,%eax
1628 * 00 01 02 03 04
1629 * 5: 85 c0 testl %eax,%eax
1630 * 05 06
1631 * 7: 74 06 je f <entrypoint+0xf>
1632 * 07 08
1633 * 9: ff a0 10 32 54 76 jmp *0x76543210(%eax)
1634 * 09 0a 0b 0c 0d 0e
1635 * f: e8 fc ff ff ff call __glapi_get_dispatch
1636 * 0f 10 11 12 13
1637 * 14: ff a0 10 32 54 76 jmp *0x76543210(%eax)
1638 * 14 15 16 17 18 19
1639 */
1640 static const unsigned char temp[] = {
1641 0xa1, 0x00, 0x00, 0x00, 0x00,
1642 0x85, 0xc0,
1643 0x74, 0x06,
1644 0xff, 0xa0, 0x00, 0x00, 0x00, 0x00,
1645 0xe8, 0x00, 0x00, 0x00, 0x00,
1646 0xff, 0xa0, 0x00, 0x00, 0x00, 0x00
1647 };
1648 unsigned char *code = malloc(sizeof(temp));
1649 unsigned int next_insn;
1650 if (code) {
1651 memcpy(code, temp, sizeof(temp));
1652
1653 *(unsigned int *)(code + 0x01) = (unsigned int)&_glapi_Dispatch;
1654 *(unsigned int *)(code + 0x0b) = (unsigned int)functionOffset * 4;
1655 next_insn = (unsigned int)(code + 0x14);
1656 *(unsigned int *)(code + 0x10) = (unsigned int)_glapi_get_dispatch - next_insn;
1657 *(unsigned int *)(code + 0x16) = (unsigned int)functionOffset * 4;
1658 }
1659 return code;
1660#else
1661 return NULL;
1662#endif
1663}
1664
1665
1666
1667/*
1668 * Add a new extension function entrypoint.
1669 * Return: GL_TRUE = success or GL_FALSE = failure
1670 */
1671GLboolean
1672_glapi_add_entrypoint(const char *funcName, GLuint offset)
1673{
Brian Paul959f8022000-03-19 01:10:11 +00001674 /* first check if the named function is already statically present */
1675 {
1676 GLint index = get_static_proc_offset(funcName);
1677 if (index >= 0) {
Brian Paulb51b0a82001-03-07 05:06:11 +00001678 return (GLboolean) ((GLuint) index == offset); /* bad offset! */
Brian Paul959f8022000-03-19 01:10:11 +00001679 }
1680 }
1681
1682 {
1683 /* make sure this offset/name pair is legal */
1684 const char *name = _glapi_get_proc_name(offset);
1685 if (name && strcmp(name, funcName) != 0)
1686 return GL_FALSE; /* bad name! */
1687 }
1688
1689 {
1690 /* be sure index and name match known data */
1691 GLuint i;
1692 for (i = 0; i < NumExtEntryPoints; i++) {
1693 if (strcmp(ExtEntryTable[i].Name, funcName) == 0) {
1694 /* function already registered with api */
1695 if (ExtEntryTable[i].Offset == offset) {
1696 return GL_TRUE; /* offsets match */
1697 }
1698 else {
1699 return GL_FALSE; /* bad offset! */
1700 }
1701 }
1702 }
1703
Brian Paul2c3a6202000-05-24 17:53:30 +00001704 /* Make sure we don't try to add a new entrypoint after someone
1705 * has already called _glapi_get_dispatch_table_size()! If that's
1706 * happened the caller's information would become out of date.
1707 */
1708 if (GetSizeCalled)
1709 return GL_FALSE;
1710
Brian Paul959f8022000-03-19 01:10:11 +00001711 /* make sure we have space */
1712 if (NumExtEntryPoints >= MAX_EXTENSION_FUNCS) {
1713 return GL_FALSE;
1714 }
1715 else {
1716 void *entrypoint = generate_entrypoint(offset);
1717 if (!entrypoint)
1718 return GL_FALSE;
1719
Brian Paulfffb8092000-03-29 18:46:11 +00001720 ExtEntryTable[NumExtEntryPoints].Name = str_dup(funcName);
Brian Paul959f8022000-03-19 01:10:11 +00001721 ExtEntryTable[NumExtEntryPoints].Offset = offset;
1722 ExtEntryTable[NumExtEntryPoints].Address = entrypoint;
1723 NumExtEntryPoints++;
1724
1725 if (offset > MaxDispatchOffset)
1726 MaxDispatchOffset = offset;
1727
1728 return GL_TRUE; /* success */
1729 }
1730 }
1731
1732 /* should never get here, but play it safe */
1733 return GL_FALSE;
1734}
1735
1736
1737
1738#if 0000 /* prototype code for dynamic extension slot allocation */
1739
1740static int NextFreeOffset = 409; /*XXX*/
1741#define MAX_DISPATCH_TABLE_SIZE 1000
1742
1743/*
1744 * Dynamically allocate a dispatch slot for an extension entrypoint
1745 * and generate the assembly language dispatch stub.
1746 * Return the dispatch offset for the function or -1 if no room or error.
1747 */
1748GLint
1749_glapi_add_entrypoint2(const char *funcName)
1750{
1751 int offset;
1752
1753 /* first see if extension func is already known */
1754 offset = _glapi_get_proc_offset(funcName);
1755 if (offset >= 0)
1756 return offset;
1757
1758 if (NumExtEntryPoints < MAX_EXTENSION_FUNCS
1759 && NextFreeOffset < MAX_DISPATCH_TABLE_SIZE) {
1760 void *entryPoint;
1761 offset = NextFreeOffset;
1762 entryPoint = generate_entrypoint(offset);
1763 if (entryPoint) {
1764 NextFreeOffset++;
Brian Paulfffb8092000-03-29 18:46:11 +00001765 ExtEntryTable[NumExtEntryPoints].Name = str_dup(funcName);
Brian Paul959f8022000-03-19 01:10:11 +00001766 ExtEntryTable[NumExtEntryPoints].Offset = offset;
1767 ExtEntryTable[NumExtEntryPoints].Address = entryPoint;
1768 NumExtEntryPoints++;
1769 return offset;
1770 }
1771 }
1772 return -1;
1773}
1774
1775#endif
1776
1777
1778
1779/*
1780 * Return offset of entrypoint for named function within dispatch table.
1781 */
1782GLint
1783_glapi_get_proc_offset(const char *funcName)
1784{
1785 /* search extension functions first */
Brian Paulb51b0a82001-03-07 05:06:11 +00001786 GLuint i;
Brian Paul959f8022000-03-19 01:10:11 +00001787 for (i = 0; i < NumExtEntryPoints; i++) {
1788 if (strcmp(ExtEntryTable[i].Name, funcName) == 0) {
1789 return ExtEntryTable[i].Offset;
1790 }
1791 }
1792
1793 /* search static functions */
1794 return get_static_proc_offset(funcName);
1795}
1796
1797
1798
1799/*
1800 * Return entrypoint for named function.
1801 */
1802const GLvoid *
1803_glapi_get_proc_address(const char *funcName)
1804{
1805 /* search extension functions first */
Brian Paulb51b0a82001-03-07 05:06:11 +00001806 GLuint i;
Brian Paul959f8022000-03-19 01:10:11 +00001807 for (i = 0; i < NumExtEntryPoints; i++) {
1808 if (strcmp(ExtEntryTable[i].Name, funcName) == 0) {
1809 return ExtEntryTable[i].Address;
1810 }
1811 }
1812
1813 /* search static functions */
1814 return get_static_proc_address(funcName);
1815}
1816
1817
1818
1819
1820/*
1821 * Return the name of the function at the given dispatch offset.
1822 * This is only intended for debugging.
1823 */
1824const char *
1825_glapi_get_proc_name(GLuint offset)
1826{
1827 const GLuint n = sizeof(static_functions) / sizeof(struct name_address_offset);
1828 GLuint i;
1829 for (i = 0; i < n; i++) {
1830 if (static_functions[i].Offset == offset)
1831 return static_functions[i].Name;
1832 }
1833
1834 /* search added extension functions */
1835 for (i = 0; i < NumExtEntryPoints; i++) {
1836 if (ExtEntryTable[i].Offset == offset) {
1837 return ExtEntryTable[i].Name;
1838 }
1839 }
1840 return NULL;
1841}
1842
1843
1844
1845/*
1846 * Make sure there are no NULL pointers in the given dispatch table.
1847 * Intented for debugging purposes.
1848 */
1849void
1850_glapi_check_table(const struct _glapi_table *table)
1851{
1852 const GLuint entries = _glapi_get_dispatch_table_size();
1853 const void **tab = (const void **) table;
1854 GLuint i;
1855 for (i = 1; i < entries; i++) {
1856 assert(tab[i]);
1857 }
1858
1859#ifdef DEBUG
1860 /* Do some spot checks to be sure that the dispatch table
1861 * slots are assigned correctly.
1862 */
1863 {
1864 GLuint BeginOffset = _glapi_get_proc_offset("glBegin");
1865 char *BeginFunc = (char*) &table->Begin;
1866 GLuint offset = (BeginFunc - (char *) table) / sizeof(void *);
1867 assert(BeginOffset == _gloffset_Begin);
1868 assert(BeginOffset == offset);
1869 }
1870 {
1871 GLuint viewportOffset = _glapi_get_proc_offset("glViewport");
1872 char *viewportFunc = (char*) &table->Viewport;
1873 GLuint offset = (viewportFunc - (char *) table) / sizeof(void *);
1874 assert(viewportOffset == _gloffset_Viewport);
1875 assert(viewportOffset == offset);
1876 }
1877 {
1878 GLuint VertexPointerOffset = _glapi_get_proc_offset("glVertexPointer");
1879 char *VertexPointerFunc = (char*) &table->VertexPointer;
1880 GLuint offset = (VertexPointerFunc - (char *) table) / sizeof(void *);
1881 assert(VertexPointerOffset == _gloffset_VertexPointer);
1882 assert(VertexPointerOffset == offset);
1883 }
1884 {
1885 GLuint ResetMinMaxOffset = _glapi_get_proc_offset("glResetMinmax");
1886 char *ResetMinMaxFunc = (char*) &table->ResetMinmax;
1887 GLuint offset = (ResetMinMaxFunc - (char *) table) / sizeof(void *);
1888 assert(ResetMinMaxOffset == _gloffset_ResetMinmax);
1889 assert(ResetMinMaxOffset == offset);
1890 }
1891 {
1892 GLuint blendColorOffset = _glapi_get_proc_offset("glBlendColor");
1893 char *blendColorFunc = (char*) &table->BlendColor;
1894 GLuint offset = (blendColorFunc - (char *) table) / sizeof(void *);
1895 assert(blendColorOffset == _gloffset_BlendColor);
1896 assert(blendColorOffset == offset);
1897 }
1898 {
1899 GLuint istextureOffset = _glapi_get_proc_offset("glIsTextureEXT");
1900 char *istextureFunc = (char*) &table->IsTextureEXT;
1901 GLuint offset = (istextureFunc - (char *) table) / sizeof(void *);
1902 assert(istextureOffset == _gloffset_IsTextureEXT);
1903 assert(istextureOffset == offset);
1904 }
Brian Paula14cbff2000-10-27 18:31:21 +00001905 {
1906 GLuint secondaryColor3fOffset = _glapi_get_proc_offset("glSecondaryColor3fEXT");
1907 char *secondaryColor3fFunc = (char*) &table->SecondaryColor3fEXT;
1908 GLuint offset = (secondaryColor3fFunc - (char *) table) / sizeof(void *);
1909 assert(secondaryColor3fOffset == _gloffset_SecondaryColor3fEXT);
1910 assert(secondaryColor3fOffset == offset);
1911 assert(_glapi_get_proc_address("glSecondaryColor3fEXT") == (void *) &glSecondaryColor3fEXT);
1912 }
Brian Paul959f8022000-03-19 01:10:11 +00001913#endif
1914}
1915
1916
1917
1918