blob: 51c24f980cc960e763b432d3336785c84af4d67b [file] [log] [blame]
Brian Paul3c27be32000-02-10 21:27:48 +00001/* $Id: glapi.c,v 1.32 2000/02/10 21:27:48 brianp Exp $ */
Brian Paulfbd8f211999-11-11 01:22:25 +00002
3/*
4 * Mesa 3-D graphics library
5 * Version: 3.3
6 *
Brian Paulacb62972000-01-14 16:35:25 +00007 * Copyright (C) 1999-2000 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 Paul7e1161b1999-11-25 18:17:04 +000041 */
42
43
44
Brian Paul3c27be32000-02-10 21:27:48 +000045#include "glheader.h"
Brian Paulfbd8f211999-11-11 01:22:25 +000046#include "glapi.h"
47#include "glapinoop.h"
Brian Paul0c239fc1999-12-16 12:38:11 +000048#include "glapioffsets.h"
49#include "glapitable.h"
Brian Paul9f943992000-01-28 19:03:33 +000050#if defined(THREADS)
51#include "glthread.h"
52#endif
Brian Paulbb72d321999-12-16 17:31:59 +000053
Brian Paulfbd8f211999-11-11 01:22:25 +000054
Brian Paul0f710251999-12-15 15:02:30 +000055/* This is used when thread safety is disabled */
Brian Paulc2319b42000-01-17 19:28:31 +000056struct _glapi_table *_glapi_Dispatch = &__glapi_noop_table;
Brian Paul0f710251999-12-15 15:02:30 +000057
Brian Paul8f91fb61999-12-17 14:51:28 +000058/* Used when thread safety disabled */
Brian Paulf9b97d92000-01-28 20:17:42 +000059void *_glapi_Context = NULL;
Brian Paul8f91fb61999-12-17 14:51:28 +000060
Brian Paul0f710251999-12-15 15:02:30 +000061
Brian Paul7fb54ae1999-11-19 22:33:50 +000062#if defined(THREADS)
Brian Paulbb72d321999-12-16 17:31:59 +000063
Brian Paul77aa8b92000-01-07 07:30:13 +000064/* Flag to indicate whether thread-safe dispatch is enabled */
65static GLboolean ThreadSafe = GL_FALSE;
66
Brian Paulbb72d321999-12-16 17:31:59 +000067static _glthread_TSD DispatchTSD;
68
Brian Paul8f91fb61999-12-17 14:51:28 +000069static _glthread_TSD ContextTSD;
70
Brian Paul0f710251999-12-15 15:02:30 +000071#endif
72
73
74
Brian Paulbb72d321999-12-16 17:31:59 +000075static GLuint MaxDispatchOffset = sizeof(struct _glapi_table) / sizeof(void *) - 1;
Brian Paul0f710251999-12-15 15:02:30 +000076static GLboolean GetSizeCalled = GL_FALSE;
Brian Paulfbd8f211999-11-11 01:22:25 +000077
Brian Paul7fb54ae1999-11-19 22:33:50 +000078
Brian Paulbb72d321999-12-16 17:31:59 +000079
80/*
81 * We should call this periodically from a function such as glXMakeCurrent
82 * in order to test if multiple threads are being used. When we detect
83 * that situation we should then call _glapi_enable_thread_safety()
84 */
85void
86_glapi_check_multithread(void)
87{
88#if defined(THREADS)
Brian Paul26e14d22000-01-05 04:36:17 +000089 if (!ThreadSafe) {
Brian Paulbb72d321999-12-16 17:31:59 +000090 static unsigned long knownID;
91 static GLboolean firstCall = GL_TRUE;
92 if (firstCall) {
93 knownID = _glthread_GetID();
94 firstCall = GL_FALSE;
95 }
96 else if (knownID != _glthread_GetID()) {
Brian Paul26e14d22000-01-05 04:36:17 +000097 ThreadSafe = GL_TRUE;
Brian Paulbb72d321999-12-16 17:31:59 +000098 }
99 }
Brian Paul26e14d22000-01-05 04:36:17 +0000100 if (ThreadSafe) {
Brian Paulbb72d321999-12-16 17:31:59 +0000101 /* make sure that this thread's dispatch pointer isn't null */
102 if (!_glapi_get_dispatch()) {
103 _glapi_set_dispatch(NULL);
104 }
105 }
106#endif
107}
108
109
110
111/*
Brian Paul8f91fb61999-12-17 14:51:28 +0000112 * Set the current context pointer for this thread.
113 * The context pointer is an opaque type which should be cast to
114 * void from the real context pointer type.
115 */
116void
Brian Paulf9b97d92000-01-28 20:17:42 +0000117_glapi_set_context(void *context)
Brian Paul8f91fb61999-12-17 14:51:28 +0000118{
119#if defined(THREADS)
Brian Paul3c27be32000-02-10 21:27:48 +0000120 _glthread_SetTSD(&ContextTSD, context);
Brian Paul26e14d22000-01-05 04:36:17 +0000121 if (ThreadSafe)
Brian Paulf9b97d92000-01-28 20:17:42 +0000122 _glapi_Context = NULL;
Brian Paul8f91fb61999-12-17 14:51:28 +0000123 else
Brian Paulf9b97d92000-01-28 20:17:42 +0000124 _glapi_Context = context;
Brian Paul8f91fb61999-12-17 14:51:28 +0000125#else
Brian Paulf9b97d92000-01-28 20:17:42 +0000126 _glapi_Context = context;
Brian Paul8f91fb61999-12-17 14:51:28 +0000127#endif
128}
129
130
131
132/*
133 * Get the current context pointer for this thread.
134 * The context pointer is an opaque type which should be cast from
135 * void to the real context pointer type.
136 */
137void *
Brian Paulf9b97d92000-01-28 20:17:42 +0000138_glapi_get_context(void)
Brian Paul8f91fb61999-12-17 14:51:28 +0000139{
140#if defined(THREADS)
Brian Paul26e14d22000-01-05 04:36:17 +0000141 if (ThreadSafe) {
Brian Paul8f91fb61999-12-17 14:51:28 +0000142 return _glthread_GetTSD(&ContextTSD);
143 }
144 else {
Brian Paulf9b97d92000-01-28 20:17:42 +0000145 return _glapi_Context;
Brian Paul8f91fb61999-12-17 14:51:28 +0000146 }
147#else
Brian Paulf9b97d92000-01-28 20:17:42 +0000148 return _glapi_Context;
Brian Paul8f91fb61999-12-17 14:51:28 +0000149#endif
150}
151
152
153
154/*
Brian Paul7fb54ae1999-11-19 22:33:50 +0000155 * Set the global or per-thread dispatch table pointer.
156 */
157void
158_glapi_set_dispatch(struct _glapi_table *dispatch)
159{
160 if (!dispatch) {
161 /* use the no-op functions */
162 dispatch = &__glapi_noop_table;
163 }
164#ifdef DEBUG
165 else {
166 _glapi_check_table(dispatch);
167 }
168#endif
169
170#if defined(THREADS)
Brian Paul3c27be32000-02-10 21:27:48 +0000171 _glthread_SetTSD(&DispatchTSD, (void*) dispatch);
Brian Paul26e14d22000-01-05 04:36:17 +0000172 if (ThreadSafe)
Brian Paulc2319b42000-01-17 19:28:31 +0000173 _glapi_Dispatch = NULL;
Brian Paul590d3471999-12-17 12:20:23 +0000174 else
Brian Paulc2319b42000-01-17 19:28:31 +0000175 _glapi_Dispatch = dispatch;
Brian Paul7fb54ae1999-11-19 22:33:50 +0000176#else
Brian Paulc2319b42000-01-17 19:28:31 +0000177 _glapi_Dispatch = dispatch;
Brian Paul7fb54ae1999-11-19 22:33:50 +0000178#endif
179}
180
181
Brian Paulbb72d321999-12-16 17:31:59 +0000182
Brian Paul7fb54ae1999-11-19 22:33:50 +0000183/*
Brian Paulbb72d321999-12-16 17:31:59 +0000184 * Return pointer to current dispatch table for calling thread.
Brian Paul7fb54ae1999-11-19 22:33:50 +0000185 */
186struct _glapi_table *
187_glapi_get_dispatch(void)
188{
189#if defined(THREADS)
Brian Paul26e14d22000-01-05 04:36:17 +0000190 if (ThreadSafe) {
Brian Paulbb72d321999-12-16 17:31:59 +0000191 return (struct _glapi_table *) _glthread_GetTSD(&DispatchTSD);
192 }
Brian Paul590d3471999-12-17 12:20:23 +0000193 else {
Brian Paulc2319b42000-01-17 19:28:31 +0000194 assert(_glapi_Dispatch);
195 return _glapi_Dispatch;
Brian Paul590d3471999-12-17 12:20:23 +0000196 }
Brian Paul7fb54ae1999-11-19 22:33:50 +0000197#else
Brian Paulc2319b42000-01-17 19:28:31 +0000198 return _glapi_Dispatch;
Brian Paul7fb54ae1999-11-19 22:33:50 +0000199#endif
200}
201
202
Brian Paul91bcefa1999-11-27 21:30:40 +0000203
204/*
205 * Return size of dispatch table struct as number of functions (or
206 * slots).
207 */
208GLuint
209_glapi_get_dispatch_table_size(void)
210{
Brian Paul0f710251999-12-15 15:02:30 +0000211 /* return sizeof(struct _glapi_table) / sizeof(void *);*/
212 GetSizeCalled = GL_TRUE;
213 return MaxDispatchOffset + 1;
Brian Paul91bcefa1999-11-27 21:30:40 +0000214}
215
216
217
Brian Paul7fb54ae1999-11-19 22:33:50 +0000218/*
219 * Get API dispatcher version string.
Brian Paul7fb54ae1999-11-19 22:33:50 +0000220 */
221const char *
222_glapi_get_version(void)
223{
Brian Paul9f943992000-01-28 19:03:33 +0000224 return "20000128"; /* YYYYMMDD */
Brian Paul7fb54ae1999-11-19 22:33:50 +0000225}
226
227
Brian Paul91bcefa1999-11-27 21:30:40 +0000228struct name_address_pair {
Brian Paul7fb54ae1999-11-19 22:33:50 +0000229 const char *Name;
Brian Paul91bcefa1999-11-27 21:30:40 +0000230 GLvoid *Address;
Brian Paul7fb54ae1999-11-19 22:33:50 +0000231};
232
Brian Paul0c239fc1999-12-16 12:38:11 +0000233static struct name_address_pair static_functions[1000];
234
235
236
237/*
238 * Return dispatch table offset of the named static (built-in) function.
239 * Return -1 if function not found.
240 */
241static GLint
242get_static_proc_offset(const char *funcName)
243{
244 GLuint i;
245 for (i = 0; static_functions[i].Name; i++) {
246 if (strcmp(static_functions[i].Name, funcName) == 0) {
247 return i;
248 }
249 }
250 return -1;
251}
252
253
254/*
255 * Return dispatch function address the named static (built-in) function.
256 * Return NULL if function not found.
257 */
258static GLvoid *
259get_static_proc_address(const char *funcName)
260{
261 GLuint i = get_static_proc_offset(funcName);
262 if (i >= 0)
263 return static_functions[i].Address;
264 else
265 return NULL;
266}
267
268
269
270/**********************************************************************
271 * Extension function management.
Brian Paulbb72d321999-12-16 17:31:59 +0000272 */
Brian Paul0c239fc1999-12-16 12:38:11 +0000273
274
275struct _glapi_ext_entrypoint {
276 const char *Name; /* the extension function's name */
277 GLuint Offset; /* relative to start of dispatch table */
278 GLvoid *Address; /* address of dispatch function */
279};
280
281static struct _glapi_ext_entrypoint ExtEntryTable[_GLAPI_EXTRA_SLOTS];
282static GLuint NumExtEntryPoints = 0;
283
284
285
286/*
287 * Generate a dispatch function (entrypoint) which jumps through
288 * the given slot number (offset) in the current dispatch table.
Brian Paul4428a3f2000-01-31 22:51:44 +0000289 * We need assembly language in order to accomplish this.
Brian Paul0c239fc1999-12-16 12:38:11 +0000290 */
291static void *
Brian Paulb086b952000-02-02 18:50:07 +0000292generate_entrypoint(GLuint functionOffset)
Brian Paul0c239fc1999-12-16 12:38:11 +0000293{
Brian Paul4428a3f2000-01-31 22:51:44 +0000294#if defined(USE_X86_ASM)
295 /*
296 * This x86 code contributed by Josh Vanderhoof.
297 *
298 * 0: a1 10 32 54 76 movl __glapi_Dispatch,%eax
299 * 00 01 02 03 04
300 * 5: 85 c0 testl %eax,%eax
301 * 05 06
302 * 7: 74 06 je f <entrypoint+0xf>
303 * 07 08
304 * 9: ff a0 10 32 54 76 jmp *0x76543210(%eax)
305 * 09 0a 0b 0c 0d 0e
306 * f: e8 fc ff ff ff call __glapi_get_dispatch
307 * 0f 10 11 12 13
308 * 14: ff a0 10 32 54 76 jmp *0x76543210(%eax)
309 * 14 15 16 17 18 19
310 */
311 static const unsigned char temp[] = {
312 0xa1, 0x00, 0x00, 0x00, 0x00,
313 0x85, 0xc0,
314 0x74, 0x06,
315 0xff, 0xa0, 0x00, 0x00, 0x00, 0x00,
316 0xe8, 0x00, 0x00, 0x00, 0x00,
317 0xff, 0xa0, 0x00, 0x00, 0x00, 0x00
318 };
319 unsigned char *code = malloc(sizeof(temp));
320 unsigned int next_insn;
321 if (code) {
322 memcpy(code, temp, sizeof(temp));
Brian Paul0c239fc1999-12-16 12:38:11 +0000323
Brian Paul4428a3f2000-01-31 22:51:44 +0000324 *(unsigned int *)(code + 0x01) = (unsigned int)&_glapi_Dispatch;
325 *(unsigned int *)(code + 0x0b) = (unsigned int)functionOffset * 4;
326 next_insn = (unsigned int)(code + 0x14);
327 *(unsigned int *)(code + 0x10) = (unsigned int)_glapi_get_dispatch - next_insn;
328 *(unsigned int *)(code + 0x16) = (unsigned int)functionOffset * 4;
329 }
330 return code;
331#else
Brian Paul0c239fc1999-12-16 12:38:11 +0000332 return NULL;
Brian Paul4428a3f2000-01-31 22:51:44 +0000333#endif
Brian Paul0c239fc1999-12-16 12:38:11 +0000334}
335
336
337
338/*
339 * Add a new extension function entrypoint.
340 * Return: GL_TRUE = success or GL_FALSE = failure
341 */
342GLboolean
343_glapi_add_entrypoint(const char *funcName, GLuint offset)
344{
345 GLint index;
346
347 /* Make sure we don't try to add a new entrypoint after someone
348 * has already called _glapi_get_dispatch_table_size()! If that's
349 * happened the caller's information will now be out of date.
350 */
351 assert(!GetSizeCalled);
352
353 /* first check if the named function is already statically present */
354 index = get_static_proc_offset(funcName);
355
356 if (index >= 0) {
357 assert(index == offset);
358 return GL_TRUE;
359 }
360 /* else if (offset < _glapi_get_dispatch_table_size()) { */
361 else {
362 /* be sure index and name match known data */
363 GLuint i;
364 for (i = 0; i < NumExtEntryPoints; i++) {
365 if (strcmp(ExtEntryTable[i].Name, funcName) == 0) {
366 /* function already registered with api */
367 if (ExtEntryTable[i].Offset == offset) {
368 return GL_TRUE; /* offsets match */
369 }
370 else {
371 return GL_FALSE; /* bad offset! */
372 }
373 }
374 }
375 assert(NumExtEntryPoints < _GLAPI_EXTRA_SLOTS);
376 ExtEntryTable[NumExtEntryPoints].Name = strdup(funcName);
377 ExtEntryTable[NumExtEntryPoints].Offset = offset;
378 ExtEntryTable[NumExtEntryPoints].Address = generate_entrypoint(offset);
379 NumExtEntryPoints++;
380
381 if (offset > MaxDispatchOffset)
382 MaxDispatchOffset = offset;
383
384 return GL_TRUE;
385 }
386/*
387 else {
388 return GL_FALSE;
389 }
390*/
391}
392
393
394
395/*
396 * Return offset of entrypoint for named function within dispatch table.
397 */
398GLint
399_glapi_get_proc_offset(const char *funcName)
400{
401 /* search extension functions first */
402 GLint i;
403 for (i = 0; i < NumExtEntryPoints; i++) {
404 if (strcmp(ExtEntryTable[i].Name, funcName) == 0) {
405 return ExtEntryTable[i].Offset;
406 }
407 }
408
409 /* search static functions */
410 return get_static_proc_offset(funcName);
411}
412
413
414
415/*
416 * Return entrypoint for named function.
417 */
418const GLvoid *
419_glapi_get_proc_address(const char *funcName)
420{
421 /* search extension functions first */
422 GLint i;
423 for (i = 0; i < NumExtEntryPoints; i++) {
424 if (strcmp(ExtEntryTable[i].Name, funcName) == 0) {
425 return ExtEntryTable[i].Address;
426 }
427 }
428
429 /* search static functions */
430 return get_static_proc_address(funcName);
431}
432
433
434
435
436/*
437 * Return the name of the function at the given dispatch offset.
438 * This is only intended for debugging.
439 */
440const char *
441_glapi_get_proc_name(GLuint offset)
442{
443 GLuint n = sizeof(static_functions) / sizeof(struct name_address_pair);
444 if (offset < n) {
445 return static_functions[offset].Name;
446 }
447 else {
448 /* search added extension functions */
449 GLuint i;
450 for (i = 0; i < NumExtEntryPoints; i++) {
451 if (ExtEntryTable[i].Offset == offset) {
452 return ExtEntryTable[i].Name;
453 }
454 }
455 return NULL;
456 }
457}
458
459
460
461/*
462 * Make sure there are no NULL pointers in the given dispatch table.
463 * Intented for debugging purposes.
464 */
465void
466_glapi_check_table(const struct _glapi_table *table)
467{
468 const GLuint entries = _glapi_get_dispatch_table_size();
469 const void **tab = (const void **) table;
470 GLuint i;
471 for (i = 1; i < entries; i++) {
472 assert(tab[i]);
473 }
474
Brian Paulacb62972000-01-14 16:35:25 +0000475#ifdef DEBUG
Brian Paul0c239fc1999-12-16 12:38:11 +0000476 /* Do some spot checks to be sure that the dispatch table
477 * slots are assigned correctly.
478 */
479 {
480 GLuint BeginOffset = _glapi_get_proc_offset("glBegin");
481 char *BeginFunc = (char*) &table->Begin;
482 GLuint offset = (BeginFunc - (char *) table) / sizeof(void *);
483 assert(BeginOffset == _gloffset_Begin);
484 assert(BeginOffset == offset);
485 }
486 {
487 GLuint viewportOffset = _glapi_get_proc_offset("glViewport");
488 char *viewportFunc = (char*) &table->Viewport;
489 GLuint offset = (viewportFunc - (char *) table) / sizeof(void *);
490 assert(viewportOffset == _gloffset_Viewport);
491 assert(viewportOffset == offset);
492 }
493 {
494 GLuint VertexPointerOffset = _glapi_get_proc_offset("glVertexPointer");
495 char *VertexPointerFunc = (char*) &table->VertexPointer;
496 GLuint offset = (VertexPointerFunc - (char *) table) / sizeof(void *);
497 assert(VertexPointerOffset == _gloffset_VertexPointer);
498 assert(VertexPointerOffset == offset);
499 }
500 {
501 GLuint ResetMinMaxOffset = _glapi_get_proc_offset("glResetMinmax");
502 char *ResetMinMaxFunc = (char*) &table->ResetMinmax;
503 GLuint offset = (ResetMinMaxFunc - (char *) table) / sizeof(void *);
504 assert(ResetMinMaxOffset == _gloffset_ResetMinmax);
505 assert(ResetMinMaxOffset == offset);
506 }
507 {
508 GLuint blendColorOffset = _glapi_get_proc_offset("glBlendColorEXT");
509 char *blendColorFunc = (char*) &table->BlendColorEXT;
510 GLuint offset = (blendColorFunc - (char *) table) / sizeof(void *);
511 assert(blendColorOffset == _gloffset_BlendColorEXT);
512 assert(blendColorOffset == offset);
513 }
514 {
515 GLuint istextureOffset = _glapi_get_proc_offset("glIsTextureEXT");
516 char *istextureFunc = (char*) &table->IsTextureEXT;
517 GLuint offset = (istextureFunc - (char *) table) / sizeof(void *);
518 assert(istextureOffset == _gloffset_IsTextureEXT);
519 assert(istextureOffset == offset);
520 }
Brian Paulacb62972000-01-14 16:35:25 +0000521#endif
Brian Paul0c239fc1999-12-16 12:38:11 +0000522}
523
524
Brian Paul0c239fc1999-12-16 12:38:11 +0000525/*
526 * For each entry in static_functions[] which use this function
527 * we should implement a dispatch function in glapitemp.h and
528 * in glapinoop.c
529 */
Brian Paulb3674092000-01-08 11:01:24 +0000530static int NotImplemented(void)
Brian Paul0c239fc1999-12-16 12:38:11 +0000531{
Brian Paulb3674092000-01-08 11:01:24 +0000532 return 0;
Brian Paul0c239fc1999-12-16 12:38:11 +0000533}
534
535
536
Brian Paul91bcefa1999-11-27 21:30:40 +0000537static struct name_address_pair static_functions[] = {
Brian Paul0c239fc1999-12-16 12:38:11 +0000538 { "NotImplemented", (GLvoid *) NotImplemented },
539
540 /* GL 1.1 */
Brian Paul91bcefa1999-11-27 21:30:40 +0000541 { "glAccum", (GLvoid *) glAccum },
542 { "glAlphaFunc", (GLvoid *) glAlphaFunc },
543 { "glBegin", (GLvoid *) glBegin },
544 { "glBitmap", (GLvoid *) glBitmap },
545 { "glBlendFunc", (GLvoid *) glBlendFunc },
546 { "glCallList", (GLvoid *) glCallList },
547 { "glCallLists", (GLvoid *) glCallLists },
548 { "glClear", (GLvoid *) glClear },
549 { "glClearAccum", (GLvoid *) glClearAccum },
550 { "glClearColor", (GLvoid *) glClearColor },
551 { "glClearDepth", (GLvoid *) glClearDepth },
552 { "glClearIndex", (GLvoid *) glClearIndex },
553 { "glClearStencil", (GLvoid *) glClearStencil },
554 { "glClipPlane", (GLvoid *) glClipPlane },
555 { "glColor3b", (GLvoid *) glColor3b },
556 { "glColor3bv", (GLvoid *) glColor3bv },
557 { "glColor3d", (GLvoid *) glColor3d },
558 { "glColor3dv", (GLvoid *) glColor3dv },
559 { "glColor3f", (GLvoid *) glColor3f },
560 { "glColor3fv", (GLvoid *) glColor3fv },
561 { "glColor3i", (GLvoid *) glColor3i },
562 { "glColor3iv", (GLvoid *) glColor3iv },
563 { "glColor3s", (GLvoid *) glColor3s },
564 { "glColor3sv", (GLvoid *) glColor3sv },
565 { "glColor3ub", (GLvoid *) glColor3ub },
566 { "glColor3ubv", (GLvoid *) glColor3ubv },
567 { "glColor3ui", (GLvoid *) glColor3ui },
568 { "glColor3uiv", (GLvoid *) glColor3uiv },
569 { "glColor3us", (GLvoid *) glColor3us },
570 { "glColor3usv", (GLvoid *) glColor3usv },
571 { "glColor4b", (GLvoid *) glColor4b },
572 { "glColor4bv", (GLvoid *) glColor4bv },
573 { "glColor4d", (GLvoid *) glColor4d },
574 { "glColor4dv", (GLvoid *) glColor4dv },
575 { "glColor4f", (GLvoid *) glColor4f },
576 { "glColor4fv", (GLvoid *) glColor4fv },
577 { "glColor4i", (GLvoid *) glColor4i },
578 { "glColor4iv", (GLvoid *) glColor4iv },
579 { "glColor4s", (GLvoid *) glColor4s },
580 { "glColor4sv", (GLvoid *) glColor4sv },
581 { "glColor4ub", (GLvoid *) glColor4ub },
582 { "glColor4ubv", (GLvoid *) glColor4ubv },
583 { "glColor4ui", (GLvoid *) glColor4ui },
584 { "glColor4uiv", (GLvoid *) glColor4uiv },
585 { "glColor4us", (GLvoid *) glColor4us },
586 { "glColor4usv", (GLvoid *) glColor4usv },
587 { "glColorMask", (GLvoid *) glColorMask },
588 { "glColorMaterial", (GLvoid *) glColorMaterial },
589 { "glCopyPixels", (GLvoid *) glCopyPixels },
590 { "glCullFace", (GLvoid *) glCullFace },
591 { "glDeleteLists", (GLvoid *) glDeleteLists },
592 { "glDepthFunc", (GLvoid *) glDepthFunc },
593 { "glDepthMask", (GLvoid *) glDepthMask },
594 { "glDepthRange", (GLvoid *) glDepthRange },
595 { "glDisable", (GLvoid *) glDisable },
596 { "glDrawBuffer", (GLvoid *) glDrawBuffer },
597 { "glDrawPixels", (GLvoid *) glDrawPixels },
598 { "glEdgeFlag", (GLvoid *) glEdgeFlag },
599 { "glEdgeFlagv", (GLvoid *) glEdgeFlagv },
600 { "glEnable", (GLvoid *) glEnable },
601 { "glEnd", (GLvoid *) glEnd },
602 { "glEndList", (GLvoid *) glEndList },
603 { "glEvalCoord1d", (GLvoid *) glEvalCoord1d },
604 { "glEvalCoord1dv", (GLvoid *) glEvalCoord1dv },
605 { "glEvalCoord1f", (GLvoid *) glEvalCoord1f },
606 { "glEvalCoord1fv", (GLvoid *) glEvalCoord1fv },
607 { "glEvalCoord2d", (GLvoid *) glEvalCoord2d },
608 { "glEvalCoord2dv", (GLvoid *) glEvalCoord2dv },
609 { "glEvalCoord2f", (GLvoid *) glEvalCoord2f },
610 { "glEvalCoord2fv", (GLvoid *) glEvalCoord2fv },
611 { "glEvalMesh1", (GLvoid *) glEvalMesh1 },
612 { "glEvalMesh2", (GLvoid *) glEvalMesh2 },
613 { "glEvalPoint1", (GLvoid *) glEvalPoint1 },
614 { "glEvalPoint2", (GLvoid *) glEvalPoint2 },
615 { "glFeedbackBuffer", (GLvoid *) glFeedbackBuffer },
616 { "glFinish", (GLvoid *) glFinish },
617 { "glFlush", (GLvoid *) glFlush },
618 { "glFogf", (GLvoid *) glFogf },
619 { "glFogfv", (GLvoid *) glFogfv },
620 { "glFogi", (GLvoid *) glFogi },
621 { "glFogiv", (GLvoid *) glFogiv },
622 { "glFrontFace", (GLvoid *) glFrontFace },
623 { "glFrustum", (GLvoid *) glFrustum },
624 { "glGenLists", (GLvoid *) glGenLists },
625 { "glGetBooleanv", (GLvoid *) glGetBooleanv },
626 { "glGetClipPlane", (GLvoid *) glGetClipPlane },
627 { "glGetDoublev", (GLvoid *) glGetDoublev },
628 { "glGetError", (GLvoid *) glGetError },
629 { "glGetFloatv", (GLvoid *) glGetFloatv },
630 { "glGetIntegerv", (GLvoid *) glGetIntegerv },
631 { "glGetLightfv", (GLvoid *) glGetLightfv },
632 { "glGetLightiv", (GLvoid *) glGetLightiv },
633 { "glGetMapdv", (GLvoid *) glGetMapdv },
634 { "glGetMapfv", (GLvoid *) glGetMapfv },
635 { "glGetMapiv", (GLvoid *) glGetMapiv },
636 { "glGetMaterialfv", (GLvoid *) glGetMaterialfv },
637 { "glGetMaterialiv", (GLvoid *) glGetMaterialiv },
638 { "glGetPixelMapfv", (GLvoid *) glGetPixelMapfv },
639 { "glGetPixelMapuiv", (GLvoid *) glGetPixelMapuiv },
640 { "glGetPixelMapusv", (GLvoid *) glGetPixelMapusv },
641 { "glGetPolygonStipple", (GLvoid *) glGetPolygonStipple },
642 { "glGetString", (GLvoid *) glGetString },
643 { "glGetTexEnvfv", (GLvoid *) glGetTexEnvfv },
644 { "glGetTexEnviv", (GLvoid *) glGetTexEnviv },
645 { "glGetTexGendv", (GLvoid *) glGetTexGendv },
646 { "glGetTexGenfv", (GLvoid *) glGetTexGenfv },
647 { "glGetTexGeniv", (GLvoid *) glGetTexGeniv },
648 { "glGetTexImage", (GLvoid *) glGetTexImage },
649 { "glGetTexLevelParameterfv", (GLvoid *) glGetTexLevelParameterfv },
650 { "glGetTexLevelParameteriv", (GLvoid *) glGetTexLevelParameteriv },
651 { "glGetTexParameterfv", (GLvoid *) glGetTexParameterfv },
652 { "glGetTexParameteriv", (GLvoid *) glGetTexParameteriv },
653 { "glHint", (GLvoid *) glHint },
654 { "glIndexMask", (GLvoid *) glIndexMask },
655 { "glIndexd", (GLvoid *) glIndexd },
656 { "glIndexdv", (GLvoid *) glIndexdv },
657 { "glIndexf", (GLvoid *) glIndexf },
658 { "glIndexfv", (GLvoid *) glIndexfv },
659 { "glIndexi", (GLvoid *) glIndexi },
660 { "glIndexiv", (GLvoid *) glIndexiv },
661 { "glIndexs", (GLvoid *) glIndexs },
662 { "glIndexsv", (GLvoid *) glIndexsv },
663 { "glInitNames", (GLvoid *) glInitNames },
664 { "glIsEnabled", (GLvoid *) glIsEnabled },
665 { "glIsList", (GLvoid *) glIsList },
666 { "glLightModelf", (GLvoid *) glLightModelf },
667 { "glLightModelfv", (GLvoid *) glLightModelfv },
668 { "glLightModeli", (GLvoid *) glLightModeli },
669 { "glLightModeliv", (GLvoid *) glLightModeliv },
670 { "glLightf", (GLvoid *) glLightf },
671 { "glLightfv", (GLvoid *) glLightfv },
672 { "glLighti", (GLvoid *) glLighti },
673 { "glLightiv", (GLvoid *) glLightiv },
674 { "glLineStipple", (GLvoid *) glLineStipple },
675 { "glLineWidth", (GLvoid *) glLineWidth },
676 { "glListBase", (GLvoid *) glListBase },
677 { "glLoadIdentity", (GLvoid *) glLoadIdentity },
678 { "glLoadMatrixd", (GLvoid *) glLoadMatrixd },
679 { "glLoadMatrixf", (GLvoid *) glLoadMatrixf },
680 { "glLoadName", (GLvoid *) glLoadName },
681 { "glLogicOp", (GLvoid *) glLogicOp },
682 { "glMap1d", (GLvoid *) glMap1d },
683 { "glMap1f", (GLvoid *) glMap1f },
684 { "glMap2d", (GLvoid *) glMap2d },
685 { "glMap2f", (GLvoid *) glMap2f },
686 { "glMapGrid1d", (GLvoid *) glMapGrid1d },
687 { "glMapGrid1f", (GLvoid *) glMapGrid1f },
688 { "glMapGrid2d", (GLvoid *) glMapGrid2d },
689 { "glMapGrid2f", (GLvoid *) glMapGrid2f },
690 { "glMaterialf", (GLvoid *) glMaterialf },
691 { "glMaterialfv", (GLvoid *) glMaterialfv },
692 { "glMateriali", (GLvoid *) glMateriali },
693 { "glMaterialiv", (GLvoid *) glMaterialiv },
694 { "glMatrixMode", (GLvoid *) glMatrixMode },
695 { "glMultMatrixd", (GLvoid *) glMultMatrixd },
696 { "glMultMatrixf", (GLvoid *) glMultMatrixf },
697 { "glNewList", (GLvoid *) glNewList },
698 { "glNormal3b", (GLvoid *) glNormal3b },
699 { "glNormal3bv", (GLvoid *) glNormal3bv },
700 { "glNormal3d", (GLvoid *) glNormal3d },
701 { "glNormal3dv", (GLvoid *) glNormal3dv },
702 { "glNormal3f", (GLvoid *) glNormal3f },
703 { "glNormal3fv", (GLvoid *) glNormal3fv },
704 { "glNormal3i", (GLvoid *) glNormal3i },
705 { "glNormal3iv", (GLvoid *) glNormal3iv },
706 { "glNormal3s", (GLvoid *) glNormal3s },
707 { "glNormal3sv", (GLvoid *) glNormal3sv },
708 { "glOrtho", (GLvoid *) glOrtho },
709 { "glPassThrough", (GLvoid *) glPassThrough },
710 { "glPixelMapfv", (GLvoid *) glPixelMapfv },
711 { "glPixelMapuiv", (GLvoid *) glPixelMapuiv },
712 { "glPixelMapusv", (GLvoid *) glPixelMapusv },
713 { "glPixelStoref", (GLvoid *) glPixelStoref },
714 { "glPixelStorei", (GLvoid *) glPixelStorei },
715 { "glPixelTransferf", (GLvoid *) glPixelTransferf },
716 { "glPixelTransferi", (GLvoid *) glPixelTransferi },
717 { "glPixelZoom", (GLvoid *) glPixelZoom },
718 { "glPointSize", (GLvoid *) glPointSize },
719 { "glPolygonMode", (GLvoid *) glPolygonMode },
720 { "glPolygonOffset", (GLvoid *) glPolygonOffset },
721 { "glPolygonStipple", (GLvoid *) glPolygonStipple },
722 { "glPopAttrib", (GLvoid *) glPopAttrib },
723 { "glPopMatrix", (GLvoid *) glPopMatrix },
724 { "glPopName", (GLvoid *) glPopName },
725 { "glPushAttrib", (GLvoid *) glPushAttrib },
726 { "glPushMatrix", (GLvoid *) glPushMatrix },
727 { "glPushName", (GLvoid *) glPushName },
728 { "glRasterPos2d", (GLvoid *) glRasterPos2d },
729 { "glRasterPos2dv", (GLvoid *) glRasterPos2dv },
730 { "glRasterPos2f", (GLvoid *) glRasterPos2f },
731 { "glRasterPos2fv", (GLvoid *) glRasterPos2fv },
732 { "glRasterPos2i", (GLvoid *) glRasterPos2i },
733 { "glRasterPos2iv", (GLvoid *) glRasterPos2iv },
734 { "glRasterPos2s", (GLvoid *) glRasterPos2s },
735 { "glRasterPos2sv", (GLvoid *) glRasterPos2sv },
736 { "glRasterPos3d", (GLvoid *) glRasterPos3d },
737 { "glRasterPos3dv", (GLvoid *) glRasterPos3dv },
738 { "glRasterPos3f", (GLvoid *) glRasterPos3f },
739 { "glRasterPos3fv", (GLvoid *) glRasterPos3fv },
740 { "glRasterPos3i", (GLvoid *) glRasterPos3i },
741 { "glRasterPos3iv", (GLvoid *) glRasterPos3iv },
742 { "glRasterPos3s", (GLvoid *) glRasterPos3s },
743 { "glRasterPos3sv", (GLvoid *) glRasterPos3sv },
744 { "glRasterPos4d", (GLvoid *) glRasterPos4d },
745 { "glRasterPos4dv", (GLvoid *) glRasterPos4dv },
746 { "glRasterPos4f", (GLvoid *) glRasterPos4f },
747 { "glRasterPos4fv", (GLvoid *) glRasterPos4fv },
748 { "glRasterPos4i", (GLvoid *) glRasterPos4i },
749 { "glRasterPos4iv", (GLvoid *) glRasterPos4iv },
750 { "glRasterPos4s", (GLvoid *) glRasterPos4s },
751 { "glRasterPos4sv", (GLvoid *) glRasterPos4sv },
752 { "glReadBuffer", (GLvoid *) glReadBuffer },
753 { "glReadPixels", (GLvoid *) glReadPixels },
754 { "glRectd", (GLvoid *) glRectd },
755 { "glRectdv", (GLvoid *) glRectdv },
756 { "glRectf", (GLvoid *) glRectf },
757 { "glRectfv", (GLvoid *) glRectfv },
758 { "glRecti", (GLvoid *) glRecti },
759 { "glRectiv", (GLvoid *) glRectiv },
760 { "glRects", (GLvoid *) glRects },
761 { "glRectsv", (GLvoid *) glRectsv },
762 { "glRenderMode", (GLvoid *) glRenderMode },
763 { "glRotated", (GLvoid *) glRotated },
764 { "glRotatef", (GLvoid *) glRotatef },
765 { "glScaled", (GLvoid *) glScaled },
766 { "glScalef", (GLvoid *) glScalef },
767 { "glScissor", (GLvoid *) glScissor },
768 { "glSelectBuffer", (GLvoid *) glSelectBuffer },
769 { "glShadeModel", (GLvoid *) glShadeModel },
770 { "glStencilFunc", (GLvoid *) glStencilFunc },
771 { "glStencilMask", (GLvoid *) glStencilMask },
772 { "glStencilOp", (GLvoid *) glStencilOp },
773 { "glTexCoord1d", (GLvoid *) glTexCoord1d },
774 { "glTexCoord1dv", (GLvoid *) glTexCoord1dv },
775 { "glTexCoord1f", (GLvoid *) glTexCoord1f },
776 { "glTexCoord1fv", (GLvoid *) glTexCoord1fv },
777 { "glTexCoord1i", (GLvoid *) glTexCoord1i },
778 { "glTexCoord1iv", (GLvoid *) glTexCoord1iv },
779 { "glTexCoord1s", (GLvoid *) glTexCoord1s },
780 { "glTexCoord1sv", (GLvoid *) glTexCoord1sv },
781 { "glTexCoord2d", (GLvoid *) glTexCoord2d },
782 { "glTexCoord2dv", (GLvoid *) glTexCoord2dv },
783 { "glTexCoord2f", (GLvoid *) glTexCoord2f },
784 { "glTexCoord2fv", (GLvoid *) glTexCoord2fv },
785 { "glTexCoord2i", (GLvoid *) glTexCoord2i },
786 { "glTexCoord2iv", (GLvoid *) glTexCoord2iv },
787 { "glTexCoord2s", (GLvoid *) glTexCoord2s },
788 { "glTexCoord2sv", (GLvoid *) glTexCoord2sv },
789 { "glTexCoord3d", (GLvoid *) glTexCoord3d },
790 { "glTexCoord3dv", (GLvoid *) glTexCoord3dv },
791 { "glTexCoord3f", (GLvoid *) glTexCoord3f },
792 { "glTexCoord3fv", (GLvoid *) glTexCoord3fv },
793 { "glTexCoord3i", (GLvoid *) glTexCoord3i },
794 { "glTexCoord3iv", (GLvoid *) glTexCoord3iv },
795 { "glTexCoord3s", (GLvoid *) glTexCoord3s },
796 { "glTexCoord3sv", (GLvoid *) glTexCoord3sv },
797 { "glTexCoord4d", (GLvoid *) glTexCoord4d },
798 { "glTexCoord4dv", (GLvoid *) glTexCoord4dv },
799 { "glTexCoord4f", (GLvoid *) glTexCoord4f },
800 { "glTexCoord4fv", (GLvoid *) glTexCoord4fv },
801 { "glTexCoord4i", (GLvoid *) glTexCoord4i },
802 { "glTexCoord4iv", (GLvoid *) glTexCoord4iv },
803 { "glTexCoord4s", (GLvoid *) glTexCoord4s },
804 { "glTexCoord4sv", (GLvoid *) glTexCoord4sv },
805 { "glTexEnvf", (GLvoid *) glTexEnvf },
806 { "glTexEnvfv", (GLvoid *) glTexEnvfv },
807 { "glTexEnvi", (GLvoid *) glTexEnvi },
808 { "glTexEnviv", (GLvoid *) glTexEnviv },
809 { "glTexGend", (GLvoid *) glTexGend },
810 { "glTexGendv", (GLvoid *) glTexGendv },
811 { "glTexGenf", (GLvoid *) glTexGenf },
812 { "glTexGenfv", (GLvoid *) glTexGenfv },
813 { "glTexGeni", (GLvoid *) glTexGeni },
814 { "glTexGeniv", (GLvoid *) glTexGeniv },
815 { "glTexImage1D", (GLvoid *) glTexImage1D },
816 { "glTexImage2D", (GLvoid *) glTexImage2D },
817 { "glTexParameterf", (GLvoid *) glTexParameterf },
818 { "glTexParameterfv", (GLvoid *) glTexParameterfv },
819 { "glTexParameteri", (GLvoid *) glTexParameteri },
820 { "glTexParameteriv", (GLvoid *) glTexParameteriv },
821 { "glTranslated", (GLvoid *) glTranslated },
822 { "glTranslatef", (GLvoid *) glTranslatef },
823 { "glVertex2d", (GLvoid *) glVertex2d },
824 { "glVertex2dv", (GLvoid *) glVertex2dv },
825 { "glVertex2f", (GLvoid *) glVertex2f },
826 { "glVertex2fv", (GLvoid *) glVertex2fv },
827 { "glVertex2i", (GLvoid *) glVertex2i },
828 { "glVertex2iv", (GLvoid *) glVertex2iv },
829 { "glVertex2s", (GLvoid *) glVertex2s },
830 { "glVertex2sv", (GLvoid *) glVertex2sv },
831 { "glVertex3d", (GLvoid *) glVertex3d },
832 { "glVertex3dv", (GLvoid *) glVertex3dv },
833 { "glVertex3f", (GLvoid *) glVertex3f },
834 { "glVertex3fv", (GLvoid *) glVertex3fv },
835 { "glVertex3i", (GLvoid *) glVertex3i },
836 { "glVertex3iv", (GLvoid *) glVertex3iv },
837 { "glVertex3s", (GLvoid *) glVertex3s },
838 { "glVertex3sv", (GLvoid *) glVertex3sv },
839 { "glVertex4d", (GLvoid *) glVertex4d },
840 { "glVertex4dv", (GLvoid *) glVertex4dv },
841 { "glVertex4f", (GLvoid *) glVertex4f },
842 { "glVertex4fv", (GLvoid *) glVertex4fv },
843 { "glVertex4i", (GLvoid *) glVertex4i },
844 { "glVertex4iv", (GLvoid *) glVertex4iv },
845 { "glVertex4s", (GLvoid *) glVertex4s },
846 { "glVertex4sv", (GLvoid *) glVertex4sv },
847 { "glViewport", (GLvoid *) glViewport },
Brian Paul7fb54ae1999-11-19 22:33:50 +0000848
Brian Paul0c239fc1999-12-16 12:38:11 +0000849 /* GL 1.1 */
Brian Paul77aa8b92000-01-07 07:30:13 +0000850#ifdef GL_VERSION_1_1
851#define NAME(X) X
852#else
853#define NAME(X) NotImplemented
854#endif
855 { "glAreTexturesResident", (GLvoid *) NAME(glAreTexturesResident) },
856 { "glArrayElement", (GLvoid *) NAME(glArrayElement) },
857 { "glBindTexture", (GLvoid *) NAME(glBindTexture) },
858 { "glColorPointer", (GLvoid *) NAME(glColorPointer) },
859 { "glCopyTexImage1D", (GLvoid *) NAME(glCopyTexImage1D) },
860 { "glCopyTexImage2D", (GLvoid *) NAME(glCopyTexImage2D) },
861 { "glCopyTexSubImage1D", (GLvoid *) NAME(glCopyTexSubImage1D) },
862 { "glCopyTexSubImage2D", (GLvoid *) NAME(glCopyTexSubImage2D) },
863 { "glDeleteTextures", (GLvoid *) NAME(glDeleteTextures) },
864 { "glDisableClientState", (GLvoid *) NAME(glDisableClientState) },
865 { "glDrawArrays", (GLvoid *) NAME(glDrawArrays) },
866 { "glDrawElements", (GLvoid *) NAME(glDrawElements) },
867 { "glEdgeFlagPointer", (GLvoid *) NAME(glEdgeFlagPointer) },
868 { "glEnableClientState", (GLvoid *) NAME(glEnableClientState) },
869 { "glGenTextures", (GLvoid *) NAME(glGenTextures) },
870 { "glGetPointerv", (GLvoid *) NAME(glGetPointerv) },
871 { "glIndexPointer", (GLvoid *) NAME(glIndexPointer) },
872 { "glIndexub", (GLvoid *) NAME(glIndexub) },
873 { "glIndexubv", (GLvoid *) NAME(glIndexubv) },
874 { "glInterleavedArrays", (GLvoid *) NAME(glInterleavedArrays) },
875 { "glIsTexture", (GLvoid *) NAME(glIsTexture) },
876 { "glNormalPointer", (GLvoid *) NAME(glNormalPointer) },
877 { "glPopClientAttrib", (GLvoid *) NAME(glPopClientAttrib) },
878 { "glPrioritizeTextures", (GLvoid *) NAME(glPrioritizeTextures) },
879 { "glPushClientAttrib", (GLvoid *) NAME(glPushClientAttrib) },
880 { "glTexCoordPointer", (GLvoid *) NAME(glTexCoordPointer) },
881 { "glTexSubImage1D", (GLvoid *) NAME(glTexSubImage1D) },
882 { "glTexSubImage2D", (GLvoid *) NAME(glTexSubImage2D) },
883 { "glVertexPointer", (GLvoid *) NAME(glVertexPointer) },
884#undef NAME
Brian Paul91bcefa1999-11-27 21:30:40 +0000885
Brian Paul0c239fc1999-12-16 12:38:11 +0000886 /* GL 1.2 */
Brian Paul77aa8b92000-01-07 07:30:13 +0000887#ifdef GL_VERSION_1_2
888#define NAME(X) X
889#else
890#define NAME(X) NotImplemented
891#endif
892 { "glCopyTexSubImage3D", (GLvoid *) NAME(glCopyTexSubImage3D) },
893 { "glDrawRangeElements", (GLvoid *) NAME(glDrawRangeElements) },
894 { "glTexImage3D", (GLvoid *) NAME(glTexImage3D) },
895 { "glTexSubImage3D", (GLvoid *) NAME(glTexSubImage3D) },
896#undef NAME
Brian Paul91bcefa1999-11-27 21:30:40 +0000897
Brian Paul0c239fc1999-12-16 12:38:11 +0000898 /* GL_ARB_imaging */
Brian Paul77aa8b92000-01-07 07:30:13 +0000899#ifdef GL_ARB_imaging
900#define NAME(X) X
901#else
902#define NAME(X) NotImplemented
903#endif
904 { "glBlendColor", (GLvoid *) NAME(glBlendColor) },
905 { "glBlendEquation", (GLvoid *) NAME(glBlendEquation) },
906 { "glColorSubTable", (GLvoid *) NAME(glColorSubTable) },
907 { "glColorTable", (GLvoid *) NAME(glColorTable) },
908 { "glColorTableParameterfv", (GLvoid *) NAME(glColorTableParameterfv) },
909 { "glColorTableParameteriv", (GLvoid *) NAME(glColorTableParameteriv) },
910 { "glConvolutionFilter1D", (GLvoid *) NAME(glConvolutionFilter1D) },
911 { "glConvolutionFilter2D", (GLvoid *) NAME(glConvolutionFilter2D) },
912 { "glConvolutionParameterf", (GLvoid *) NAME(glConvolutionParameterf) },
913 { "glConvolutionParameterfv", (GLvoid *) NAME(glConvolutionParameterfv) },
914 { "glConvolutionParameteri", (GLvoid *) NAME(glConvolutionParameteri) },
915 { "glConvolutionParameteriv", (GLvoid *) NAME(glConvolutionParameteriv) },
916 { "glCopyColorSubTable", (GLvoid *) NAME(glCopyColorSubTable) },
917 { "glCopyColorTable", (GLvoid *) NAME(glCopyColorTable) },
918 { "glCopyConvolutionFilter1D", (GLvoid *) NAME(glCopyConvolutionFilter1D) },
919 { "glCopyConvolutionFilter2D", (GLvoid *) NAME(glCopyConvolutionFilter2D) },
920 { "glGetColorTable", (GLvoid *) NAME(glGetColorTable) },
921 { "glGetColorTableParameterfv", (GLvoid *) NAME(glGetColorTableParameterfv) },
922 { "glGetColorTableParameteriv", (GLvoid *) NAME(glGetColorTableParameteriv) },
923 { "glGetConvolutionFilter", (GLvoid *) NAME(glGetConvolutionFilter) },
924 { "glGetConvolutionParameterfv", (GLvoid *) NAME(glGetConvolutionParameterfv) },
925 { "glGetConvolutionParameteriv", (GLvoid *) NAME(glGetConvolutionParameteriv) },
926 { "glGetHistogram", (GLvoid *) NAME(glGetHistogram) },
927 { "glGetHistogramParameterfv", (GLvoid *) NAME(glGetHistogramParameterfv) },
928 { "glGetHistogramParameteriv", (GLvoid *) NAME(glGetHistogramParameteriv) },
929 { "glGetMinmax", (GLvoid *) NAME(glGetMinmax) },
930 { "glGetMinmaxParameterfv", (GLvoid *) NAME(glGetMinmaxParameterfv) },
931 { "glGetMinmaxParameteriv", (GLvoid *) NAME(glGetMinmaxParameteriv) },
932 { "glGetSeparableFilter", (GLvoid *) NAME(glGetSeparableFilter) },
933 { "glHistogram", (GLvoid *) NAME(glHistogram) },
934 { "glMinmax", (GLvoid *) NAME(glMinmax) },
935 { "glResetHistogram", (GLvoid *) NAME(glResetHistogram) },
936 { "glResetMinmax", (GLvoid *) NAME(glResetMinmax) },
937 { "glSeparableFilter2D", (GLvoid *) NAME(glSeparableFilter2D) },
938#undef NAME
Brian Paul91bcefa1999-11-27 21:30:40 +0000939
Brian Paul67661b01999-12-15 12:52:31 +0000940 /* GL_ARB_multitexture */
Brian Paul77aa8b92000-01-07 07:30:13 +0000941#ifdef GL_ARB_multitexture
942#define NAME(X) X
943#else
944#define NAME(X) NotImplemented
945#endif
946 { "glActiveTextureARB", (GLvoid *) NAME(glActiveTextureARB) },
947 { "glClientActiveTextureARB", (GLvoid *) NAME(glClientActiveTextureARB) },
948 { "glMultiTexCoord1dARB", (GLvoid *) NAME(glMultiTexCoord1dARB) },
949 { "glMultiTexCoord1dvARB", (GLvoid *) NAME(glMultiTexCoord1dvARB) },
950 { "glMultiTexCoord1fARB", (GLvoid *) NAME(glMultiTexCoord1fARB) },
951 { "glMultiTexCoord1fvARB", (GLvoid *) NAME(glMultiTexCoord1fvARB) },
952 { "glMultiTexCoord1iARB", (GLvoid *) NAME(glMultiTexCoord1iARB) },
953 { "glMultiTexCoord1ivARB", (GLvoid *) NAME(glMultiTexCoord1ivARB) },
954 { "glMultiTexCoord1sARB", (GLvoid *) NAME(glMultiTexCoord1sARB) },
955 { "glMultiTexCoord1svARB", (GLvoid *) NAME(glMultiTexCoord1svARB) },
956 { "glMultiTexCoord2dARB", (GLvoid *) NAME(glMultiTexCoord2dARB) },
957 { "glMultiTexCoord2dvARB", (GLvoid *) NAME(glMultiTexCoord2dvARB) },
958 { "glMultiTexCoord2fARB", (GLvoid *) NAME(glMultiTexCoord2fARB) },
959 { "glMultiTexCoord2fvARB", (GLvoid *) NAME(glMultiTexCoord2fvARB) },
960 { "glMultiTexCoord2iARB", (GLvoid *) NAME(glMultiTexCoord2iARB) },
961 { "glMultiTexCoord2ivARB", (GLvoid *) NAME(glMultiTexCoord2ivARB) },
962 { "glMultiTexCoord2sARB", (GLvoid *) NAME(glMultiTexCoord2sARB) },
963 { "glMultiTexCoord2svARB", (GLvoid *) NAME(glMultiTexCoord2svARB) },
964 { "glMultiTexCoord3dARB", (GLvoid *) NAME(glMultiTexCoord3dARB) },
965 { "glMultiTexCoord3dvARB", (GLvoid *) NAME(glMultiTexCoord3dvARB) },
966 { "glMultiTexCoord3fARB", (GLvoid *) NAME(glMultiTexCoord3fARB) },
967 { "glMultiTexCoord3fvARB", (GLvoid *) NAME(glMultiTexCoord3fvARB) },
968 { "glMultiTexCoord3iARB", (GLvoid *) NAME(glMultiTexCoord3iARB) },
969 { "glMultiTexCoord3ivARB", (GLvoid *) NAME(glMultiTexCoord3ivARB) },
970 { "glMultiTexCoord3sARB", (GLvoid *) NAME(glMultiTexCoord3sARB) },
971 { "glMultiTexCoord3svARB", (GLvoid *) NAME(glMultiTexCoord3svARB) },
972 { "glMultiTexCoord4dARB", (GLvoid *) NAME(glMultiTexCoord4dARB) },
973 { "glMultiTexCoord4dvARB", (GLvoid *) NAME(glMultiTexCoord4dvARB) },
974 { "glMultiTexCoord4fARB", (GLvoid *) NAME(glMultiTexCoord4fARB) },
975 { "glMultiTexCoord4fvARB", (GLvoid *) NAME(glMultiTexCoord4fvARB) },
976 { "glMultiTexCoord4iARB", (GLvoid *) NAME(glMultiTexCoord4iARB) },
977 { "glMultiTexCoord4ivARB", (GLvoid *) NAME(glMultiTexCoord4ivARB) },
978 { "glMultiTexCoord4sARB", (GLvoid *) NAME(glMultiTexCoord4sARB) },
979 { "glMultiTexCoord4svARB", (GLvoid *) NAME(glMultiTexCoord4svARB) },
980#undef NAME
Brian Paul91bcefa1999-11-27 21:30:40 +0000981
Brian Paul67661b01999-12-15 12:52:31 +0000982 /* 2. GL_EXT_blend_color */
Brian Paul77aa8b92000-01-07 07:30:13 +0000983#ifdef GL_EXT_blend_color
984#define NAME(X) X
985#else
986#define NAME(X) NotImplemented
987#endif
988 { "glBlendColorEXT", (GLvoid *) NAME(glBlendColorEXT) },
989#undef NAME
Brian Paul67661b01999-12-15 12:52:31 +0000990
991 /* 3. GL_EXT_polygon_offset */
Brian Paul77aa8b92000-01-07 07:30:13 +0000992#ifdef GL_EXT_polygon_offset
993#define NAME(X) X
994#else
995#define NAME(X) NotImplemented
996#endif
997 { "glPolygonOffsetEXT", (GLvoid *) NAME(glPolygonOffsetEXT) },
998#undef NAME
Brian Paul67661b01999-12-15 12:52:31 +0000999
Brian Paul0c239fc1999-12-16 12:38:11 +00001000 /* 6. GL_EXT_texture3D */
Brian Paul77aa8b92000-01-07 07:30:13 +00001001#ifdef GL_EXT_texture3D
1002#define NAME(X) X
1003#else
1004#define NAME(X) NotImplemented
1005#endif
1006 { "glCopyTexSubImage3DEXT", (GLvoid *) NAME(glCopyTexSubImage3DEXT) },
1007 { "glTexImage3DEXT", (GLvoid *) NAME(glTexImage3DEXT) },
1008 { "glTexSubImage3DEXT", (GLvoid *) NAME(glTexSubImage3DEXT) },
1009#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001010
1011 /* 7. GL_SGI_texture_filter4 */
Brian Paul77aa8b92000-01-07 07:30:13 +00001012#ifdef GL_SGI_texture_filter4
1013#define NAME(X) X
1014#else
1015#define NAME(X) NotImplemented
1016#endif
1017 { "glGetTexFilterFuncSGIS", (GLvoid *) NAME(glGetTexFilterFuncSGIS) },
1018 { "glTexFilterFuncSGIS", (GLvoid *) NAME(glTexFilterFuncSGIS) },
1019#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001020
1021 /* 9. GL_EXT_subtexture */
Brian Paul77aa8b92000-01-07 07:30:13 +00001022#ifdef GL_EXT_subtexture
1023#define NAME(X) X
1024#else
1025#define NAME(X) NotImplemented
1026#endif
1027 { "glTexSubImage1DEXT", (GLvoid *) NAME(glTexSubImage1DEXT) },
1028 { "glTexSubImage2DEXT", (GLvoid *) NAME(glTexSubImage2DEXT) },
1029#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001030
1031 /* 10. GL_EXT_copy_texture */
Brian Paul77aa8b92000-01-07 07:30:13 +00001032#ifdef GL_EXT_copy_texture
1033#define NAME(X) X
1034#else
1035#define NAME(X) NotImplemented
1036#endif
1037 { "glCopyTexImage1DEXT", (GLvoid *) NAME(glCopyTexImage1DEXT) },
1038 { "glCopyTexImage2DEXT", (GLvoid *) NAME(glCopyTexImage2DEXT) },
1039 { "glCopyTexSubImage1DEXT", (GLvoid *) NAME(glCopyTexSubImage1DEXT) },
1040 { "glCopyTexSubImage2DEXT", (GLvoid *) NAME(glCopyTexSubImage2DEXT) },
1041#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001042
1043 /* 11. GL_EXT_histogram */
Brian Paul77aa8b92000-01-07 07:30:13 +00001044#ifdef GL_EXT_histogram
1045#define NAME(X) X
1046#else
1047#define NAME(X) NotImplemented
1048#endif
1049 { "glGetHistogramEXT", (GLvoid *) NAME(glGetHistogramEXT) },
1050 { "glGetHistogramParameterfvEXT", (GLvoid *) NAME(glGetHistogramParameterfvEXT) },
1051 { "glGetHistogramParameterivEXT", (GLvoid *) NAME(glGetHistogramParameterivEXT) },
1052 { "glGetMinmaxEXT", (GLvoid *) NAME(glGetMinmaxEXT) },
1053 { "glGetMinmaxParameterfvEXT", (GLvoid *) NAME(glGetMinmaxParameterfvEXT) },
1054 { "glGetMinmaxParameterivEXT", (GLvoid *) NAME(glGetMinmaxParameterivEXT) },
1055 { "glHistogramEXT", (GLvoid *) NAME(glHistogramEXT) },
1056 { "glMinmaxEXT", (GLvoid *) NAME(glMinmaxEXT) },
1057 { "glResetHistogramEXT", (GLvoid *) NAME(glResetHistogramEXT) },
1058 { "glResetMinmaxEXT", (GLvoid *) NAME(glResetMinmaxEXT) },
1059#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001060
1061 /* 12. GL_EXT_convolution */
Brian Paul77aa8b92000-01-07 07:30:13 +00001062#ifdef GL_EXT_convolution
1063#define NAME(X) X
1064#else
1065#define NAME(X) NotImplemented
1066#endif
1067 { "glConvolutionFilter1DEXT", (GLvoid *) NAME(glConvolutionFilter1DEXT) },
1068 { "glConvolutionFilter2DEXT", (GLvoid *) NAME(glConvolutionFilter2DEXT) },
1069 { "glConvolutionParameterfEXT", (GLvoid *) NAME(glConvolutionParameterfEXT) },
1070 { "glConvolutionParameterfvEXT", (GLvoid *) NAME(glConvolutionParameterfvEXT) },
1071 { "glConvolutionParameteriEXT", (GLvoid *) NAME(glConvolutionParameteriEXT) },
1072 { "glConvolutionParameterivEXT", (GLvoid *) NAME(glConvolutionParameterivEXT) },
1073 { "glCopyConvolutionFilter1DEXT", (GLvoid *) NAME(glCopyConvolutionFilter1DEXT) },
1074 { "glCopyConvolutionFilter2DEXT", (GLvoid *) NAME(glCopyConvolutionFilter2DEXT) },
1075 { "glGetConvolutionFilterEXT", (GLvoid *) NAME(glGetConvolutionFilterEXT) },
1076 { "glGetConvolutionParameterivEXT", (GLvoid *) NAME(glGetConvolutionParameterivEXT) },
1077 { "glGetConvolutionParameterfvEXT", (GLvoid *) NAME(glGetConvolutionParameterfvEXT) },
1078 { "glGetSeparableFilterEXT", (GLvoid *) NAME(glGetSeparableFilterEXT) },
1079 { "glSeparableFilter2DEXT", (GLvoid *) NAME(glSeparableFilter2DEXT) },
1080#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001081
1082 /* 14. GL_SGI_color_table */
Brian Paul77aa8b92000-01-07 07:30:13 +00001083#ifdef GL_SGI_color_table
1084#define NAME(X) X
1085#else
1086#define NAME(X) NotImplemented
1087#endif
1088 { "glColorTableSGI", (GLvoid *) NAME(glColorTableSGI) },
1089 { "glColorTableParameterfvSGI", (GLvoid *) NAME(glColorTableParameterfvSGI) },
1090 { "glColorTableParameterivSGI", (GLvoid *) NAME(glColorTableParameterivSGI) },
1091 { "glCopyColorTableSGI", (GLvoid *) NAME(glCopyColorTableSGI) },
1092 { "glGetColorTableSGI", (GLvoid *) NAME(glGetColorTableSGI) },
1093 { "glGetColorTableParameterfvSGI", (GLvoid *) NAME(glGetColorTableParameterfvSGI) },
1094 { "glGetColorTableParameterivSGI", (GLvoid *) NAME(glGetColorTableParameterivSGI) },
1095#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001096
1097 /* 15. GL_SGIS_pixel_texture */
Brian Paul77aa8b92000-01-07 07:30:13 +00001098#ifdef GL_SGIS_pixel_texture
1099#define NAME(X) X
1100#else
1101#define NAME(X) NotImplemented
1102#endif
1103 { "glPixelTexGenParameterfSGIS", (GLvoid *) NAME(glPixelTexGenParameterfSGIS) },
1104 { "glPixelTexGenParameteriSGIS", (GLvoid *) NAME(glPixelTexGenParameteriSGIS) },
1105 { "glGetPixelTexGenParameterfvSGIS", (GLvoid *) NAME(glGetPixelTexGenParameterfvSGIS) },
1106 { "glGetPixelTexGenParameterivSGIS", (GLvoid *) NAME(glGetPixelTexGenParameterivSGIS) },
1107#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001108
1109 /* 16. GL_SGIS_texture4D */
Brian Paul77aa8b92000-01-07 07:30:13 +00001110#ifdef GL_SGIS_texture4D
1111#define NAME(X) X
1112#else
1113#define NAME(X) NotImplemented
1114#endif
1115 { "glTexImage4DSGIS", (GLvoid *) NAME(glTexImage4DSGIS) },
1116 { "glTexSubImage4DSGIS", (GLvoid *) NAME(glTexSubImage4DSGIS) },
1117#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001118
1119 /* 20. GL_EXT_texture_object */
Brian Paul77aa8b92000-01-07 07:30:13 +00001120#ifdef GL_EXT_texture_object
1121#define NAME(X) X
1122#else
1123#define NAME(X) NotImplemented
1124#endif
1125 { "glAreTexturesResidentEXT", (GLvoid *) NAME(glAreTexturesResidentEXT) },
1126 { "glBindTextureEXT", (GLvoid *) NAME(glBindTextureEXT) },
1127 { "glDeleteTexturesEXT", (GLvoid *) NAME(glDeleteTexturesEXT) },
1128 { "glGenTexturesEXT", (GLvoid *) NAME(glGenTexturesEXT) },
1129 { "glIsTextureEXT", (GLvoid *) NAME(glIsTextureEXT) },
1130 { "glPrioritizeTexturesEXT", (GLvoid *) NAME(glPrioritizeTexturesEXT) },
1131#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001132
1133 /* 21. GL_SGIS_detail_texture */
Brian Paul77aa8b92000-01-07 07:30:13 +00001134#ifdef GL_SGIS_detail_texture
1135#define NAME(X) X
1136#else
1137#define NAME(X) NotImplemented
1138#endif
1139 { "glDetailTexFuncSGIS", (GLvoid *) NAME(glDetailTexFuncSGIS) },
1140 { "glGetDetailTexFuncSGIS", (GLvoid *) NAME(glGetDetailTexFuncSGIS) },
1141#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001142
1143 /* 22. GL_SGIS_sharpen_texture */
Brian Paul77aa8b92000-01-07 07:30:13 +00001144#ifdef GL_SGIS_sharpen_texture
1145#define NAME(X) X
1146#else
1147#define NAME(X) NotImplemented
1148#endif
1149 { "glGetSharpenTexFuncSGIS", (GLvoid *) NAME(glGetSharpenTexFuncSGIS) },
1150 { "glSharpenTexFuncSGIS", (GLvoid *) NAME(glSharpenTexFuncSGIS) },
1151#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001152
1153 /* 25. GL_SGIS_multisample */
Brian Paul77aa8b92000-01-07 07:30:13 +00001154#ifdef GL_SGIS_multisample
1155#define NAME(X) X
1156#else
1157#define NAME(X) NotImplemented
1158#endif
1159 { "glSampleMaskSGIS", (GLvoid *) NAME(glSampleMaskSGIS) },
1160 { "glSamplePatternSGIS", (GLvoid *) NAME(glSamplePatternSGIS) },
1161#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001162
1163 /* 30. GL_EXT_vertex_array */
Brian Paul77aa8b92000-01-07 07:30:13 +00001164#ifdef GL_EXT_vertex_array
1165#define NAME(X) X
1166#else
1167#define NAME(X) NotImplemented
1168#endif
1169 { "glArrayElementEXT", (GLvoid *) NAME(glArrayElementEXT) },
1170 { "glColorPointerEXT", (GLvoid *) NAME(glColorPointerEXT) },
1171 { "glDrawArraysEXT", (GLvoid *) NAME(glDrawArraysEXT) },
1172 { "glEdgeFlagPointerEXT", (GLvoid *) NAME(glEdgeFlagPointerEXT) },
1173 { "glGetPointervEXT", (GLvoid *) NAME(glGetPointervEXT) },
1174 { "glIndexPointerEXT", (GLvoid *) NAME(glIndexPointerEXT) },
1175 { "glNormalPointerEXT", (GLvoid *) NAME(glNormalPointerEXT) },
1176 { "glTexCoordPointerEXT", (GLvoid *) NAME(glTexCoordPointerEXT) },
1177 { "glVertexPointerEXT", (GLvoid *) NAME(glVertexPointerEXT) },
1178#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001179
1180 /* 37. GL_EXT_blend_minmax */
Brian Paul77aa8b92000-01-07 07:30:13 +00001181#ifdef GL_EXT_blend_minmax
1182#define NAME(X) X
1183#else
1184#define NAME(X) NotImplemented
1185#endif
1186 { "glBlendEquationEXT", (GLvoid *) NAME(glBlendEquationEXT) },
1187#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001188
1189 /* 52. GL_SGIX_sprite */
Brian Paul77aa8b92000-01-07 07:30:13 +00001190#ifdef GL_SGIX_sprite
1191#define NAME(X) X
1192#else
1193#define NAME(X) NotImplemented
1194#endif
1195 { "glSpriteParameterfSGIX", (GLvoid *) NAME(glSpriteParameterfSGIX) },
1196 { "glSpriteParameterfvSGIX", (GLvoid *) NAME(glSpriteParameterfvSGIX) },
1197 { "glSpriteParameteriSGIX", (GLvoid *) NAME(glSpriteParameteriSGIX) },
1198 { "glSpriteParameterivSGIX", (GLvoid *) NAME(glSpriteParameterivSGIX) },
1199#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001200
Brian Paul67661b01999-12-15 12:52:31 +00001201 /* 54. GL_EXT_point_parameters */
Brian Paul77aa8b92000-01-07 07:30:13 +00001202#ifdef GL_EXT_point_parameters
1203#define NAME(X) X
1204#else
1205#define NAME(X) NotImplemented
1206#endif
1207 { "glPointParameterfEXT", (GLvoid *) NAME(glPointParameterfEXT) },
1208 { "glPointParameterfvEXT", (GLvoid *) NAME(glPointParameterfvEXT) },
1209#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001210
1211 /* 55. GL_SGIX_instruments */
Brian Paul77aa8b92000-01-07 07:30:13 +00001212#ifdef GL_SGIX_instruments
1213#define NAME(X) X
1214#else
1215#define NAME(X) NotImplemented
1216#endif
1217 { "glInstrumentsBufferSGIX", (GLvoid *) NAME(glInstrumentsBufferSGIX) },
1218 { "glStartInstrumentsSGIX", (GLvoid *) NAME(glStartInstrumentsSGIX) },
1219 { "glStopInstrumentsSGIX", (GLvoid *) NAME(glStopInstrumentsSGIX) },
1220 { "glReadInstrumentsSGIX", (GLvoid *) NAME(glReadInstrumentsSGIX) },
1221 { "glPollInstrumentsSGIX", (GLvoid *) NAME(glPollInstrumentsSGIX) },
1222 { "glGetInstrumentsSGIX", (GLvoid *) NAME(glGetInstrumentsSGIX) },
1223#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001224
1225 /* 57. GL_SGIX_framezoom */
Brian Paul77aa8b92000-01-07 07:30:13 +00001226#ifdef GL_SGIX_framezoom
1227#define NAME(X) X
1228#else
1229#define NAME(X) NotImplemented
1230#endif
1231 { "glFrameZoomSGIX", (GLvoid *) NAME(glFrameZoomSGIX) },
1232#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001233
1234 /* 60. GL_SGIX_reference_plane */
Brian Paul77aa8b92000-01-07 07:30:13 +00001235#ifdef GL_SGIX_reference_plane
1236#define NAME(X) X
1237#else
1238#define NAME(X) NotImplemented
1239#endif
1240 { "glReferencePlaneSGIX", (GLvoid *) NAME(glReferencePlaneSGIX) },
1241#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001242
1243 /* 61. GL_SGIX_flush_raster */
Brian Paul77aa8b92000-01-07 07:30:13 +00001244#ifdef GL_SGIX_flush_raster
1245#define NAME(X) X
1246#else
1247#define NAME(X) NotImplemented
1248#endif
1249 { "glFlushRasterSGIX", (GLvoid *) NAME(glFlushRasterSGIX) },
1250#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001251
1252 /* 66. GL_HP_image_transform */
Brian Paul77aa8b92000-01-07 07:30:13 +00001253#ifdef GL_HP_image_transform
1254#define NAME(X) X
1255#else
1256#define NAME(X) NotImplemented
1257#endif
1258 { "glGetImageTransformParameterfvHP", (GLvoid *) NAME(glGetImageTransformParameterfvHP) },
1259 { "glGetImageTransformParameterivHP", (GLvoid *) NAME(glGetImageTransformParameterivHP) },
1260 { "glImageTransformParameterfHP", (GLvoid *) NAME(glImageTransformParameterfHP) },
1261 { "glImageTransformParameterfvHP", (GLvoid *) NAME(glImageTransformParameterfvHP) },
1262 { "glImageTransformParameteriHP", (GLvoid *) NAME(glImageTransformParameteriHP) },
1263 { "glImageTransformParameterivHP", (GLvoid *) NAME(glImageTransformParameterivHP) },
1264#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001265
1266 /* 74. GL_EXT_color_subtable */
Brian Paul77aa8b92000-01-07 07:30:13 +00001267#ifdef GL_EXT_color_subtable
1268#define NAME(X) X
1269#else
1270#define NAME(X) NotImplemented
1271#endif
1272 { "glColorSubTableEXT", (GLvoid *) NAME(glColorSubTableEXT) },
1273 { "glCopyColorSubTableEXT", (GLvoid *) NAME(glCopyColorSubTableEXT) },
1274#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001275
1276 /* 77. GL_PGI_misc_hints */
Brian Paul77aa8b92000-01-07 07:30:13 +00001277#ifdef GL_PGI_misc_hints
1278#define NAME(X) X
1279#else
1280#define NAME(X) NotImplemented
1281#endif
1282 { "glHintPGI", (GLvoid *) NAME(glHintPGI) },
1283#undef NAME
Brian Paul67661b01999-12-15 12:52:31 +00001284
1285 /* 78. GL_EXT_paletted_texture */
Brian Paul77aa8b92000-01-07 07:30:13 +00001286#ifdef GL_EXT_paletted_texture
1287#define NAME(X) X
1288#else
1289#define NAME(X) NotImplemented
1290#endif
1291 { "glColorTableEXT", (GLvoid *) NAME(glColorTableEXT) },
1292 { "glGetColorTableEXT", (GLvoid *) NAME(glGetColorTableEXT) },
1293 { "glGetColorTableParameterfvEXT", (GLvoid *) NAME(glGetColorTableParameterfvEXT) },
1294 { "glGetColorTableParameterivEXT", (GLvoid *) NAME(glGetColorTableParameterivEXT) },
1295#undef NAME
Brian Paul67661b01999-12-15 12:52:31 +00001296
Brian Paul0c239fc1999-12-16 12:38:11 +00001297 /* 80. GL_SGIX_list_priority */
Brian Paul77aa8b92000-01-07 07:30:13 +00001298#ifdef GL_SGIX_list_priority
1299#define NAME(X) X
1300#else
1301#define NAME(X) NotImplemented
1302#endif
1303 { "glGetListParameterfvSGIX", (GLvoid *) NAME(glGetListParameterfvSGIX) },
1304 { "glGetListParameterivSGIX", (GLvoid *) NAME(glGetListParameterivSGIX) },
1305 { "glListParameterfSGIX", (GLvoid *) NAME(glListParameterfSGIX) },
1306 { "glListParameterfvSGIX", (GLvoid *) NAME(glListParameterfvSGIX) },
1307 { "glListParameteriSGIX", (GLvoid *) NAME(glListParameteriSGIX) },
1308 { "glListParameterivSGIX", (GLvoid *) NAME(glListParameterivSGIX) },
1309#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001310
1311 /* 94. GL_EXT_index_material */
Brian Paul77aa8b92000-01-07 07:30:13 +00001312#ifdef GL_EXT_index_material
1313#define NAME(X) X
1314#else
1315#define NAME(X) NotImplemented
1316#endif
1317 { "glIndexMaterialEXT", (GLvoid *) NAME(glIndexMaterialEXT) },
1318#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001319
1320 /* 95. GL_EXT_index_func */
Brian Paul77aa8b92000-01-07 07:30:13 +00001321#ifdef GL_EXT_index_func
1322#define NAME(X) X
1323#else
1324#define NAME(X) NotImplemented
1325#endif
1326 { "glIndexFuncEXT", (GLvoid *) NAME(glIndexFuncEXT) },
1327#undef NAME
Brian Paul0c239fc1999-12-16 12:38:11 +00001328
Brian Paul67661b01999-12-15 12:52:31 +00001329 /* 97. GL_EXT_compiled_vertex_array */
Brian Paul77aa8b92000-01-07 07:30:13 +00001330#ifdef GL_EXT_compiled_vertex_array
1331#define NAME(X) X
1332#else
1333#define NAME(X) NotImplemented
1334#endif
1335 { "glLockArraysEXT", (GLvoid *) NAME(glLockArraysEXT) },
1336 { "glUnlockArraysEXT", (GLvoid *) NAME(glUnlockArraysEXT) },
1337#undef NAME
Brian Paul67661b01999-12-15 12:52:31 +00001338
Brian Paul0c239fc1999-12-16 12:38:11 +00001339 /* 98. GL_EXT_cull_vertex */
Brian Paul77aa8b92000-01-07 07:30:13 +00001340#ifdef GL_EXT_cull_vertex
1341#define NAME(X) X
1342#else
1343#define NAME(X) NotImplemented
1344#endif
1345 { "glCullParameterfvEXT", (GLvoid *) NAME(glCullParameterfvEXT) },
1346 { "glCullParameterdvEXT", (GLvoid *) NAME(glCullParameterdvEXT) },
1347#undef NAME
Brian Paul67661b01999-12-15 12:52:31 +00001348
1349 /* 173. GL_EXT/INGR_blend_func_separate */
Brian Paul77aa8b92000-01-07 07:30:13 +00001350#ifdef GL_INGR_blend_func_separate
1351#define NAME(X) X
1352#else
1353#define NAME(X) NotImplemented
1354#endif
1355 { "glBlendFuncSeparateINGR", (GLvoid *) NAME(glBlendFuncSeparateINGR) },
1356#undef NAME
Brian Paul91bcefa1999-11-27 21:30:40 +00001357
Brian Paul67661b01999-12-15 12:52:31 +00001358 /* GL_MESA_window_pos */
Brian Paul77aa8b92000-01-07 07:30:13 +00001359#ifdef MESA_window_pos
1360#define NAME(X) X
1361#else
1362#define NAME(X) NotImplemented
1363#endif
1364 { "glWindowPos4fMESA", (GLvoid *) NAME(glWindowPos4fMESA) },
1365#undef NAME
Brian Paul91bcefa1999-11-27 21:30:40 +00001366
Brian Paul67661b01999-12-15 12:52:31 +00001367 /* GL_MESA_resize_buffers */
Brian Paul77aa8b92000-01-07 07:30:13 +00001368#ifdef MESA_resize_buffers
1369#define NAME(X) X
1370#else
1371#define NAME(X) NotImplemented
1372#endif
1373 { "glResizeBuffersMESA", (GLvoid *) NAME(glResizeBuffersMESA) },
1374#undef NAME
Brian Paul91bcefa1999-11-27 21:30:40 +00001375
Brian Paul67661b01999-12-15 12:52:31 +00001376 /* GL_ARB_transpose_matrix */
Brian Paul77aa8b92000-01-07 07:30:13 +00001377#ifdef GL_ARB_transpose_matrix
1378#define NAME(X) X
1379#else
1380#define NAME(X) NotImplemented
1381#endif
1382 { "glLoadTransposeMatrixdARB", (GLvoid *) NAME(glLoadTransposeMatrixdARB) },
1383 { "glLoadTransposeMatrixfARB", (GLvoid *) NAME(glLoadTransposeMatrixfARB) },
1384 { "glMultTransposeMatrixdARB", (GLvoid *) NAME(glMultTransposeMatrixdARB) },
1385 { "glMultTransposeMatrixfARB", (GLvoid *) NAME(glMultTransposeMatrixfARB) },
1386#undef NAME
1387
1388 /*
1389 * XXX many more extenstion functions to add.
1390 */
Brian Paulcd963881999-12-10 20:01:06 +00001391
Brian Paul67661b01999-12-15 12:52:31 +00001392 { NULL, NULL } /* end of list marker */
Brian Paul91bcefa1999-11-27 21:30:40 +00001393};
Brian Paul7fb54ae1999-11-19 22:33:50 +00001394