1 /*----------------------------------------------------------------------------
2
3 gls.c - This file contains the function and variable definitions for the
4 GLSetup dynamic OpenGL driver linking. Applications can load the
5 standard opengl32.dll or any other standalone driver that obeys the
6 linking protocol.
7
8 See gls.h or http://www.glsetup.com/dev/gls.htm for more information
9 and to report bugs.
10
11 Copyright 1999 GLSetup Incorporated, All Rights Reserved.
12
13 You have permission to use this code in your applications, commercial
14 or otherwise. If you distribute source code with your application,
15 this file must not be modified. Please don't mirror these files;
16 instead, link to the URL above.
17
18 Version 1.0.0.2 Beta
19 Created 7-24-99
20
21 */
22
23 #ifndef WIN32_LEAN_AND_MEAN
24 #define WIN32_LEAN_AND_MEAN
25 #endif
26 #ifndef WIN32_EXTRA_LEAN
27 #define WIN32_EXTRA_LEAN
28 #endif
29 #include <windows.h>
30 #include <assert.h>
31 #include <string.h>
32 #include <stdlib.h>
33 #include <stdio.h>
34 #include "gls.h"
35 #include "glsu.h"
36
37 /*----------------------------------------------------------------------------
38
39 File-scope variables and internal function declarations.
40
41 NOTE: The gl function pointers are defined at the bottom of the file.
42
43 */
44
45 #ifdef NDEBUG
46 #define GLS_STATIC static
47 #else
48 #define GLS_STATIC
49 #endif
50
51 GLS_STATIC DWORD _glsBehavior = 0;
52
53 GLS_STATIC HMODULE _glsGLDriverHandle, _glsGLUDriverHandle, _glsGDI32;
54 #define GLS_INVALID_DRIVER_INDEX 0xFFFFFFFF
55 GLS_STATIC int unsigned _glsLoadedDriverIndex = GLS_INVALID_DRIVER_INDEX;
56 GLS_STATIC char _glsGLDriverFilePath[MAX_PATH], _glsGLUDriverFilePath[MAX_PATH];
57 GLS_STATIC gls_driver_info _glsDriverInfos[3];
58 GLS_STATIC int unsigned _glsNumberOfDriverInfos = 0;
59
_glsDebugBreakFunction(void)60 GLS_STATIC void __stdcall _glsDebugBreakFunction( void )
61 {
62 DebugBreak();
63 }
64
65 GLS_STATIC BOOL _glsRead3dfxSplashEnv = FALSE;
66 #define _GLS_3DFX_SPLASH_STRING "FX_GLIDE_NO_SPLASH"
67 #define _GLS_3DFX_SPLASH_OFF "1"
68 GLS_STATIC char const *_gls3dfxSplashEnv = 0;
69
70 GLS_STATIC BOOL _glsReadSGIRegistryEntry = FALSE;
71 #define _GLS_SGI_REGISTRY_ROOT HKEY_LOCAL_MACHINE
72 #define _GLS_SGI_REGISTRY_KEY "Software\\Silicon Graphics\\OpenGL"
73 #define _GLS_SGI_REGISTRY_VALUE "OverrideDispatch"
74 #define _GLS_SGI_REGISTRY_DEFAULT 0
75 #define _GLS_SGI_REGISTRY_OFF 1
76 GLS_STATIC DWORD _glsSGIRegistryEntry = 0;
77
78 /* on error utility functions clear the values they're supposed to set */
79
80 GLS_STATIC BOOL _glsGetDriverFileDate( char const *pDriverFilePath,
81 gls_driver_file_info *pDriverFileInfo );
82
83 GLS_STATIC BOOL _glsGetDriverFileVersion( char const *pDriverFilePath,
84 gls_driver_file_info *pDriverFileInfo,
85 char *pDescription,
86 int unsigned DescriptionLength );
87
88 GLS_STATIC BOOL _glsCopyPathCheckSystemDirectory(
89 char const *pDriverFilePath, gls_driver_file_info *pDriverFileInfo,
90 BOOL *pIsInSystemDir );
91
92 GLS_STATIC char const *_glsGetVersionString( BYTE const *pVersionInfo,
93 char const *pVersionString,
94 UINT *pStringSize );
95
96 GLS_STATIC BOOL _glsIsDefaultOpenGL( char const *pGLDriverFilePath );
97 GLS_STATIC BOOL _glsCompareDirectories( char const *pA, char const *pB );
98
99 GLS_STATIC char const *_glsGetEnv( char const *pEnv );
100 GLS_STATIC void _glsSetEnv( char const *pEnv, char const *pValue );
101 GLS_STATIC DWORD _glsGetRegistryDWORD( HKEY Root, char const *pKey,
102 char const *pValue, DWORD Default );
103 GLS_STATIC void _glsSetRegistryDWORD( HKEY Root, char const *pKey,
104 char const *pValue, DWORD Value );
105
106 /* this function will copy a string and null-terminate the dest safely */
_safe_strncpy(char * pDest,char const * pSource,int unsigned Length)107 GLS_STATIC void _safe_strncpy( char *pDest, char const *pSource,
108 int unsigned Length )
109 {
110 while(Length && ((*pDest++ = *pSource++) != 0))
111 {
112 Length--;
113 }
114 if(!Length)
115 {
116 *(pDest-1) = 0;
117 }
118 }
119
120 /*----------------------------------------------------------------------------
121
122 gls[Get|Set]Behavior - These functions change the default behavior of the
123 gls library.
124
125 */
126
glsGetBehavior(void)127 DWORD glsGetBehavior( void )
128 {
129 return _glsBehavior;
130 }
131
glsSetBehavior(DWORD NewBehavior)132 extern DWORD glsSetBehavior( DWORD NewBehavior )
133 {
134 DWORD OldBehavior = _glsBehavior;
135 _glsBehavior = NewBehavior;
136
137 if(NewBehavior & GLS_BEHAVIOR_INVALID_FUNCTIONS_DEBUGBREAK)
138 {
139 glsUnloadDriver(); /* initialize the invalid functions */
140 }
141 return OldBehavior;
142 }
143
144 /*----------------------------------------------------------------------------
145
146 glsGetNumberOfDrivers - This function figures out how many installed OpenGL
147 drivers are present in the system.
148
149 @todo this hoses if there was ever a 3dfxvgl.dll in the system...
150
151 */
152
glsGetNumberOfDrivers(void)153 int unsigned glsGetNumberOfDrivers( void )
154 {
155 char aGLPath[MAX_PATH];
156 char aGLUPath[MAX_PATH];
157 static struct local_driver_info
158 {
159 DWORD AdditionalFlags;
160 char aGLDriverFileName[MAX_PATH];
161 char aGLUDriverFileName[MAX_PATH];
162 char aDriverDescription[sizeof(_glsDriverInfos[0].aDriverDescription)];
163 } aDrivers[] =
164 {
165 { GLS_FLAGS_DEFAULT_OPENGL_DRIVER, /* this is set redundantly */
166 "\\opengl32.dll",
167 "\\glu32.dll",
168 "Default OpenGL Driver" },
169 { GLS_FLAGS_FULLSCREEN_ONLY | GLS_FLAGS_STANDALONE_DRIVER,
170 "\\3dfxvgl.dll",
171 "\\3dfxvglu.dll",
172 "3dfx Standalone OpenGL Driver" },
173 { GLS_FLAGS_SOFTWARE_ONLY,
174 "\\opengl.dll",
175 "\\glu.dll",
176 "SGI Software OpenGL Driver" }
177 };
178 #define NUMBER_OF_DRIVERS (sizeof(aDrivers)/sizeof(aDrivers[0]))
179 #define NUMBER_OF_DRIVERINFOS (sizeof(_glsDriverInfos)/sizeof(_glsDriverInfos[0]))
180
181 _glsNumberOfDriverInfos = 0;
182
183 if(GetSystemDirectory(aGLPath,sizeof(aGLPath)))
184 {
185 int GLFileLength, GLUFileLength;
186 int const SystemLength = (int) strlen(aGLPath);
187 int unsigned DriverIndex;
188 _safe_strncpy(aGLUPath,aGLPath,sizeof(aGLUPath));
189
190 for(DriverIndex = 0;
191 (DriverIndex < NUMBER_OF_DRIVERS)
192 && (_glsNumberOfDriverInfos < NUMBER_OF_DRIVERINFOS);
193 DriverIndex++)
194 {
195 GLFileLength = (int) strlen(aDrivers[DriverIndex].aGLDriverFileName);
196 GLUFileLength = (int) strlen(aDrivers[DriverIndex].aGLUDriverFileName);
197
198 /* this requires GLUs to be listed in the struct above */
199
200 if((sizeof(aGLPath) > (GLFileLength + SystemLength))
201 && (sizeof(aGLUPath) > (GLUFileLength + SystemLength)))
202 {
203 _safe_strncpy(aGLPath+SystemLength,
204 aDrivers[DriverIndex].aGLDriverFileName,
205 sizeof(aGLPath) - SystemLength);
206 _safe_strncpy(aGLUPath+SystemLength,
207 aDrivers[DriverIndex].aGLUDriverFileName,
208 sizeof(aGLUPath) - SystemLength);
209
210 if(GLS_ERROR_OK == glsGetDriverInfoFromFilePath(
211 aGLPath,aGLUPath,&_glsDriverInfos[_glsNumberOfDriverInfos]))
212 {
213 _glsDriverInfos[_glsNumberOfDriverInfos].DriverFlags &=
214 ~GLS_FLAGS_DRIVER_UNKNOWN_FEATURES;
215 _glsDriverInfos[_glsNumberOfDriverInfos].DriverFlags |=
216 aDrivers[DriverIndex].AdditionalFlags;
217
218 assert(sizeof(aDrivers[DriverIndex].aDriverDescription) ==
219 sizeof(_glsDriverInfos[0].aDriverDescription));
220
221 if(aDrivers[DriverIndex].aDriverDescription[0])
222 {
223 _safe_strncpy(
224 _glsDriverInfos[_glsNumberOfDriverInfos].
225 aDriverDescription,
226 aDrivers[DriverIndex].aDriverDescription,
227 sizeof(_glsDriverInfos[0].aDriverDescription));
228 }
229
230 _glsNumberOfDriverInfos++;
231 }
232 }
233 }
234 }
235 #undef NUMBER_OF_DRIVERS
236 #undef NUMBER_OF_DRIVERINFOS
237
238 return _glsNumberOfDriverInfos;
239 }
240
241 /*----------------------------------------------------------------------------
242
243 glsIsDriverLoaded - This function returns TRUE if a driver is loaded,
244 FALSE otherwise.
245
246 */
247
glsIsDriverLoaded(void)248 BOOL glsIsDriverLoaded( void )
249 {
250 return _glsGLDriverHandle != 0;
251 }
252
253 /*----------------------------------------------------------------------------
254
255 glsGetDriverInfo - This function returns the gls_driver_info for the indexed
256 OpenGL driver.
257
258 */
259
glsGetDriverInfo(int unsigned DriverInfoIndex,gls_driver_info * pDriverInfo)260 gls_error glsGetDriverInfo( int unsigned DriverInfoIndex,
261 gls_driver_info *pDriverInfo )
262 {
263 gls_error ErrorCode = GLS_ERROR_INVALID_PARAMETERS;
264
265 /* if we haven't been initialized, do it now */
266 if(!_glsNumberOfDriverInfos)
267 {
268 glsGetNumberOfDrivers();
269 }
270
271 if(pDriverInfo && (DriverInfoIndex < _glsNumberOfDriverInfos))
272 {
273 ErrorCode = GLS_ERROR_OK;
274 *pDriverInfo = _glsDriverInfos[DriverInfoIndex];
275 }
276
277 return ErrorCode;
278 }
279
280 /*----------------------------------------------------------------------------
281
282 glsGetCurrentDriverInfo - This function returns the gls_driver_info for the
283 currently loaded OpenGL driver.
284
285 */
286
glsGetCurrentDriverInfo(gls_driver_info * pDriverInfo)287 gls_error glsGetCurrentDriverInfo( gls_driver_info *pDriverInfo )
288 {
289 gls_error ErrorCode = GLS_ERROR_NO_DRIVER_LOADED;
290
291 if(pDriverInfo && _glsGLDriverHandle)
292 {
293 if(_glsLoadedDriverIndex == GLS_INVALID_DRIVER_INDEX)
294 {
295 /* we were loaded from a file path */
296 assert(_glsGLDriverFilePath[0]);
297 ErrorCode = glsGetDriverInfoFromFilePath(_glsGLDriverFilePath,
298 _glsGLUDriverFilePath,
299 pDriverInfo);
300 }
301 else
302 {
303 /* we were loaded from an index */
304 assert(_glsLoadedDriverIndex < _glsNumberOfDriverInfos);
305 ErrorCode = glsGetDriverInfo(_glsLoadedDriverIndex,pDriverInfo);
306 }
307 }
308
309 return ErrorCode;
310 }
311
312 /*----------------------------------------------------------------------------
313
314 glsGetCurrentDriverFlags - This function returns the driver flags from the
315 currently loaded driver.
316
317 */
318
glsGetCurrentDriverFlags(void)319 DWORD glsGetCurrentDriverFlags( void )
320 {
321 DWORD Flags = (DWORD)(GLS_FLAGS_DRIVER_UNKNOWN_FEATURES
322 | GLS_FLAGS_NO_GL_VERSION_INFO
323 | GLS_FLAGS_NO_GLU
324 | GLS_FLAGS_NO_GLU_VERSION_INFO);
325
326 gls_driver_info DriverInfo;
327
328 if(glsGetCurrentDriverInfo(&DriverInfo) == GLS_ERROR_OK)
329 {
330 Flags = DriverInfo.DriverFlags;
331 }
332 return Flags;
333 }
334
335 /*----------------------------------------------------------------------------
336
337 glsGetDriverInfoFromFilePath - Get the gls_driver_info using a path to the
338 driver.
339
340 @todo need more error reporting here
341
342 */
343
glsGetDriverInfoFromFilePath(char const * pGLDriverFilePath,char const * pGLUDriverFilePath,gls_driver_info * pDriverInfo)344 gls_error glsGetDriverInfoFromFilePath( char const *pGLDriverFilePath,
345 char const *pGLUDriverFilePath,
346 gls_driver_info *pDriverInfo )
347 {
348 gls_error ErrorCode = GLS_ERROR_INVALID_PARAMETERS;
349
350 /* check parms and get the file date */
351 if(pGLDriverFilePath && pDriverInfo
352 && _glsGetDriverFileDate(pGLDriverFilePath,&pDriverInfo->GLDriver))
353 {
354 BOOL GLUSuccessful = FALSE;
355 BOOL GLUIsInSystemDir = FALSE;
356 BOOL GLIsInSystemDir = FALSE;
357
358 /* clear the flags out...cast to avoid warning on W4 */
359 pDriverInfo->DriverFlags = (DWORD)GLS_FLAGS_DRIVER_UNKNOWN_FEATURES;
360
361 /* take care of the GLU first and get it out of the way */
362
363 if(pGLUDriverFilePath && pGLUDriverFilePath[0] &&
364 !(_glsBehavior & GLS_BEHAVIOR_NEVER_LOAD_GLU))
365 {
366 if(_glsGetDriverFileDate(pGLUDriverFilePath,
367 &pDriverInfo->GLUDriver))
368 {
369 if(!_glsGetDriverFileVersion(pGLUDriverFilePath,
370 &pDriverInfo->GLUDriver,0,0))
371 {
372 pDriverInfo->DriverFlags |= GLS_FLAGS_NO_GLU_VERSION_INFO;
373 }
374
375 if(_glsCopyPathCheckSystemDirectory(pGLUDriverFilePath,
376 &pDriverInfo->GLUDriver,
377 &GLUIsInSystemDir))
378 {
379 GLUSuccessful = TRUE;
380 }
381 }
382 }
383
384 if(!GLUSuccessful)
385 {
386 /* either there was no GLU requested, or we couldn't find it */
387 GLUSuccessful = TRUE;
388 pDriverInfo->GLUDriver.aDriverFilePath[0] = 0;
389 pDriverInfo->DriverFlags |=
390 (GLS_FLAGS_NO_GLU | GLS_FLAGS_NO_GLU_VERSION_INFO);
391 }
392
393 /* do the GL driver now */
394
395 /* get the version number and description */
396 if(!_glsGetDriverFileVersion(pGLDriverFilePath,
397 &pDriverInfo->GLDriver,
398 pDriverInfo->aDriverDescription,
399 sizeof(pDriverInfo->aDriverDescription)))
400 {
401 char const *pUnknownDescription = "Unknown";
402 assert(sizeof(pDriverInfo->aDriverDescription) >
403 strlen(pUnknownDescription));
404
405 _safe_strncpy(pDriverInfo->aDriverDescription,pUnknownDescription,
406 sizeof(pDriverInfo->aDriverDescription));
407
408 pDriverInfo->DriverFlags |= GLS_FLAGS_NO_GL_VERSION_INFO;
409 }
410
411 /* get the file path and the systemdir flag */
412 if(_glsCopyPathCheckSystemDirectory(pGLDriverFilePath,
413 &pDriverInfo->GLDriver,
414 &GLIsInSystemDir))
415 {
416 if(GLIsInSystemDir)
417 {
418 pDriverInfo->DriverFlags |= GLS_FLAGS_DRIVER_IN_SYSTEM_DIR;
419 }
420 if(_glsIsDefaultOpenGL(pDriverInfo->GLDriver.aDriverFilePath))
421 {
422 pDriverInfo->DriverFlags |= GLS_FLAGS_DEFAULT_OPENGL_DRIVER;
423 }
424
425 /* now check if GLU and GL are in the same directory and if not
426 disable the GLU */
427
428 if(!(_glsBehavior & GLS_BEHAVIOR_ALLOW_GLU_IN_DIFFERENT_DIR)
429 && GLUSuccessful
430 && !_glsCompareDirectories(pDriverInfo->GLDriver.aDriverFilePath,
431 pDriverInfo->GLUDriver.aDriverFilePath))
432 {
433 /* okay, they're in different directories, fail GLU */
434 pDriverInfo->GLUDriver.aDriverFilePath[0] = 0;
435 pDriverInfo->DriverFlags |=
436 (GLS_FLAGS_NO_GLU | GLS_FLAGS_NO_GLU_VERSION_INFO);
437 }
438
439 ErrorCode = GLS_ERROR_OK;
440 }
441 }
442 return ErrorCode;
443 }
444
445 /*----------------------------------------------------------------------------
446
447 glsLoadDriver - This function loads the indexed OpenGL driver and dynalinks
448 the function pointers.
449
450 */
451
glsLoadDriver(int unsigned DriverInfoIndex)452 gls_error glsLoadDriver( int unsigned DriverInfoIndex )
453 {
454 gls_error ErrorCode = GLS_ERROR_INVALID_PARAMETERS;
455
456 /* if we haven't been initialized, do it now */
457 if(!_glsNumberOfDriverInfos)
458 {
459 glsGetNumberOfDrivers();
460 }
461
462 if(DriverInfoIndex < _glsNumberOfDriverInfos)
463 {
464 ErrorCode = glsLoadDriverFromFilePath(
465 _glsDriverInfos[DriverInfoIndex].GLDriver.aDriverFilePath,
466 _glsDriverInfos[DriverInfoIndex].GLUDriver.aDriverFilePath);
467
468 if(ErrorCode == GLS_ERROR_OK)
469 {
470 _glsLoadedDriverIndex = DriverInfoIndex;
471 }
472 }
473
474 return ErrorCode;
475 }
476
477
478 /*----------------------------------------------------------------------------
479
480 glsLoadDriverFromFilePath - This function loads the named OpenGL driver
481 and dynalinks the function pointers.
482
483 */
484
glsLoadDriverFromFilePath(char const * pGLDriverFilePath,char const * pGLUDriverFilePath)485 gls_error glsLoadDriverFromFilePath( char const *pGLDriverFilePath,
486 char const *pGLUDriverFilePath )
487 {
488 gls_error ErrorCode = GLS_ERROR_DRIVER_LOAD_FAILED;
489
490 /* this has to come first because it will undo everything below */
491 glsUnloadDriver();
492
493 if(!(_glsBehavior & GLS_BEHAVIOR_ALLOW_GRATUITOUS_HYPE_SCREENS))
494 {
495 /* get rid of the annoying 3dfx hype splash screen */
496 if(!_glsRead3dfxSplashEnv)
497 {
498 _gls3dfxSplashEnv = _glsGetEnv(_GLS_3DFX_SPLASH_STRING);
499 _glsRead3dfxSplashEnv = TRUE;
500 }
501 _glsSetEnv(_GLS_3DFX_SPLASH_STRING,_GLS_3DFX_SPLASH_OFF);
502 }
503
504 if(!(_glsBehavior & GLS_BEHAVIOR_ALLOW_SOFTWARE_REVECTORING))
505 {
506 /* don't let the SGI opengl vector to opengl32.dll */
507 if(!_glsReadSGIRegistryEntry)
508 {
509 _glsSGIRegistryEntry = _glsGetRegistryDWORD(_GLS_SGI_REGISTRY_ROOT,
510 _GLS_SGI_REGISTRY_KEY,
511 _GLS_SGI_REGISTRY_VALUE,
512 _GLS_SGI_REGISTRY_DEFAULT);
513
514 _glsReadSGIRegistryEntry = TRUE;
515 }
516 _glsSetRegistryDWORD(_GLS_SGI_REGISTRY_ROOT,_GLS_SGI_REGISTRY_KEY,
517 _GLS_SGI_REGISTRY_VALUE,_GLS_SGI_REGISTRY_OFF);
518 }
519
520 if(!(_glsBehavior & GLS_BEHAVIOR_ALLOW_GLU_IN_DIFFERENT_DIR)
521 && pGLUDriverFilePath && pGLUDriverFilePath[0]
522 && !_glsCompareDirectories(pGLDriverFilePath,pGLUDriverFilePath))
523 {
524 /* the GL and GLU are in different directories, so fail */
525 pGLDriverFilePath = pGLUDriverFilePath = 0;
526 }
527
528 if(pGLDriverFilePath
529 && ((_glsGLDriverHandle = LoadLibrary(pGLDriverFilePath)) != 0))
530 {
531 /* the DYNALINK_*_FUNCTION macros will OR into this to signal error */
532 int DynalinkFailed = 0;
533
534 /* macros for dynalinking */
535 #define _ERROR_WRAP( func ) ((func) != 0) ? 0 : (DynalinkFailed |= 1)
536 #define _STRINGIZE_NAME(name) #name
537 #define _STRINGIZE_NAME0(name) _STRINGIZE_NAME(name)
538 #define _WGLIZE_STRINGIZE_NAME( name ) _STRINGIZE_NAME0(wgl##name)
539 #define DYNALINK_GL_FUNCTION( name ) _ERROR_WRAP((*(int (__stdcall **)())&name) = GetProcAddress(_glsGLDriverHandle,#name))
540 #define DYNALINK_GLU_FUNCTION( name ) _ERROR_WRAP((*(int (__stdcall **)())&name) = GetProcAddress(_glsGLUDriverHandle,#name))
541 #define DYNALINK_GLS_FUNCTION( name ) _ERROR_WRAP((*(int (__stdcall **)())&GLS_SCOPE_NAME(name)) = GetProcAddress(_glsGLDriverHandle,_WGLIZE_STRINGIZE_NAME(name)))
542 #define DYNALINK_GDI_FUNCTION( name ) _ERROR_WRAP((*(int (__stdcall **)())&GLS_SCOPE_NAME(name)) = GetProcAddress(_glsGDI32,#name))
543
544 DYNALINK_GL_FUNCTION( glAccum );
545 DYNALINK_GL_FUNCTION( glAlphaFunc );
546 DYNALINK_GL_FUNCTION( glAreTexturesResident );
547 DYNALINK_GL_FUNCTION( glArrayElement );
548 DYNALINK_GL_FUNCTION( glBegin );
549 DYNALINK_GL_FUNCTION( glBindTexture );
550 DYNALINK_GL_FUNCTION( glBitmap );
551 DYNALINK_GL_FUNCTION( glBlendFunc );
552 DYNALINK_GL_FUNCTION( glCallList );
553 DYNALINK_GL_FUNCTION( glCallLists );
554 DYNALINK_GL_FUNCTION( glClear );
555 DYNALINK_GL_FUNCTION( glClearAccum );
556 DYNALINK_GL_FUNCTION( glClearColor );
557 DYNALINK_GL_FUNCTION( glClearDepth );
558 DYNALINK_GL_FUNCTION( glClearIndex );
559 DYNALINK_GL_FUNCTION( glClearStencil );
560 DYNALINK_GL_FUNCTION( glClipPlane );
561 DYNALINK_GL_FUNCTION( glColor3b );
562 DYNALINK_GL_FUNCTION( glColor3bv );
563 DYNALINK_GL_FUNCTION( glColor3d );
564 DYNALINK_GL_FUNCTION( glColor3dv );
565 DYNALINK_GL_FUNCTION( glColor3f );
566 DYNALINK_GL_FUNCTION( glColor3fv );
567 DYNALINK_GL_FUNCTION( glColor3i );
568 DYNALINK_GL_FUNCTION( glColor3iv );
569 DYNALINK_GL_FUNCTION( glColor3s );
570 DYNALINK_GL_FUNCTION( glColor3sv );
571 DYNALINK_GL_FUNCTION( glColor3ub );
572 DYNALINK_GL_FUNCTION( glColor3ubv );
573 DYNALINK_GL_FUNCTION( glColor3ui );
574 DYNALINK_GL_FUNCTION( glColor3uiv );
575 DYNALINK_GL_FUNCTION( glColor3us );
576 DYNALINK_GL_FUNCTION( glColor3usv );
577 DYNALINK_GL_FUNCTION( glColor4b );
578 DYNALINK_GL_FUNCTION( glColor4bv );
579 DYNALINK_GL_FUNCTION( glColor4d );
580 DYNALINK_GL_FUNCTION( glColor4dv );
581 DYNALINK_GL_FUNCTION( glColor4f );
582 DYNALINK_GL_FUNCTION( glColor4fv );
583 DYNALINK_GL_FUNCTION( glColor4i );
584 DYNALINK_GL_FUNCTION( glColor4iv );
585 DYNALINK_GL_FUNCTION( glColor4s );
586 DYNALINK_GL_FUNCTION( glColor4sv );
587 DYNALINK_GL_FUNCTION( glColor4ub );
588 DYNALINK_GL_FUNCTION( glColor4ubv );
589 DYNALINK_GL_FUNCTION( glColor4ui );
590 DYNALINK_GL_FUNCTION( glColor4uiv );
591 DYNALINK_GL_FUNCTION( glColor4us );
592 DYNALINK_GL_FUNCTION( glColor4usv );
593 DYNALINK_GL_FUNCTION( glColorMask );
594 DYNALINK_GL_FUNCTION( glColorMaterial );
595 DYNALINK_GL_FUNCTION( glColorPointer );
596 DYNALINK_GL_FUNCTION( glCopyPixels );
597 DYNALINK_GL_FUNCTION( glCopyTexImage1D );
598 DYNALINK_GL_FUNCTION( glCopyTexImage2D );
599 DYNALINK_GL_FUNCTION( glCopyTexSubImage1D );
600 DYNALINK_GL_FUNCTION( glCopyTexSubImage2D );
601 DYNALINK_GL_FUNCTION( glCullFace );
602 DYNALINK_GL_FUNCTION( glDeleteLists );
603 DYNALINK_GL_FUNCTION( glDeleteTextures );
604 DYNALINK_GL_FUNCTION( glDepthFunc );
605 DYNALINK_GL_FUNCTION( glDepthMask );
606 DYNALINK_GL_FUNCTION( glDepthRange );
607 DYNALINK_GL_FUNCTION( glDisable );
608 DYNALINK_GL_FUNCTION( glDisableClientState );
609 DYNALINK_GL_FUNCTION( glDrawArrays );
610 DYNALINK_GL_FUNCTION( glDrawBuffer );
611 DYNALINK_GL_FUNCTION( glDrawElements );
612 DYNALINK_GL_FUNCTION( glDrawPixels );
613 DYNALINK_GL_FUNCTION( glEdgeFlag );
614 DYNALINK_GL_FUNCTION( glEdgeFlagPointer );
615 DYNALINK_GL_FUNCTION( glEdgeFlagv );
616 DYNALINK_GL_FUNCTION( glEnable );
617 DYNALINK_GL_FUNCTION( glEnableClientState );
618 DYNALINK_GL_FUNCTION( glEnd );
619 DYNALINK_GL_FUNCTION( glEndList );
620 DYNALINK_GL_FUNCTION( glEvalCoord1d );
621 DYNALINK_GL_FUNCTION( glEvalCoord1dv );
622 DYNALINK_GL_FUNCTION( glEvalCoord1f );
623 DYNALINK_GL_FUNCTION( glEvalCoord1fv );
624 DYNALINK_GL_FUNCTION( glEvalCoord2d );
625 DYNALINK_GL_FUNCTION( glEvalCoord2dv );
626 DYNALINK_GL_FUNCTION( glEvalCoord2f );
627 DYNALINK_GL_FUNCTION( glEvalCoord2fv );
628 DYNALINK_GL_FUNCTION( glEvalMesh1 );
629 DYNALINK_GL_FUNCTION( glEvalMesh2 );
630 DYNALINK_GL_FUNCTION( glEvalPoint1 );
631 DYNALINK_GL_FUNCTION( glEvalPoint2 );
632 DYNALINK_GL_FUNCTION( glFeedbackBuffer );
633 DYNALINK_GL_FUNCTION( glFinish );
634 DYNALINK_GL_FUNCTION( glFlush );
635 DYNALINK_GL_FUNCTION( glFogf );
636 DYNALINK_GL_FUNCTION( glFogfv );
637 DYNALINK_GL_FUNCTION( glFogi );
638 DYNALINK_GL_FUNCTION( glFogiv );
639 DYNALINK_GL_FUNCTION( glFrontFace );
640 DYNALINK_GL_FUNCTION( glFrustum );
641 DYNALINK_GL_FUNCTION( glGenLists );
642 DYNALINK_GL_FUNCTION( glGenTextures );
643 DYNALINK_GL_FUNCTION( glGetBooleanv );
644 DYNALINK_GL_FUNCTION( glGetClipPlane );
645 DYNALINK_GL_FUNCTION( glGetDoublev );
646 DYNALINK_GL_FUNCTION( glGetError );
647 DYNALINK_GL_FUNCTION( glGetFloatv );
648 DYNALINK_GL_FUNCTION( glGetIntegerv );
649 DYNALINK_GL_FUNCTION( glGetLightfv );
650 DYNALINK_GL_FUNCTION( glGetLightiv );
651 DYNALINK_GL_FUNCTION( glGetMapdv );
652 DYNALINK_GL_FUNCTION( glGetMapfv );
653 DYNALINK_GL_FUNCTION( glGetMapiv );
654 DYNALINK_GL_FUNCTION( glGetMaterialfv );
655 DYNALINK_GL_FUNCTION( glGetMaterialiv );
656 DYNALINK_GL_FUNCTION( glGetPixelMapfv );
657 DYNALINK_GL_FUNCTION( glGetPixelMapuiv );
658 DYNALINK_GL_FUNCTION( glGetPixelMapusv );
659 DYNALINK_GL_FUNCTION( glGetPointerv );
660 DYNALINK_GL_FUNCTION( glGetPolygonStipple );
661 DYNALINK_GL_FUNCTION( glGetString );
662 DYNALINK_GL_FUNCTION( glGetTexEnvfv );
663 DYNALINK_GL_FUNCTION( glGetTexEnviv );
664 DYNALINK_GL_FUNCTION( glGetTexGendv );
665 DYNALINK_GL_FUNCTION( glGetTexGenfv );
666 DYNALINK_GL_FUNCTION( glGetTexGeniv );
667 DYNALINK_GL_FUNCTION( glGetTexImage );
668 DYNALINK_GL_FUNCTION( glGetTexLevelParameterfv );
669 DYNALINK_GL_FUNCTION( glGetTexLevelParameteriv );
670 DYNALINK_GL_FUNCTION( glGetTexParameterfv );
671 DYNALINK_GL_FUNCTION( glGetTexParameteriv );
672 DYNALINK_GL_FUNCTION( glHint );
673 DYNALINK_GL_FUNCTION( glIndexMask );
674 DYNALINK_GL_FUNCTION( glIndexPointer );
675 DYNALINK_GL_FUNCTION( glIndexd );
676 DYNALINK_GL_FUNCTION( glIndexdv );
677 DYNALINK_GL_FUNCTION( glIndexf );
678 DYNALINK_GL_FUNCTION( glIndexfv );
679 DYNALINK_GL_FUNCTION( glIndexi );
680 DYNALINK_GL_FUNCTION( glIndexiv );
681 DYNALINK_GL_FUNCTION( glIndexs );
682 DYNALINK_GL_FUNCTION( glIndexsv );
683 DYNALINK_GL_FUNCTION( glIndexub );
684 DYNALINK_GL_FUNCTION( glIndexubv );
685 DYNALINK_GL_FUNCTION( glInitNames );
686 DYNALINK_GL_FUNCTION( glInterleavedArrays );
687 DYNALINK_GL_FUNCTION( glIsEnabled );
688 DYNALINK_GL_FUNCTION( glIsList );
689 DYNALINK_GL_FUNCTION( glIsTexture );
690 DYNALINK_GL_FUNCTION( glLightModelf );
691 DYNALINK_GL_FUNCTION( glLightModelfv );
692 DYNALINK_GL_FUNCTION( glLightModeli );
693 DYNALINK_GL_FUNCTION( glLightModeliv );
694 DYNALINK_GL_FUNCTION( glLightf );
695 DYNALINK_GL_FUNCTION( glLightfv );
696 DYNALINK_GL_FUNCTION( glLighti );
697 DYNALINK_GL_FUNCTION( glLightiv );
698 DYNALINK_GL_FUNCTION( glLineStipple );
699 DYNALINK_GL_FUNCTION( glLineWidth );
700 DYNALINK_GL_FUNCTION( glListBase );
701 DYNALINK_GL_FUNCTION( glLoadIdentity );
702 DYNALINK_GL_FUNCTION( glLoadMatrixd );
703 DYNALINK_GL_FUNCTION( glLoadMatrixf );
704 DYNALINK_GL_FUNCTION( glLoadName );
705 DYNALINK_GL_FUNCTION( glLogicOp );
706 DYNALINK_GL_FUNCTION( glMap1d );
707 DYNALINK_GL_FUNCTION( glMap1f );
708 DYNALINK_GL_FUNCTION( glMap2d );
709 DYNALINK_GL_FUNCTION( glMap2f );
710 DYNALINK_GL_FUNCTION( glMapGrid1d );
711 DYNALINK_GL_FUNCTION( glMapGrid1f );
712 DYNALINK_GL_FUNCTION( glMapGrid2d );
713 DYNALINK_GL_FUNCTION( glMapGrid2f );
714 DYNALINK_GL_FUNCTION( glMaterialf );
715 DYNALINK_GL_FUNCTION( glMaterialfv );
716 DYNALINK_GL_FUNCTION( glMateriali );
717 DYNALINK_GL_FUNCTION( glMaterialiv );
718 DYNALINK_GL_FUNCTION( glMatrixMode );
719 DYNALINK_GL_FUNCTION( glMultMatrixd );
720 DYNALINK_GL_FUNCTION( glMultMatrixf );
721 DYNALINK_GL_FUNCTION( glNewList );
722 DYNALINK_GL_FUNCTION( glNormal3b );
723 DYNALINK_GL_FUNCTION( glNormal3bv );
724 DYNALINK_GL_FUNCTION( glNormal3d );
725 DYNALINK_GL_FUNCTION( glNormal3dv );
726 DYNALINK_GL_FUNCTION( glNormal3f );
727 DYNALINK_GL_FUNCTION( glNormal3fv );
728 DYNALINK_GL_FUNCTION( glNormal3i );
729 DYNALINK_GL_FUNCTION( glNormal3iv );
730 DYNALINK_GL_FUNCTION( glNormal3s );
731 DYNALINK_GL_FUNCTION( glNormal3sv );
732 DYNALINK_GL_FUNCTION( glNormalPointer );
733 DYNALINK_GL_FUNCTION( glOrtho );
734 DYNALINK_GL_FUNCTION( glPassThrough );
735 DYNALINK_GL_FUNCTION( glPixelMapfv );
736 DYNALINK_GL_FUNCTION( glPixelMapuiv );
737 DYNALINK_GL_FUNCTION( glPixelMapusv );
738 DYNALINK_GL_FUNCTION( glPixelStoref );
739 DYNALINK_GL_FUNCTION( glPixelStorei );
740 DYNALINK_GL_FUNCTION( glPixelTransferf );
741 DYNALINK_GL_FUNCTION( glPixelTransferi );
742 DYNALINK_GL_FUNCTION( glPixelZoom );
743 DYNALINK_GL_FUNCTION( glPointSize );
744 DYNALINK_GL_FUNCTION( glPolygonMode );
745 DYNALINK_GL_FUNCTION( glPolygonOffset );
746 DYNALINK_GL_FUNCTION( glPolygonStipple );
747 DYNALINK_GL_FUNCTION( glPopAttrib );
748 DYNALINK_GL_FUNCTION( glPopClientAttrib );
749 DYNALINK_GL_FUNCTION( glPopMatrix );
750 DYNALINK_GL_FUNCTION( glPopName );
751 DYNALINK_GL_FUNCTION( glPrioritizeTextures );
752 DYNALINK_GL_FUNCTION( glPushAttrib );
753 DYNALINK_GL_FUNCTION( glPushClientAttrib );
754 DYNALINK_GL_FUNCTION( glPushMatrix );
755 DYNALINK_GL_FUNCTION( glPushName );
756 DYNALINK_GL_FUNCTION( glRasterPos2d );
757 DYNALINK_GL_FUNCTION( glRasterPos2dv );
758 DYNALINK_GL_FUNCTION( glRasterPos2f );
759 DYNALINK_GL_FUNCTION( glRasterPos2fv );
760 DYNALINK_GL_FUNCTION( glRasterPos2i );
761 DYNALINK_GL_FUNCTION( glRasterPos2iv );
762 DYNALINK_GL_FUNCTION( glRasterPos2s );
763 DYNALINK_GL_FUNCTION( glRasterPos2sv );
764 DYNALINK_GL_FUNCTION( glRasterPos3d );
765 DYNALINK_GL_FUNCTION( glRasterPos3dv );
766 DYNALINK_GL_FUNCTION( glRasterPos3f );
767 DYNALINK_GL_FUNCTION( glRasterPos3fv );
768 DYNALINK_GL_FUNCTION( glRasterPos3i );
769 DYNALINK_GL_FUNCTION( glRasterPos3iv );
770 DYNALINK_GL_FUNCTION( glRasterPos3s );
771 DYNALINK_GL_FUNCTION( glRasterPos3sv );
772 DYNALINK_GL_FUNCTION( glRasterPos4d );
773 DYNALINK_GL_FUNCTION( glRasterPos4dv );
774 DYNALINK_GL_FUNCTION( glRasterPos4f );
775 DYNALINK_GL_FUNCTION( glRasterPos4fv );
776 DYNALINK_GL_FUNCTION( glRasterPos4i );
777 DYNALINK_GL_FUNCTION( glRasterPos4iv );
778 DYNALINK_GL_FUNCTION( glRasterPos4s );
779 DYNALINK_GL_FUNCTION( glRasterPos4sv );
780 DYNALINK_GL_FUNCTION( glReadBuffer );
781 DYNALINK_GL_FUNCTION( glReadPixels );
782 DYNALINK_GL_FUNCTION( glRectd );
783 DYNALINK_GL_FUNCTION( glRectdv );
784 DYNALINK_GL_FUNCTION( glRectf );
785 DYNALINK_GL_FUNCTION( glRectfv );
786 DYNALINK_GL_FUNCTION( glRecti );
787 DYNALINK_GL_FUNCTION( glRectiv );
788 DYNALINK_GL_FUNCTION( glRects );
789 DYNALINK_GL_FUNCTION( glRectsv );
790 DYNALINK_GL_FUNCTION( glRenderMode );
791 DYNALINK_GL_FUNCTION( glRotated );
792 DYNALINK_GL_FUNCTION( glRotatef );
793 DYNALINK_GL_FUNCTION( glScaled );
794 DYNALINK_GL_FUNCTION( glScalef );
795 DYNALINK_GL_FUNCTION( glScissor );
796 DYNALINK_GL_FUNCTION( glSelectBuffer );
797 DYNALINK_GL_FUNCTION( glShadeModel );
798 DYNALINK_GL_FUNCTION( glStencilFunc );
799 DYNALINK_GL_FUNCTION( glStencilMask );
800 DYNALINK_GL_FUNCTION( glStencilOp );
801 DYNALINK_GL_FUNCTION( glTexCoord1d );
802 DYNALINK_GL_FUNCTION( glTexCoord1dv );
803 DYNALINK_GL_FUNCTION( glTexCoord1f );
804 DYNALINK_GL_FUNCTION( glTexCoord1fv );
805 DYNALINK_GL_FUNCTION( glTexCoord1i );
806 DYNALINK_GL_FUNCTION( glTexCoord1iv );
807 DYNALINK_GL_FUNCTION( glTexCoord1s );
808 DYNALINK_GL_FUNCTION( glTexCoord1sv );
809 DYNALINK_GL_FUNCTION( glTexCoord2d );
810 DYNALINK_GL_FUNCTION( glTexCoord2dv );
811 DYNALINK_GL_FUNCTION( glTexCoord2f );
812 DYNALINK_GL_FUNCTION( glTexCoord2fv );
813 DYNALINK_GL_FUNCTION( glTexCoord2i );
814 DYNALINK_GL_FUNCTION( glTexCoord2iv );
815 DYNALINK_GL_FUNCTION( glTexCoord2s );
816 DYNALINK_GL_FUNCTION( glTexCoord2sv );
817 DYNALINK_GL_FUNCTION( glTexCoord3d );
818 DYNALINK_GL_FUNCTION( glTexCoord3dv );
819 DYNALINK_GL_FUNCTION( glTexCoord3f );
820 DYNALINK_GL_FUNCTION( glTexCoord3fv );
821 DYNALINK_GL_FUNCTION( glTexCoord3i );
822 DYNALINK_GL_FUNCTION( glTexCoord3iv );
823 DYNALINK_GL_FUNCTION( glTexCoord3s );
824 DYNALINK_GL_FUNCTION( glTexCoord3sv );
825 DYNALINK_GL_FUNCTION( glTexCoord4d );
826 DYNALINK_GL_FUNCTION( glTexCoord4dv );
827 DYNALINK_GL_FUNCTION( glTexCoord4f );
828 DYNALINK_GL_FUNCTION( glTexCoord4fv );
829 DYNALINK_GL_FUNCTION( glTexCoord4i );
830 DYNALINK_GL_FUNCTION( glTexCoord4iv );
831 DYNALINK_GL_FUNCTION( glTexCoord4s );
832 DYNALINK_GL_FUNCTION( glTexCoord4sv );
833 DYNALINK_GL_FUNCTION( glTexCoordPointer );
834 DYNALINK_GL_FUNCTION( glTexEnvf );
835 DYNALINK_GL_FUNCTION( glTexEnvfv );
836 DYNALINK_GL_FUNCTION( glTexEnvi );
837 DYNALINK_GL_FUNCTION( glTexEnviv );
838 DYNALINK_GL_FUNCTION( glTexGend );
839 DYNALINK_GL_FUNCTION( glTexGendv );
840 DYNALINK_GL_FUNCTION( glTexGenf );
841 DYNALINK_GL_FUNCTION( glTexGenfv );
842 DYNALINK_GL_FUNCTION( glTexGeni );
843 DYNALINK_GL_FUNCTION( glTexGeniv );
844 DYNALINK_GL_FUNCTION( glTexImage1D );
845 DYNALINK_GL_FUNCTION( glTexImage2D );
846 DYNALINK_GL_FUNCTION( glTexParameterf );
847 DYNALINK_GL_FUNCTION( glTexParameterfv );
848 DYNALINK_GL_FUNCTION( glTexParameteri );
849 DYNALINK_GL_FUNCTION( glTexParameteriv );
850 DYNALINK_GL_FUNCTION( glTexSubImage1D );
851 DYNALINK_GL_FUNCTION( glTexSubImage2D );
852 DYNALINK_GL_FUNCTION( glTranslated );
853 DYNALINK_GL_FUNCTION( glTranslatef );
854 DYNALINK_GL_FUNCTION( glVertex2d );
855 DYNALINK_GL_FUNCTION( glVertex2dv );
856 DYNALINK_GL_FUNCTION( glVertex2f );
857 DYNALINK_GL_FUNCTION( glVertex2fv );
858 DYNALINK_GL_FUNCTION( glVertex2i );
859 DYNALINK_GL_FUNCTION( glVertex2iv );
860 DYNALINK_GL_FUNCTION( glVertex2s );
861 DYNALINK_GL_FUNCTION( glVertex2sv );
862 DYNALINK_GL_FUNCTION( glVertex3d );
863 DYNALINK_GL_FUNCTION( glVertex3dv );
864 DYNALINK_GL_FUNCTION( glVertex3f );
865 DYNALINK_GL_FUNCTION( glVertex3fv );
866 DYNALINK_GL_FUNCTION( glVertex3i );
867 DYNALINK_GL_FUNCTION( glVertex3iv );
868 DYNALINK_GL_FUNCTION( glVertex3s );
869 DYNALINK_GL_FUNCTION( glVertex3sv );
870 DYNALINK_GL_FUNCTION( glVertex4d );
871 DYNALINK_GL_FUNCTION( glVertex4dv );
872 DYNALINK_GL_FUNCTION( glVertex4f );
873 DYNALINK_GL_FUNCTION( glVertex4fv );
874 DYNALINK_GL_FUNCTION( glVertex4i );
875 DYNALINK_GL_FUNCTION( glVertex4iv );
876 DYNALINK_GL_FUNCTION( glVertex4s );
877 DYNALINK_GL_FUNCTION( glVertex4sv );
878 DYNALINK_GL_FUNCTION( glVertexPointer );
879 DYNALINK_GL_FUNCTION( glViewport );
880
881 DYNALINK_GLS_FUNCTION( CopyContext );
882 DYNALINK_GLS_FUNCTION( CreateContext );
883 DYNALINK_GLS_FUNCTION( CreateLayerContext );
884 DYNALINK_GLS_FUNCTION( DeleteContext );
885 DYNALINK_GLS_FUNCTION( DescribeLayerPlane );
886 DYNALINK_GLS_FUNCTION( GetCurrentContext );
887 DYNALINK_GLS_FUNCTION( GetCurrentDC );
888 DYNALINK_GLS_FUNCTION( GetLayerPaletteEntries );
889 DYNALINK_GLS_FUNCTION( GetProcAddress );
890 DYNALINK_GLS_FUNCTION( MakeCurrent );
891 DYNALINK_GLS_FUNCTION( RealizeLayerPalette );
892 DYNALINK_GLS_FUNCTION( SetLayerPaletteEntries );
893 DYNALINK_GLS_FUNCTION( ShareLists );
894 DYNALINK_GLS_FUNCTION( SwapLayerBuffers );
895 DYNALINK_GLS_FUNCTION( UseFontBitmaps );
896 DYNALINK_GLS_FUNCTION( UseFontOutlines );
897
898 if(_glsIsDefaultOpenGL(pGLDriverFilePath))
899 {
900 /* if this is the default opengl32.dll, we need to
901 dynalink from gdi32.dll for the following functions
902 because Win2k does some magic before calling opengl32.dll */
903
904 if((_glsGDI32 = LoadLibrary("gdi32.dll")) != 0)
905 {
906 DYNALINK_GDI_FUNCTION( ChoosePixelFormat );
907 DYNALINK_GDI_FUNCTION( DescribePixelFormat );
908 DYNALINK_GDI_FUNCTION( GetPixelFormat );
909 DYNALINK_GDI_FUNCTION( SetPixelFormat );
910 DYNALINK_GDI_FUNCTION( SwapBuffers );
911 }
912 else
913 {
914 DynalinkFailed = 1;
915 }
916 }
917 else
918 {
919 DYNALINK_GLS_FUNCTION( ChoosePixelFormat );
920 DYNALINK_GLS_FUNCTION( DescribePixelFormat );
921 DYNALINK_GLS_FUNCTION( GetPixelFormat );
922 DYNALINK_GLS_FUNCTION( SetPixelFormat );
923 DYNALINK_GLS_FUNCTION( SwapBuffers );
924 }
925
926 /* copy the loaded file path into the global variable */
927 _safe_strncpy(_glsGLDriverFilePath,pGLDriverFilePath,
928 sizeof(_glsGLDriverFilePath));
929
930 #ifndef GLS_NO_GLU
931
932 /* now do GLU if the user requested it */
933
934 if(!(_glsBehavior & GLS_BEHAVIOR_NEVER_LOAD_GLU)
935 && pGLUDriverFilePath && pGLUDriverFilePath[0])
936 {
937 _glsGLUDriverHandle = LoadLibrary(pGLUDriverFilePath);
938 if(_glsGLUDriverHandle)
939 {
940 DYNALINK_GLU_FUNCTION( gluBeginCurve );
941 DYNALINK_GLU_FUNCTION( gluBeginPolygon );
942 DYNALINK_GLU_FUNCTION( gluBeginSurface );
943 DYNALINK_GLU_FUNCTION( gluBeginTrim );
944 DYNALINK_GLU_FUNCTION( gluBuild1DMipmaps );
945 DYNALINK_GLU_FUNCTION( gluBuild2DMipmaps );
946 DYNALINK_GLU_FUNCTION( gluCylinder );
947 DYNALINK_GLU_FUNCTION( gluDeleteNurbsRenderer );
948 DYNALINK_GLU_FUNCTION( gluDeleteQuadric );
949 DYNALINK_GLU_FUNCTION( gluDeleteTess );
950 DYNALINK_GLU_FUNCTION( gluDisk );
951 DYNALINK_GLU_FUNCTION( gluEndCurve );
952 DYNALINK_GLU_FUNCTION( gluEndPolygon );
953 DYNALINK_GLU_FUNCTION( gluEndSurface );
954 DYNALINK_GLU_FUNCTION( gluEndTrim );
955 DYNALINK_GLU_FUNCTION( gluErrorString );
956 DYNALINK_GLU_FUNCTION( gluGetNurbsProperty );
957 DYNALINK_GLU_FUNCTION( gluGetString );
958 DYNALINK_GLU_FUNCTION( gluGetTessProperty );
959 DYNALINK_GLU_FUNCTION( gluLoadSamplingMatrices );
960 DYNALINK_GLU_FUNCTION( gluLookAt );
961 DYNALINK_GLU_FUNCTION( gluNewNurbsRenderer );
962 DYNALINK_GLU_FUNCTION( gluNewQuadric );
963 DYNALINK_GLU_FUNCTION( gluNewTess );
964 DYNALINK_GLU_FUNCTION( gluNextContour );
965 DYNALINK_GLU_FUNCTION( gluNurbsCallback );
966 DYNALINK_GLU_FUNCTION( gluNurbsCurve );
967 DYNALINK_GLU_FUNCTION( gluNurbsProperty );
968 DYNALINK_GLU_FUNCTION( gluNurbsSurface );
969 DYNALINK_GLU_FUNCTION( gluOrtho2D );
970 DYNALINK_GLU_FUNCTION( gluPartialDisk );
971 DYNALINK_GLU_FUNCTION( gluPerspective );
972 DYNALINK_GLU_FUNCTION( gluPickMatrix );
973 DYNALINK_GLU_FUNCTION( gluProject );
974 DYNALINK_GLU_FUNCTION( gluPwlCurve );
975 DYNALINK_GLU_FUNCTION( gluQuadricCallback );
976 DYNALINK_GLU_FUNCTION( gluQuadricDrawStyle );
977 DYNALINK_GLU_FUNCTION( gluQuadricNormals );
978 DYNALINK_GLU_FUNCTION( gluQuadricOrientation );
979 DYNALINK_GLU_FUNCTION( gluQuadricTexture );
980 DYNALINK_GLU_FUNCTION( gluScaleImage );
981 DYNALINK_GLU_FUNCTION( gluSphere );
982 DYNALINK_GLU_FUNCTION( gluTessBeginContour );
983 DYNALINK_GLU_FUNCTION( gluTessBeginPolygon );
984 DYNALINK_GLU_FUNCTION( gluTessCallback );
985 DYNALINK_GLU_FUNCTION( gluTessEndContour );
986 DYNALINK_GLU_FUNCTION( gluTessEndPolygon );
987 DYNALINK_GLU_FUNCTION( gluTessNormal );
988 DYNALINK_GLU_FUNCTION( gluTessProperty );
989 DYNALINK_GLU_FUNCTION( gluTessVertex );
990 DYNALINK_GLU_FUNCTION( gluUnProject );
991
992 /* copy the loaded file path into the global variable */
993 _safe_strncpy(_glsGLUDriverFilePath,pGLUDriverFilePath,
994 sizeof(_glsGLUDriverFilePath));
995 }
996 else
997 {
998 DynalinkFailed = 1;
999 }
1000 }
1001 else
1002 {
1003 /* no GLU requested */
1004 _glsGLUDriverFilePath[0] = 0;
1005 }
1006 #endif /* GLS_NO_GLU */
1007
1008 #undef _STRING_NAME
1009 #undef _STRING_NAME0
1010 #undef _WGLIZE_STRINGIZE_NAME
1011 #undef _ERROR_WRAP
1012 #undef DYNALINK_GDI_FUNCTION
1013 #undef DYNALINK_GL_FUNCTION
1014 #undef DYNALINK_GLU_FUNCTION
1015 #undef DYNALINK_GLS_FUNCTION
1016
1017 if(DynalinkFailed)
1018 {
1019 ErrorCode = GLS_ERROR_DRIVER_DYNALINK_FAILED;
1020 glsUnloadDriver();
1021 }
1022 else
1023 {
1024 ErrorCode = GLS_ERROR_OK;
1025 }
1026 }
1027 return ErrorCode;
1028 }
1029
1030 /*----------------------------------------------------------------------------
1031
1032 glsUnloadDriver - closes down the binding library and cleans up.
1033
1034 */
1035
glsUnloadDriver(void)1036 void glsUnloadDriver(void )
1037 {
1038 void (__stdcall *pInvalidFunction)( void ) = 0;
1039
1040 if (_glsGLDriverHandle)
1041 {
1042 FreeLibrary(_glsGLDriverHandle);
1043 _glsGLDriverHandle = 0;
1044 }
1045 if (_glsGLUDriverHandle)
1046 {
1047 FreeLibrary(_glsGLUDriverHandle);
1048 _glsGLUDriverHandle = 0;
1049 }
1050 if(_glsGDI32)
1051 {
1052 FreeLibrary(_glsGDI32);
1053 _glsGDI32 = 0;
1054 }
1055
1056 /* restore environment and registry */
1057 if(!(_glsBehavior & GLS_BEHAVIOR_ALLOW_GRATUITOUS_HYPE_SCREENS))
1058 {
1059 if(_glsRead3dfxSplashEnv)
1060 {
1061 _glsSetEnv(_GLS_3DFX_SPLASH_STRING,_gls3dfxSplashEnv);
1062 _glsRead3dfxSplashEnv = FALSE;
1063 }
1064 }
1065 if(!(_glsBehavior & GLS_BEHAVIOR_ALLOW_SOFTWARE_REVECTORING))
1066 {
1067 if(_glsReadSGIRegistryEntry)
1068 {
1069 _glsSetRegistryDWORD(_GLS_SGI_REGISTRY_ROOT,_GLS_SGI_REGISTRY_KEY,
1070 _GLS_SGI_REGISTRY_VALUE,_glsSGIRegistryEntry);
1071 _glsReadSGIRegistryEntry = FALSE;
1072 }
1073 }
1074
1075 if(_glsBehavior & GLS_BEHAVIOR_INVALID_FUNCTIONS_DEBUGBREAK)
1076 {
1077 pInvalidFunction = _glsDebugBreakFunction;
1078 }
1079
1080 #define DISABLE_GL_FUNCTION( name ) (*(void (__stdcall **)())&name) = pInvalidFunction;
1081 #define DISABLE_GLU_FUNCTION( name ) (*(void (__stdcall **)())&name) = pInvalidFunction;
1082 #define DISABLE_GLS_FUNCTION( name ) (*(void (__stdcall **)())&GLS_SCOPE_NAME(name)) = pInvalidFunction;
1083
1084 DISABLE_GL_FUNCTION( glAccum );
1085 DISABLE_GL_FUNCTION( glAlphaFunc );
1086 DISABLE_GL_FUNCTION( glAreTexturesResident );
1087 DISABLE_GL_FUNCTION( glArrayElement );
1088 DISABLE_GL_FUNCTION( glBegin );
1089 DISABLE_GL_FUNCTION( glBindTexture );
1090 DISABLE_GL_FUNCTION( glBitmap );
1091 DISABLE_GL_FUNCTION( glBlendFunc );
1092 DISABLE_GL_FUNCTION( glCallList );
1093 DISABLE_GL_FUNCTION( glCallLists );
1094 DISABLE_GL_FUNCTION( glClear );
1095 DISABLE_GL_FUNCTION( glClearAccum );
1096 DISABLE_GL_FUNCTION( glClearColor );
1097 DISABLE_GL_FUNCTION( glClearDepth );
1098 DISABLE_GL_FUNCTION( glClearIndex );
1099 DISABLE_GL_FUNCTION( glClearStencil );
1100 DISABLE_GL_FUNCTION( glClipPlane );
1101 DISABLE_GL_FUNCTION( glColor3b );
1102 DISABLE_GL_FUNCTION( glColor3bv );
1103 DISABLE_GL_FUNCTION( glColor3d );
1104 DISABLE_GL_FUNCTION( glColor3dv );
1105 DISABLE_GL_FUNCTION( glColor3f );
1106 DISABLE_GL_FUNCTION( glColor3fv );
1107 DISABLE_GL_FUNCTION( glColor3i );
1108 DISABLE_GL_FUNCTION( glColor3iv );
1109 DISABLE_GL_FUNCTION( glColor3s );
1110 DISABLE_GL_FUNCTION( glColor3sv );
1111 DISABLE_GL_FUNCTION( glColor3ub );
1112 DISABLE_GL_FUNCTION( glColor3ubv );
1113 DISABLE_GL_FUNCTION( glColor3ui );
1114 DISABLE_GL_FUNCTION( glColor3uiv );
1115 DISABLE_GL_FUNCTION( glColor3us );
1116 DISABLE_GL_FUNCTION( glColor3usv );
1117 DISABLE_GL_FUNCTION( glColor4b );
1118 DISABLE_GL_FUNCTION( glColor4bv );
1119 DISABLE_GL_FUNCTION( glColor4d );
1120 DISABLE_GL_FUNCTION( glColor4dv );
1121 DISABLE_GL_FUNCTION( glColor4f );
1122 DISABLE_GL_FUNCTION( glColor4fv );
1123 DISABLE_GL_FUNCTION( glColor4i );
1124 DISABLE_GL_FUNCTION( glColor4iv );
1125 DISABLE_GL_FUNCTION( glColor4s );
1126 DISABLE_GL_FUNCTION( glColor4sv );
1127 DISABLE_GL_FUNCTION( glColor4ub );
1128 DISABLE_GL_FUNCTION( glColor4ubv );
1129 DISABLE_GL_FUNCTION( glColor4ui );
1130 DISABLE_GL_FUNCTION( glColor4uiv );
1131 DISABLE_GL_FUNCTION( glColor4us );
1132 DISABLE_GL_FUNCTION( glColor4usv );
1133 DISABLE_GL_FUNCTION( glColorMask );
1134 DISABLE_GL_FUNCTION( glColorMaterial );
1135 DISABLE_GL_FUNCTION( glColorPointer );
1136 DISABLE_GL_FUNCTION( glCopyPixels );
1137 DISABLE_GL_FUNCTION( glCopyTexImage1D );
1138 DISABLE_GL_FUNCTION( glCopyTexImage2D );
1139 DISABLE_GL_FUNCTION( glCopyTexSubImage1D );
1140 DISABLE_GL_FUNCTION( glCopyTexSubImage2D );
1141 DISABLE_GL_FUNCTION( glCullFace );
1142 DISABLE_GL_FUNCTION( glDeleteLists );
1143 DISABLE_GL_FUNCTION( glDeleteTextures );
1144 DISABLE_GL_FUNCTION( glDepthFunc );
1145 DISABLE_GL_FUNCTION( glDepthMask );
1146 DISABLE_GL_FUNCTION( glDepthRange );
1147 DISABLE_GL_FUNCTION( glDisable );
1148 DISABLE_GL_FUNCTION( glDisableClientState );
1149 DISABLE_GL_FUNCTION( glDrawArrays );
1150 DISABLE_GL_FUNCTION( glDrawBuffer );
1151 DISABLE_GL_FUNCTION( glDrawElements );
1152 DISABLE_GL_FUNCTION( glDrawPixels );
1153 DISABLE_GL_FUNCTION( glEdgeFlag );
1154 DISABLE_GL_FUNCTION( glEdgeFlagPointer );
1155 DISABLE_GL_FUNCTION( glEdgeFlagv );
1156 DISABLE_GL_FUNCTION( glEnable );
1157 DISABLE_GL_FUNCTION( glEnableClientState );
1158 DISABLE_GL_FUNCTION( glEnd );
1159 DISABLE_GL_FUNCTION( glEndList );
1160 DISABLE_GL_FUNCTION( glEvalCoord1d );
1161 DISABLE_GL_FUNCTION( glEvalCoord1dv );
1162 DISABLE_GL_FUNCTION( glEvalCoord1f );
1163 DISABLE_GL_FUNCTION( glEvalCoord1fv );
1164 DISABLE_GL_FUNCTION( glEvalCoord2d );
1165 DISABLE_GL_FUNCTION( glEvalCoord2dv );
1166 DISABLE_GL_FUNCTION( glEvalCoord2f );
1167 DISABLE_GL_FUNCTION( glEvalCoord2fv );
1168 DISABLE_GL_FUNCTION( glEvalMesh1 );
1169 DISABLE_GL_FUNCTION( glEvalMesh2 );
1170 DISABLE_GL_FUNCTION( glEvalPoint1 );
1171 DISABLE_GL_FUNCTION( glEvalPoint2 );
1172 DISABLE_GL_FUNCTION( glFeedbackBuffer );
1173 DISABLE_GL_FUNCTION( glFinish );
1174 DISABLE_GL_FUNCTION( glFlush );
1175 DISABLE_GL_FUNCTION( glFogf );
1176 DISABLE_GL_FUNCTION( glFogfv );
1177 DISABLE_GL_FUNCTION( glFogi );
1178 DISABLE_GL_FUNCTION( glFogiv );
1179 DISABLE_GL_FUNCTION( glFrontFace );
1180 DISABLE_GL_FUNCTION( glFrustum );
1181 DISABLE_GL_FUNCTION( glGenLists );
1182 DISABLE_GL_FUNCTION( glGenTextures );
1183 DISABLE_GL_FUNCTION( glGetBooleanv );
1184 DISABLE_GL_FUNCTION( glGetClipPlane );
1185 DISABLE_GL_FUNCTION( glGetDoublev );
1186 DISABLE_GL_FUNCTION( glGetError );
1187 DISABLE_GL_FUNCTION( glGetFloatv );
1188 DISABLE_GL_FUNCTION( glGetIntegerv );
1189 DISABLE_GL_FUNCTION( glGetLightfv );
1190 DISABLE_GL_FUNCTION( glGetLightiv );
1191 DISABLE_GL_FUNCTION( glGetMapdv );
1192 DISABLE_GL_FUNCTION( glGetMapfv );
1193 DISABLE_GL_FUNCTION( glGetMapiv );
1194 DISABLE_GL_FUNCTION( glGetMaterialfv );
1195 DISABLE_GL_FUNCTION( glGetMaterialiv );
1196 DISABLE_GL_FUNCTION( glGetPixelMapfv );
1197 DISABLE_GL_FUNCTION( glGetPixelMapuiv );
1198 DISABLE_GL_FUNCTION( glGetPixelMapusv );
1199 DISABLE_GL_FUNCTION( glGetPointerv );
1200 DISABLE_GL_FUNCTION( glGetPolygonStipple );
1201 DISABLE_GL_FUNCTION( glGetString );
1202 DISABLE_GL_FUNCTION( glGetTexEnvfv );
1203 DISABLE_GL_FUNCTION( glGetTexEnviv );
1204 DISABLE_GL_FUNCTION( glGetTexGendv );
1205 DISABLE_GL_FUNCTION( glGetTexGenfv );
1206 DISABLE_GL_FUNCTION( glGetTexGeniv );
1207 DISABLE_GL_FUNCTION( glGetTexImage );
1208 DISABLE_GL_FUNCTION( glGetTexLevelParameterfv );
1209 DISABLE_GL_FUNCTION( glGetTexLevelParameteriv );
1210 DISABLE_GL_FUNCTION( glGetTexParameterfv );
1211 DISABLE_GL_FUNCTION( glGetTexParameteriv );
1212 DISABLE_GL_FUNCTION( glHint );
1213 DISABLE_GL_FUNCTION( glIndexMask );
1214 DISABLE_GL_FUNCTION( glIndexPointer );
1215 DISABLE_GL_FUNCTION( glIndexd );
1216 DISABLE_GL_FUNCTION( glIndexdv );
1217 DISABLE_GL_FUNCTION( glIndexf );
1218 DISABLE_GL_FUNCTION( glIndexfv );
1219 DISABLE_GL_FUNCTION( glIndexi );
1220 DISABLE_GL_FUNCTION( glIndexiv );
1221 DISABLE_GL_FUNCTION( glIndexs );
1222 DISABLE_GL_FUNCTION( glIndexsv );
1223 DISABLE_GL_FUNCTION( glIndexub );
1224 DISABLE_GL_FUNCTION( glIndexubv );
1225 DISABLE_GL_FUNCTION( glInitNames );
1226 DISABLE_GL_FUNCTION( glInterleavedArrays );
1227 DISABLE_GL_FUNCTION( glIsEnabled );
1228 DISABLE_GL_FUNCTION( glIsList );
1229 DISABLE_GL_FUNCTION( glIsTexture );
1230 DISABLE_GL_FUNCTION( glLightModelf );
1231 DISABLE_GL_FUNCTION( glLightModelfv );
1232 DISABLE_GL_FUNCTION( glLightModeli );
1233 DISABLE_GL_FUNCTION( glLightModeliv );
1234 DISABLE_GL_FUNCTION( glLightf );
1235 DISABLE_GL_FUNCTION( glLightfv );
1236 DISABLE_GL_FUNCTION( glLighti );
1237 DISABLE_GL_FUNCTION( glLightiv );
1238 DISABLE_GL_FUNCTION( glLineStipple );
1239 DISABLE_GL_FUNCTION( glLineWidth );
1240 DISABLE_GL_FUNCTION( glListBase );
1241 DISABLE_GL_FUNCTION( glLoadIdentity );
1242 DISABLE_GL_FUNCTION( glLoadMatrixd );
1243 DISABLE_GL_FUNCTION( glLoadMatrixf );
1244 DISABLE_GL_FUNCTION( glLoadName );
1245 DISABLE_GL_FUNCTION( glLogicOp );
1246 DISABLE_GL_FUNCTION( glMap1d );
1247 DISABLE_GL_FUNCTION( glMap1f );
1248 DISABLE_GL_FUNCTION( glMap2d );
1249 DISABLE_GL_FUNCTION( glMap2f );
1250 DISABLE_GL_FUNCTION( glMapGrid1d );
1251 DISABLE_GL_FUNCTION( glMapGrid1f );
1252 DISABLE_GL_FUNCTION( glMapGrid2d );
1253 DISABLE_GL_FUNCTION( glMapGrid2f );
1254 DISABLE_GL_FUNCTION( glMaterialf );
1255 DISABLE_GL_FUNCTION( glMaterialfv );
1256 DISABLE_GL_FUNCTION( glMateriali );
1257 DISABLE_GL_FUNCTION( glMaterialiv );
1258 DISABLE_GL_FUNCTION( glMatrixMode );
1259 DISABLE_GL_FUNCTION( glMultMatrixd );
1260 DISABLE_GL_FUNCTION( glMultMatrixf );
1261 DISABLE_GL_FUNCTION( glNewList );
1262 DISABLE_GL_FUNCTION( glNormal3b );
1263 DISABLE_GL_FUNCTION( glNormal3bv );
1264 DISABLE_GL_FUNCTION( glNormal3d );
1265 DISABLE_GL_FUNCTION( glNormal3dv );
1266 DISABLE_GL_FUNCTION( glNormal3f );
1267 DISABLE_GL_FUNCTION( glNormal3fv );
1268 DISABLE_GL_FUNCTION( glNormal3i );
1269 DISABLE_GL_FUNCTION( glNormal3iv );
1270 DISABLE_GL_FUNCTION( glNormal3s );
1271 DISABLE_GL_FUNCTION( glNormal3sv );
1272 DISABLE_GL_FUNCTION( glNormalPointer );
1273 DISABLE_GL_FUNCTION( glOrtho );
1274 DISABLE_GL_FUNCTION( glPassThrough );
1275 DISABLE_GL_FUNCTION( glPixelMapfv );
1276 DISABLE_GL_FUNCTION( glPixelMapuiv );
1277 DISABLE_GL_FUNCTION( glPixelMapusv );
1278 DISABLE_GL_FUNCTION( glPixelStoref );
1279 DISABLE_GL_FUNCTION( glPixelStorei );
1280 DISABLE_GL_FUNCTION( glPixelTransferf );
1281 DISABLE_GL_FUNCTION( glPixelTransferi );
1282 DISABLE_GL_FUNCTION( glPixelZoom );
1283 DISABLE_GL_FUNCTION( glPointSize );
1284 DISABLE_GL_FUNCTION( glPolygonMode );
1285 DISABLE_GL_FUNCTION( glPolygonOffset );
1286 DISABLE_GL_FUNCTION( glPolygonStipple );
1287 DISABLE_GL_FUNCTION( glPopAttrib );
1288 DISABLE_GL_FUNCTION( glPopClientAttrib );
1289 DISABLE_GL_FUNCTION( glPopMatrix );
1290 DISABLE_GL_FUNCTION( glPopName );
1291 DISABLE_GL_FUNCTION( glPrioritizeTextures );
1292 DISABLE_GL_FUNCTION( glPushAttrib );
1293 DISABLE_GL_FUNCTION( glPushClientAttrib );
1294 DISABLE_GL_FUNCTION( glPushMatrix );
1295 DISABLE_GL_FUNCTION( glPushName );
1296 DISABLE_GL_FUNCTION( glRasterPos2d );
1297 DISABLE_GL_FUNCTION( glRasterPos2dv );
1298 DISABLE_GL_FUNCTION( glRasterPos2f );
1299 DISABLE_GL_FUNCTION( glRasterPos2fv );
1300 DISABLE_GL_FUNCTION( glRasterPos2i );
1301 DISABLE_GL_FUNCTION( glRasterPos2iv );
1302 DISABLE_GL_FUNCTION( glRasterPos2s );
1303 DISABLE_GL_FUNCTION( glRasterPos2sv );
1304 DISABLE_GL_FUNCTION( glRasterPos3d );
1305 DISABLE_GL_FUNCTION( glRasterPos3dv );
1306 DISABLE_GL_FUNCTION( glRasterPos3f );
1307 DISABLE_GL_FUNCTION( glRasterPos3fv );
1308 DISABLE_GL_FUNCTION( glRasterPos3i );
1309 DISABLE_GL_FUNCTION( glRasterPos3iv );
1310 DISABLE_GL_FUNCTION( glRasterPos3s );
1311 DISABLE_GL_FUNCTION( glRasterPos3sv );
1312 DISABLE_GL_FUNCTION( glRasterPos4d );
1313 DISABLE_GL_FUNCTION( glRasterPos4dv );
1314 DISABLE_GL_FUNCTION( glRasterPos4f );
1315 DISABLE_GL_FUNCTION( glRasterPos4fv );
1316 DISABLE_GL_FUNCTION( glRasterPos4i );
1317 DISABLE_GL_FUNCTION( glRasterPos4iv );
1318 DISABLE_GL_FUNCTION( glRasterPos4s );
1319 DISABLE_GL_FUNCTION( glRasterPos4sv );
1320 DISABLE_GL_FUNCTION( glReadBuffer );
1321 DISABLE_GL_FUNCTION( glReadPixels );
1322 DISABLE_GL_FUNCTION( glRectd );
1323 DISABLE_GL_FUNCTION( glRectdv );
1324 DISABLE_GL_FUNCTION( glRectf );
1325 DISABLE_GL_FUNCTION( glRectfv );
1326 DISABLE_GL_FUNCTION( glRecti );
1327 DISABLE_GL_FUNCTION( glRectiv );
1328 DISABLE_GL_FUNCTION( glRects );
1329 DISABLE_GL_FUNCTION( glRectsv );
1330 DISABLE_GL_FUNCTION( glRenderMode );
1331 DISABLE_GL_FUNCTION( glRotated );
1332 DISABLE_GL_FUNCTION( glRotatef );
1333 DISABLE_GL_FUNCTION( glScaled );
1334 DISABLE_GL_FUNCTION( glScalef );
1335 DISABLE_GL_FUNCTION( glScissor );
1336 DISABLE_GL_FUNCTION( glSelectBuffer );
1337 DISABLE_GL_FUNCTION( glShadeModel );
1338 DISABLE_GL_FUNCTION( glStencilFunc );
1339 DISABLE_GL_FUNCTION( glStencilMask );
1340 DISABLE_GL_FUNCTION( glStencilOp );
1341 DISABLE_GL_FUNCTION( glTexCoord1d );
1342 DISABLE_GL_FUNCTION( glTexCoord1dv );
1343 DISABLE_GL_FUNCTION( glTexCoord1f );
1344 DISABLE_GL_FUNCTION( glTexCoord1fv );
1345 DISABLE_GL_FUNCTION( glTexCoord1i );
1346 DISABLE_GL_FUNCTION( glTexCoord1iv );
1347 DISABLE_GL_FUNCTION( glTexCoord1s );
1348 DISABLE_GL_FUNCTION( glTexCoord1sv );
1349 DISABLE_GL_FUNCTION( glTexCoord2d );
1350 DISABLE_GL_FUNCTION( glTexCoord2dv );
1351 DISABLE_GL_FUNCTION( glTexCoord2f );
1352 DISABLE_GL_FUNCTION( glTexCoord2fv );
1353 DISABLE_GL_FUNCTION( glTexCoord2i );
1354 DISABLE_GL_FUNCTION( glTexCoord2iv );
1355 DISABLE_GL_FUNCTION( glTexCoord2s );
1356 DISABLE_GL_FUNCTION( glTexCoord2sv );
1357 DISABLE_GL_FUNCTION( glTexCoord3d );
1358 DISABLE_GL_FUNCTION( glTexCoord3dv );
1359 DISABLE_GL_FUNCTION( glTexCoord3f );
1360 DISABLE_GL_FUNCTION( glTexCoord3fv );
1361 DISABLE_GL_FUNCTION( glTexCoord3i );
1362 DISABLE_GL_FUNCTION( glTexCoord3iv );
1363 DISABLE_GL_FUNCTION( glTexCoord3s );
1364 DISABLE_GL_FUNCTION( glTexCoord3sv );
1365 DISABLE_GL_FUNCTION( glTexCoord4d );
1366 DISABLE_GL_FUNCTION( glTexCoord4dv );
1367 DISABLE_GL_FUNCTION( glTexCoord4f );
1368 DISABLE_GL_FUNCTION( glTexCoord4fv );
1369 DISABLE_GL_FUNCTION( glTexCoord4i );
1370 DISABLE_GL_FUNCTION( glTexCoord4iv );
1371 DISABLE_GL_FUNCTION( glTexCoord4s );
1372 DISABLE_GL_FUNCTION( glTexCoord4sv );
1373 DISABLE_GL_FUNCTION( glTexCoordPointer );
1374 DISABLE_GL_FUNCTION( glTexEnvf );
1375 DISABLE_GL_FUNCTION( glTexEnvfv );
1376 DISABLE_GL_FUNCTION( glTexEnvi );
1377 DISABLE_GL_FUNCTION( glTexEnviv );
1378 DISABLE_GL_FUNCTION( glTexGend );
1379 DISABLE_GL_FUNCTION( glTexGendv );
1380 DISABLE_GL_FUNCTION( glTexGenf );
1381 DISABLE_GL_FUNCTION( glTexGenfv );
1382 DISABLE_GL_FUNCTION( glTexGeni );
1383 DISABLE_GL_FUNCTION( glTexGeniv );
1384 DISABLE_GL_FUNCTION( glTexImage1D );
1385 DISABLE_GL_FUNCTION( glTexImage2D );
1386 DISABLE_GL_FUNCTION( glTexParameterf );
1387 DISABLE_GL_FUNCTION( glTexParameterfv );
1388 DISABLE_GL_FUNCTION( glTexParameteri );
1389 DISABLE_GL_FUNCTION( glTexParameteriv );
1390 DISABLE_GL_FUNCTION( glTexSubImage1D );
1391 DISABLE_GL_FUNCTION( glTexSubImage2D );
1392 DISABLE_GL_FUNCTION( glTranslated );
1393 DISABLE_GL_FUNCTION( glTranslatef );
1394 DISABLE_GL_FUNCTION( glVertex2d );
1395 DISABLE_GL_FUNCTION( glVertex2dv );
1396 DISABLE_GL_FUNCTION( glVertex2f );
1397 DISABLE_GL_FUNCTION( glVertex2fv );
1398 DISABLE_GL_FUNCTION( glVertex2i );
1399 DISABLE_GL_FUNCTION( glVertex2iv );
1400 DISABLE_GL_FUNCTION( glVertex2s );
1401 DISABLE_GL_FUNCTION( glVertex2sv );
1402 DISABLE_GL_FUNCTION( glVertex3d );
1403 DISABLE_GL_FUNCTION( glVertex3dv );
1404 DISABLE_GL_FUNCTION( glVertex3f );
1405 DISABLE_GL_FUNCTION( glVertex3fv );
1406 DISABLE_GL_FUNCTION( glVertex3i );
1407 DISABLE_GL_FUNCTION( glVertex3iv );
1408 DISABLE_GL_FUNCTION( glVertex3s );
1409 DISABLE_GL_FUNCTION( glVertex3sv );
1410 DISABLE_GL_FUNCTION( glVertex4d );
1411 DISABLE_GL_FUNCTION( glVertex4dv );
1412 DISABLE_GL_FUNCTION( glVertex4f );
1413 DISABLE_GL_FUNCTION( glVertex4fv );
1414 DISABLE_GL_FUNCTION( glVertex4i );
1415 DISABLE_GL_FUNCTION( glVertex4iv );
1416 DISABLE_GL_FUNCTION( glVertex4s );
1417 DISABLE_GL_FUNCTION( glVertex4sv );
1418 DISABLE_GL_FUNCTION( glVertexPointer );
1419 DISABLE_GL_FUNCTION( glViewport );
1420
1421 DISABLE_GLS_FUNCTION( CopyContext );
1422 DISABLE_GLS_FUNCTION( CreateContext );
1423 DISABLE_GLS_FUNCTION( CreateLayerContext );
1424 DISABLE_GLS_FUNCTION( DeleteContext );
1425 DISABLE_GLS_FUNCTION( DescribeLayerPlane );
1426 DISABLE_GLS_FUNCTION( GetCurrentContext );
1427 DISABLE_GLS_FUNCTION( GetCurrentDC );
1428 DISABLE_GLS_FUNCTION( GetLayerPaletteEntries );
1429 DISABLE_GLS_FUNCTION( GetProcAddress );
1430 DISABLE_GLS_FUNCTION( MakeCurrent );
1431 DISABLE_GLS_FUNCTION( RealizeLayerPalette );
1432 DISABLE_GLS_FUNCTION( SetLayerPaletteEntries );
1433 DISABLE_GLS_FUNCTION( ShareLists );
1434 DISABLE_GLS_FUNCTION( SwapLayerBuffers );
1435 DISABLE_GLS_FUNCTION( UseFontBitmaps );
1436 DISABLE_GLS_FUNCTION( UseFontOutlines );
1437
1438 DISABLE_GLS_FUNCTION( ChoosePixelFormat );
1439 DISABLE_GLS_FUNCTION( DescribePixelFormat );
1440 DISABLE_GLS_FUNCTION( GetPixelFormat );
1441 DISABLE_GLS_FUNCTION( SetPixelFormat );
1442 DISABLE_GLS_FUNCTION( SwapBuffers );
1443
1444 #ifndef GLS_NO_GLU
1445
1446 DISABLE_GLU_FUNCTION( gluBeginCurve );
1447 DISABLE_GLU_FUNCTION( gluBeginPolygon );
1448 DISABLE_GLU_FUNCTION( gluBeginSurface );
1449 DISABLE_GLU_FUNCTION( gluBeginTrim );
1450 DISABLE_GLU_FUNCTION( gluBuild1DMipmaps );
1451 DISABLE_GLU_FUNCTION( gluBuild2DMipmaps );
1452 DISABLE_GLU_FUNCTION( gluCylinder );
1453 DISABLE_GLU_FUNCTION( gluDeleteNurbsRenderer );
1454 DISABLE_GLU_FUNCTION( gluDeleteQuadric );
1455 DISABLE_GLU_FUNCTION( gluDeleteTess );
1456 DISABLE_GLU_FUNCTION( gluDisk );
1457 DISABLE_GLU_FUNCTION( gluEndCurve );
1458 DISABLE_GLU_FUNCTION( gluEndPolygon );
1459 DISABLE_GLU_FUNCTION( gluEndSurface );
1460 DISABLE_GLU_FUNCTION( gluEndTrim );
1461 DISABLE_GLU_FUNCTION( gluErrorString );
1462 DISABLE_GLU_FUNCTION( gluGetNurbsProperty );
1463 DISABLE_GLU_FUNCTION( gluGetString );
1464 DISABLE_GLU_FUNCTION( gluGetTessProperty );
1465 DISABLE_GLU_FUNCTION( gluLoadSamplingMatrices );
1466 DISABLE_GLU_FUNCTION( gluLookAt );
1467 DISABLE_GLU_FUNCTION( gluNewNurbsRenderer );
1468 DISABLE_GLU_FUNCTION( gluNewQuadric );
1469 DISABLE_GLU_FUNCTION( gluNewTess );
1470 DISABLE_GLU_FUNCTION( gluNextContour );
1471 DISABLE_GLU_FUNCTION( gluNurbsCallback );
1472 DISABLE_GLU_FUNCTION( gluNurbsCurve );
1473 DISABLE_GLU_FUNCTION( gluNurbsProperty );
1474 DISABLE_GLU_FUNCTION( gluNurbsSurface );
1475 DISABLE_GLU_FUNCTION( gluOrtho2D );
1476 DISABLE_GLU_FUNCTION( gluPartialDisk );
1477 DISABLE_GLU_FUNCTION( gluPerspective );
1478 DISABLE_GLU_FUNCTION( gluPickMatrix );
1479 DISABLE_GLU_FUNCTION( gluProject );
1480 DISABLE_GLU_FUNCTION( gluPwlCurve );
1481 DISABLE_GLU_FUNCTION( gluQuadricCallback );
1482 DISABLE_GLU_FUNCTION( gluQuadricDrawStyle );
1483 DISABLE_GLU_FUNCTION( gluQuadricNormals );
1484 DISABLE_GLU_FUNCTION( gluQuadricOrientation );
1485 DISABLE_GLU_FUNCTION( gluQuadricTexture );
1486 DISABLE_GLU_FUNCTION( gluScaleImage );
1487 DISABLE_GLU_FUNCTION( gluSphere );
1488 DISABLE_GLU_FUNCTION( gluTessBeginContour );
1489 DISABLE_GLU_FUNCTION( gluTessBeginPolygon );
1490 DISABLE_GLU_FUNCTION( gluTessCallback );
1491 DISABLE_GLU_FUNCTION( gluTessEndContour );
1492 DISABLE_GLU_FUNCTION( gluTessEndPolygon );
1493 DISABLE_GLU_FUNCTION( gluTessNormal );
1494 DISABLE_GLU_FUNCTION( gluTessProperty );
1495 DISABLE_GLU_FUNCTION( gluTessVertex );
1496 DISABLE_GLU_FUNCTION( gluUnProject );
1497
1498 #endif /* GLS_NO_GLU */
1499
1500 #undef DISABLE_GL_FUNCTION
1501 #undef DISABLE_GLS_FUNCTION
1502 #undef DISABLE_GLU_FUNCTION
1503
1504 _glsGLDriverFilePath[0] = 0;
1505 _glsGLUDriverFilePath[0] = 0;
1506 _glsLoadedDriverIndex = GLS_INVALID_DRIVER_INDEX;
1507 }
1508
1509 /*----------------------------------------------------------------------------
1510
1511 internal utility functions
1512
1513 */
1514
_glsGetEnv(char const * pEnv)1515 GLS_STATIC char const *_glsGetEnv( char const *pEnv )
1516 {
1517 return getenv(pEnv);
1518 }
_glsSetEnv(char const * pEnv,char const * pValue)1519 GLS_STATIC void _glsSetEnv( char const *pEnv, char const *pValue )
1520 {
1521 /* it's not terribly important that this succeed */
1522
1523 char aBuffer[256];
1524 int unsigned EnvLength, ValueLength = 0;
1525 assert(pEnv);
1526 EnvLength = (int) strlen(pEnv);
1527 if(pValue)
1528 {
1529 ValueLength = (int) strlen(pValue);
1530 }
1531 if((EnvLength + 1 + ValueLength) < sizeof(aBuffer))
1532 {
1533 sprintf(aBuffer,"%s=%s",pEnv,pValue ? pValue : "");
1534 _putenv(aBuffer);
1535 }
1536 }
1537
_glsGetRegistryDWORD(HKEY Root,char const * pKey,char const * pValue,DWORD Default)1538 GLS_STATIC DWORD _glsGetRegistryDWORD( HKEY Root, char const *pKey,
1539 char const *pValue, DWORD Default )
1540 {
1541 /* it's not terribly important that this succeed */
1542
1543 HKEY Key = (HKEY)INVALID_HANDLE_VALUE;
1544 DWORD Value = Default, SizeOfValue = sizeof(Value);
1545 DWORD Type = REG_DWORD;
1546
1547 if(RegOpenKeyEx(Root,pKey,0,KEY_QUERY_VALUE,&Key) == ERROR_SUCCESS)
1548 {
1549 RegQueryValueEx(Key,pValue,0,&Type,(BYTE*)&Value,&SizeOfValue);
1550 RegCloseKey(Key);
1551 }
1552
1553 return Value;
1554 }
_glsSetRegistryDWORD(HKEY Root,char const * pKey,char const * pValue,DWORD Value)1555 GLS_STATIC void _glsSetRegistryDWORD( HKEY Root, char const *pKey,
1556 char const *pValue, DWORD Value )
1557 {
1558 /* it's not terribly important that this succeed */
1559
1560 HKEY Key = (HKEY)INVALID_HANDLE_VALUE;
1561 DWORD Disposition;
1562
1563 if(RegCreateKeyEx(Root,pKey,0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,0,
1564 &Key,&Disposition) == ERROR_SUCCESS)
1565 {
1566 RegSetValueEx(Key,pValue,0,REG_DWORD,(BYTE*)&Value,sizeof(Value));
1567 RegCloseKey(Key);
1568 }
1569 }
1570
_glsGetDriverFileDate(char const * pDriverFilePath,gls_driver_file_info * pDriverFileInfo)1571 GLS_STATIC BOOL _glsGetDriverFileDate( char const *pDriverFilePath,
1572 gls_driver_file_info *pDriverFileInfo )
1573 {
1574 BOOL ReturnValue = FALSE;
1575 BY_HANDLE_FILE_INFORMATION FileInformation;
1576 HANDLE FileHandle;
1577 assert(pDriverFilePath && pDriverFileInfo);
1578
1579 pDriverFileInfo->DriverFileDateHigh =
1580 pDriverFileInfo->DriverFileDateLow = 0;
1581
1582 FileHandle = CreateFile(pDriverFilePath,GENERIC_READ,
1583 FILE_SHARE_READ,0,OPEN_EXISTING,
1584 FILE_ATTRIBUTE_NORMAL,0);
1585
1586 if(FileHandle != INVALID_HANDLE_VALUE)
1587 {
1588 if(GetFileInformationByHandle(FileHandle,&FileInformation))
1589 {
1590 pDriverFileInfo->DriverFileDateHigh =
1591 FileInformation.ftLastWriteTime.dwHighDateTime;
1592 pDriverFileInfo->DriverFileDateLow =
1593 FileInformation.ftLastWriteTime.dwLowDateTime;
1594
1595 ReturnValue = TRUE;
1596 }
1597 CloseHandle(FileHandle);
1598 }
1599 return ReturnValue;
1600 }
1601
_glsGetVersionString(BYTE const * pVersionInfo,char const * pVersionString,UINT * pStringSize)1602 GLS_STATIC char const *_glsGetVersionString( BYTE const *pVersionInfo,
1603 char const *pVersionString,
1604 UINT *pStringSize )
1605 {
1606 /* we have to try a few different code pages because we don't
1607 know how to read the version strings in the correct language */
1608 /* @todo figure out how to read them correctly */
1609 /* @todo do we want to use the 0000 code page? */
1610
1611 DWORD aCodePages[] = { 1200, 1252 };
1612 #define NUMBER_OF_CODE_PAGES (sizeof(aCodePages)/sizeof(aCodePages[0]))
1613 int CodePageIndex;
1614 BOOL DebugValue;
1615 char *pString = 0;
1616 *pStringSize = 0;
1617
1618 assert(pVersionInfo && pVersionString && pStringSize);
1619
1620 for(CodePageIndex = 0;
1621 (CodePageIndex < NUMBER_OF_CODE_PAGES) && !pString;
1622 CodePageIndex++)
1623 {
1624 char aQueryString[1024];
1625
1626 /* @todo this is not a very maintainable way of doing this */
1627 /* strlen("\StringFileInfo\12341234\") == 25 */
1628 if(sizeof(aQueryString) > (25 + strlen(pVersionString)))
1629 {
1630 sprintf(aQueryString,"\\StringFileInfo\\%04X%04X\\%s",
1631 GetUserDefaultLangID(),aCodePages[CodePageIndex],
1632 pVersionString);
1633
1634 DebugValue = VerQueryValue((BYTE *)pVersionInfo,aQueryString,
1635 (void **)&pString,pStringSize);
1636
1637 assert((DebugValue && pString && *pStringSize)
1638 || (!DebugValue && !pString && !*pStringSize));
1639 }
1640 }
1641 #undef NUMBER_OF_CODE_PAGES
1642
1643 return pString;
1644 }
1645
_glsGetDriverFileVersion(char const * pDriverFilePath,gls_driver_file_info * pDriverFileInfo,char * pDescription,int unsigned DescriptionLength)1646 GLS_STATIC BOOL _glsGetDriverFileVersion( char const *pDriverFilePath,
1647 gls_driver_file_info *pDriverFileInfo,
1648 char *pDescription,
1649 int unsigned DescriptionLength )
1650 {
1651 BOOL ReturnValue = FALSE;
1652 DWORD dummy; /* Windows rules */
1653 DWORD VersionSize;
1654 assert(pDriverFilePath && pDriverFileInfo);
1655 VersionSize = GetFileVersionInfoSize((char *)pDriverFilePath,&dummy);
1656
1657 pDriverFileInfo->DriverFileVersionHigh =
1658 pDriverFileInfo->DriverFileVersionLow = 0;
1659 if(pDescription && DescriptionLength)
1660 {
1661 pDescription[0] = 0;
1662 }
1663
1664 if(VersionSize)
1665 {
1666 BYTE *pTempVersionInfo = (BYTE *)malloc(VersionSize);
1667 if(pTempVersionInfo)
1668 {
1669 if(GetFileVersionInfo((char *)pDriverFilePath,0,VersionSize,
1670 pTempVersionInfo))
1671 {
1672 VS_FIXEDFILEINFO *pTempFixedInfo;
1673 int unsigned FixedInfoLength;
1674
1675 /* first, get the fixed version info */
1676
1677 if((VerQueryValue(pTempVersionInfo,"\\",
1678 (void **)&pTempFixedInfo,
1679 &FixedInfoLength))
1680 && (FixedInfoLength == sizeof(*pTempFixedInfo))
1681 && pTempFixedInfo
1682 && (pTempFixedInfo->dwSignature == 0xFEEF04BD))
1683 {
1684 assert(pTempFixedInfo);
1685
1686 pDriverFileInfo->DriverFileVersionHigh =
1687 pTempFixedInfo->dwFileVersionMS;
1688 pDriverFileInfo->DriverFileVersionLow =
1689 pTempFixedInfo->dwFileVersionLS;
1690
1691 ReturnValue = TRUE;
1692 }
1693
1694 /* now try for the string description, not caring if we fail */
1695
1696 if(pDescription && DescriptionLength)
1697 {
1698 UINT CompanyNameLength, FileDescriptionLength,
1699 ProductNameLength;
1700 char const *pCompanyName, *pFileDescription,
1701 *pProductName;
1702
1703 pCompanyName = _glsGetVersionString(pTempVersionInfo,
1704 "CompanyName",
1705 &CompanyNameLength);
1706
1707 pFileDescription = _glsGetVersionString(pTempVersionInfo,
1708 "FileDescription",
1709 &FileDescriptionLength);
1710
1711 pProductName = _glsGetVersionString(pTempVersionInfo,
1712 "ProductName",
1713 &ProductNameLength);
1714
1715 /* see if the string will fit, including the " - " */
1716 if(DescriptionLength >
1717 (CompanyNameLength + 3 + max(ProductNameLength,
1718 FileDescriptionLength)))
1719 {
1720 /* we're going to create a string something like this:
1721 "CompanyName - FileDescription", but with everything
1722 optional, choosing FileDescription over ProductName */
1723
1724 sprintf(pDescription,"%s%s%s",
1725 (pCompanyName ? pCompanyName : ""),
1726 ((pCompanyName && (pFileDescription ||
1727 pProductName)) ? " - " : ""),
1728 (pFileDescription ? pFileDescription :
1729 (pProductName ? pProductName : "")));
1730 }
1731 }
1732 }
1733 free(pTempVersionInfo);
1734 }
1735 }
1736 return ReturnValue;
1737 }
1738
_glsCopyPathCheckSystemDirectory(char const * pDriverFilePath,gls_driver_file_info * pDriverFileInfo,BOOL * pIsInSystemDir)1739 GLS_STATIC BOOL _glsCopyPathCheckSystemDirectory( char const *pDriverFilePath,
1740 gls_driver_file_info *pDriverFileInfo,
1741 BOOL *pIsInSystemDir )
1742 {
1743 BOOL ReturnValue = FALSE;
1744 char aSystemDir[MAX_PATH];
1745 char *pFilePart;
1746 int PathLength, SystemLength;
1747
1748 assert(pDriverFilePath && pDriverFileInfo);
1749
1750 pDriverFileInfo->aDriverFilePath[0] = 0;
1751 if(pIsInSystemDir)
1752 {
1753 *pIsInSystemDir = FALSE;
1754 }
1755
1756 if(GetFullPathName(pDriverFilePath,sizeof(pDriverFileInfo->aDriverFilePath),
1757 pDriverFileInfo->aDriverFilePath,&pFilePart)
1758 && GetSystemDirectory(aSystemDir,sizeof(aSystemDir)))
1759 {
1760 PathLength = (int) (pFilePart - pDriverFileInfo->aDriverFilePath);
1761 strlwr(pDriverFileInfo->aDriverFilePath);
1762 SystemLength = (int) strlen(aSystemDir);
1763 strlwr(aSystemDir);
1764
1765 /* PathLength is going to include the \, SystemLength is not */
1766 if(pIsInSystemDir && ((PathLength-1) == SystemLength)
1767 && (strstr(pDriverFileInfo->aDriverFilePath,aSystemDir) ==
1768 pDriverFileInfo->aDriverFilePath))
1769 {
1770 *pIsInSystemDir = TRUE;
1771 }
1772 ReturnValue = TRUE;
1773 }
1774 return ReturnValue;
1775 }
1776
_glsIsDefaultOpenGL(char const * pGLDriverFilePath)1777 GLS_STATIC BOOL _glsIsDefaultOpenGL( char const *pGLDriverFilePath )
1778 {
1779 BOOL ReturnValue = FALSE;
1780 char aTempPath[MAX_PATH], aDriverPath[MAX_PATH], aDefaultPath[MAX_PATH];
1781 char *pFilePart;
1782
1783 assert(pGLDriverFilePath);
1784
1785 /* construct default path */
1786
1787 GetSystemDirectory(aTempPath,sizeof(aTempPath));
1788 strcat(aTempPath,"\\opengl32.dll");
1789 GetFullPathName(aTempPath,sizeof(aDefaultPath),aDefaultPath,
1790 &pFilePart);
1791
1792 /* @todo what about .dll, it's optional? */
1793
1794 if(GetFullPathName(pGLDriverFilePath,sizeof(aDriverPath),aDriverPath,
1795 &pFilePart))
1796 {
1797 if(!stricmp(aDriverPath,aDefaultPath))
1798 {
1799 ReturnValue = TRUE;
1800 }
1801 }
1802 return ReturnValue;
1803 }
1804
_glsCompareDirectories(char const * pA,char const * pB)1805 GLS_STATIC BOOL _glsCompareDirectories( char const *pA, char const *pB )
1806 {
1807 BOOL ReturnValue = FALSE;
1808 char aA[MAX_PATH], aB[MAX_PATH];
1809 char *pAFile = 0, *pBFile = 0;
1810
1811 assert(pA && pB);
1812
1813 GetFullPathName(pA,sizeof(aA),aA,&pAFile);
1814 GetFullPathName(pB,sizeof(aB),aB,&pBFile);
1815
1816 if(pAFile)
1817 {
1818 *pAFile = 0;
1819 }
1820 if(pBFile)
1821 {
1822 *pBFile = 0;
1823 }
1824
1825 if(!stricmp(aA,aB))
1826 {
1827 ReturnValue = TRUE;
1828 }
1829 return ReturnValue;
1830 }
1831
1832
1833 /*----------------------------------------------------------------------------
1834 ----------------------------------------------------------------------------
1835 ----------------------------------------------------------------------------
1836
1837 Below are the definitions of the function pointers for the binding library.
1838
1839 */
1840
1841
1842 /*----------------------------------------------------------------------------
1843 ----------------------------------------------------------------------------
1844 ----------------------------------------------------------------------------
1845
1846 First come the wgl function pointers.
1847
1848 The first three functions, ChoosePixelFormat, DescribePixelFormat, and
1849 SetPixelFormat are defined to point to stub functions that will
1850 initialize gls to the default driver by calling glsLoadDriver(0)
1851 first.
1852
1853 */
1854
_glsChoosePixelFormat_default(HDC h,CONST PIXELFORMATDESCRIPTOR * p)1855 GLS_STATIC int WINAPI _glsChoosePixelFormat_default( HDC h, CONST PIXELFORMATDESCRIPTOR *p )
1856 {
1857 if(!_glsGLDriverHandle)
1858 {
1859 glsLoadDriver(0);
1860 }
1861 return glsChoosePixelFormat(h,p);
1862 }
1863 int ( WINAPI * GLS_CONST GLS_SCOPE_NAME( ChoosePixelFormat ))(HDC, CONST PIXELFORMATDESCRIPTOR *) = &_glsChoosePixelFormat_default;
1864
_glsDescribePixelFormat_default(HDC h,int i,UINT u,LPPIXELFORMATDESCRIPTOR p)1865 GLS_STATIC int WINAPI _glsDescribePixelFormat_default(HDC h, int i, UINT u, LPPIXELFORMATDESCRIPTOR p)
1866 {
1867 if(!_glsGLDriverHandle)
1868 {
1869 glsLoadDriver(0);
1870 }
1871 return glsDescribePixelFormat(h,i,u,p);
1872 }
1873 int ( WINAPI * GLS_CONST GLS_SCOPE_NAME( DescribePixelFormat )) (HDC, int, UINT, LPPIXELFORMATDESCRIPTOR) = &_glsDescribePixelFormat_default;
1874
_glsSetPixelFormat_default(HDC h,int i,CONST PIXELFORMATDESCRIPTOR * p)1875 GLS_STATIC BOOL WINAPI _glsSetPixelFormat_default(HDC h, int i, CONST PIXELFORMATDESCRIPTOR *p )
1876 {
1877 if(!_glsGLDriverHandle)
1878 {
1879 glsLoadDriver(0);
1880 }
1881 return glsSetPixelFormat(h,i,p);
1882 }
1883 BOOL ( WINAPI * GLS_CONST GLS_SCOPE_NAME( SetPixelFormat ))(HDC, int, CONST PIXELFORMATDESCRIPTOR *) = &_glsSetPixelFormat_default;
1884
1885 int ( WINAPI * GLS_CONST GLS_SCOPE_NAME( GetPixelFormat ))(HDC) = 0;
1886 BOOL ( WINAPI * GLS_CONST GLS_SCOPE_NAME( SwapBuffers ))(HDC) = 0;
1887
_glsGetCurrentContext_default(VOID)1888 HGLRC WINAPI _glsGetCurrentContext_default(VOID)
1889 {
1890 if(!_glsGLDriverHandle)
1891 {
1892 glsLoadDriver(0);
1893 }
1894 return glsGetCurrentContext();
1895 }
1896 HGLRC ( WINAPI * GLS_CONST GLS_SCOPE_NAME( GetCurrentContext ))(VOID) = _glsGetCurrentContext_default;
1897
1898 BOOL ( WINAPI * GLS_CONST GLS_SCOPE_NAME( CopyContext ))(HGLRC, HGLRC, UINT) = 0;
1899 HGLRC ( WINAPI * GLS_CONST GLS_SCOPE_NAME( CreateContext ))(HDC) = 0;
1900 HGLRC ( WINAPI * GLS_CONST GLS_SCOPE_NAME( CreateLayerContext ))(HDC, int) = 0;
1901 BOOL ( WINAPI * GLS_CONST GLS_SCOPE_NAME( DeleteContext ))(HGLRC) = 0;
1902 HDC ( WINAPI * GLS_CONST GLS_SCOPE_NAME( GetCurrentDC ))(VOID) = 0;
1903 PROC ( WINAPI * GLS_CONST GLS_SCOPE_NAME( GetProcAddress ))(LPCSTR) = 0;
1904 BOOL ( WINAPI * GLS_CONST GLS_SCOPE_NAME( MakeCurrent ))(HDC, HGLRC) = 0;
1905 BOOL ( WINAPI * GLS_CONST GLS_SCOPE_NAME( ShareLists ))(HGLRC, HGLRC) = 0;
1906 BOOL ( WINAPI * GLS_CONST GLS_SCOPE_NAME( UseFontBitmaps ))(HDC, DWORD, DWORD, DWORD) = 0;
1907
1908 BOOL ( WINAPI * GLS_CONST GLS_SCOPE_NAME( UseFontOutlines ))(HDC, DWORD, DWORD, DWORD, FLOAT,
1909 FLOAT, int, LPGLYPHMETRICSFLOAT) = 0;
1910
1911 BOOL ( WINAPI * GLS_CONST GLS_SCOPE_NAME( DescribeLayerPlane ))(HDC, int, int, UINT,
1912 LPLAYERPLANEDESCRIPTOR) = 0;
1913 int ( WINAPI * GLS_CONST GLS_SCOPE_NAME( SetLayerPaletteEntries ))(HDC, int, int, int,
1914 CONST COLORREF *) = 0;
1915 int ( WINAPI * GLS_CONST GLS_SCOPE_NAME( GetLayerPaletteEntries ))(HDC, int, int, int,
1916 COLORREF *) = 0;
1917 BOOL ( WINAPI * GLS_CONST GLS_SCOPE_NAME( RealizeLayerPalette ))(HDC, int, BOOL) = 0;
1918 BOOL ( WINAPI * GLS_CONST GLS_SCOPE_NAME( SwapLayerBuffers ))(HDC, UINT) = 0;
1919
1920 /*----------------------------------------------------------------------------
1921 ----------------------------------------------------------------------------
1922 ----------------------------------------------------------------------------
1923
1924 wgl extension function pointers.
1925
1926 */
1927
1928 int ( WINAPI * GLS_CONST GLS_SCOPE_NAME( SwapIntervalEXT ))( int interval ) = 0;
1929 BOOL ( WINAPI * GLS_CONST GLS_SCOPE_NAME( GetDeviceGammaRamp3DFX ))( HDC, LPVOID ) = 0;
1930 BOOL ( WINAPI * GLS_CONST GLS_SCOPE_NAME( SetDeviceGammaRamp3DFX ))( HDC, LPVOID ) = 0;
1931
1932 /*----------------------------------------------------------------------------
1933 ----------------------------------------------------------------------------
1934 ----------------------------------------------------------------------------
1935
1936 Core OpenGL function pointers.
1937
1938 */
1939
1940 void ( APIENTRY * GLS_CONST glAccum )(GLenum op, GLfloat value) = 0;
1941 void ( APIENTRY * GLS_CONST glAlphaFunc )(GLenum func, GLclampf ref) = 0;
1942 GLboolean ( APIENTRY * GLS_CONST glAreTexturesResident )(GLsizei n, const GLuint *textures, GLboolean *residences) = 0;
1943 void ( APIENTRY * GLS_CONST glArrayElement )(GLint i) = 0;
1944 void ( APIENTRY * GLS_CONST glBegin )(GLenum mode) = 0;
1945 void ( APIENTRY * GLS_CONST glBindTexture )(GLenum target, GLuint texture) = 0;
1946 void ( APIENTRY * GLS_CONST glBitmap )(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap) = 0;
1947 void ( APIENTRY * GLS_CONST glBlendFunc )(GLenum sfactor, GLenum dfactor) = 0;
1948 void ( APIENTRY * GLS_CONST glCallList )(GLuint list) = 0;
1949 void ( APIENTRY * GLS_CONST glCallLists )(GLsizei n, GLenum type, const GLvoid *lists) = 0;
1950 void ( APIENTRY * GLS_CONST glClear )(GLbitfield mask) = 0;
1951 void ( APIENTRY * GLS_CONST glClearAccum )(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) = 0;
1952 void ( APIENTRY * GLS_CONST glClearColor )(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) = 0;
1953 void ( APIENTRY * GLS_CONST glClearDepth )(GLclampd depth) = 0;
1954 void ( APIENTRY * GLS_CONST glClearIndex )(GLfloat c) = 0;
1955 void ( APIENTRY * GLS_CONST glClearStencil )(GLint s) = 0;
1956 void ( APIENTRY * GLS_CONST glClipPlane )(GLenum plane, const GLdouble *equation) = 0;
1957 void ( APIENTRY * GLS_CONST glColor3b )(GLbyte red, GLbyte green, GLbyte blue) = 0;
1958 void ( APIENTRY * GLS_CONST glColor3bv )(const GLbyte *v) = 0;
1959 void ( APIENTRY * GLS_CONST glColor3d )(GLdouble red, GLdouble green, GLdouble blue) = 0;
1960 void ( APIENTRY * GLS_CONST glColor3dv )(const GLdouble *v) = 0;
1961 void ( APIENTRY * GLS_CONST glColor3f )(GLfloat red, GLfloat green, GLfloat blue) = 0;
1962 void ( APIENTRY * GLS_CONST glColor3fv )(const GLfloat *v) = 0;
1963 void ( APIENTRY * GLS_CONST glColor3i )(GLint red, GLint green, GLint blue) = 0;
1964 void ( APIENTRY * GLS_CONST glColor3iv )(const GLint *v) = 0;
1965 void ( APIENTRY * GLS_CONST glColor3s )(GLshort red, GLshort green, GLshort blue) = 0;
1966 void ( APIENTRY * GLS_CONST glColor3sv )(const GLshort *v) = 0;
1967 void ( APIENTRY * GLS_CONST glColor3ub )(GLubyte red, GLubyte green, GLubyte blue) = 0;
1968 void ( APIENTRY * GLS_CONST glColor3ubv )(const GLubyte *v) = 0;
1969 void ( APIENTRY * GLS_CONST glColor3ui )(GLuint red, GLuint green, GLuint blue) = 0;
1970 void ( APIENTRY * GLS_CONST glColor3uiv )(const GLuint *v) = 0;
1971 void ( APIENTRY * GLS_CONST glColor3us )(GLushort red, GLushort green, GLushort blue) = 0;
1972 void ( APIENTRY * GLS_CONST glColor3usv )(const GLushort *v) = 0;
1973 void ( APIENTRY * GLS_CONST glColor4b )(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) = 0;
1974 void ( APIENTRY * GLS_CONST glColor4bv )(const GLbyte *v) = 0;
1975 void ( APIENTRY * GLS_CONST glColor4d )(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) = 0;
1976 void ( APIENTRY * GLS_CONST glColor4dv )(const GLdouble *v) = 0;
1977 void ( APIENTRY * GLS_CONST glColor4f )(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) = 0;
1978 void ( APIENTRY * GLS_CONST glColor4fv )(const GLfloat *v) = 0;
1979 void ( APIENTRY * GLS_CONST glColor4i )(GLint red, GLint green, GLint blue, GLint alpha) = 0;
1980 void ( APIENTRY * GLS_CONST glColor4iv )(const GLint *v) = 0;
1981 void ( APIENTRY * GLS_CONST glColor4s )(GLshort red, GLshort green, GLshort blue, GLshort alpha) = 0;
1982 void ( APIENTRY * GLS_CONST glColor4sv )(const GLshort *v) = 0;
1983 void ( APIENTRY * GLS_CONST glColor4ub )(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) = 0;
1984 void ( APIENTRY * GLS_CONST glColor4ubv )(const GLubyte *v) = 0;
1985 void ( APIENTRY * GLS_CONST glColor4ui )(GLuint red, GLuint green, GLuint blue, GLuint alpha) = 0;
1986 void ( APIENTRY * GLS_CONST glColor4uiv )(const GLuint *v) = 0;
1987 void ( APIENTRY * GLS_CONST glColor4us )(GLushort red, GLushort green, GLushort blue, GLushort alpha) = 0;
1988 void ( APIENTRY * GLS_CONST glColor4usv )(const GLushort *v) = 0;
1989 void ( APIENTRY * GLS_CONST glColorMask )(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) = 0;
1990 void ( APIENTRY * GLS_CONST glColorMaterial )(GLenum face, GLenum mode) = 0;
1991 void ( APIENTRY * GLS_CONST glColorPointer )(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) = 0;
1992 void ( APIENTRY * GLS_CONST glCopyPixels )(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type) = 0;
1993 void ( APIENTRY * GLS_CONST glCopyTexImage1D )(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border) = 0;
1994 void ( APIENTRY * GLS_CONST glCopyTexImage2D )(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) = 0;
1995 void ( APIENTRY * GLS_CONST glCopyTexSubImage1D )(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) = 0;
1996 void ( APIENTRY * GLS_CONST glCopyTexSubImage2D )(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) = 0;
1997 void ( APIENTRY * GLS_CONST glCullFace )(GLenum mode) = 0;
1998 void ( APIENTRY * GLS_CONST glDeleteLists )(GLuint list, GLsizei range) = 0;
1999 void ( APIENTRY * GLS_CONST glDeleteTextures )(GLsizei n, const GLuint *textures) = 0;
2000 void ( APIENTRY * GLS_CONST glDepthFunc )(GLenum func) = 0;
2001 void ( APIENTRY * GLS_CONST glDepthMask )(GLboolean flag) = 0;
2002 void ( APIENTRY * GLS_CONST glDepthRange )(GLclampd zNear, GLclampd zFar) = 0;
2003 void ( APIENTRY * GLS_CONST glDisable )(GLenum cap) = 0;
2004 void ( APIENTRY * GLS_CONST glDisableClientState )(GLenum array) = 0;
2005 void ( APIENTRY * GLS_CONST glDrawArrays )(GLenum mode, GLint first, GLsizei count) = 0;
2006 void ( APIENTRY * GLS_CONST glDrawBuffer )(GLenum mode) = 0;
2007 void ( APIENTRY * GLS_CONST glDrawElements )(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices) = 0;
2008 void ( APIENTRY * GLS_CONST glDrawPixels )(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) = 0;
2009 void ( APIENTRY * GLS_CONST glEdgeFlag )(GLboolean flag) = 0;
2010 void ( APIENTRY * GLS_CONST glEdgeFlagPointer )(GLsizei stride, const GLvoid *pointer) = 0;
2011 void ( APIENTRY * GLS_CONST glEdgeFlagv )(const GLboolean *flag) = 0;
2012 void ( APIENTRY * GLS_CONST glEnable )(GLenum cap) = 0;
2013 void ( APIENTRY * GLS_CONST glEnableClientState )(GLenum array) = 0;
2014 void ( APIENTRY * GLS_CONST glEnd )(void) = 0;
2015 void ( APIENTRY * GLS_CONST glEndList )(void) = 0;
2016 void ( APIENTRY * GLS_CONST glEvalCoord1d )(GLdouble u) = 0;
2017 void ( APIENTRY * GLS_CONST glEvalCoord1dv )(const GLdouble *u) = 0;
2018 void ( APIENTRY * GLS_CONST glEvalCoord1f )(GLfloat u) = 0;
2019 void ( APIENTRY * GLS_CONST glEvalCoord1fv )(const GLfloat *u) = 0;
2020 void ( APIENTRY * GLS_CONST glEvalCoord2d )(GLdouble u, GLdouble v) = 0;
2021 void ( APIENTRY * GLS_CONST glEvalCoord2dv )(const GLdouble *u) = 0;
2022 void ( APIENTRY * GLS_CONST glEvalCoord2f )(GLfloat u, GLfloat v) = 0;
2023 void ( APIENTRY * GLS_CONST glEvalCoord2fv )(const GLfloat *u) = 0;
2024 void ( APIENTRY * GLS_CONST glEvalMesh1 )(GLenum mode, GLint i1, GLint i2) = 0;
2025 void ( APIENTRY * GLS_CONST glEvalMesh2 )(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) = 0;
2026 void ( APIENTRY * GLS_CONST glEvalPoint1 )(GLint i) = 0;
2027 void ( APIENTRY * GLS_CONST glEvalPoint2 )(GLint i, GLint j) = 0;
2028 void ( APIENTRY * GLS_CONST glFeedbackBuffer )(GLsizei size, GLenum type, GLfloat *buffer) = 0;
2029 void ( APIENTRY * GLS_CONST glFinish )(void) = 0;
2030 void ( APIENTRY * GLS_CONST glFlush )(void) = 0;
2031 void ( APIENTRY * GLS_CONST glFogf )(GLenum pname, GLfloat param) = 0;
2032 void ( APIENTRY * GLS_CONST glFogfv )(GLenum pname, const GLfloat *params) = 0;
2033 void ( APIENTRY * GLS_CONST glFogi )(GLenum pname, GLint param) = 0;
2034 void ( APIENTRY * GLS_CONST glFogiv )(GLenum pname, const GLint *params) = 0;
2035 void ( APIENTRY * GLS_CONST glFrontFace )(GLenum mode) = 0;
2036 void ( APIENTRY * GLS_CONST glFrustum )(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) = 0;
2037 GLuint ( APIENTRY * GLS_CONST glGenLists )(GLsizei range) = 0;
2038 void ( APIENTRY * GLS_CONST glGenTextures )(GLsizei n, GLuint *textures) = 0;
2039 void ( APIENTRY * GLS_CONST glGetBooleanv )(GLenum pname, GLboolean *params) = 0;
2040 void ( APIENTRY * GLS_CONST glGetClipPlane )(GLenum plane, GLdouble *equation) = 0;
2041 void ( APIENTRY * GLS_CONST glGetDoublev )(GLenum pname, GLdouble *params) = 0;
2042 GLenum ( APIENTRY * GLS_CONST glGetError )(void) = 0;
2043 void ( APIENTRY * GLS_CONST glGetFloatv )(GLenum pname, GLfloat *params) = 0;
2044 void ( APIENTRY * GLS_CONST glGetIntegerv )(GLenum pname, GLint *params) = 0;
2045 void ( APIENTRY * GLS_CONST glGetLightfv )(GLenum light, GLenum pname, GLfloat *params) = 0;
2046 void ( APIENTRY * GLS_CONST glGetLightiv )(GLenum light, GLenum pname, GLint *params) = 0;
2047 void ( APIENTRY * GLS_CONST glGetMapdv )(GLenum target, GLenum query, GLdouble *v) = 0;
2048 void ( APIENTRY * GLS_CONST glGetMapfv )(GLenum target, GLenum query, GLfloat *v) = 0;
2049 void ( APIENTRY * GLS_CONST glGetMapiv )(GLenum target, GLenum query, GLint *v) = 0;
2050 void ( APIENTRY * GLS_CONST glGetMaterialfv )(GLenum face, GLenum pname, GLfloat *params) = 0;
2051 void ( APIENTRY * GLS_CONST glGetMaterialiv )(GLenum face, GLenum pname, GLint *params) = 0;
2052 void ( APIENTRY * GLS_CONST glGetPixelMapfv )(GLenum map, GLfloat *values) = 0;
2053 void ( APIENTRY * GLS_CONST glGetPixelMapuiv )(GLenum map, GLuint *values) = 0;
2054 void ( APIENTRY * GLS_CONST glGetPixelMapusv )(GLenum map, GLushort *values) = 0;
2055 void ( APIENTRY * GLS_CONST glGetPointerv )(GLenum pname, GLvoid* *params) = 0;
2056 void ( APIENTRY * GLS_CONST glGetPolygonStipple )(GLubyte *mask) = 0;
2057 const GLubyte * const ( APIENTRY * GLS_CONST glGetString )(GLenum name) = 0;
2058 void ( APIENTRY * GLS_CONST glGetTexEnvfv )(GLenum target, GLenum pname, GLfloat *params) = 0;
2059 void ( APIENTRY * GLS_CONST glGetTexEnviv )(GLenum target, GLenum pname, GLint *params) = 0;
2060 void ( APIENTRY * GLS_CONST glGetTexGendv )(GLenum coord, GLenum pname, GLdouble *params) = 0;
2061 void ( APIENTRY * GLS_CONST glGetTexGenfv )(GLenum coord, GLenum pname, GLfloat *params) = 0;
2062 void ( APIENTRY * GLS_CONST glGetTexGeniv )(GLenum coord, GLenum pname, GLint *params) = 0;
2063 void ( APIENTRY * GLS_CONST glGetTexImage )(GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels) = 0;
2064 void ( APIENTRY * GLS_CONST glGetTexLevelParameterfv )(GLenum target, GLint level, GLenum pname, GLfloat *params) = 0;
2065 void ( APIENTRY * GLS_CONST glGetTexLevelParameteriv )(GLenum target, GLint level, GLenum pname, GLint *params) = 0;
2066 void ( APIENTRY * GLS_CONST glGetTexParameterfv )(GLenum target, GLenum pname, GLfloat *params) = 0;
2067 void ( APIENTRY * GLS_CONST glGetTexParameteriv )(GLenum target, GLenum pname, GLint *params) = 0;
2068 void ( APIENTRY * GLS_CONST glHint )(GLenum target, GLenum mode) = 0;
2069 void ( APIENTRY * GLS_CONST glIndexMask )(GLuint mask) = 0;
2070 void ( APIENTRY * GLS_CONST glIndexPointer )(GLenum type, GLsizei stride, const GLvoid *pointer) = 0;
2071 void ( APIENTRY * GLS_CONST glIndexd )(GLdouble c) = 0;
2072 void ( APIENTRY * GLS_CONST glIndexdv )(const GLdouble *c) = 0;
2073 void ( APIENTRY * GLS_CONST glIndexf )(GLfloat c) = 0;
2074 void ( APIENTRY * GLS_CONST glIndexfv )(const GLfloat *c) = 0;
2075 void ( APIENTRY * GLS_CONST glIndexi )(GLint c) = 0;
2076 void ( APIENTRY * GLS_CONST glIndexiv )(const GLint *c) = 0;
2077 void ( APIENTRY * GLS_CONST glIndexs )(GLshort c) = 0;
2078 void ( APIENTRY * GLS_CONST glIndexsv )(const GLshort *c) = 0;
2079 void ( APIENTRY * GLS_CONST glIndexub )(GLubyte c) = 0;
2080 void ( APIENTRY * GLS_CONST glIndexubv )(const GLubyte *c) = 0;
2081 void ( APIENTRY * GLS_CONST glInitNames )(void) = 0;
2082 void ( APIENTRY * GLS_CONST glInterleavedArrays )(GLenum format, GLsizei stride, const GLvoid *pointer) = 0;
2083 GLboolean ( APIENTRY * GLS_CONST glIsEnabled )(GLenum cap) = 0;
2084 GLboolean ( APIENTRY * GLS_CONST glIsList )(GLuint list) = 0;
2085 GLboolean ( APIENTRY * GLS_CONST glIsTexture )(GLuint texture) = 0;
2086 void ( APIENTRY * GLS_CONST glLightModelf )(GLenum pname, GLfloat param) = 0;
2087 void ( APIENTRY * GLS_CONST glLightModelfv )(GLenum pname, const GLfloat *params) = 0;
2088 void ( APIENTRY * GLS_CONST glLightModeli )(GLenum pname, GLint param) = 0;
2089 void ( APIENTRY * GLS_CONST glLightModeliv )(GLenum pname, const GLint *params) = 0;
2090 void ( APIENTRY * GLS_CONST glLightf )(GLenum light, GLenum pname, GLfloat param) = 0;
2091 void ( APIENTRY * GLS_CONST glLightfv )(GLenum light, GLenum pname, const GLfloat *params) = 0;
2092 void ( APIENTRY * GLS_CONST glLighti )(GLenum light, GLenum pname, GLint param) = 0;
2093 void ( APIENTRY * GLS_CONST glLightiv )(GLenum light, GLenum pname, const GLint *params) = 0;
2094 void ( APIENTRY * GLS_CONST glLineStipple )(GLint factor, GLushort pattern) = 0;
2095 void ( APIENTRY * GLS_CONST glLineWidth )(GLfloat width) = 0;
2096 void ( APIENTRY * GLS_CONST glListBase )(GLuint base) = 0;
2097 void ( APIENTRY * GLS_CONST glLoadIdentity )(void) = 0;
2098 void ( APIENTRY * GLS_CONST glLoadMatrixd )(const GLdouble *m) = 0;
2099 void ( APIENTRY * GLS_CONST glLoadMatrixf )(const GLfloat *m) = 0;
2100 void ( APIENTRY * GLS_CONST glLoadName )(GLuint name) = 0;
2101 void ( APIENTRY * GLS_CONST glLogicOp )(GLenum opcode) = 0;
2102 void ( APIENTRY * GLS_CONST glMap1d )(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points) = 0;
2103 void ( APIENTRY * GLS_CONST glMap1f )(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points) = 0;
2104 void ( APIENTRY * GLS_CONST glMap2d )(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points) = 0;
2105 void ( APIENTRY * GLS_CONST glMap2f )(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points) = 0;
2106 void ( APIENTRY * GLS_CONST glMapGrid1d )(GLint un, GLdouble u1, GLdouble u2) = 0;
2107 void ( APIENTRY * GLS_CONST glMapGrid1f )(GLint un, GLfloat u1, GLfloat u2) = 0;
2108 void ( APIENTRY * GLS_CONST glMapGrid2d )(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) = 0;
2109 void ( APIENTRY * GLS_CONST glMapGrid2f )(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) = 0;
2110 void ( APIENTRY * GLS_CONST glMaterialf )(GLenum face, GLenum pname, GLfloat param) = 0;
2111 void ( APIENTRY * GLS_CONST glMaterialfv )(GLenum face, GLenum pname, const GLfloat *params) = 0;
2112 void ( APIENTRY * GLS_CONST glMateriali )(GLenum face, GLenum pname, GLint param) = 0;
2113 void ( APIENTRY * GLS_CONST glMaterialiv )(GLenum face, GLenum pname, const GLint *params) = 0;
2114 void ( APIENTRY * GLS_CONST glMatrixMode )(GLenum mode) = 0;
2115 void ( APIENTRY * GLS_CONST glMultMatrixd )(const GLdouble *m) = 0;
2116 void ( APIENTRY * GLS_CONST glMultMatrixf )(const GLfloat *m) = 0;
2117 void ( APIENTRY * GLS_CONST glNewList )(GLuint list, GLenum mode) = 0;
2118 void ( APIENTRY * GLS_CONST glNormal3b )(GLbyte nx, GLbyte ny, GLbyte nz) = 0;
2119 void ( APIENTRY * GLS_CONST glNormal3bv )(const GLbyte *v) = 0;
2120 void ( APIENTRY * GLS_CONST glNormal3d )(GLdouble nx, GLdouble ny, GLdouble nz) = 0;
2121 void ( APIENTRY * GLS_CONST glNormal3dv )(const GLdouble *v) = 0;
2122 void ( APIENTRY * GLS_CONST glNormal3f )(GLfloat nx, GLfloat ny, GLfloat nz) = 0;
2123 void ( APIENTRY * GLS_CONST glNormal3fv )(const GLfloat *v) = 0;
2124 void ( APIENTRY * GLS_CONST glNormal3i )(GLint nx, GLint ny, GLint nz) = 0;
2125 void ( APIENTRY * GLS_CONST glNormal3iv )(const GLint *v) = 0;
2126 void ( APIENTRY * GLS_CONST glNormal3s )(GLshort nx, GLshort ny, GLshort nz) = 0;
2127 void ( APIENTRY * GLS_CONST glNormal3sv )(const GLshort *v) = 0;
2128 void ( APIENTRY * GLS_CONST glNormalPointer )(GLenum type, GLsizei stride, const GLvoid *pointer) = 0;
2129 void ( APIENTRY * GLS_CONST glOrtho )(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) = 0;
2130 void ( APIENTRY * GLS_CONST glPassThrough )(GLfloat token) = 0;
2131 void ( APIENTRY * GLS_CONST glPixelMapfv )(GLenum map, GLsizei mapsize, const GLfloat *values) = 0;
2132 void ( APIENTRY * GLS_CONST glPixelMapuiv )(GLenum map, GLsizei mapsize, const GLuint *values) = 0;
2133 void ( APIENTRY * GLS_CONST glPixelMapusv )(GLenum map, GLsizei mapsize, const GLushort *values) = 0;
2134 void ( APIENTRY * GLS_CONST glPixelStoref )(GLenum pname, GLfloat param) = 0;
2135 void ( APIENTRY * GLS_CONST glPixelStorei )(GLenum pname, GLint param) = 0;
2136 void ( APIENTRY * GLS_CONST glPixelTransferf )(GLenum pname, GLfloat param) = 0;
2137 void ( APIENTRY * GLS_CONST glPixelTransferi )(GLenum pname, GLint param) = 0;
2138 void ( APIENTRY * GLS_CONST glPixelZoom )(GLfloat xfactor, GLfloat yfactor) = 0;
2139 void ( APIENTRY * GLS_CONST glPointSize )(GLfloat size) = 0;
2140 void ( APIENTRY * GLS_CONST glPolygonMode )(GLenum face, GLenum mode) = 0;
2141 void ( APIENTRY * GLS_CONST glPolygonOffset )(GLfloat factor, GLfloat units) = 0;
2142 void ( APIENTRY * GLS_CONST glPolygonStipple )(const GLubyte *mask) = 0;
2143 void ( APIENTRY * GLS_CONST glPopAttrib )(void) = 0;
2144 void ( APIENTRY * GLS_CONST glPopClientAttrib )(void) = 0;
2145 void ( APIENTRY * GLS_CONST glPopMatrix )(void) = 0;
2146 void ( APIENTRY * GLS_CONST glPopName )(void) = 0;
2147 void ( APIENTRY * GLS_CONST glPrioritizeTextures )(GLsizei n, const GLuint *textures, const GLclampf *priorities) = 0;
2148 void ( APIENTRY * GLS_CONST glPushAttrib )(GLbitfield mask) = 0;
2149 void ( APIENTRY * GLS_CONST glPushClientAttrib )(GLbitfield mask) = 0;
2150 void ( APIENTRY * GLS_CONST glPushMatrix )(void) = 0;
2151 void ( APIENTRY * GLS_CONST glPushName )(GLuint name) = 0;
2152 void ( APIENTRY * GLS_CONST glRasterPos2d )(GLdouble x, GLdouble y) = 0;
2153 void ( APIENTRY * GLS_CONST glRasterPos2dv )(const GLdouble *v) = 0;
2154 void ( APIENTRY * GLS_CONST glRasterPos2f )(GLfloat x, GLfloat y) = 0;
2155 void ( APIENTRY * GLS_CONST glRasterPos2fv )(const GLfloat *v) = 0;
2156 void ( APIENTRY * GLS_CONST glRasterPos2i )(GLint x, GLint y) = 0;
2157 void ( APIENTRY * GLS_CONST glRasterPos2iv )(const GLint *v) = 0;
2158 void ( APIENTRY * GLS_CONST glRasterPos2s )(GLshort x, GLshort y) = 0;
2159 void ( APIENTRY * GLS_CONST glRasterPos2sv )(const GLshort *v) = 0;
2160 void ( APIENTRY * GLS_CONST glRasterPos3d )(GLdouble x, GLdouble y, GLdouble z) = 0;
2161 void ( APIENTRY * GLS_CONST glRasterPos3dv )(const GLdouble *v) = 0;
2162 void ( APIENTRY * GLS_CONST glRasterPos3f )(GLfloat x, GLfloat y, GLfloat z) = 0;
2163 void ( APIENTRY * GLS_CONST glRasterPos3fv )(const GLfloat *v) = 0;
2164 void ( APIENTRY * GLS_CONST glRasterPos3i )(GLint x, GLint y, GLint z) = 0;
2165 void ( APIENTRY * GLS_CONST glRasterPos3iv )(const GLint *v) = 0;
2166 void ( APIENTRY * GLS_CONST glRasterPos3s )(GLshort x, GLshort y, GLshort z) = 0;
2167 void ( APIENTRY * GLS_CONST glRasterPos3sv )(const GLshort *v) = 0;
2168 void ( APIENTRY * GLS_CONST glRasterPos4d )(GLdouble x, GLdouble y, GLdouble z, GLdouble w) = 0;
2169 void ( APIENTRY * GLS_CONST glRasterPos4dv )(const GLdouble *v) = 0;
2170 void ( APIENTRY * GLS_CONST glRasterPos4f )(GLfloat x, GLfloat y, GLfloat z, GLfloat w) = 0;
2171 void ( APIENTRY * GLS_CONST glRasterPos4fv )(const GLfloat *v) = 0;
2172 void ( APIENTRY * GLS_CONST glRasterPos4i )(GLint x, GLint y, GLint z, GLint w) = 0;
2173 void ( APIENTRY * GLS_CONST glRasterPos4iv )(const GLint *v) = 0;
2174 void ( APIENTRY * GLS_CONST glRasterPos4s )(GLshort x, GLshort y, GLshort z, GLshort w) = 0;
2175 void ( APIENTRY * GLS_CONST glRasterPos4sv )(const GLshort *v) = 0;
2176 void ( APIENTRY * GLS_CONST glReadBuffer )(GLenum mode) = 0;
2177 void ( APIENTRY * GLS_CONST glReadPixels )(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels) = 0;
2178 void ( APIENTRY * GLS_CONST glRectd )(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) = 0;
2179 void ( APIENTRY * GLS_CONST glRectdv )(const GLdouble *v1, const GLdouble *v2) = 0;
2180 void ( APIENTRY * GLS_CONST glRectf )(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) = 0;
2181 void ( APIENTRY * GLS_CONST glRectfv )(const GLfloat *v1, const GLfloat *v2) = 0;
2182 void ( APIENTRY * GLS_CONST glRecti )(GLint x1, GLint y1, GLint x2, GLint y2) = 0;
2183 void ( APIENTRY * GLS_CONST glRectiv )(const GLint *v1, const GLint *v2) = 0;
2184 void ( APIENTRY * GLS_CONST glRects )(GLshort x1, GLshort y1, GLshort x2, GLshort y2) = 0;
2185 void ( APIENTRY * GLS_CONST glRectsv )(const GLshort *v1, const GLshort *v2) = 0;
2186 GLint ( APIENTRY * GLS_CONST glRenderMode )(GLenum mode) = 0;
2187 void ( APIENTRY * GLS_CONST glRotated )(GLdouble angle, GLdouble x, GLdouble y, GLdouble z) = 0;
2188 void ( APIENTRY * GLS_CONST glRotatef )(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) = 0;
2189 void ( APIENTRY * GLS_CONST glScaled )(GLdouble x, GLdouble y, GLdouble z) = 0;
2190 void ( APIENTRY * GLS_CONST glScalef )(GLfloat x, GLfloat y, GLfloat z) = 0;
2191 void ( APIENTRY * GLS_CONST glScissor )(GLint x, GLint y, GLsizei width, GLsizei height) = 0;
2192 void ( APIENTRY * GLS_CONST glSelectBuffer )(GLsizei size, GLuint *buffer) = 0;
2193 void ( APIENTRY * GLS_CONST glShadeModel )(GLenum mode) = 0;
2194 void ( APIENTRY * GLS_CONST glStencilFunc )(GLenum func, GLint ref, GLuint mask) = 0;
2195 void ( APIENTRY * GLS_CONST glStencilMask )(GLuint mask) = 0;
2196 void ( APIENTRY * GLS_CONST glStencilOp )(GLenum fail, GLenum zfail, GLenum zpass) = 0;
2197 void ( APIENTRY * GLS_CONST glTexCoord1d )(GLdouble s) = 0;
2198 void ( APIENTRY * GLS_CONST glTexCoord1dv )(const GLdouble *v) = 0;
2199 void ( APIENTRY * GLS_CONST glTexCoord1f )(GLfloat s) = 0;
2200 void ( APIENTRY * GLS_CONST glTexCoord1fv )(const GLfloat *v) = 0;
2201 void ( APIENTRY * GLS_CONST glTexCoord1i )(GLint s) = 0;
2202 void ( APIENTRY * GLS_CONST glTexCoord1iv )(const GLint *v) = 0;
2203 void ( APIENTRY * GLS_CONST glTexCoord1s )(GLshort s) = 0;
2204 void ( APIENTRY * GLS_CONST glTexCoord1sv )(const GLshort *v) = 0;
2205 void ( APIENTRY * GLS_CONST glTexCoord2d )(GLdouble s, GLdouble t) = 0;
2206 void ( APIENTRY * GLS_CONST glTexCoord2dv )(const GLdouble *v) = 0;
2207 void ( APIENTRY * GLS_CONST glTexCoord2f )(GLfloat s, GLfloat t) = 0;
2208 void ( APIENTRY * GLS_CONST glTexCoord2fv )(const GLfloat *v) = 0;
2209 void ( APIENTRY * GLS_CONST glTexCoord2i )(GLint s, GLint t) = 0;
2210 void ( APIENTRY * GLS_CONST glTexCoord2iv )(const GLint *v) = 0;
2211 void ( APIENTRY * GLS_CONST glTexCoord2s )(GLshort s, GLshort t) = 0;
2212 void ( APIENTRY * GLS_CONST glTexCoord2sv )(const GLshort *v) = 0;
2213 void ( APIENTRY * GLS_CONST glTexCoord3d )(GLdouble s, GLdouble t, GLdouble r) = 0;
2214 void ( APIENTRY * GLS_CONST glTexCoord3dv )(const GLdouble *v) = 0;
2215 void ( APIENTRY * GLS_CONST glTexCoord3f )(GLfloat s, GLfloat t, GLfloat r) = 0;
2216 void ( APIENTRY * GLS_CONST glTexCoord3fv )(const GLfloat *v) = 0;
2217 void ( APIENTRY * GLS_CONST glTexCoord3i )(GLint s, GLint t, GLint r) = 0;
2218 void ( APIENTRY * GLS_CONST glTexCoord3iv )(const GLint *v) = 0;
2219 void ( APIENTRY * GLS_CONST glTexCoord3s )(GLshort s, GLshort t, GLshort r) = 0;
2220 void ( APIENTRY * GLS_CONST glTexCoord3sv )(const GLshort *v) = 0;
2221 void ( APIENTRY * GLS_CONST glTexCoord4d )(GLdouble s, GLdouble t, GLdouble r, GLdouble q) = 0;
2222 void ( APIENTRY * GLS_CONST glTexCoord4dv )(const GLdouble *v) = 0;
2223 void ( APIENTRY * GLS_CONST glTexCoord4f )(GLfloat s, GLfloat t, GLfloat r, GLfloat q) = 0;
2224 void ( APIENTRY * GLS_CONST glTexCoord4fv )(const GLfloat *v) = 0;
2225 void ( APIENTRY * GLS_CONST glTexCoord4i )(GLint s, GLint t, GLint r, GLint q) = 0;
2226 void ( APIENTRY * GLS_CONST glTexCoord4iv )(const GLint *v) = 0;
2227 void ( APIENTRY * GLS_CONST glTexCoord4s )(GLshort s, GLshort t, GLshort r, GLshort q) = 0;
2228 void ( APIENTRY * GLS_CONST glTexCoord4sv )(const GLshort *v) = 0;
2229 void ( APIENTRY * GLS_CONST glTexCoordPointer )(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) = 0;
2230 void ( APIENTRY * GLS_CONST glTexEnvf )(GLenum target, GLenum pname, GLfloat param) = 0;
2231 void ( APIENTRY * GLS_CONST glTexEnvfv )(GLenum target, GLenum pname, const GLfloat *params) = 0;
2232 void ( APIENTRY * GLS_CONST glTexEnvi )(GLenum target, GLenum pname, GLint param) = 0;
2233 void ( APIENTRY * GLS_CONST glTexEnviv )(GLenum target, GLenum pname, const GLint *params) = 0;
2234 void ( APIENTRY * GLS_CONST glTexGend )(GLenum coord, GLenum pname, GLdouble param) = 0;
2235 void ( APIENTRY * GLS_CONST glTexGendv )(GLenum coord, GLenum pname, const GLdouble *params) = 0;
2236 void ( APIENTRY * GLS_CONST glTexGenf )(GLenum coord, GLenum pname, GLfloat param) = 0;
2237 void ( APIENTRY * GLS_CONST glTexGenfv )(GLenum coord, GLenum pname, const GLfloat *params) = 0;
2238 void ( APIENTRY * GLS_CONST glTexGeni )(GLenum coord, GLenum pname, GLint param) = 0;
2239 void ( APIENTRY * GLS_CONST glTexGeniv )(GLenum coord, GLenum pname, const GLint *params) = 0;
2240 void ( APIENTRY * GLS_CONST glTexImage1D )(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels) = 0;
2241 void ( APIENTRY * GLS_CONST glTexImage2D )(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) = 0;
2242 void ( APIENTRY * GLS_CONST glTexParameterf )(GLenum target, GLenum pname, GLfloat param) = 0;
2243 void ( APIENTRY * GLS_CONST glTexParameterfv )(GLenum target, GLenum pname, const GLfloat *params) = 0;
2244 void ( APIENTRY * GLS_CONST glTexParameteri )(GLenum target, GLenum pname, GLint param) = 0;
2245 void ( APIENTRY * GLS_CONST glTexParameteriv )(GLenum target, GLenum pname, const GLint *params) = 0;
2246 void ( APIENTRY * GLS_CONST glTexSubImage1D )(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels) = 0;
2247 void ( APIENTRY * GLS_CONST glTexSubImage2D )(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) = 0;
2248 void ( APIENTRY * GLS_CONST glTranslated )(GLdouble x, GLdouble y, GLdouble z) = 0;
2249 void ( APIENTRY * GLS_CONST glTranslatef )(GLfloat x, GLfloat y, GLfloat z) = 0;
2250 void ( APIENTRY * GLS_CONST glVertex2d )(GLdouble x, GLdouble y) = 0;
2251 void ( APIENTRY * GLS_CONST glVertex2dv )(const GLdouble *v) = 0;
2252 void ( APIENTRY * GLS_CONST glVertex2f )(GLfloat x, GLfloat y) = 0;
2253 void ( APIENTRY * GLS_CONST glVertex2fv )(const GLfloat *v) = 0;
2254 void ( APIENTRY * GLS_CONST glVertex2i )(GLint x, GLint y) = 0;
2255 void ( APIENTRY * GLS_CONST glVertex2iv )(const GLint *v) = 0;
2256 void ( APIENTRY * GLS_CONST glVertex2s )(GLshort x, GLshort y) = 0;
2257 void ( APIENTRY * GLS_CONST glVertex2sv )(const GLshort *v) = 0;
2258 void ( APIENTRY * GLS_CONST glVertex3d )(GLdouble x, GLdouble y, GLdouble z) = 0;
2259 void ( APIENTRY * GLS_CONST glVertex3dv )(const GLdouble *v) = 0;
2260 void ( APIENTRY * GLS_CONST glVertex3f )(GLfloat x, GLfloat y, GLfloat z) = 0;
2261 void ( APIENTRY * GLS_CONST glVertex3fv )(const GLfloat *v) = 0;
2262 void ( APIENTRY * GLS_CONST glVertex3i )(GLint x, GLint y, GLint z) = 0;
2263 void ( APIENTRY * GLS_CONST glVertex3iv )(const GLint *v) = 0;
2264 void ( APIENTRY * GLS_CONST glVertex3s )(GLshort x, GLshort y, GLshort z) = 0;
2265 void ( APIENTRY * GLS_CONST glVertex3sv )(const GLshort *v) = 0;
2266 void ( APIENTRY * GLS_CONST glVertex4d )(GLdouble x, GLdouble y, GLdouble z, GLdouble w) = 0;
2267 void ( APIENTRY * GLS_CONST glVertex4dv )(const GLdouble *v) = 0;
2268 void ( APIENTRY * GLS_CONST glVertex4f )(GLfloat x, GLfloat y, GLfloat z, GLfloat w) = 0;
2269 void ( APIENTRY * GLS_CONST glVertex4fv )(const GLfloat *v) = 0;
2270 void ( APIENTRY * GLS_CONST glVertex4i )(GLint x, GLint y, GLint z, GLint w) = 0;
2271 void ( APIENTRY * GLS_CONST glVertex4iv )(const GLint *v) = 0;
2272 void ( APIENTRY * GLS_CONST glVertex4s )(GLshort x, GLshort y, GLshort z, GLshort w) = 0;
2273 void ( APIENTRY * GLS_CONST glVertex4sv )(const GLshort *v) = 0;
2274 void ( APIENTRY * GLS_CONST glVertexPointer )(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) = 0;
2275 void ( APIENTRY * GLS_CONST glViewport )(GLint x, GLint y, GLsizei width, GLsizei height) = 0;
2276
2277 /*----------------------------------------------------------------------------
2278 ----------------------------------------------------------------------------
2279 ----------------------------------------------------------------------------
2280
2281 GLU function pointers.
2282
2283 */
2284
2285 #ifndef GLS_NO_GLU
2286
2287 void ( APIENTRY * GLS_CONST gluBeginCurve ) (GLUnurbs* nurb) = 0;
2288 void ( APIENTRY * GLS_CONST gluBeginPolygon ) (GLUtesselator* tess) = 0;
2289 void ( APIENTRY * GLS_CONST gluBeginSurface ) (GLUnurbs* nurb) = 0;
2290 void ( APIENTRY * GLS_CONST gluBeginTrim ) (GLUnurbs* nurb) = 0;
2291 GLint ( APIENTRY * GLS_CONST gluBuild1DMipmaps ) (GLenum target, GLint component, GLsizei width, GLenum format, GLenum type, const void *data) = 0;
2292 GLint ( APIENTRY * GLS_CONST gluBuild2DMipmaps ) (GLenum target, GLint component, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *data) = 0;
2293 void ( APIENTRY * GLS_CONST gluCylinder ) (GLUquadric* quad, GLdouble base, GLdouble top, GLdouble height, GLint slices, GLint stacks) = 0;
2294 void ( APIENTRY * GLS_CONST gluDeleteNurbsRenderer ) (GLUnurbs* nurb) = 0;
2295 void ( APIENTRY * GLS_CONST gluDeleteQuadric ) (GLUquadric* quad) = 0;
2296 void ( APIENTRY * GLS_CONST gluDeleteTess ) (GLUtesselator* tess) = 0;
2297 void ( APIENTRY * GLS_CONST gluDisk ) (GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops) = 0;
2298 void ( APIENTRY * GLS_CONST gluEndCurve ) (GLUnurbs* nurb) = 0;
2299 void ( APIENTRY * GLS_CONST gluEndPolygon ) (GLUtesselator* tess) = 0;
2300 void ( APIENTRY * GLS_CONST gluEndSurface ) (GLUnurbs* nurb) = 0;
2301 void ( APIENTRY * GLS_CONST gluEndTrim ) (GLUnurbs* nurb) = 0;
2302 const GLubyte * ( APIENTRY * GLS_CONST gluErrorString ) (GLenum error) = 0;
2303 void ( APIENTRY * GLS_CONST gluGetNurbsProperty ) (GLUnurbs* nurb, GLenum property, GLfloat* data) = 0;
2304 const GLubyte * ( APIENTRY * GLS_CONST gluGetString ) (GLenum name) = 0;
2305 void ( APIENTRY * GLS_CONST gluGetTessProperty ) (GLUtesselator* tess, GLenum which, GLdouble* data) = 0;
2306 void ( APIENTRY * GLS_CONST gluLoadSamplingMatrices ) (GLUnurbs* nurb, const GLfloat *model, const GLfloat *perspective, const GLint *view) = 0;
2307 void ( APIENTRY * GLS_CONST gluLookAt ) (GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ) = 0;
2308 GLUnurbs* ( APIENTRY * GLS_CONST gluNewNurbsRenderer ) (void) = 0;
2309 GLUquadric* ( APIENTRY * GLS_CONST gluNewQuadric ) (void) = 0;
2310 GLUtesselator* ( APIENTRY * GLS_CONST gluNewTess ) (void) = 0;
2311 void ( APIENTRY * GLS_CONST gluNextContour ) (GLUtesselator* tess, GLenum type) = 0;
2312 void ( APIENTRY * GLS_CONST gluNurbsCallback ) (GLUnurbs* nurb, GLenum which, GLvoid (CALLBACK *CallBackFunc)()) = 0;
2313 void ( APIENTRY * GLS_CONST gluNurbsCurve ) (GLUnurbs* nurb, GLint knotCount, GLfloat *knots, GLint stride, GLfloat *control, GLint order, GLenum type) = 0;
2314 void ( APIENTRY * GLS_CONST gluNurbsProperty ) (GLUnurbs* nurb, GLenum property, GLfloat value) = 0;
2315 void ( APIENTRY * GLS_CONST gluNurbsSurface ) (GLUnurbs* nurb, GLint sKnotCount, GLfloat* sKnots, GLint tKnotCount, GLfloat* tKnots, GLint sStride, GLint tStride, GLfloat* control, GLint sOrder, GLint tOrder, GLenum type) = 0;
2316 void ( APIENTRY * GLS_CONST gluOrtho2D ) (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top) = 0;
2317 void ( APIENTRY * GLS_CONST gluPartialDisk ) (GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops, GLdouble start, GLdouble sweep) = 0;
2318 void ( APIENTRY * GLS_CONST gluPerspective ) (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar) = 0;
2319 void ( APIENTRY * GLS_CONST gluPickMatrix ) (GLdouble x, GLdouble y, GLdouble delX, GLdouble delY, GLint *viewport) = 0;
2320 GLint ( APIENTRY * GLS_CONST gluProject ) (GLdouble objX, GLdouble objY, GLdouble objZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* winX, GLdouble* winY, GLdouble* winZ) = 0;
2321 void ( APIENTRY * GLS_CONST gluPwlCurve ) (GLUnurbs* nurb, GLint count, GLfloat* data, GLint stride, GLenum type) = 0;
2322 void ( APIENTRY * GLS_CONST gluQuadricCallback ) (GLUquadric* quad, GLenum which, GLvoid (CALLBACK *CallBackFunc)()) = 0;
2323 void ( APIENTRY * GLS_CONST gluQuadricDrawStyle ) (GLUquadric* quad, GLenum draw) = 0;
2324 void ( APIENTRY * GLS_CONST gluQuadricNormals ) (GLUquadric* quad, GLenum normal) = 0;
2325 void ( APIENTRY * GLS_CONST gluQuadricOrientation ) (GLUquadric* quad, GLenum orientation) = 0;
2326 void ( APIENTRY * GLS_CONST gluQuadricTexture ) (GLUquadric* quad, GLboolean texture) = 0;
2327 GLint ( APIENTRY * GLS_CONST gluScaleImage ) (GLenum format, GLsizei wIn, GLsizei hIn, GLenum typeIn, const void *dataIn, GLsizei wOut, GLsizei hOut, GLenum typeOut, GLvoid* dataOut) = 0;
2328 void ( APIENTRY * GLS_CONST gluSphere ) (GLUquadric* quad, GLdouble radius, GLint slices, GLint stacks) = 0;
2329 void ( APIENTRY * GLS_CONST gluTessBeginContour ) (GLUtesselator* tess) = 0;
2330 void ( APIENTRY * GLS_CONST gluTessBeginPolygon ) (GLUtesselator* tess, GLvoid* data) = 0;
2331 void ( APIENTRY * GLS_CONST gluTessCallback ) (GLUtesselator* tess, GLenum which, GLvoid (CALLBACK *CallBackFunc)()) = 0;
2332 void ( APIENTRY * GLS_CONST gluTessEndContour ) (GLUtesselator* tess) = 0;
2333 void ( APIENTRY * GLS_CONST gluTessEndPolygon ) (GLUtesselator* tess) = 0;
2334 void ( APIENTRY * GLS_CONST gluTessNormal ) (GLUtesselator* tess, GLdouble valueX, GLdouble valueY, GLdouble valueZ) = 0;
2335 void ( APIENTRY * GLS_CONST gluTessProperty ) (GLUtesselator* tess, GLenum which, GLdouble data) = 0;
2336 void ( APIENTRY * GLS_CONST gluTessVertex ) (GLUtesselator* tess, GLdouble *location, GLvoid* data) = 0;
2337 GLint ( APIENTRY * GLS_CONST gluUnProject ) (GLdouble winX, GLdouble winY, GLdouble winZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* objX, GLdouble* objY, GLdouble* objZ) = 0;
2338
2339 #endif /* GLS_NO_GLU */
2340
2341 /*----------------------------------------------------------------------------
2342 ----------------------------------------------------------------------------
2343 ----------------------------------------------------------------------------
2344
2345 OpenGL extension pointers.
2346
2347 */
2348
2349
2350