]> git.mxchange.org Git - simgear.git/blob - simgear/scene/sky/clouds3d/extgl.c
Clouds3D crashes because there is no Light
[simgear.git] / simgear / scene / sky / clouds3d / extgl.c
1 /* Copyright (c) 2001-2002 Lev Povalahev
2
3    levp@gmx.net
4   
5    http://www.uni-karlsruhe.de/~uli2/
6
7 */                         
8
9 /* following extensions are supported:
10
11 GL_ARB_imaging
12 GL_ARB_depth_texture
13 GL_ARB_matrix_palette
14 GL_ARB_multisample
15 GL_ARB_multitexture
16 GL_ARB_point_parameters
17 GL_ARB_shadow
18 GL_ARB_shadow_ambient
19 GL_ARB_texture_compression
20 GL_ARB_texture_env_add
21 GL_ARB_texture_env_dot3
22 GL_ARB_texture_env_combine
23 GL_ARB_texture_env_crossbar
24 GL_ARB_texture_border_clamp
25 GL_ARB_texture_cube_map
26 GL_ARB_texture_mirrored_repeat
27 GL_ARB_transpose_matrix
28 GL_ARB_vertex_blend
29 GL_EXT_abgr
30 GL_EXT_compiled_vertex_array
31 GL_EXT_fog_coord
32 GL_EXT_multi_draw_arrays
33 GL_EXT_point_parameters
34 GL_EXT_secondary_color
35 GL_EXT_stencil_wrap
36 GL_EXT_texture_filter_anisotropic
37 GL_EXT_texture_lod_bias
38 GL_EXT_vertex_shader
39 GL_EXT_vertex_weighting
40 GL_ATI_element_array
41 GL_ATI_envmap_bumpmap
42 GL_ATI_fragment_shader
43 GL_ATI_pn_triangles
44 GL_ATI_texture_mirror_once
45 GL_ATI_vertex_array_object;
46 GL_ATI_vertex_streams
47 GL_ATIX_point_sprites
48 GL_ATIX_texture_env_route
49 GL_HP_occlusion_test
50 GL_NV_blend_square
51 GL_NV_copy_depth_to_color
52 GL_NV_depth_clamp
53 GL_NV_evaluators
54 GL_NV_fence
55 GL_NV_fog_distance
56 GL_NV_light_max_exponent
57 GL_NV_occlusion_query
58 GL_NV_packed_depth_stencil
59 GL_NV_point_sprite
60 GL_NV_register_combiners
61 GL_NV_register_combiners2
62 GL_NV_texgen_reflection
63 GL_NV_texture_env_combine4
64 GL_NV_texture_rectangle
65 GL_NV_texture_shader
66 GL_NV_texture_shader2
67 GL_NV_texture_shader3
68 GL_NV_vertex_array_range
69 GL_NV_vertex_array_range2
70 GL_NV_vertex_program
71 GL_NV_vertex_program1_1
72 GL_SGIS_generate_mipmap
73 GL_SGIX_shadow
74 GL_SGIX_depth_texture
75 WGL_ARB_buffer_region
76 WGL_ARB_extensions_string
77 WGL_ARB_pbuffer
78 WGL_ARB_pixel_format
79 WGL_ARB_render_texture 
80 WGL_EXT_extensions_string
81
82 */  
83      
84        
85 #include "extgl.h"
86 #include <stdio.h>
87
88 /* function variables */
89
90 /*-------------------------------------*/
91 /* WGL stuff */
92 /*-------------------------------------*/
93
94 #ifdef WIN32
95
96 /* WGL_EXT_etxension_string */
97
98 wglGetExtensionsStringEXTPROC wglGetExtensionsStringEXT = NULL;
99
100 /* WGL_ARB_buffer_region */
101
102 wglCreateBufferRegionARBPROC wglCreateBufferRegionARB = NULL;
103 wglDeleteBufferRegionARBPROC wglDeleteBufferRegionARB = NULL;
104 wglSaveBufferRegionARBPROC wglSaveBufferRegionARB = NULL;
105 wglRestoreBufferRegionARBPROC wglRestoreBufferRegionARB = NULL;
106
107 /* WGL_ARB_extension_string */
108
109 wglGetExtensionsStringARBPROC wglGetExtensionsStringARB = NULL;
110
111 /* WGL_ARB_pbuffer */
112
113 wglCreatePbufferARBPROC wglCreatePbufferARB = NULL;
114 wglGetPbufferDCARBPROC wglGetPbufferDCARB = NULL;
115 wglReleasePbufferDCARBPROC wglReleasePbufferDCARB = NULL;
116 wglDestroyPbufferARBPROC wglDestroyPbufferARB = NULL;
117 wglQueryPbufferARBPROC wglQueryPbufferARB = NULL;
118
119 /* WGL_ARB_pixel_format */
120
121 wglGetPixelFormatAttribivARBPROC wglGetPixelFormatAttribivARB = NULL;
122 wglGetPixelFormatAttribfvARBPROC wglGetPixelFormatAttribfvARB = NULL;
123 wglChoosePixelFormatARBPROC wglChoosePixelFormatARB = NULL;
124
125 /* WGL_ARB_render_texture */
126
127 wglBindTexImageARBPROC wglBindTexImageARB = NULL;
128 wglReleaseTexImageARBPROC wglReleaseTexImageARB = NULL;
129 wglSetPbufferAttribARBPROC wglSetPbufferAttribARB = NULL;
130
131 /* WGL_EXT_swap_control */
132
133 wglSwapIntervalEXTPROC wglSwapIntervalEXT = NULL;
134 wglGetSwapIntervalEXTPROC wglGetSwapIntervalEXT = NULL;
135
136 /* WGL_ARB_make_current_read */
137
138 wglMakeContextCurrentARBPROC wglMakeContextCurrentARB = NULL;
139 wglGetCurrentReadDCARBPROC wglGetCurrentReadDCARB = NULL;
140
141 /* VAR */
142
143 wglAllocateMemoryNVPROC wglAllocateMemoryNV = NULL;
144 wglFreeMemoryNVPROC wglFreeMemoryNV = NULL;
145
146
147
148 #endif /* WIN32 */
149
150 /*-------------------------------------*/
151 /*---WGL STUFF END---------------------*/
152 /*-------------------------------------*/
153
154 glBlendColorPROC glBlendColor = NULL;
155 glBlendEquationPROC glBlendEquation = NULL;
156 glDrawRangeElementsPROC glDrawRangeElements = NULL;
157 glColorTablePROC glColorTable = NULL;
158 glColorTableParameterfvPROC glColorTableParameterfv = NULL;
159 glColorTableParameterivPROC glColorTableParameteriv = NULL;
160 glCopyColorTablePROC glCopyColorTable = NULL;
161 glGetColorTablePROC glGetColorTable = NULL;
162 glGetColorTableParameterfvPROC glGetColorTableParameterfv = NULL;
163 glGetColorTableParameterivPROC glGetColorTableParameteriv = NULL;
164 glColorSubTablePROC glColorSubTable = NULL;
165 glCopyColorSubTablePROC glCopyColorSubTable = NULL;
166 glConvolutionFilter1DPROC glConvolutionFilter1D = NULL;
167 glConvolutionFilter2DPROC glConvolutionFilter2D = NULL;
168 glConvolutionParameterfPROC glConvolutionParameterf = NULL;
169 glConvolutionParameterfvPROC glConvolutionParameterfv = NULL;
170 glConvolutionParameteriPROC glConvolutionParameteri = NULL;
171 glConvolutionParameterivPROC glConvolutionParameteriv = NULL;
172 glCopyConvolutionFilter1DPROC glCopyConvolutionFilter1D = NULL;
173 glCopyConvolutionFilter2DPROC glCopyConvolutionFilter2D = NULL;
174 glGetConvolutionFilterPROC glGetConvolutionFilter = NULL;
175 glGetConvolutionParameterfvPROC glGetConvolutionParameterfv = NULL;
176 glGetConvolutionParameterivPROC glGetConvolutionParameteriv = NULL;
177 glGetSeparableFilterPROC glGetSeparableFilter = NULL;
178 glSeparableFilter2DPROC glSeparableFilter2D = NULL;
179 glGetHistogramPROC glGetHistogram = NULL;
180 glGetHistogramParameterfvPROC glGetHistogramParameterfv = NULL;
181 glGetHistogramParameterivPROC glGetHistogramParameteriv = NULL;
182 glGetMinmaxPROC glGetMinmax = NULL;
183 glGetMinmaxParameterfvPROC glGetMinmaxParameterfv = NULL;
184 glGetMinmaxParameterivPROC glGetMinmaxParameteriv = NULL;
185 glHistogramPROC glHistogram = NULL;
186 glMinmaxPROC glMinmax = NULL;
187 glResetHistogramPROC glResetHistogram = NULL;
188 glResetMinmaxPROC glResetMinmax = NULL;
189 glTexImage3DPROC glTexImage3D = NULL;
190 glTexSubImage3DPROC glTexSubImage3D = NULL;
191 glCopyTexSubImage3DPROC glCopyTexSubImage3D = NULL;
192
193 /* 1.3 */
194
195 glActiveTexturePROC glActiveTexture = NULL;
196 glClientActiveTexturePROC glClientActiveTexture = NULL;
197 glMultiTexCoord1dPROC glMultiTexCoord1d = NULL;
198 glMultiTexCoord1dvPROC glMultiTexCoord1dv = NULL;
199 glMultiTexCoord1fPROC glMultiTexCoord1f = NULL;
200 glMultiTexCoord1fvPROC glMultiTexCoord1fv = NULL;
201 glMultiTexCoord1iPROC glMultiTexCoord1i = NULL;
202 glMultiTexCoord1ivPROC glMultiTexCoord1iv = NULL;
203 glMultiTexCoord1sPROC glMultiTexCoord1s = NULL;
204 glMultiTexCoord1svPROC glMultiTexCoord1sv = NULL;
205 glMultiTexCoord2dPROC glMultiTexCoord2d = NULL;
206 glMultiTexCoord2dvPROC glMultiTexCoord2dv = NULL;
207 glMultiTexCoord2fPROC glMultiTexCoord2f = NULL;
208 glMultiTexCoord2fvPROC glMultiTexCoord2fv = NULL;
209 glMultiTexCoord2iPROC glMultiTexCoord2i = NULL;
210 glMultiTexCoord2ivPROC glMultiTexCoord2iv = NULL;
211 glMultiTexCoord2sPROC glMultiTexCoord2s = NULL;
212 glMultiTexCoord2svPROC glMultiTexCoord2sv = NULL;
213 glMultiTexCoord3dPROC glMultiTexCoord3d = NULL;
214 glMultiTexCoord3dvPROC glMultiTexCoord3dv = NULL;
215 glMultiTexCoord3fPROC glMultiTexCoord3f = NULL;
216 glMultiTexCoord3fvPROC glMultiTexCoord3fv = NULL;
217 glMultiTexCoord3iPROC glMultiTexCoord3i = NULL;
218 glMultiTexCoord3ivPROC glMultiTexCoord3iv = NULL;
219 glMultiTexCoord3sPROC glMultiTexCoord3s = NULL;
220 glMultiTexCoord3svPROC glMultiTexCoord3sv = NULL;
221 glMultiTexCoord4dPROC glMultiTexCoord4d = NULL;
222 glMultiTexCoord4dvPROC glMultiTexCoord4dv = NULL;
223 glMultiTexCoord4fPROC glMultiTexCoord4f = NULL;
224 glMultiTexCoord4fvPROC glMultiTexCoord4fv = NULL;
225 glMultiTexCoord4iPROC glMultiTexCoord4i = NULL;
226 glMultiTexCoord4ivPROC glMultiTexCoord4iv = NULL;
227 glMultiTexCoord4sPROC glMultiTexCoord4s = NULL;
228 glMultiTexCoord4svPROC glMultiTexCoord4sv = NULL;
229 glLoadTransposeMatrixfPROC glLoadTransposeMatrixf = NULL;
230 glLoadTransposeMatrixdPROC glLoadTransposeMatrixd = NULL;
231 glMultTransposeMatrixfPROC glMultTransposeMatrixf = NULL;
232 glMultTransposeMatrixdPROC glMultTransposeMatrixd = NULL;
233 glCompressedTexImage3DPROC glCompressedTexImage3D = NULL;
234 glCompressedTexImage2DPROC glCompressedTexImage2D = NULL;
235 glCompressedTexImage1DPROC glCompressedTexImage1D = NULL;
236 glCompressedTexSubImage3DPROC glCompressedTexSubImage3D = NULL;
237 glCompressedTexSubImage2DPROC glCompressedTexSubImage2D = NULL;
238 glCompressedTexSubImage1DPROC glCompressedTexSubImage1D = NULL;
239 glGetCompressedTexImagePROC glGetCompressedTexImage = NULL;
240 glSampleCoveragePROC glSampleCoverage = NULL;
241
242 /* ARB_multitexture */
243
244 glActiveTexturePROC glActiveTextureARB = NULL;
245 glClientActiveTexturePROC glClientActiveTextureARB = NULL;
246 glMultiTexCoord1dPROC glMultiTexCoord1dARB = NULL;
247 glMultiTexCoord1dvPROC glMultiTexCoord1dvARB = NULL;
248 glMultiTexCoord1fPROC glMultiTexCoord1fARB = NULL;
249 glMultiTexCoord1fvPROC glMultiTexCoord1fvARB = NULL;
250 glMultiTexCoord1iPROC glMultiTexCoord1iARB = NULL;
251 glMultiTexCoord1ivPROC glMultiTexCoord1ivARB = NULL;
252 glMultiTexCoord1sPROC glMultiTexCoord1sARB = NULL;
253 glMultiTexCoord1svPROC glMultiTexCoord1svARB = NULL;
254 glMultiTexCoord2dPROC glMultiTexCoord2dARB = NULL;
255 glMultiTexCoord2dvPROC glMultiTexCoord2dvARB = NULL;
256 glMultiTexCoord2fPROC glMultiTexCoord2fARB = NULL;
257 glMultiTexCoord2fvPROC glMultiTexCoord2fvARB = NULL;
258 glMultiTexCoord2iPROC glMultiTexCoord2iARB = NULL;
259 glMultiTexCoord2ivPROC glMultiTexCoord2ivARB = NULL;
260 glMultiTexCoord2sPROC glMultiTexCoord2sARB = NULL;
261 glMultiTexCoord2svPROC glMultiTexCoord2svARB = NULL;
262 glMultiTexCoord3dPROC glMultiTexCoord3dARB = NULL;
263 glMultiTexCoord3dvPROC glMultiTexCoord3dvARB = NULL;
264 glMultiTexCoord3fPROC glMultiTexCoord3fARB = NULL;
265 glMultiTexCoord3fvPROC glMultiTexCoord3fvARB = NULL;
266 glMultiTexCoord3iPROC glMultiTexCoord3iARB = NULL;
267 glMultiTexCoord3ivPROC glMultiTexCoord3ivARB = NULL;
268 glMultiTexCoord3sPROC glMultiTexCoord3sARB = NULL;
269 glMultiTexCoord3svPROC glMultiTexCoord3svARB = NULL;
270 glMultiTexCoord4dPROC glMultiTexCoord4dARB = NULL;
271 glMultiTexCoord4dvPROC glMultiTexCoord4dvARB = NULL;
272 glMultiTexCoord4fPROC glMultiTexCoord4fARB = NULL;
273 glMultiTexCoord4fvPROC glMultiTexCoord4fvARB = NULL;
274 glMultiTexCoord4iPROC glMultiTexCoord4iARB = NULL;
275 glMultiTexCoord4ivPROC glMultiTexCoord4ivARB = NULL;
276 glMultiTexCoord4sPROC glMultiTexCoord4sARB = NULL;
277 glMultiTexCoord4svPROC glMultiTexCoord4svARB = NULL;
278
279 /* ARB_transpose_matrix */
280
281 glLoadTransposeMatrixfPROC glLoadTransposeMatrixfARB = NULL;
282 glLoadTransposeMatrixdPROC glLoadTransposeMatrixdARB = NULL;
283 glMultTransposeMatrixfPROC glMultTransposeMatrixfARB = NULL;
284 glMultTransposeMatrixdPROC glMultTransposeMatrixdARB = NULL;
285
286 /* ARB_texture_compression */
287
288 glCompressedTexImage3DPROC glCompressedTexImage3DARB = NULL;
289 glCompressedTexImage2DPROC glCompressedTexImage2DARB = NULL;
290 glCompressedTexImage1DPROC glCompressedTexImage1DARB = NULL; 
291 glCompressedTexSubImage3DPROC glCompressedTexSubImage3DARB = NULL;
292 glCompressedTexSubImage2DPROC glCompressedTexSubImage2DARB = NULL;
293 glCompressedTexSubImage1DPROC glCompressedTexSubImage1DARB = NULL;
294 glGetCompressedTexImagePROC glGetCompressedTexImageARB = NULL;
295
296 glSecondaryColor3bEXTPROC glSecondaryColor3bEXT = NULL;
297 glSecondaryColor3bvEXTPROC glSecondaryColor3bvEXT = NULL;
298 glSecondaryColor3dEXTPROC glSecondaryColor3dEXT = NULL;
299 glSecondaryColor3dvEXTPROC glSecondaryColor3dvEXT = NULL;
300 glSecondaryColor3fEXTPROC glSecondaryColor3fEXT = NULL;
301 glSecondaryColor3fvEXTPROC glSecondaryColor3fvEXT = NULL;
302 glSecondaryColor3iEXTPROC glSecondaryColor3iEXT = NULL;
303 glSecondaryColor3ivEXTPROC glSecondaryColor3ivEXT = NULL;
304 glSecondaryColor3sEXTPROC glSecondaryColor3sEXT = NULL;
305 glSecondaryColor3svEXTPROC glSecondaryColor3svEXT = NULL;
306 glSecondaryColor3ubEXTPROC glSecondaryColor3ubEXT = NULL;
307 glSecondaryColor3ubvEXTPROC glSecondaryColor3ubvEXT = NULL;
308 glSecondaryColor3uiEXTPROC glSecondaryColor3uiEXT = NULL;
309 glSecondaryColor3uivEXTPROC glSecondaryColor3uivEXT = NULL;
310 glSecondaryColor3usEXTPROC glSecondaryColor3usEXT = NULL;
311 glSecondaryColor3usvEXTPROC glSecondaryColor3usvEXT = NULL;
312 glSecondaryColorPointerEXTPROC glSecondaryColorPointerEXT = NULL;
313
314 /* ETX_compiled_vertex_array */
315
316 glLockArraysEXTPROC glLockArraysEXT = NULL;
317 glUnlockArraysEXTPROC glUnlockArraysEXT = NULL;
318
319
320 /* EXT_fog_color */
321
322 glFogCoordfEXTPROC glFogCoordfEXT = NULL;
323 glFogCoordfvEXTPROC glFogCoordfvEXT = NULL;
324 glFogCoorddEXTPROC glFogCoorddEXT = NULL;
325 glFogCoorddvEXTPROC glFogCoorddvEXT = NULL;
326 glFogCoordPointerEXTPROC glFogCoordPointerEXT = NULL;
327
328 /* NV_vertex_array_range */
329
330 glFlushVertexArrayRangeNVPROC glFlushVertexArrayRangeNV = NULL;
331 glVertexArrayRangeNVPROC glVertexArrayRangeNV = NULL;
332
333 /* EXT_point_parameters */
334
335 glPointParameterfEXTPROC glPointParameterfEXT = NULL;
336 glPointParameterfvEXTPROC glPointParameterfvEXT = NULL;
337
338 /* NV_register_combiners */
339
340 glCombinerParameterfvNVPROC glCombinerParameterfvNV = NULL;
341 glCombinerParameterfNVPROC  glCombinerParameterfNV = NULL;
342 glCombinerParameterivNVPROC glCombinerParameterivNV = NULL;
343 glCombinerParameteriNVPROC glCombinerParameteriNV = NULL;
344 glCombinerInputNVPROC glCombinerInputNV = NULL;
345 glCombinerOutputNVPROC glCombinerOutputNV = NULL;
346 glFinalCombinerInputNVPROC glFinalCombinerInputNV = NULL;
347 glGetCombinerInputParameterfvNVPROC glGetCombinerInputParameterfvNV = NULL;
348 glGetCombinerInputParameterivNVPROC glGetCombinerInputParameterivNV = NULL;
349 glGetCombinerOutputParameterfvNVPROC glGetCombinerOutputParameterfvNV = NULL;
350 glGetCombinerOutputParameterivNVPROC glGetCombinerOutputParameterivNV = NULL;
351 glGetFinalCombinerInputParameterfvNVPROC glGetFinalCombinerInputParameterfvNV = NULL;
352 glGetFinalCombinerInputParameterivNVPROC glGetFinalCombinerInputParameterivNV = NULL;
353
354 /* ARB_multisample */
355
356 glSampleCoveragePROC glSampleCoverageARB = NULL;
357
358 /* EXT_vertex_weighting */
359
360 glVertexWeightfEXTPROC glVertexWeightfEXT = NULL;
361 glVertexWeightfvEXTPROC glVertexWeightfvEXT = NULL;
362 glVertexWeightPointerEXTPROC glVertexWeightPointerEXT = NULL;
363
364 /* NV_vertex_program */
365
366 glBindProgramNVPROC glBindProgramNV = NULL;
367 glDeleteProgramsNVPROC glDeleteProgramsNV = NULL;
368 glExecuteProgramNVPROC glExecuteProgramNV = NULL;
369 glGenProgramsNVPROC glGenProgramsNV = NULL;
370 glAreProgramsResidentNVPROC glAreProgramsResidentNV = NULL;
371 glRequestResidentProgramsNVPROC glRequestResidentProgramsNV = NULL;
372 glGetProgramParameterfvNVPROC glGetProgramParameterfvNV = NULL;
373 glGetProgramParameterdvNVPROC glGetProgramParameterdvNV = NULL;
374 glGetProgramivNVPROC glGetProgramivNV = NULL;
375 glGetProgramStringNVPROC glGetProgramStringNV = NULL;
376 glGetTrackMatrixivNVPROC glGetTrackMatrixivNV = NULL;
377 glGetVertexAttribdvNVPROC glGetVertexAttribdvNV = NULL;
378 glGetVertexAttribfvNVPROC glGetVertexAttribfvNV = NULL;
379 glGetVertexAttribivNVPROC glGetVertexAttribivNV = NULL;
380 glGetVertexAttribPointervNVPROC glGetVertexAttribPointervNV = NULL;
381 glIsProgramNVPROC glIsProgramNV = NULL;
382 glLoadProgramNVPROC glLoadProgramNV = NULL;
383 glProgramParameter4fNVPROC glProgramParameter4fNV = NULL;
384 glProgramParameter4dNVPROC glProgramParameter4dNV = NULL;
385 glProgramParameter4dvNVPROC glProgramParameter4dvNV = NULL;
386 glProgramParameter4fvNVPROC glProgramParameter4fvNV = NULL;
387 glProgramParameters4dvNVPROC glProgramParameters4dvNV = NULL;
388 glProgramParameters4fvNVPROC glProgramParameters4fvNV = NULL;
389 glTrackMatrixNVPROC glTrackMatrixNV = NULL;
390 glVertexAttribPointerNVPROC glVertexAttribPointerNV = NULL;
391 glVertexAttrib1sNVPROC glVertexAttrib1sNV = NULL;
392 glVertexAttrib1fNVPROC glVertexAttrib1fNV = NULL;
393 glVertexAttrib1dNVPROC glVertexAttrib1dNV = NULL;
394 glVertexAttrib2sNVPROC glVertexAttrib2sNV = NULL;
395 glVertexAttrib2fNVPROC glVertexAttrib2fNV = NULL;
396 glVertexAttrib2dNVPROC glVertexAttrib2dNV = NULL;
397 glVertexAttrib3sNVPROC glVertexAttrib3sNV = NULL;
398 glVertexAttrib3fNVPROC glVertexAttrib3fNV = NULL;
399 glVertexAttrib3dNVPROC glVertexAttrib3dNV = NULL;
400 glVertexAttrib4sNVPROC glVertexAttrib4sNV = NULL;
401 glVertexAttrib4fNVPROC glVertexAttrib4fNV = NULL;
402 glVertexAttrib4dNVPROC glVertexAttrib4dNV = NULL;
403 glVertexAttrib4ubNVPROC glVertexAttrib4ubNV = NULL;
404 glVertexAttrib1svNVPROC glVertexAttrib1svNV = NULL;
405 glVertexAttrib1fvNVPROC glVertexAttrib1fvNV = NULL;
406 glVertexAttrib1dvNVPROC glVertexAttrib1dvNV = NULL;
407 glVertexAttrib2svNVPROC glVertexAttrib2svNV = NULL;
408 glVertexAttrib2fvNVPROC glVertexAttrib2fvNV = NULL;
409 glVertexAttrib2dvNVPROC glVertexAttrib2dvNV = NULL;
410 glVertexAttrib3svNVPROC glVertexAttrib3svNV = NULL;
411 glVertexAttrib3fvNVPROC glVertexAttrib3fvNV = NULL;
412 glVertexAttrib3dvNVPROC glVertexAttrib3dvNV = NULL;
413 glVertexAttrib4svNVPROC glVertexAttrib4svNV = NULL;
414 glVertexAttrib4fvNVPROC glVertexAttrib4fvNV = NULL;
415 glVertexAttrib4dvNVPROC glVertexAttrib4dvNV = NULL;
416 glVertexAttrib4ubvNVPROC glVertexAttrib4ubvNV = NULL;
417 glVertexAttribs1svNVPROC glVertexAttribs1svNV = NULL;
418 glVertexAttribs1fvNVPROC glVertexAttribs1fvNV = NULL;
419 glVertexAttribs1dvNVPROC glVertexAttribs1dvNV = NULL;
420 glVertexAttribs2svNVPROC glVertexAttribs2svNV = NULL;
421 glVertexAttribs2fvNVPROC glVertexAttribs2fvNV = NULL;
422 glVertexAttribs2dvNVPROC glVertexAttribs2dvNV = NULL;
423 glVertexAttribs3svNVPROC glVertexAttribs3svNV = NULL;
424 glVertexAttribs3fvNVPROC glVertexAttribs3fvNV = NULL;
425 glVertexAttribs3dvNVPROC glVertexAttribs3dvNV = NULL;
426 glVertexAttribs4svNVPROC glVertexAttribs4svNV = NULL;
427 glVertexAttribs4fvNVPROC glVertexAttribs4fvNV = NULL;
428 glVertexAttribs4dvNVPROC glVertexAttribs4dvNV = NULL;
429 glVertexAttribs4ubvNVPROC glVertexAttribs4ubvNV = NULL;
430
431 /* NV_fence */
432
433 glGenFencesNVPROC glGenFencesNV = NULL;
434 glDeleteFencesNVPROC glDeleteFencesNV = NULL;
435 glSetFenceNVPROC glSetFenceNV = NULL;
436 glTestFenceNVPROC glTestFenceNV = NULL;
437 glFinishFenceNVPROC glFinishFenceNV = NULL;
438 glIsFenceNVPROC glIsFenceNV = NULL;
439 glGetFenceivNVPROC glGetFenceivNV = NULL;
440
441 /* NV_register_combiners2 */
442
443 glCombinerStageParameterfvNVPROC glCombinerStageParameterfvNV = NULL;
444 glGetCombinerStageParameterfvNVPROC glGetCombinerStageParameterfvNV = NULL;
445
446 /* NV_evaluators */
447
448 glMapControlPointsNVPROC glMapControlPointsNV = NULL;
449 glMapParameterivNVPROC glMapParameterivNV = NULL;
450 glMapParameterfvNVPROC glMapParameterfvNV = NULL;
451 glGetMapControlPointsNVPROC glGetMapControlPointsNV = NULL;
452 glGetMapParameterivNVPROC glGetMapParameterivNV = NULL;
453 glGetMapParameterfvNVPROC glGetMapParameterfvNV = NULL;
454 glGetMapAttribParameterivNVPROC glGetMapAttribParameterivNV = NULL;
455 glGetMapAttribParameterfvNVPROC glGetMapAttribParameterfvNV = NULL;
456 glEvalMapsNVPROC glEvalMapsNV = NULL;
457
458 /* ATI_pn_triangles */
459
460 glPNTrianglesiATIPROC glPNTrianglesiATI = NULL;
461 glPNTrianglesfATIPROC glPNTrianglesfATI = NULL;
462
463 /* ARB_point_parameters */
464
465 glPointParameterfARBPROC glPointParameterfARB = NULL;
466 glPointParameterfvARBPROC glPointParameterfvARB = NULL;
467
468 /* ARB_vertex_blend */
469
470 glWeightbvARBPROC glWeightbvARB = NULL;
471 glWeightsvARBPROC glWeightsvARB = NULL;
472 glWeightivARBPROC glWeightivARB = NULL;
473 glWeightfvARBPROC glWeightfvARB = NULL;
474 glWeightdvARBPROC glWeightdvARB = NULL;
475 glWeightubvARBPROC glWeightubvARB = NULL;
476 glWeightusvARBPROC glWeightusvARB = NULL;
477 glWeightuivARBPROC glWeightuivARB = NULL;
478 glWeightPointerARBPROC glWeightPointerARB = NULL;
479 glVertexBlendARBPROC glVertexBlendARB = NULL;
480
481 /* EXT_multi_draw_arrays */
482
483 glMultiDrawArraysEXTPROC glMultiDrawArraysEXT = NULL;
484 glMultiDrawElementsEXTPROC glMultiDrawElementsEXT = NULL;
485
486 /* ARB_matrix_palette */
487
488 glCurrentPaletteMatrixARBPROC glCurrentPaletteMatrixARB = NULL;
489 glMatrixIndexubvARBPROC glMatrixIndexubvARB = NULL;
490 glMatrixIndexusvARBPROC glMatrixIndexusvARB = NULL;
491 glMatrixIndexuivARBPROC glMatrixIndexuivARB = NULL;
492 glMatrixIndexPointerARBPROC glMatrixIndexPointerARB = NULL;
493
494 /* EXT_vertex_shader */
495
496 glBeginVertexShaderEXTPROC glBeginVertexShaderEXT = NULL;
497 glEndVertexShaderEXTPROC glEndVertexShaderEXT = NULL;
498 glBindVertexShaderEXTPROC glBindVertexShaderEXT = NULL;
499 glGenVertexShadersEXTPROC glGenVertexShadersEXT = NULL;
500 glDeleteVertexShaderEXTPROC glDeleteVertexShaderEXT = NULL;
501 glShaderOp1EXTPROC glShaderOp1EXT = NULL;
502 glShaderOp2EXTPROC glShaderOp2EXT = NULL;
503 glShaderOp3EXTPROC glShaderOp3EXT = NULL;
504 glSwizzleEXTPROC glSwizzleEXT = NULL;
505 glWriteMaskEXTPROC glWriteMaskEXT = NULL;
506 glInsertComponentEXTPROC glInsertComponentEXT = NULL;
507 glExtractComponentEXTPROC glExtractComponentEXT = NULL;
508 glGenSymbolsEXTPROC glGenSymbolsEXT = NULL;
509 glSetInvariantEXTPROC glSetInvariantEXT = NULL;
510 glSetLocalConstantEXTPROC glSetLocalConstantEXT = NULL;
511 glVariantbvEXTPROC glVariantbvEXT = NULL;
512 glVariantsvEXTPROC glVariantsvEXT = NULL;
513 glVariantivEXTPROC glVariantivEXT = NULL;
514 glVariantfvEXTPROC glVariantfvEXT = NULL;
515 glVariantdvEXTPROC glVariantdvEXT = NULL;
516 glVariantubvEXTPROC glVariantubvEXT = NULL;
517 glVariantusvEXTPROC glVariantusvEXT = NULL;
518 glVariantuivEXTPROC glVariantuivEXT = NULL;
519 glVariantPointerEXTPROC glVariantPointerEXT = NULL;
520 glEnableVariantClientStateEXTPROC glEnableVariantClientStateEXT = NULL;
521 glDisableVariantClientStateEXTPROC glDisableVariantClientStateEXT = NULL;
522 glBindLightParameterEXTPROC glBindLightParameterEXT = NULL;
523 glBindMaterialParameterEXTPROC glBindMaterialParameterEXT = NULL;
524 glBindTexGenParameterEXTPROC glBindTexGenParameterEXT = NULL;
525 glBindTextureUnitParameterEXTPROC glBindTextureUnitParameterEXT = NULL;
526 glBindParameterEXTPROC glBindParameterEXT = NULL;
527 glIsVariantEnabledEXTPROC glIsVariantEnabledEXT = NULL;
528 glGetVariantBooleanvEXTPROC glGetVariantBooleanvEXT = NULL;
529 glGetVariantIntegervEXTPROC glGetVariantIntegervEXT = NULL;
530 glGetVariantFloatvEXTPROC glGetVariantFloatvEXT = NULL;
531 glGetVariantPointervEXTPROC glGetVariantPointervEXT = NULL;
532 glGetInvariantBooleanvEXTPROC glGetInvariantBooleanvEXT = NULL;
533 glGetInvariantIntegervEXTPROC glGetInvariantIntegervEXT = NULL;
534 glGetInvariantFloatvEXTPROC glGetInvariantFloatvEXT = NULL;
535 glGetLocalConstantBooleanvEXTPROC glGetLocalConstantBooleanvEXT = NULL;
536 glGetLocalConstantIntegervEXTPROC glGetLocalConstantIntegervEXT = NULL;
537 glGetLocalConstantFloatvEXTPROC glGetLocalConstantFloatvEXT = NULL;
538
539 /* ATI_envmap_bumpmap */
540
541 glTexBumpParameterivATIPROC glTexBumpParameterivATI = NULL;
542 glTexBumpParameterfvATIPROC glTexBumpParameterfvATI = NULL;
543 glGetTexBumpParameterivATIPROC glGetTexBumpParameterivATI = NULL;
544 glGetTexBumpParameterfvATIPROC glGetTexBumpParameterfvATI = NULL;
545
546 /* ATI_fragment_shader */
547
548 glGenFragmentShadersATIPROC glGenFragmentShadersATI = NULL;
549 glBindFragmentShaderATIPROC glBindFragmentShaderATI = NULL;
550 glDeleteFragmentShaderATIPROC glDeleteFragmentShaderATI = NULL;
551 glBeginFragmentShaderATIPROC glBeginFragmentShaderATI = NULL;
552 glEndFragmentShaderATIPROC glEndFragmentShaderATI = NULL;
553 glPassTexCoordATIPROC glPassTexCoordATI = NULL;
554 glSampleMapATIPROC glSampleMapATI = NULL;
555 glColorFragmentOp1ATIPROC glColorFragmentOp1ATI = NULL;
556 glColorFragmentOp2ATIPROC glColorFragmentOp2ATI = NULL;
557 glColorFragmentOp3ATIPROC glColorFragmentOp3ATI = NULL;
558 glAlphaFragmentOp1ATIPROC glAlphaFragmentOp1ATI = NULL;
559 glAlphaFragmentOp2ATIPROC glAlphaFragmentOp2ATI = NULL;
560 glAlphaFragmentOp3ATIPROC glAlphaFragmentOp3ATI = NULL;
561 glSetFragmentShaderConstantATIPROC glSetFragmentShaderConstantATI = NULL;
562
563 /* ATI_element_array */
564
565 glElementPointerATIPROC glElementPointerATI = NULL;
566 glDrawElementArrayATIPROC glDrawElementArrayATI = NULL;
567 glDrawRangeElementArrayATIPROC glDrawRangeElementArrayATI = NULL;
568
569 /* ATI_vertex_streams */
570
571 glClientActiveVertexStreamATIPROC glClientActiveVertexStreamATI = NULL;
572 glVertexBlendEnviATIPROC glVertexBlendEnviATI = NULL;
573 glVertexBlendEnvfATIPROC glVertexBlendEnvfATI = NULL;
574 glVertexStream2sATIPROC glVertexStream2sATI = NULL;
575 glVertexStream2svATIPROC glVertexStream2svATI = NULL;
576 glVertexStream2iATIPROC glVertexStream2iATI = NULL;
577 glVertexStream2ivATIPROC glVertexStream2ivATI = NULL;
578 glVertexStream2fATIPROC glVertexStream2fATI = NULL;
579 glVertexStream2fvATIPROC glVertexStream2fvATI = NULL;
580 glVertexStream2dATIPROC glVertexStream2dATI = NULL;
581 glVertexStream2dvATIPROC glVertexStream2dvATI = NULL;
582 glVertexStream3sATIPROC glVertexStream3sATI = NULL;
583 glVertexStream3svATIPROC glVertexStream3svATI = NULL;
584 glVertexStream3iATIPROC glVertexStream3iATI = NULL;
585 glVertexStream3ivATIPROC glVertexStream3ivATI = NULL;
586 glVertexStream3fATIPROC glVertexStream3fATI = NULL;
587 glVertexStream3fvATIPROC glVertexStream3fvATI = NULL;
588 glVertexStream3dATIPROC glVertexStream3dATI = NULL;
589 glVertexStream3dvATIPROC glVertexStream3dvATI = NULL;
590 glVertexStream4sATIPROC glVertexStream4sATI = NULL;
591 glVertexStream4svATIPROC glVertexStream4svATI = NULL;
592 glVertexStream4iATIPROC glVertexStream4iATI = NULL;
593 glVertexStream4ivATIPROC glVertexStream4ivATI = NULL;
594 glVertexStream4fATIPROC glVertexStream4fATI = NULL;
595 glVertexStream4fvATIPROC glVertexStream4fvATI = NULL;
596 glVertexStream4dATIPROC glVertexStream4dATI = NULL;
597 glVertexStream4dvATIPROC glVertexStream4dvATI = NULL;
598 glNormalStream3bATIPROC glNormalStream3bATI = NULL;
599 glNormalStream3bvATIPROC glNormalStream3bvATI = NULL;
600 glNormalStream3sATIPROC glNormalStream3sATI = NULL;
601 glNormalStream3svATIPROC glNormalStream3svATI = NULL;
602 glNormalStream3iATIPROC glNormalStream3iATI = NULL;
603 glNormalStream3ivATIPROC glNormalStream3ivATI = NULL;
604 glNormalStream3fATIPROC glNormalStream3fATI = NULL;
605 glNormalStream3fvATIPROC glNormalStream3fvATI = NULL;
606 glNormalStream3dATIPROC glNormalStream3dATI = NULL;
607 glNormalStream3dvATIPROC glNormalStream3dvATI = NULL;
608
609 /* ATI_vertex_array_object */
610
611 glNewObjectBufferATIPROC glNewObjectBufferATI = NULL;
612 glIsObjectBufferATIPROC glIsObjectBufferATI = NULL;
613 glUpdateObjectBufferATIPROC glUpdateObjectBufferATI = NULL;
614 glGetObjectBufferfvATIPROC glGetObjectBufferfvATI = NULL;
615 glGetObjectBufferivATIPROC glGetObjectBufferivATI = NULL;
616 glFreeObjectBufferATIPROC glFreeObjectBufferATI = NULL;
617 glArrayObjectATIPROC glArrayObjectATI = NULL;
618 glGetArrayObjectfvATIPROC glGetArrayObjectfvATI = NULL;
619 glGetArrayObjectivATIPROC glGetArrayObjectivATI = NULL;
620 glVariantArrayObjectATIPROC glVariantArrayObjectATI = NULL;
621 glGetVariantArrayObjectfvATIPROC glGetVariantArrayObjectfvATI = NULL;
622 glGetVariantArrayObjectivATIPROC glGetVariantArrayObjectivATI = NULL;
623
624 /* NV_occlusion_query */
625
626 glGenOcclusionQueriesNVPROC glGenOcclusionQueriesNV = NULL;
627 glDeleteOcclusionQueriesNVPROC glDeleteOcclusionQueriesNV = NULL;
628 glIsOcclusionQueryNVPROC glIsOcclusionQueryNV = NULL;
629 glBeginOcclusionQueryNVPROC glBeginOcclusionQueryNV = NULL;
630 glEndOcclusionQueryNVPROC glEndOcclusionQueryNV = NULL;
631 glGetOcclusionQueryivNVPROC glGetOcclusionQueryivNV = NULL;
632 glGetOcclusionQueryuivNVPROC glGetOcclusionQueryuivNV = NULL;
633
634 /* NV_point_sprite */
635
636 glPointParameteriNVPROC glPointParameteriNV = NULL;
637 glPointParameterivNVPROC glPointParameterivNV = NULL;
638
639 /* ARB_window_pos */
640
641 glWindowPos2dARBPROC glWindowPos2dARB = NULL;
642 glWindowPos2fARBPROC glWindowPos2fARB = NULL;
643 glWindowPos2iARBPROC glWindowPos2iARB = NULL;
644 glWindowPos2sARBPROC glWindowPos2sARB = NULL;
645 glWindowPos2dvARBPROC glWindowPos2dvARB = NULL;
646 glWindowPos2fvARBPROC glWindowPos2fvARB = NULL;
647 glWindowPos2ivARBPROC glWindowPos2ivARB = NULL;
648 glWindowPos2svARBPROC glWindowPos2svARB = NULL;
649 glWindowPos3dARBPROC glWindowPos3dARB = NULL;
650 glWindowPos3fARBPROC glWindowPos3fARB = NULL;
651 glWindowPos3iARBPROC glWindowPos3iARB = NULL;
652 glWindowPos3sARBPROC glWindowPos3sARB = NULL;
653 glWindowPos3dvARBPROC glWindowPos3dvARB = NULL;
654 glWindowPos3fvARBPROC glWindowPos3fvARB = NULL;
655 glWindowPos3ivARBPROC glWindowPos3ivARB = NULL;
656 glWindowPos3svARBPROC glWindowPos3svARB = NULL;
657
658 /* misc  */
659
660 static int error = 0;
661
662 struct ExtensionTypes SupportedExtensions;
663
664 /* getProcAddress */
665
666 void *lglGetProcAddress(char *name)
667 {
668 #ifdef WIN32
669     void *t = wglGetProcAddress(name);
670 /*    char err[1000];*/
671     if (t == NULL)
672     {
673         /*sprintf(err, "wglGetProcAddress on %s failed", name);*/
674         error = 1;  /*      MessageBox(0, err, "Error", MB_OK | MB_ICONHAND);*/
675     }
676     return t;
677 #else
678     void *t = glXGetProcAddressARB((byte*)name);
679     if (t == NULL)
680     {
681         error = 1:
682     }
683     return t;
684 #endif
685 }
686
687 /*-----------------------------------------------------*/
688 /* WGL stuff */
689 /*-----------------------------------------------------*/
690
691 #ifdef WIN32
692
693 static HDC _dc = 0;
694
695 #endif /* WIN32 */
696
697 #ifdef WIN32
698
699 /* set the DC you will be working with */
700
701 /** returns true if the extention is available */
702 int QueryWGLExtension(const char *name)
703 {
704     const GLubyte *extensions = NULL;
705     const GLubyte *start;
706     GLubyte *where, *terminator;
707
708     /* Extension names should not have spaces. */
709     where = (GLubyte *) strchr(name, ' ');
710     if (where || *name == '\0')
711         return 0;
712     if ((wglGetExtensionsStringARB == NULL) || (_dc == 0))
713         if (wglGetExtensionsStringEXT == NULL)
714             return 0;
715         else
716             extensions = wglGetExtensionsStringEXT();
717     else
718         extensions = wglGetExtensionsStringARB(_dc);
719     /* It takes a bit of care to be fool-proof about parsing the
720          OpenGL extensions string. Don't be fooled by sub-strings,
721         etc. */
722     start = extensions;
723     for (;;) 
724     {
725         where = (GLubyte *) strstr((const char *) start, name);
726         if (!where)
727             break;
728         terminator = where + strlen(name);
729         if (where == start || *(where - 1) == ' ')
730             if (*terminator == ' ' || *terminator == '\0')
731                 return 1;
732         start = terminator;
733     }
734     return 0;
735 }
736
737 void InitWGLARBBufferRegion()
738 {
739     if (!SupportedExtensions.wgl.ARB_buffer_region)
740         return;
741     wglCreateBufferRegionARB = (wglCreateBufferRegionARBPROC) lglGetProcAddress("wglCreateBufferRegionARB");
742     wglDeleteBufferRegionARB = (wglDeleteBufferRegionARBPROC) lglGetProcAddress("wglDeleteBufferRegionARB");
743     wglSaveBufferRegionARB = (wglSaveBufferRegionARBPROC) lglGetProcAddress("wglSaveBufferRegionARB");
744     wglRestoreBufferRegionARB = (wglRestoreBufferRegionARBPROC) lglGetProcAddress("wglRestoreBufferRegionARB");
745
746 }
747
748 void InitWGLARBPbuffer()
749 {
750     if (!SupportedExtensions.wgl.ARB_pbuffer)
751         return;
752     wglCreatePbufferARB = (wglCreatePbufferARBPROC) lglGetProcAddress("wglCreatePbufferARB");
753     wglGetPbufferDCARB = (wglGetPbufferDCARBPROC) lglGetProcAddress("wglGetPbufferDCARB");
754     wglReleasePbufferDCARB = (wglReleasePbufferDCARBPROC) lglGetProcAddress("wglReleasePbufferDCARB");
755     wglDestroyPbufferARB = (wglDestroyPbufferARBPROC) lglGetProcAddress("wglDestroyPbufferARB");
756     wglQueryPbufferARB = (wglQueryPbufferARBPROC) lglGetProcAddress("wglQueryPbufferARB");
757 }
758
759 void InitWGLARBPixelFormat()
760 {
761     if (!SupportedExtensions.wgl.ARB_pixel_format)
762         return;
763     wglGetPixelFormatAttribivARB = (wglGetPixelFormatAttribivARBPROC) lglGetProcAddress("wglGetPixelFormatAttribivARB");
764     wglGetPixelFormatAttribfvARB = (wglGetPixelFormatAttribfvARBPROC) lglGetProcAddress("wglGetPixelFormatAttribfvARB");
765     wglChoosePixelFormatARB = (wglChoosePixelFormatARBPROC) lglGetProcAddress("wglChoosePixelFormatARB");
766 }
767
768 void InitWGLARBRenderTexture()
769 {
770     if (!SupportedExtensions.wgl.ARB_render_texture)
771         return;
772     wglBindTexImageARB = (wglBindTexImageARBPROC) lglGetProcAddress("wglBindTexImageARB");
773     wglReleaseTexImageARB = (wglReleaseTexImageARBPROC) lglGetProcAddress("wglReleaseTexImageARB");
774     wglSetPbufferAttribARB = (wglSetPbufferAttribARBPROC) lglGetProcAddress("wglSetPbufferAttribARB");
775 }
776
777 void InitWGLEXTSwapControl()
778 {
779     if (!SupportedExtensions.wgl.EXT_swap_control)
780         return;
781     wglSwapIntervalEXT = (wglSwapIntervalEXTPROC) lglGetProcAddress("wglSwapIntervalEXT");
782     wglGetSwapIntervalEXT = (wglGetSwapIntervalEXTPROC) lglGetProcAddress("wglGetSwapIntervalEXT");
783 }
784
785 void InitWGLARBMakeCurrentRead()
786 {
787     if (!SupportedExtensions.wgl.ARB_make_current_read)
788         return;
789     wglMakeContextCurrentARB = (wglMakeContextCurrentARBPROC) lglGetProcAddress("wglMakeContextCurrentARB");
790     wglGetCurrentReadDCARB = (wglGetCurrentReadDCARBPROC) lglGetProcAddress("wglGetCurrentReadDCARB");
791 }
792
793 void InitSupportedWGLExtensions()
794 {
795     SupportedExtensions.wgl.ARB_buffer_region = QueryWGLExtension("WGL_ARB_buffer_region");
796     SupportedExtensions.wgl.ARB_pbuffer = QueryWGLExtension("WGL_ARB_pbuffer");
797     SupportedExtensions.wgl.ARB_pixel_format = QueryWGLExtension("WGL_ARB_pixel_format");
798     SupportedExtensions.wgl.ARB_render_texture = QueryWGLExtension("WGL_ARB_render_texture");
799     SupportedExtensions.wgl.EXT_swap_control = QueryWGLExtension("WGL_EXT_swap_control");
800     SupportedExtensions.wgl.ARB_make_current_read = QueryWGLExtension("WGL_ARB_make_current_read");
801     SupportedExtensions.wgl.ARB_multisample = QueryWGLExtension("WGL_ARB_multisample");
802 }
803
804 void _wglSetDC(HDC dc)
805 {
806     _dc = dc;
807 }
808
809 int wglInitialize(HDC dc)
810 {
811     _dc = dc;    
812     error = 0;
813     wglGetExtensionsStringARB = (wglGetExtensionsStringARBPROC) lglGetProcAddress("wglGetExtensionsStringARB");
814     wglGetExtensionsStringEXT = (wglGetExtensionsStringEXTPROC) lglGetProcAddress("wglGetExtensionsStringEXT");
815     SupportedExtensions.wgl.ARB_extensions_string = wglGetExtensionsStringARB != NULL;
816     SupportedExtensions.wgl.EXT_extensions_string = wglGetExtensionsStringEXT != NULL;
817     error = 0;
818
819     InitSupportedWGLExtensions();
820    
821
822     InitWGLARBMakeCurrentRead();
823     InitWGLEXTSwapControl();
824     InitWGLARBRenderTexture();
825     InitWGLARBPixelFormat();
826     InitWGLARBPbuffer();
827     InitWGLARBBufferRegion();
828     
829     return error;
830 }
831
832 #endif /* WIN32 */
833
834 /*-----------------------------------------------------*/
835 /* WGL stuff END*/
836 /*-----------------------------------------------------*/
837
838 /** returns true if the extention is available */
839 int QueryExtension(const char *name)
840 {
841     const GLubyte *extensions = NULL;
842     const GLubyte *start;
843     GLubyte *where, *terminator;
844
845     /* Extension names should not have spaces. */
846     where = (GLubyte *) strchr(name, ' ');
847     if (where || *name == '\0')
848         return 0;
849     extensions = glGetString(GL_EXTENSIONS);
850     /* It takes a bit of care to be fool-proof about parsing the
851          OpenGL extensions string. Don't be fooled by sub-strings,
852         etc. */
853     start = extensions;
854     for (;;) 
855     {
856         where = (GLubyte *) strstr((const char *) start, name);
857         if (!where)
858             break;
859         terminator = where + strlen(name);
860         if (where == start || *(where - 1) == ' ')
861             if (*terminator == ' ' || *terminator == '\0')
862                 return 1;
863         start = terminator;
864     }
865     return 0;
866     
867 /*    char *s = (char*)glGetString(GL_EXTENSIONS);
868     char *temp = strstr(s, name);
869     return temp!=NULL;*/
870 }
871  
872 void InitARBWindowPos()
873 {
874     if (!SupportedExtensions.ARB_window_pos)
875         return;
876     glWindowPos2dARB = (glWindowPos2dARBPROC) lglGetProcAddress("glWindowPos2dARB");
877     glWindowPos2fARB = (glWindowPos2fARBPROC) lglGetProcAddress("glWindowPos2fARB");
878     glWindowPos2iARB = (glWindowPos2iARBPROC) lglGetProcAddress("glWindowPos2iARB");
879     glWindowPos2sARB = (glWindowPos2sARBPROC) lglGetProcAddress("glWindowPos2sARB");
880     glWindowPos2dvARB = (glWindowPos2dvARBPROC) lglGetProcAddress("glWindowPos2dvARB");
881     glWindowPos2fvARB = (glWindowPos2fvARBPROC) lglGetProcAddress("glWindowPos2fvARB");
882     glWindowPos2ivARB = (glWindowPos2ivARBPROC) lglGetProcAddress("glWindowPos2ivARB");
883     glWindowPos2svARB = (glWindowPos2svARBPROC) lglGetProcAddress("glWindowPos2svARB");
884     glWindowPos3dARB = (glWindowPos3dARBPROC) lglGetProcAddress("glWindowPos3dARB");
885     glWindowPos3fARB = (glWindowPos3fARBPROC) lglGetProcAddress("glWindowPos3fARB");
886     glWindowPos3iARB = (glWindowPos3iARBPROC) lglGetProcAddress("glWindowPos3iARB");
887     glWindowPos3sARB = (glWindowPos3sARBPROC) lglGetProcAddress("glWindowPos3sARB");
888     glWindowPos3dvARB = (glWindowPos3dvARBPROC) lglGetProcAddress("glWindowPos3dvARB");
889     glWindowPos3fvARB = (glWindowPos3fvARBPROC) lglGetProcAddress("glWindowPos3fvARB");
890     glWindowPos3ivARB = (glWindowPos3ivARBPROC) lglGetProcAddress("glWindowPos3ivARB");
891     glWindowPos3svARB = (glWindowPos3svARBPROC) lglGetProcAddress("glWindowPos3svARB");
892 }
893
894 void InitARBTextureCompression()
895 {
896     if (!SupportedExtensions.ARB_texture_compression)
897         return;
898     glCompressedTexImage3DARB = (glCompressedTexImage3DPROC) lglGetProcAddress("glCompressedTexImage3DARB");
899     glCompressedTexImage2DARB = (glCompressedTexImage2DPROC) lglGetProcAddress("glCompressedTexImage2DARB");
900     glCompressedTexImage1DARB = (glCompressedTexImage1DPROC) lglGetProcAddress("glCompressedTexImage1DARB");
901     glCompressedTexSubImage3DARB = (glCompressedTexSubImage3DPROC) lglGetProcAddress("glCompressedTexSubImage3DARB");
902     glCompressedTexSubImage2DARB = (glCompressedTexSubImage2DPROC) lglGetProcAddress("glCompressedTexSubImage2DARB");
903     glCompressedTexSubImage1DARB = (glCompressedTexSubImage1DPROC) lglGetProcAddress("glCompressedTexSubImage1DARB");
904     glGetCompressedTexImageARB = (glGetCompressedTexImagePROC) lglGetProcAddress("glGetCompressedTexImageARB");
905 }
906
907 void InitNVPointSprite()
908 {
909     if (!SupportedExtensions.NV_point_sprite)
910         return;
911     glPointParameteriNV = (glPointParameteriNVPROC) lglGetProcAddress("glPointParameteriNV");
912     glPointParameterivNV = (glPointParameterivNVPROC) lglGetProcAddress("glPointParameterivNV");
913 }
914
915 void InitNVOcclusionQuery()
916 {
917     if (!SupportedExtensions.NV_occlusion_query)
918         return;
919     glGenOcclusionQueriesNV = (glGenOcclusionQueriesNVPROC) lglGetProcAddress("glGenOcclusionQueriesNV");
920     glDeleteOcclusionQueriesNV = (glDeleteOcclusionQueriesNVPROC) lglGetProcAddress("glDeleteOcclusionQueriesNV");
921     glIsOcclusionQueryNV = (glIsOcclusionQueryNVPROC) lglGetProcAddress("glIsOcclusionQueryNV");
922     glBeginOcclusionQueryNV = (glBeginOcclusionQueryNVPROC) lglGetProcAddress("glBeginOcclusionQueryNV");
923     glEndOcclusionQueryNV = (glEndOcclusionQueryNVPROC) lglGetProcAddress("glEndOcclusionQueryNV");
924     glGetOcclusionQueryivNV = (glGetOcclusionQueryivNVPROC) lglGetProcAddress("glGetOcclusionQueryivNV");
925     glGetOcclusionQueryuivNV = (glGetOcclusionQueryuivNVPROC) lglGetProcAddress("glGetOcclusionQueryuivNV");
926 }
927
928 #ifndef __PROTOTYPE__
929  
930 void InitATIVertexArrayObject()
931 {
932     if (!SupportedExtensions.ATI_vertex_array_object)
933         return;
934     glNewObjectBufferATI = (glNewObjectBufferATIPROC) lglGetProcAddress("glNewObjectBufferATI");
935     glIsObjectBufferATI = (glIsObjectBufferATIPROC) lglGetProcAddress("glIsObjectBufferATI");
936     glUpdateObjectBufferATI = (glUpdateObjectBufferATIPROC) lglGetProcAddress("glUpdateObjectBufferATI");
937     glGetObjectBufferfvATI = (glGetObjectBufferfvATIPROC) lglGetProcAddress("glGetObjectBufferfvATI");
938     glGetObjectBufferivATI = (glGetObjectBufferivATIPROC) lglGetProcAddress("glGetObjectBufferivATI");
939     glFreeObjectBufferATI = (glFreeObjectBufferATIPROC) lglGetProcAddress("glFreeObjectBufferATI");
940     glArrayObjectATI = (glArrayObjectATIPROC) lglGetProcAddress("glArrayObjectATI");
941     glGetArrayObjectfvATI = (glGetArrayObjectfvATIPROC) lglGetProcAddress("glGetArrayObjectfvATI");
942     glGetArrayObjectivATI = (glGetArrayObjectivATIPROC) lglGetProcAddress("glGetArrayObjectivATI");
943     glVariantArrayObjectATI = (glVariantArrayObjectATIPROC) lglGetProcAddress("glVariantArrayObjectATI");
944     glGetVariantArrayObjectfvATI = (glGetVariantArrayObjectfvATIPROC) lglGetProcAddress("glGetVariantArrayObjectfvATI");
945     glGetVariantArrayObjectivATI = (glGetVariantArrayObjectivATIPROC) lglGetProcAddress("glGetVariantArrayObjectivATI");
946 }
947
948 void InitATIVertexStreams()
949 {
950     if (!SupportedExtensions.ATI_vertex_streams)
951         return;
952     glClientActiveVertexStreamATI = (glClientActiveVertexStreamATIPROC) lglGetProcAddress("glClientActiveVertexStreamATI");
953     glVertexBlendEnviATI = (glVertexBlendEnviATIPROC) lglGetProcAddress("glVertexBlendEnviATI");
954     glVertexBlendEnvfATI = (glVertexBlendEnvfATIPROC) lglGetProcAddress("glVertexBlendEnvfATI");
955     glVertexStream2sATI = (glVertexStream2sATIPROC) lglGetProcAddress("glVertexStream2sATI");
956     glVertexStream2svATI = (glVertexStream2svATIPROC) lglGetProcAddress("glVertexStream2svATI");
957     glVertexStream2iATI = (glVertexStream2iATIPROC) lglGetProcAddress("glVertexStream2iATI");
958     glVertexStream2ivATI = (glVertexStream2ivATIPROC) lglGetProcAddress("glVertexStream2ivATI");
959     glVertexStream2fATI = (glVertexStream2fATIPROC) lglGetProcAddress("glVertexStream2fATI");
960     glVertexStream2fvATI = (glVertexStream2fvATIPROC) lglGetProcAddress("glVertexStream2fvATI");
961     glVertexStream2dATI = (glVertexStream2dATIPROC) lglGetProcAddress("glVertexStream2dATI");
962     glVertexStream2dvATI = (glVertexStream2dvATIPROC) lglGetProcAddress("glVertexStream2dvATI");
963     glVertexStream3sATI = (glVertexStream3sATIPROC) lglGetProcAddress("glVertexStream3sATI");
964     glVertexStream3svATI = (glVertexStream3svATIPROC) lglGetProcAddress("glVertexStream3svATI");
965     glVertexStream3iATI = (glVertexStream3iATIPROC) lglGetProcAddress("glVertexStream3iATI");
966     glVertexStream3ivATI = (glVertexStream3ivATIPROC) lglGetProcAddress("glVertexStream3ivATI");
967     glVertexStream3fATI = (glVertexStream3fATIPROC) lglGetProcAddress("glVertexStream3fATI");
968     glVertexStream3fvATI = (glVertexStream3fvATIPROC) lglGetProcAddress("glVertexStream3fvATI");
969     glVertexStream3dATI = (glVertexStream3dATIPROC) lglGetProcAddress("glVertexStream3dATI");
970     glVertexStream3dvATI = (glVertexStream3dvATIPROC) lglGetProcAddress("glVertexStream3dvATI");
971     glVertexStream4sATI = (glVertexStream4sATIPROC) lglGetProcAddress("glVertexStream4sATI");
972     glVertexStream4svATI = (glVertexStream4svATIPROC) lglGetProcAddress("glVertexStream4svATI");
973     glVertexStream4iATI = (glVertexStream4iATIPROC) lglGetProcAddress("glVertexStream4iATI");
974     glVertexStream4ivATI = (glVertexStream4ivATIPROC) lglGetProcAddress("glVertexStream4ivATI");
975     glVertexStream4fATI = (glVertexStream4fATIPROC) lglGetProcAddress("glVertexStream4fATI");
976     glVertexStream4fvATI = (glVertexStream4fvATIPROC) lglGetProcAddress("glVertexStream4fvATI");
977     glVertexStream4dATI = (glVertexStream4dATIPROC) lglGetProcAddress("glVertexStream4dATI");
978     glVertexStream4dvATI = (glVertexStream4dvATIPROC) lglGetProcAddress("glVertexStream4dvATI");
979     glNormalStream3bATI = (glNormalStream3bATIPROC) lglGetProcAddress("glNormalStream3bATI");
980     glNormalStream3bvATI = (glNormalStream3bvATIPROC) lglGetProcAddress("glNormalStream3bvATI");
981     glNormalStream3sATI = (glNormalStream3sATIPROC) lglGetProcAddress("glNormalStream3sATI");
982     glNormalStream3svATI = (glNormalStream3svATIPROC) lglGetProcAddress("glNormalStream3svATI");
983     glNormalStream3iATI = (glNormalStream3iATIPROC) lglGetProcAddress("glNormalStream3iATI");
984     glNormalStream3ivATI = (glNormalStream3ivATIPROC) lglGetProcAddress("glNormalStream3ivATI");
985     glNormalStream3fATI = (glNormalStream3fATIPROC) lglGetProcAddress("glNormalStream3fATI");
986     glNormalStream3fvATI = (glNormalStream3fvATIPROC) lglGetProcAddress("glNormalStream3fvATI");
987     glNormalStream3dATI = (glNormalStream3dATIPROC) lglGetProcAddress("glNormalStream3dATI");
988     glNormalStream3dvATI = (glNormalStream3dvATIPROC) lglGetProcAddress("glNormalStream3dvATI");
989 }
990
991 void InitATIElementArray()
992 {
993     if (!SupportedExtensions.ATI_element_array)
994         return;
995     glElementPointerATI = (glElementPointerATIPROC) lglGetProcAddress("glElementPointerATI");
996     glDrawElementArrayATI = (glDrawElementArrayATIPROC) lglGetProcAddress("glDrawElementArrayATI");
997     glDrawRangeElementArrayATI = (glDrawRangeElementArrayATIPROC) lglGetProcAddress("glDrawRangeElementArrayATI");
998 }
999
1000 void InitATIFragmentShader()
1001 {
1002     if (!SupportedExtensions.ATI_fragment_shader)
1003         return;
1004     glGenFragmentShadersATI = (glGenFragmentShadersATIPROC) lglGetProcAddress("glGenFragmentShadersATI");
1005     glBindFragmentShaderATI = (glBindFragmentShaderATIPROC) lglGetProcAddress("glBindFragmentShaderATI");
1006     glDeleteFragmentShaderATI = (glDeleteFragmentShaderATIPROC) lglGetProcAddress("glDeleteFragmentShaderATI");
1007     glBeginFragmentShaderATI = (glBeginFragmentShaderATIPROC) lglGetProcAddress("glBeginFragmentShaderATI");
1008     glEndFragmentShaderATI = (glEndFragmentShaderATIPROC) lglGetProcAddress("glEndFragmentShaderATI");
1009     glPassTexCoordATI = (glPassTexCoordATIPROC) lglGetProcAddress("glPassTexCoordATI");
1010     glSampleMapATI = (glSampleMapATIPROC) lglGetProcAddress("glSampleMapATI");
1011     glColorFragmentOp1ATI = (glColorFragmentOp1ATIPROC) lglGetProcAddress("glColorFragmentOp1ATI");
1012     glColorFragmentOp2ATI = (glColorFragmentOp2ATIPROC) lglGetProcAddress("glColorFragmentOp2ATI");
1013     glColorFragmentOp3ATI = (glColorFragmentOp3ATIPROC) lglGetProcAddress("glColorFragmentOp3ATI");
1014     glAlphaFragmentOp1ATI = (glAlphaFragmentOp1ATIPROC) lglGetProcAddress("glAlphaFragmentOp1ATI");
1015     glAlphaFragmentOp2ATI = (glAlphaFragmentOp2ATIPROC) lglGetProcAddress("glAlphaFragmentOp2ATI");
1016     glAlphaFragmentOp3ATI = (glAlphaFragmentOp3ATIPROC) lglGetProcAddress("glAlphaFragmentOp3ATI");
1017     glSetFragmentShaderConstantATI = (glSetFragmentShaderConstantATIPROC) lglGetProcAddress("glSetFragmentShaderConstantATI");
1018 }
1019
1020 void InitATIEnvmapBumpmap()
1021 {
1022     if (!SupportedExtensions.ATI_envmap_bumpmap)
1023         return;
1024     glTexBumpParameterivATI = (glTexBumpParameterivATIPROC) lglGetProcAddress("glTexBumpParameterivATI");
1025     glTexBumpParameterfvATI = (glTexBumpParameterfvATIPROC) lglGetProcAddress("glTexBumpParameterfvATI");
1026     glGetTexBumpParameterivATI = (glGetTexBumpParameterivATIPROC) lglGetProcAddress("glGetTexBumpParameterivATI");
1027     glGetTexBumpParameterfvATI = (glGetTexBumpParameterfvATIPROC) lglGetProcAddress("glGetTexBumpParameterfvATI");
1028 }
1029
1030 void InitEXTVertexShader()
1031 {
1032     if (!SupportedExtensions.EXT_vertex_shader)
1033         return;
1034     glBeginVertexShaderEXT = (glBeginVertexShaderEXTPROC) lglGetProcAddress("glBeginVertexShaderEXT");
1035     glEndVertexShaderEXT = (glEndVertexShaderEXTPROC) lglGetProcAddress("glEndVertexShaderEXT");
1036     glBindVertexShaderEXT = (glBindVertexShaderEXTPROC) lglGetProcAddress("glBindVertexShaderEXT");
1037     glGenVertexShadersEXT = (glGenVertexShadersEXTPROC) lglGetProcAddress("glGenVertexShadersEXT");
1038     glDeleteVertexShaderEXT = (glDeleteVertexShaderEXTPROC) lglGetProcAddress("glDeleteVertexShaderEXT");
1039     glShaderOp1EXT = (glShaderOp1EXTPROC) lglGetProcAddress("glShaderOp1EXT");
1040     glShaderOp2EXT = (glShaderOp2EXTPROC) lglGetProcAddress("glShaderOp2EXT");
1041     glShaderOp3EXT = (glShaderOp3EXTPROC) lglGetProcAddress("glShaderOp3EXT");
1042     glSwizzleEXT = (glSwizzleEXTPROC) lglGetProcAddress("glSwizzleEXT");
1043     glWriteMaskEXT = (glWriteMaskEXTPROC) lglGetProcAddress("glWriteMaskEXT");
1044     glInsertComponentEXT = (glInsertComponentEXTPROC) lglGetProcAddress("glInsertComponentEXT");
1045     glExtractComponentEXT = (glExtractComponentEXTPROC) lglGetProcAddress("glExtractComponentEXT");
1046     glGenSymbolsEXT = (glGenSymbolsEXTPROC) lglGetProcAddress("glGenSymbolsEXT");
1047     glSetInvariantEXT = (glSetInvariantEXTPROC) lglGetProcAddress("glSetInvarianceEXT");
1048     glSetLocalConstantEXT = (glSetLocalConstantEXTPROC) lglGetProcAddress("glSetLocalConstantEXT");
1049     glVariantbvEXT = (glVariantbvEXTPROC) lglGetProcAddress("glVariantbvEXT");
1050     glVariantsvEXT = (glVariantsvEXTPROC) lglGetProcAddress("glVariantsvEXT");
1051     glVariantivEXT = (glVariantivEXTPROC) lglGetProcAddress("glVariantivEXT");
1052     glVariantfvEXT = (glVariantfvEXTPROC) lglGetProcAddress("glVariantfvEXT");
1053     glVariantdvEXT = (glVariantdvEXTPROC) lglGetProcAddress("glVariantdvEXT");
1054     glVariantubvEXT = (glVariantubvEXTPROC) lglGetProcAddress("glVariantubvEXT");
1055     glVariantusvEXT = (glVariantusvEXTPROC) lglGetProcAddress("glVariantusvEXT");
1056     glVariantuivEXT = (glVariantuivEXTPROC) lglGetProcAddress("glVariantuivEXT");
1057     glVariantPointerEXT = (glVariantPointerEXTPROC) lglGetProcAddress("glVariantPointerEXT");
1058     glEnableVariantClientStateEXT = (glEnableVariantClientStateEXTPROC) lglGetProcAddress("glEnableVariantClientStateEXT");
1059     glDisableVariantClientStateEXT = (glDisableVariantClientStateEXTPROC) lglGetProcAddress("glDisableVariantClientStateEXT");
1060     glBindLightParameterEXT = (glBindLightParameterEXTPROC) lglGetProcAddress("glBindLightParameterEXT");
1061     glBindMaterialParameterEXT = (glBindMaterialParameterEXTPROC) lglGetProcAddress("glBindMaterialParameterEXT");
1062     glBindTexGenParameterEXT = (glBindTexGenParameterEXTPROC) lglGetProcAddress("glBindTexGenParameterEXT");
1063     glBindTextureUnitParameterEXT = (glBindTextureUnitParameterEXTPROC) lglGetProcAddress("glBindTextureUnitParameterEXT");
1064     glBindParameterEXT = (glBindParameterEXTPROC) lglGetProcAddress("glBindParameterEXT");
1065     glIsVariantEnabledEXT = (glIsVariantEnabledEXTPROC) lglGetProcAddress("glIsVariantEnabledEXT");
1066     glGetVariantBooleanvEXT = (glGetVariantBooleanvEXTPROC) lglGetProcAddress("glGetVariantBooleanvEXT");
1067     glGetVariantIntegervEXT = (glGetVariantIntegervEXTPROC) lglGetProcAddress("glGetVariantIntegervEXT");
1068     glGetVariantFloatvEXT = (glGetVariantFloatvEXTPROC) lglGetProcAddress("glGetVariantFloatvEXT");
1069     glGetVariantPointervEXT = (glGetVariantPointervEXTPROC) lglGetProcAddress("glGetVariantPointervEXT");
1070     glGetInvariantBooleanvEXT = (glGetInvariantBooleanvEXTPROC) lglGetProcAddress("glGetInvariantBooleanvEXT");
1071     glGetInvariantIntegervEXT = (glGetInvariantIntegervEXTPROC) lglGetProcAddress("glGetInvariantIntegervEXT");
1072     glGetInvariantFloatvEXT = (glGetInvariantFloatvEXTPROC) lglGetProcAddress("glGetInvariantFloatvEXT");
1073     glGetLocalConstantBooleanvEXT = (glGetLocalConstantBooleanvEXTPROC) lglGetProcAddress("glGetLocalConstantBooleanvEXT");
1074     glGetLocalConstantIntegervEXT = (glGetLocalConstantIntegervEXTPROC) lglGetProcAddress("glGetLocalConstantIntegervEXT");
1075     glGetLocalConstantFloatvEXT = (glGetLocalConstantFloatvEXTPROC) lglGetProcAddress("glGetLocalConstantFloatvEXT");
1076 }
1077
1078 void InitARBMatrixPalette()
1079 {
1080     if (!SupportedExtensions.ARB_matrix_palette)
1081         return;
1082     glCurrentPaletteMatrixARB = (glCurrentPaletteMatrixARBPROC) lglGetProcAddress("glCurrentPaletteMatrixARB");
1083     glMatrixIndexubvARB = (glMatrixIndexubvARBPROC) lglGetProcAddress("glMatrixIndexubvARB");
1084     glMatrixIndexusvARB = (glMatrixIndexusvARBPROC) lglGetProcAddress("glMatrixIndexusvARB");
1085     glMatrixIndexuivARB = (glMatrixIndexuivARBPROC) lglGetProcAddress("glMatrixIndexuivARB");
1086     glMatrixIndexPointerARB = (glMatrixIndexPointerARBPROC) lglGetProcAddress("glMatrixIndexPointerARB");
1087 }
1088
1089 void InitEXTMultiDrawArrays()
1090 {
1091     if (!SupportedExtensions.EXT_multi_draw_arrays)
1092         return;
1093     glMultiDrawArraysEXT = (glMultiDrawArraysEXTPROC) lglGetProcAddress("glMultiDrawArraysEXT");
1094     glMultiDrawElementsEXT = (glMultiDrawElementsEXTPROC) lglGetProcAddress("glMultiDrawElementsEXT");
1095 }
1096
1097 void InitARBVertexBlend()
1098 {
1099     if (!SupportedExtensions.ARB_vertex_blend)
1100         return;
1101     glWeightbvARB = (glWeightbvARBPROC) lglGetProcAddress("glWeightbvARB");
1102     glWeightsvARB = (glWeightsvARBPROC) lglGetProcAddress("glWeightsvARB");
1103     glWeightivARB = (glWeightivARBPROC) lglGetProcAddress("glWeightivARB");
1104     glWeightfvARB = (glWeightfvARBPROC) lglGetProcAddress("glWeightfvARB");
1105     glWeightdvARB = (glWeightdvARBPROC) lglGetProcAddress("glWeightdvARB");
1106     glWeightubvARB = (glWeightubvARBPROC) lglGetProcAddress("glWeightubvARB");
1107     glWeightusvARB = (glWeightusvARBPROC) lglGetProcAddress("glWeightusvARB");
1108     glWeightuivARB = (glWeightuivARBPROC) lglGetProcAddress("glWeightuivARB");
1109     glWeightPointerARB = (glWeightPointerARBPROC) lglGetProcAddress("glWeightPointerARB");
1110     glVertexBlendARB = (glVertexBlendARBPROC) lglGetProcAddress("glVertexBlendARB");
1111 }
1112
1113 void InitARBPointParameters()
1114 {
1115     if (!SupportedExtensions.ARB_point_parameters)
1116         return;
1117     glPointParameterfARB = (glPointParameterfARBPROC) lglGetProcAddress("glPointParameterfARB");
1118     glPointParameterfvARB = (glPointParameterfvARBPROC) lglGetProcAddress("glPointParameterfvARB");
1119 }
1120
1121 void InitATIPNTriangles()
1122 {
1123     if (!SupportedExtensions.ATI_pn_triangles)
1124         return;
1125     glPNTrianglesiATI = (glPNTrianglesiATIPROC) lglGetProcAddress("glPNTrianglesiATI");
1126     glPNTrianglesfATI = (glPNTrianglesfATIPROC) lglGetProcAddress("glPNTrianglesfATI");
1127 }
1128
1129 void InitNVEvaluators()
1130 {
1131     if (!SupportedExtensions.NV_evaluators)
1132         return;
1133     glMapControlPointsNV = (glMapControlPointsNVPROC) lglGetProcAddress("glMapControlPointsNV");
1134     glMapParameterivNV = (glMapParameterivNVPROC) lglGetProcAddress("glMapParameterivNV");
1135     glMapParameterfvNV = (glMapParameterfvNVPROC) lglGetProcAddress("glMapParameterfvNV");
1136     glGetMapControlPointsNV = (glGetMapControlPointsNVPROC) lglGetProcAddress("glGetMapControlPointsNV");
1137     glGetMapParameterivNV = (glGetMapParameterivNVPROC) lglGetProcAddress("glGetMapParameterivNV");
1138     glGetMapParameterfvNV = (glGetMapParameterfvNVPROC) lglGetProcAddress("glGetMapParameterfvNV");
1139     glGetMapAttribParameterivNV = (glGetMapAttribParameterivNVPROC) lglGetProcAddress("glGetMapAttribParameterivNV");
1140     glGetMapAttribParameterfvNV = (glGetMapAttribParameterfvNVPROC) lglGetProcAddress("glGetMapAttribParameterfvNV");
1141     glEvalMapsNV = (glEvalMapsNVPROC) lglGetProcAddress("glEvalMapsNV");
1142 }
1143
1144 void InitNVRegisterCombiners2()
1145 {
1146     if (!SupportedExtensions.NV_register_combiners2)
1147         return;
1148     glCombinerStageParameterfvNV = (glCombinerStageParameterfvNVPROC) lglGetProcAddress("glCombinerStageParameterfvNV");
1149     glGetCombinerStageParameterfvNV = (glGetCombinerStageParameterfvNVPROC) lglGetProcAddress("glGetCombinerStageParameterfvNV");
1150 }
1151
1152 void InitNVFence()
1153 {
1154     if (!SupportedExtensions.NV_fence)
1155         return;
1156     glGenFencesNV = (glGenFencesNVPROC) lglGetProcAddress("glGenFencesNV");
1157     glDeleteFencesNV = (glDeleteFencesNVPROC) lglGetProcAddress("glDeleteFencesNV");
1158     glSetFenceNV = (glSetFenceNVPROC) lglGetProcAddress("glSetFenceNV");
1159     glTestFenceNV = (glTestFenceNVPROC) lglGetProcAddress("glTestFenceNV");
1160     glFinishFenceNV = (glFinishFenceNVPROC) lglGetProcAddress("glFinishFenceNV");
1161     glIsFenceNV = (glIsFenceNVPROC) lglGetProcAddress("glIsFenceNV");
1162     glGetFenceivNV = (glGetFenceivNVPROC) lglGetProcAddress("glGetFenceivNV");
1163 }
1164
1165 void InitNVVertexProgram()
1166 {
1167     if (!SupportedExtensions.NV_vertex_program)
1168         return;
1169     glBindProgramNV = (glBindProgramNVPROC) lglGetProcAddress("glBindProgramNV");
1170     glDeleteProgramsNV = (glDeleteProgramsNVPROC) lglGetProcAddress("glDeleteProgramsNV");
1171     glExecuteProgramNV = (glExecuteProgramNVPROC) lglGetProcAddress("glExecuteProgramNV");
1172     glGenProgramsNV = (glGenProgramsNVPROC) lglGetProcAddress("glGenProgramsNV");
1173     glAreProgramsResidentNV = (glAreProgramsResidentNVPROC) lglGetProcAddress("glAreProgramsResidentNV");
1174     glRequestResidentProgramsNV = (glRequestResidentProgramsNVPROC) lglGetProcAddress("glRequestResidentProgramsNV");
1175     glGetProgramParameterfvNV = (glGetProgramParameterfvNVPROC) lglGetProcAddress("glGetProgramParameterfvNV");
1176     glGetProgramParameterdvNV = (glGetProgramParameterdvNVPROC) lglGetProcAddress("glGetProgramParameterdvNV");
1177     glGetProgramivNV = (glGetProgramivNVPROC) lglGetProcAddress("glGetProgramivNV");
1178     glGetProgramStringNV = (glGetProgramStringNVPROC) lglGetProcAddress("glGetProgramStringNV");
1179     glGetTrackMatrixivNV = (glGetTrackMatrixivNVPROC) lglGetProcAddress("glGetTrackMatrixivNV");
1180     glGetVertexAttribdvNV = (glGetVertexAttribdvNVPROC) lglGetProcAddress("glGetVertexAttribdvNV");
1181     glGetVertexAttribfvNV = (glGetVertexAttribfvNVPROC) lglGetProcAddress("glGetVertexAttribfvNV");
1182     glGetVertexAttribivNV = (glGetVertexAttribivNVPROC) lglGetProcAddress("glGetVertexAttribivNV");
1183     glGetVertexAttribPointervNV = (glGetVertexAttribPointervNVPROC) lglGetProcAddress("glGetVertexAttribPointervNV");
1184     glIsProgramNV = (glIsProgramNVPROC) lglGetProcAddress("glIsProgramNV");
1185     glLoadProgramNV = (glLoadProgramNVPROC) lglGetProcAddress("glLoadProgramNV");
1186     glProgramParameter4fNV = (glProgramParameter4fNVPROC) lglGetProcAddress("glProgramParameter4fNV");
1187     glProgramParameter4dNV = (glProgramParameter4dNVPROC) lglGetProcAddress("glProgramParameter4dNV");
1188     glProgramParameter4dvNV = (glProgramParameter4dvNVPROC) lglGetProcAddress("glProgramParameter4dvNV");
1189     glProgramParameter4fvNV = (glProgramParameter4fvNVPROC) lglGetProcAddress("glProgramParameter4fvNV");
1190     glProgramParameters4dvNV = (glProgramParameters4dvNVPROC) lglGetProcAddress("glProgramParameters4dvNV");
1191     glProgramParameters4fvNV = (glProgramParameters4fvNVPROC) lglGetProcAddress("glProgramParameters4fvNV");
1192     glTrackMatrixNV = (glTrackMatrixNVPROC) lglGetProcAddress("glTrackMatrixNV");
1193     glVertexAttribPointerNV = (glVertexAttribPointerNVPROC) lglGetProcAddress("glVertexAttribPointerNV");
1194     glVertexAttrib1sNV = (glVertexAttrib1sNVPROC) lglGetProcAddress("glVertexAttrib1sNV");
1195     glVertexAttrib1fNV = (glVertexAttrib1fNVPROC) lglGetProcAddress("glVertexAttrib1fNV");
1196     glVertexAttrib1dNV = (glVertexAttrib1dNVPROC) lglGetProcAddress("glVertexAttrib1dNV");
1197     glVertexAttrib2sNV = (glVertexAttrib2sNVPROC) lglGetProcAddress("glVertexAttrib2sNV");
1198     glVertexAttrib2fNV = (glVertexAttrib2fNVPROC) lglGetProcAddress("glVertexAttrib2fNV");
1199     glVertexAttrib2dNV = (glVertexAttrib2dNVPROC) lglGetProcAddress("glVertexAttrib2dNV");
1200     glVertexAttrib3sNV = (glVertexAttrib3sNVPROC) lglGetProcAddress("glVertexAttrib3sNV");
1201     glVertexAttrib3fNV = (glVertexAttrib3fNVPROC) lglGetProcAddress("glVertexAttrib3fNV");
1202     glVertexAttrib3dNV = (glVertexAttrib3dNVPROC) lglGetProcAddress("glVertexAttrib3dNV");
1203     glVertexAttrib4sNV = (glVertexAttrib4sNVPROC) lglGetProcAddress("glVertexAttrib4sNV");
1204     glVertexAttrib4fNV = (glVertexAttrib4fNVPROC) lglGetProcAddress("glVertexAttrib4fNV");
1205     glVertexAttrib4dNV = (glVertexAttrib4dNVPROC) lglGetProcAddress("glVertexAttrib4dNV");
1206     glVertexAttrib4ubNV = (glVertexAttrib4ubNVPROC) lglGetProcAddress("glVertexAttrib4ubNV");
1207     glVertexAttrib1svNV = (glVertexAttrib1svNVPROC) lglGetProcAddress("glVertexAttrib1svNV");
1208     glVertexAttrib1fvNV = (glVertexAttrib1fvNVPROC) lglGetProcAddress("glVertexAttrib1fvNV");
1209     glVertexAttrib1dvNV = (glVertexAttrib1dvNVPROC) lglGetProcAddress("glVertexAttrib1dvNV");
1210     glVertexAttrib2svNV = (glVertexAttrib2svNVPROC) lglGetProcAddress("glVertexAttrib2svNV");
1211     glVertexAttrib2fvNV = (glVertexAttrib2fvNVPROC) lglGetProcAddress("glVertexAttrib2fvNV");
1212     glVertexAttrib2dvNV = (glVertexAttrib2dvNVPROC) lglGetProcAddress("glVertexAttrib2dvNV");
1213     glVertexAttrib3svNV = (glVertexAttrib3svNVPROC) lglGetProcAddress("glVertexAttrib3svNV");
1214     glVertexAttrib3fvNV = (glVertexAttrib3fvNVPROC) lglGetProcAddress("glVertexAttrib3fvNV");
1215     glVertexAttrib3dvNV = (glVertexAttrib3dvNVPROC) lglGetProcAddress("glVertexAttrib3dvNV");
1216     glVertexAttrib4svNV = (glVertexAttrib4svNVPROC) lglGetProcAddress("glVertexAttrib4svNV");
1217     glVertexAttrib4fvNV = (glVertexAttrib4fvNVPROC) lglGetProcAddress("glVertexAttrib4fvNV");
1218     glVertexAttrib4dvNV = (glVertexAttrib4dvNVPROC) lglGetProcAddress("glVertexAttrib4dvNV");
1219     glVertexAttrib4ubvNV = (glVertexAttrib4ubvNVPROC) lglGetProcAddress("glVertexAttrib4ubvNV");
1220     glVertexAttribs1svNV = (glVertexAttribs1svNVPROC) lglGetProcAddress("glVertexAttribs1svNV");
1221     glVertexAttribs1fvNV = (glVertexAttribs1fvNVPROC) lglGetProcAddress("glVertexAttribs1fvNV");
1222     glVertexAttribs1dvNV = (glVertexAttribs1dvNVPROC) lglGetProcAddress("glVertexAttribs1dvNV");
1223     glVertexAttribs2svNV = (glVertexAttribs2svNVPROC) lglGetProcAddress("glVertexAttribs2svNV");
1224     glVertexAttribs2fvNV = (glVertexAttribs2fvNVPROC) lglGetProcAddress("glVertexAttribs2fvNV");
1225     glVertexAttribs2dvNV = (glVertexAttribs2dvNVPROC) lglGetProcAddress("glVertexAttribs2dvNV");
1226     glVertexAttribs3svNV = (glVertexAttribs3svNVPROC) lglGetProcAddress("glVertexAttribs3svNV");
1227     glVertexAttribs3fvNV = (glVertexAttribs3fvNVPROC) lglGetProcAddress("glVertexAttribs3fvNV");
1228     glVertexAttribs3dvNV = (glVertexAttribs3dvNVPROC) lglGetProcAddress("glVertexAttribs3dvNV");
1229     glVertexAttribs4svNV = (glVertexAttribs4svNVPROC) lglGetProcAddress("glVertexAttribs4svNV");
1230     glVertexAttribs4fvNV = (glVertexAttribs4fvNVPROC) lglGetProcAddress("glVertexAttribs4fvNV");
1231     glVertexAttribs4dvNV = (glVertexAttribs4dvNVPROC) lglGetProcAddress("glVertexAttribs4dvNV");
1232     glVertexAttribs4ubvNV = (glVertexAttribs4ubvNVPROC) lglGetProcAddress("glVertexAttribs4ubvNV");
1233 }
1234
1235 void InitEXTVertexWeighting()
1236 {
1237     if (!SupportedExtensions.EXT_vertex_weighting)
1238         return;
1239     glVertexWeightfEXT = (glVertexWeightfEXTPROC) lglGetProcAddress("glVertexWeightfEXT");
1240     glVertexWeightfvEXT = (glVertexWeightfvEXTPROC) lglGetProcAddress("glVertexWeightfvEXT");
1241     glVertexWeightPointerEXT = (glVertexWeightPointerEXTPROC) lglGetProcAddress("glVertexWeightPointerEXT");
1242 }
1243
1244 void InitARBMultisample()
1245 {
1246     if (!SupportedExtensions.ARB_multisample)
1247         return;
1248     glSampleCoverageARB = (glSampleCoveragePROC) lglGetProcAddress("glSampleCoverageARB");
1249 }
1250
1251 void InitNVRegisterCombiners()
1252 {
1253     if (!SupportedExtensions.NV_register_combiners)
1254         return;
1255     glCombinerParameterfvNV = (glCombinerParameterfvNVPROC) lglGetProcAddress("glCombinerParameterfvNV");
1256     glCombinerParameterfNV = (glCombinerParameterfNVPROC) lglGetProcAddress("glCombinerParameterfNV");
1257     glCombinerParameterivNV = (glCombinerParameterivNVPROC) lglGetProcAddress("glCombinerParameterivNV");
1258     glCombinerParameteriNV = (glCombinerParameteriNVPROC) lglGetProcAddress("glCombinerParameteriNV");
1259     glCombinerInputNV = (glCombinerInputNVPROC) lglGetProcAddress("glCombinerInputNV");
1260     glCombinerOutputNV = (glCombinerOutputNVPROC) lglGetProcAddress("glCombinerOutputNV");
1261     glFinalCombinerInputNV = (glFinalCombinerInputNVPROC) lglGetProcAddress("glFinalCombinerInputNV");
1262     glGetCombinerInputParameterfvNV = (glGetCombinerInputParameterfvNVPROC) lglGetProcAddress("glGetCombinerInputParameterfvNV");
1263     glGetCombinerInputParameterivNV = (glGetCombinerInputParameterivNVPROC) lglGetProcAddress("glGetCombinerInputParameterivNV");
1264     glGetCombinerOutputParameterfvNV = (glGetCombinerOutputParameterfvNVPROC) lglGetProcAddress("glGetCombinerOutputParameterfvNV");
1265     glGetCombinerOutputParameterivNV = (glGetCombinerOutputParameterivNVPROC) lglGetProcAddress("glGetCombinerOutputParameterivNV");
1266     glGetFinalCombinerInputParameterfvNV = (glGetFinalCombinerInputParameterfvNVPROC) lglGetProcAddress("glGetFinalCombinerInputParameterfvNV");
1267     glGetFinalCombinerInputParameterivNV = (glGetFinalCombinerInputParameterivNVPROC) lglGetProcAddress("glGetFinalCombinerInputParameterivNV");
1268 }
1269
1270 void InitEXTPointParameters()
1271 {
1272     if (!SupportedExtensions.EXT_point_parameters)
1273         return;
1274     glPointParameterfEXT = (glPointParameterfEXTPROC) lglGetProcAddress("glPointParameterfEXT");
1275     glPointParameterfvEXT = (glPointParameterfvEXTPROC) lglGetProcAddress("glPointParameterfvEXT");
1276 }
1277
1278 void InitNVVertexArrayRange()
1279 {
1280     if (!SupportedExtensions.NV_vertex_array_range)
1281         return;
1282     glFlushVertexArrayRangeNV = (glFlushVertexArrayRangeNVPROC) lglGetProcAddress("glFlushVertexArrayRangeNV");
1283     glVertexArrayRangeNV = (glVertexArrayRangeNVPROC) lglGetProcAddress("glVertexArrayRangeNV");
1284 #ifdef WIN32
1285     wglAllocateMemoryNV = (wglAllocateMemoryNVPROC) lglGetProcAddress("wglAllocateMemoryNV");
1286     wglFreeMemoryNV = (wglFreeMemoryNVPROC) lglGetProcAddress("wglFreeMemoryNV");
1287 #endif /* WIN32 */
1288 }
1289  
1290 void InitEXTFogCoord()
1291 {
1292     if (!SupportedExtensions.EXT_fog_coord)
1293         return;
1294     glFogCoordfEXT = (glFogCoordfEXTPROC) lglGetProcAddress("glFogCoordfEXT");
1295     glFogCoordfvEXT = (glFogCoordfvEXTPROC) lglGetProcAddress("glFogCoordfvEXT");
1296     glFogCoorddEXT = (glFogCoorddEXTPROC) lglGetProcAddress("glFogCoorddEXT");
1297     glFogCoorddvEXT = (glFogCoorddvEXTPROC) lglGetProcAddress("glFogCoorddvEXT");
1298     glFogCoordPointerEXT = (glFogCoordPointerEXTPROC) lglGetProcAddress("glFogCoordPointerEXT");
1299 }
1300
1301 void InitEXTSecondaryColor()
1302 {
1303     if (!SupportedExtensions.EXT_secondary_color)
1304         return;
1305     glSecondaryColor3bEXT = (glSecondaryColor3bEXTPROC) lglGetProcAddress("glSecondaryColor3bEXT");
1306     glSecondaryColor3bvEXT = (glSecondaryColor3bvEXTPROC) lglGetProcAddress("glSecondaryColor3bvEXT");
1307     glSecondaryColor3dEXT = (glSecondaryColor3dEXTPROC) lglGetProcAddress("glSecondaryColor3dEXT");
1308     glSecondaryColor3dvEXT = (glSecondaryColor3dvEXTPROC) lglGetProcAddress("glSecondaryColor3dvEXT");
1309     glSecondaryColor3fEXT = (glSecondaryColor3fEXTPROC) lglGetProcAddress("glSecondaryColor3fEXT");
1310     glSecondaryColor3fvEXT = (glSecondaryColor3fvEXTPROC) lglGetProcAddress("glSecondaryColor3fvEXT");
1311     glSecondaryColor3iEXT = (glSecondaryColor3iEXTPROC) lglGetProcAddress("glSecondaryColor3iEXT");
1312     glSecondaryColor3ivEXT = (glSecondaryColor3ivEXTPROC) lglGetProcAddress("glSecondaryColor3ivEXT");
1313     glSecondaryColor3sEXT = (glSecondaryColor3sEXTPROC) lglGetProcAddress("glSecondaryColor3sEXT");
1314     glSecondaryColor3svEXT = (glSecondaryColor3svEXTPROC) lglGetProcAddress("glSecondaryColor3svEXT");
1315     glSecondaryColor3ubEXT = (glSecondaryColor3ubEXTPROC) lglGetProcAddress("glSecondaryColor3ubEXT");
1316     glSecondaryColor3ubvEXT = (glSecondaryColor3ubvEXTPROC) lglGetProcAddress("glSecondaryColor3ubvEXT");
1317     glSecondaryColor3uiEXT = (glSecondaryColor3uiEXTPROC) lglGetProcAddress("glSecondaryColor3uiEXT");
1318     glSecondaryColor3uivEXT = (glSecondaryColor3uivEXTPROC) lglGetProcAddress("glSecondaryColor3uivEXT");
1319     glSecondaryColor3usEXT = (glSecondaryColor3usEXTPROC) lglGetProcAddress("glSecondaryColor3usEXT");
1320     glSecondaryColor3usvEXT = (glSecondaryColor3usvEXTPROC) lglGetProcAddress("glSecondaryColor3usvEXT");
1321     glSecondaryColorPointerEXT = (glSecondaryColorPointerEXTPROC) lglGetProcAddress("glSecondaryColorPointerEXT");
1322 }
1323
1324 void InitEXTCompiledVertexArray()
1325 {
1326     if (!SupportedExtensions.EXT_compiled_vertex_array)
1327         return;
1328     glLockArraysEXT = (glLockArraysEXTPROC) lglGetProcAddress("glLockArraysEXT");
1329     glUnlockArraysEXT = (glUnlockArraysEXTPROC) lglGetProcAddress("glUnlockArraysEXT");
1330 }
1331
1332 void InitARBTransposeMatrix()
1333 {
1334     if (!SupportedExtensions.ARB_transpose_matrix)
1335         return;
1336     glLoadTransposeMatrixfARB = (glLoadTransposeMatrixfPROC) lglGetProcAddress("glLoadTransposeMatrixfARB");
1337     glLoadTransposeMatrixdARB = (glLoadTransposeMatrixdPROC) lglGetProcAddress("glLoadTransposeMatrixdARB");
1338     glMultTransposeMatrixfARB = (glMultTransposeMatrixfPROC) lglGetProcAddress("glMultTransposeMatrixfARB");
1339     glMultTransposeMatrixdARB = (glMultTransposeMatrixdPROC) lglGetProcAddress("glMultTransposeMatrixdARB");
1340 }
1341
1342 void InitARBMultitexture()
1343 {
1344     if (!SupportedExtensions.ARB_multitexture)
1345         return;
1346 #ifdef WIN32
1347     glActiveTextureARB = (glActiveTexturePROC) lglGetProcAddress("glActiveTextureARB");
1348     glClientActiveTextureARB = (glClientActiveTexturePROC) lglGetProcAddress("glClientActiveTextureARB");
1349
1350     glMultiTexCoord1dARB = (glMultiTexCoord1dPROC) lglGetProcAddress("glMultiTexCoord1dARB");
1351     glMultiTexCoord1dvARB = (glMultiTexCoord1dvPROC) lglGetProcAddress("glMultiTexCoord1dvARB");
1352     glMultiTexCoord1fARB = (glMultiTexCoord1fPROC) lglGetProcAddress("glMultiTexCoord1fARB");
1353     glMultiTexCoord1fvARB = (glMultiTexCoord1fvPROC) lglGetProcAddress("glMultiTexCoord1fvARB");
1354     glMultiTexCoord1iARB = (glMultiTexCoord1iPROC) lglGetProcAddress("glMultiTexCoord1iARB");
1355     glMultiTexCoord1ivARB = (glMultiTexCoord1ivPROC) lglGetProcAddress("glMultiTexCoord1ivARB");
1356     glMultiTexCoord1sARB = (glMultiTexCoord1sPROC) lglGetProcAddress("glMultiTexCoord1sARB");
1357     glMultiTexCoord1svARB = (glMultiTexCoord1svPROC) lglGetProcAddress("glMultiTexCoord1svARB");
1358
1359     glMultiTexCoord2dARB = (glMultiTexCoord2dPROC) lglGetProcAddress("glMultiTexCoord2dARB");
1360     glMultiTexCoord2dvARB = (glMultiTexCoord2dvPROC) lglGetProcAddress("glMultiTexCoord2dvARB");
1361     glMultiTexCoord2fARB = (glMultiTexCoord2fPROC) lglGetProcAddress("glMultiTexCoord2fARB");
1362     glMultiTexCoord2fvARB = (glMultiTexCoord2fvPROC) lglGetProcAddress("glMultiTexCoord2fvARB");
1363     glMultiTexCoord2iARB = (glMultiTexCoord2iPROC) lglGetProcAddress("glMultiTexCoord2iARB");
1364     glMultiTexCoord2ivARB = (glMultiTexCoord2ivPROC) lglGetProcAddress("glMultiTexCoord2ivARB");
1365     glMultiTexCoord2sARB = (glMultiTexCoord2sPROC) lglGetProcAddress("glMultiTexCoord2sARB");
1366     glMultiTexCoord2svARB = (glMultiTexCoord2svPROC) lglGetProcAddress("glMultiTexCoord2svARB");
1367
1368     glMultiTexCoord3dARB = (glMultiTexCoord3dPROC) lglGetProcAddress("glMultiTexCoord3dARB");
1369     glMultiTexCoord3dvARB = (glMultiTexCoord3dvPROC) lglGetProcAddress("glMultiTexCoord3dvARB");
1370     glMultiTexCoord3fARB = (glMultiTexCoord3fPROC) lglGetProcAddress("glMultiTexCoord3fARB");
1371     glMultiTexCoord3fvARB = (glMultiTexCoord3fvPROC) lglGetProcAddress("glMultiTexCoord3fvARB");
1372     glMultiTexCoord3iARB = (glMultiTexCoord3iPROC) lglGetProcAddress("glMultiTexCoord3iARB");
1373     glMultiTexCoord3ivARB = (glMultiTexCoord3ivPROC) lglGetProcAddress("glMultiTexCoord3ivARB");
1374     glMultiTexCoord3sARB = (glMultiTexCoord3sPROC) lglGetProcAddress("glMultiTexCoord3sARB");
1375     glMultiTexCoord3svARB = (glMultiTexCoord3svPROC) lglGetProcAddress("glMultiTexCoord3svARB");
1376
1377     glMultiTexCoord4dARB = (glMultiTexCoord4dPROC) lglGetProcAddress("glMultiTexCoord4dARB");
1378     glMultiTexCoord4dvARB = (glMultiTexCoord4dvPROC) lglGetProcAddress("glMultiTexCoord4dvARB");
1379     glMultiTexCoord4fARB = (glMultiTexCoord4fPROC) lglGetProcAddress("glMultiTexCoord4fARB");
1380     glMultiTexCoord4fvARB = (glMultiTexCoord4fvPROC) lglGetProcAddress("glMultiTexCoord4fvARB");
1381     glMultiTexCoord4iARB = (glMultiTexCoord4iPROC) lglGetProcAddress("glMultiTexCoord4iARB");
1382     glMultiTexCoord4ivARB = (glMultiTexCoord4ivPROC) lglGetProcAddress("glMultiTexCoord4ivARB");
1383     glMultiTexCoord4sARB = (glMultiTexCoord4sPROC) lglGetProcAddress("glMultiTexCoord4sARB");
1384     glMultiTexCoord4svARB = (glMultiTexCoord4svPROC) lglGetProcAddress("glMultiTexCoord4svARB");
1385 #endif 
1386 }
1387
1388 void InitOpenGL1_2()
1389 {
1390     char *s = (char*) glGetString(GL_VERSION);
1391     if (!s)
1392         return;
1393     s = strstr(s, "1.");
1394     if (s == NULL) return;
1395     if (s[2] < '2') return;
1396 #ifdef WIN32
1397     glTexImage3D = (glTexImage3DPROC) lglGetProcAddress("glTexImage3D");
1398     glTexSubImage3D = (glTexSubImage3DPROC) lglGetProcAddress("glTexSubImage3D");
1399     glCopyTexSubImage3D = (glCopyTexSubImage3DPROC) lglGetProcAddress("glCopyTexSubImage3D");
1400     glDrawRangeElements = (glDrawRangeElementsPROC) lglGetProcAddress("glDrawRangeElements");
1401 #endif
1402 }
1403
1404 void InitARBImaging()
1405 {
1406     if (!SupportedExtensions.ARB_imaging)
1407         return;
1408     glBlendColor = (glBlendColorPROC) lglGetProcAddress("glBlendColor");
1409     glBlendEquation = (glBlendEquationPROC) lglGetProcAddress("glBlendEquation");
1410     glColorTable = (glColorTablePROC) lglGetProcAddress("glColorTable");
1411     glColorTableParameterfv = (glColorTableParameterfvPROC) lglGetProcAddress("glColorTableParameterfv");
1412     glColorTableParameteriv = (glColorTableParameterivPROC) lglGetProcAddress("glColorTableParameteriv");
1413     glCopyColorTable = (glCopyColorTablePROC) lglGetProcAddress("glCopyColorTable");
1414     glGetColorTable = (glGetColorTablePROC) lglGetProcAddress("glGetColorTable");
1415     glGetColorTableParameterfv = (glGetColorTableParameterfvPROC) lglGetProcAddress("glGetColorTableParameterfv");
1416     glGetColorTableParameteriv = (glGetColorTableParameterivPROC) lglGetProcAddress("glGetColorTableParameteriv");
1417     glColorSubTable = (glColorSubTablePROC) lglGetProcAddress("glColorSubTable");
1418     glCopyColorSubTable = (glCopyColorSubTablePROC) lglGetProcAddress("glCopyColorSubTable");
1419     glConvolutionFilter1D = (glConvolutionFilter1DPROC) lglGetProcAddress("glConvolutionFilter1D");
1420     glConvolutionFilter2D = (glConvolutionFilter2DPROC) lglGetProcAddress("glConvolutionFilter2D");
1421     glConvolutionParameterf = (glConvolutionParameterfPROC) lglGetProcAddress("glConvolutionParameterf");
1422     glConvolutionParameterfv = (glConvolutionParameterfvPROC) lglGetProcAddress("glConvolutionParameterfv");
1423     glConvolutionParameteri = (glConvolutionParameteriPROC) lglGetProcAddress("glConvolutionParameteri");
1424     glConvolutionParameteriv = (glConvolutionParameterivPROC) lglGetProcAddress("glConvolutionParameteriv");
1425     glCopyConvolutionFilter1D = (glCopyConvolutionFilter1DPROC) lglGetProcAddress("glCopyConvolutionFilter1D");
1426     glCopyConvolutionFilter2D = (glCopyConvolutionFilter2DPROC) lglGetProcAddress("glCopyConvolutionFilter2D");
1427     glGetConvolutionFilter = (glGetConvolutionFilterPROC) lglGetProcAddress("glGetConvolutionFilter");
1428     glGetConvolutionParameterfv = (glGetConvolutionParameterfvPROC) lglGetProcAddress("glGetConvolutionParameterfv");
1429     glGetConvolutionParameteriv = (glGetConvolutionParameterivPROC) lglGetProcAddress("glGetConvolutionParameteriv");
1430     glGetSeparableFilter = (glGetSeparableFilterPROC) lglGetProcAddress("glGetSeparableFilter");
1431     glSeparableFilter2D = (glSeparableFilter2DPROC) lglGetProcAddress("glSeparableFilter2D");
1432     glGetHistogram = (glGetHistogramPROC) lglGetProcAddress("glGetHistogram");
1433     glGetHistogramParameterfv = (glGetHistogramParameterfvPROC) lglGetProcAddress("glGetHistogramParameterfv");
1434     glGetHistogramParameteriv = (glGetHistogramParameterivPROC) lglGetProcAddress("glGetHistogramParameteriv");
1435     glGetMinmax = (glGetMinmaxPROC) lglGetProcAddress("glGetMinmax");
1436     glGetMinmaxParameterfv = (glGetMinmaxParameterfvPROC) lglGetProcAddress("glGetMinmaxParameterfv");
1437     glGetMinmaxParameteriv = (glGetMinmaxParameterivPROC) lglGetProcAddress("glGetMinmaxParameteriv");
1438     glHistogram = (glHistogramPROC) lglGetProcAddress("glHistogram");
1439     glMinmax = (glMinmaxPROC) lglGetProcAddress("glMinmax");
1440     glResetHistogram = (glResetHistogramPROC) lglGetProcAddress("glResetHistogram");
1441     glResetMinmax = (glResetMinmaxPROC) lglGetProcAddress("glResetMinmax");
1442 }
1443
1444 void InitOpenGL1_3()
1445 {
1446     char *s = (char*) glGetString(GL_VERSION);
1447     if (!s) return;
1448     s = strstr(s, "1.");
1449     if (s == NULL) return;
1450     if (s[2] < '3') return;
1451 #ifdef WIN32    
1452     glActiveTexture = (glActiveTexturePROC) lglGetProcAddress("glActiveTexture");
1453     glClientActiveTexture = (glClientActiveTexturePROC) lglGetProcAddress("glClientActiveTexture");
1454
1455     glMultiTexCoord1d = (glMultiTexCoord1dPROC) lglGetProcAddress("glMultiTexCoord1d");
1456     glMultiTexCoord1dv = (glMultiTexCoord1dvPROC) lglGetProcAddress("glMultiTexCoord1dv");
1457     glMultiTexCoord1f = (glMultiTexCoord1fPROC) lglGetProcAddress("glMultiTexCoord1f");
1458     glMultiTexCoord1fv = (glMultiTexCoord1fvPROC) lglGetProcAddress("glMultiTexCoord1fv");
1459     glMultiTexCoord1i = (glMultiTexCoord1iPROC) lglGetProcAddress("glMultiTexCoord1i");
1460     glMultiTexCoord1iv = (glMultiTexCoord1ivPROC) lglGetProcAddress("glMultiTexCoord1iv");
1461     glMultiTexCoord1s = (glMultiTexCoord1sPROC) lglGetProcAddress("glMultiTexCoord1s");
1462     glMultiTexCoord1sv = (glMultiTexCoord1svPROC) lglGetProcAddress("glMultiTexCoord1sv");
1463
1464     glMultiTexCoord2d = (glMultiTexCoord2dPROC) lglGetProcAddress("glMultiTexCoord2d");
1465     glMultiTexCoord2dv = (glMultiTexCoord2dvPROC) lglGetProcAddress("glMultiTexCoord2dv");
1466     glMultiTexCoord2f = (glMultiTexCoord2fPROC) lglGetProcAddress("glMultiTexCoord2f");
1467     glMultiTexCoord2fv = (glMultiTexCoord2fvPROC) lglGetProcAddress("glMultiTexCoord2fv");
1468     glMultiTexCoord2i = (glMultiTexCoord2iPROC) lglGetProcAddress("glMultiTexCoord2i");
1469     glMultiTexCoord2iv = (glMultiTexCoord2ivPROC) lglGetProcAddress("glMultiTexCoord2iv");
1470     glMultiTexCoord2s = (glMultiTexCoord2sPROC) lglGetProcAddress("glMultiTexCoord2s");
1471     glMultiTexCoord2sv = (glMultiTexCoord2svPROC) lglGetProcAddress("glMultiTexCoord2sv");
1472
1473     glMultiTexCoord3d = (glMultiTexCoord3dPROC) lglGetProcAddress("glMultiTexCoord3d");
1474     glMultiTexCoord3dv = (glMultiTexCoord3dvPROC) lglGetProcAddress("glMultiTexCoord3dv");
1475     glMultiTexCoord3f = (glMultiTexCoord3fPROC) lglGetProcAddress("glMultiTexCoord3f");
1476     glMultiTexCoord3fv = (glMultiTexCoord3fvPROC) lglGetProcAddress("glMultiTexCoord3fv");
1477     glMultiTexCoord3i = (glMultiTexCoord3iPROC) lglGetProcAddress("glMultiTexCoord3i");
1478     glMultiTexCoord3iv = (glMultiTexCoord3ivPROC) lglGetProcAddress("glMultiTexCoord3iv");
1479     glMultiTexCoord3s = (glMultiTexCoord3sPROC) lglGetProcAddress("glMultiTexCoord3s");
1480     glMultiTexCoord3sv = (glMultiTexCoord3svPROC) lglGetProcAddress("glMultiTexCoord3sv");
1481
1482     glMultiTexCoord4d = (glMultiTexCoord4dPROC) lglGetProcAddress("glMultiTexCoord4d");
1483     glMultiTexCoord4dv = (glMultiTexCoord4dvPROC) lglGetProcAddress("glMultiTexCoord4dv");
1484     glMultiTexCoord4f = (glMultiTexCoord4fPROC) lglGetProcAddress("glMultiTexCoord4f");
1485     glMultiTexCoord4fv = (glMultiTexCoord4fvPROC) lglGetProcAddress("glMultiTexCoord4fv");
1486     glMultiTexCoord4i = (glMultiTexCoord4iPROC) lglGetProcAddress("glMultiTexCoord4i");
1487     glMultiTexCoord4iv = (glMultiTexCoord4ivPROC) lglGetProcAddress("glMultiTexCoord4iv");
1488     glMultiTexCoord4s = (glMultiTexCoord4sPROC) lglGetProcAddress("glMultiTexCoord4s");
1489     glMultiTexCoord4sv = (glMultiTexCoord4svPROC) lglGetProcAddress("glMultiTexCoord4sv");
1490
1491     glLoadTransposeMatrixf = (glLoadTransposeMatrixfPROC) lglGetProcAddress("glLoadTransposeMatrixf");
1492     glLoadTransposeMatrixd = (glLoadTransposeMatrixdPROC) lglGetProcAddress("glLoadTransposeMatrixd");
1493     glMultTransposeMatrixf = (glMultTransposeMatrixfPROC) lglGetProcAddress("glMultTransposeMatrixf");
1494     glMultTransposeMatrixd = (glMultTransposeMatrixdPROC) lglGetProcAddress("glMultTransposeMatrixd");
1495     glCompressedTexImage3D = (glCompressedTexImage3DPROC) lglGetProcAddress("glCompressedTexImage3D");
1496     glCompressedTexImage2D = (glCompressedTexImage2DPROC) lglGetProcAddress("glCompressedTexImage2D");
1497     glCompressedTexImage1D = (glCompressedTexImage1DPROC) lglGetProcAddress("glCompressedTexImage1D");
1498     glCompressedTexSubImage3D = (glCompressedTexSubImage3DPROC) lglGetProcAddress("glCompressedTexSubImage3D");
1499     glCompressedTexSubImage2D = (glCompressedTexSubImage2DPROC) lglGetProcAddress("glCompressedTexSubImage2D");
1500     glCompressedTexSubImage1D = (glCompressedTexSubImage1DPROC) lglGetProcAddress("glCompressedTexSubImage1D");
1501     glGetCompressedTexImage = (glGetCompressedTexImagePROC) lglGetProcAddress("glGetCompressedTexImage");
1502
1503     glSampleCoverage = (glSampleCoveragePROC) lglGetProcAddress("glSampleCoverage");
1504 #endif
1505 }
1506
1507 #endif /* __PROTOTYPE__ */
1508
1509 void InitSupportedExtensions()
1510 {
1511     char *s = (char*) glGetString(GL_VERSION);
1512     if (!s)
1513         return;
1514     s = strstr(s, "1.");
1515     if (s == NULL)
1516     {
1517         SupportedExtensions.OpenGL12 = 0;    
1518         SupportedExtensions.OpenGL13 = 0;    
1519     }
1520     if (s[2] < '2')
1521     {
1522         SupportedExtensions.OpenGL12 = 0;    
1523         SupportedExtensions.OpenGL13 = 0;    
1524     }
1525     if (s[2] <= '2')
1526     {
1527         SupportedExtensions.OpenGL12 = 1;    
1528         SupportedExtensions.OpenGL13 = 0;    
1529     }
1530     if (s[2] <= '3')
1531     {
1532         SupportedExtensions.OpenGL12 = 1;    
1533         SupportedExtensions.OpenGL13 = 1;    
1534     }
1535     SupportedExtensions.ARB_imaging = QueryExtension("GL_ARB_imaging");
1536     SupportedExtensions.ARB_matrix_palette = QueryExtension("GL_ARB_matrix_palette");
1537     SupportedExtensions.ARB_multisample = QueryExtension("GL_ARB_multisample");
1538     SupportedExtensions.ARB_multitexture = QueryExtension("GL_ARB_multitexture");
1539     SupportedExtensions.ARB_point_parameters = QueryExtension("GL_ARB_point_parameters");
1540     SupportedExtensions.ARB_texture_border_clamp = QueryExtension("GL_ARB_texture_border_clamp");
1541     SupportedExtensions.ARB_texture_compression = QueryExtension("GL_ARB_texture_compression");
1542     SupportedExtensions.ARB_texture_cube_map = QueryExtension("GL_ARB_texture_cube_map");
1543     SupportedExtensions.ARB_texture_env_add = QueryExtension("GL_ARB_texture_env_add");
1544     SupportedExtensions.ARB_texture_env_combine = QueryExtension("GL_ARB_texture_env_combine");
1545     SupportedExtensions.ARB_texture_env_crossbar = QueryExtension("GL_ARB_texture_env_crossbar");
1546     SupportedExtensions.ARB_texture_env_dot3 = QueryExtension("GL_ARB_texture_env_dot3");
1547     SupportedExtensions.ARB_transpose_matrix = QueryExtension("GL_ARB_transpose_matrix");
1548     SupportedExtensions.ARB_vertex_blend = QueryExtension("GL_ARB_vertex_blend");
1549     SupportedExtensions.ATI_element_array = QueryExtension("GL_ATI_element_array");
1550     SupportedExtensions.ATI_envmap_bumpmap = QueryExtension("GL_ATI_envmap_bumpmap");
1551     SupportedExtensions.ATI_fragment_shader = QueryExtension("GL_ATI_fragment_shader");
1552     SupportedExtensions.ATI_pn_triangles = QueryExtension("GL_ATI_pn_triangles");
1553     SupportedExtensions.ATI_texture_mirror_once = QueryExtension("GL_ATI_texture_mirror_once");
1554     SupportedExtensions.ATI_vertex_array_object = QueryExtension("GL_ATI_vertex_array_object");
1555     SupportedExtensions.ATI_vertex_streams = QueryExtension("GL_ATI_vertex_streams");
1556     SupportedExtensions.ATIX_point_sprites = QueryExtension("GL_ATIX_point_sprites");
1557     SupportedExtensions.ATIX_texture_env_route = QueryExtension("GL_ATIX_texture_env_route");
1558     SupportedExtensions.EXT_abgr = QueryExtension("GL_EXT_abgr");
1559     SupportedExtensions.EXT_compiled_vertex_array = QueryExtension("GL_EXT_compiled_vertex_array");
1560     SupportedExtensions.EXT_fog_coord = QueryExtension("GL_EXT_fog_coord");
1561     SupportedExtensions.EXT_multi_draw_arrays = QueryExtension("GL_EXT_multi_draw_arrays");
1562     SupportedExtensions.EXT_point_parameters = QueryExtension("GL_EXT_point_parameters");
1563     SupportedExtensions.EXT_secondary_color = QueryExtension("GL_EXT_secondary_color");
1564     SupportedExtensions.EXT_stencil_wrap = QueryExtension("GL_EXT_stencil_wrap");
1565     SupportedExtensions.EXT_texture_filter_anisotropic = QueryExtension("GL_EXT_texture_filter_anisotropic");
1566     SupportedExtensions.EXT_texture_lod_bias = QueryExtension("GL_EXT_texture_lod_bias");
1567     SupportedExtensions.EXT_vertex_shader = QueryExtension("GL_EXT_vertex_shader");
1568     SupportedExtensions.EXT_vertex_weighting = QueryExtension("GL_EXT_vertex_weighting");
1569     SupportedExtensions.HP_occlusion_test = QueryExtension("GL_HP_occlusion_test");
1570     SupportedExtensions.NV_blend_square = QueryExtension("GL_NV_blend_square");
1571     SupportedExtensions.NV_copy_depth_to_color = QueryExtension("GL_NV_copy_depth_to_color");
1572     SupportedExtensions.NV_depth_clamp = QueryExtension("GL_NV_depth_clamp");
1573     SupportedExtensions.NV_evaluators = QueryExtension("GL_NV_evaluators");
1574     SupportedExtensions.NV_fence = QueryExtension("GL_NV_fence");
1575     SupportedExtensions.NV_fog_distance = QueryExtension("GL_NV_fog_distance");
1576     SupportedExtensions.NV_light_max_exponent = QueryExtension("GL_NV_light_max_exponent");
1577     SupportedExtensions.NV_occlusion_query = QueryExtension("GL_NV_occlusion_query");
1578     SupportedExtensions.NV_packed_depth_stencil = QueryExtension("GL_NV_packed_depth_stencil");
1579     SupportedExtensions.NV_point_sprite = QueryExtension("GL_NV_point_sprite");
1580     SupportedExtensions.NV_register_combiners = QueryExtension("GL_NV_register_combiners");
1581     SupportedExtensions.NV_register_combiners2 = QueryExtension("GL_NV_register_combiners2");
1582     SupportedExtensions.NV_texgen_reflection = QueryExtension("GL_NV_texgen_reflection");
1583     SupportedExtensions.NV_texture_env_combine4 = QueryExtension("GL_NV_texture_env_combine4");
1584     SupportedExtensions.NV_texture_rectangle = QueryExtension("GL_NV_texture_rectangle");
1585     SupportedExtensions.NV_texture_shader = QueryExtension("GL_NV_texture_shader");
1586     SupportedExtensions.NV_texture_shader2 = QueryExtension("GL_NV_texture_shader2");
1587     SupportedExtensions.NV_texture_shader3 = QueryExtension("GL_NV_texture_shader3");
1588     SupportedExtensions.NV_vertex_array_range = QueryExtension("GL_NV_vertex_array_range");
1589     SupportedExtensions.NV_vertex_array_range2 = QueryExtension("GL_NV_vertex_array_range2");
1590     SupportedExtensions.NV_vertex_program = QueryExtension("GL_NV_vertex_program");
1591     SupportedExtensions.NV_vertex_program1_1 = QueryExtension("GL_NV_vertex_program1_1");
1592     SupportedExtensions.SGIS_generate_mipmap = QueryExtension("GL_SGIS_generate_mipmap");
1593     SupportedExtensions.SGIX_depth_texture = QueryExtension("GL_SGIX_depth_texture");
1594     SupportedExtensions.SGIX_shadow = QueryExtension("GL_SGIX_shadow");
1595     SupportedExtensions.ARB_texture_mirrored_repeat = QueryExtension("GL_ARB_texture_mirrored_repeat");
1596     SupportedExtensions.ARB_depth_texture = QueryExtension("GL_ARB_depth_texture");
1597     SupportedExtensions.ARB_shadow = QueryExtension("GL_ARB_shadow");
1598     SupportedExtensions.ARB_shadow_ambient = QueryExtension("GL_ARB_shadow_ambient");
1599     SupportedExtensions.ARB_window_pos = QueryExtension("GL_ARB_window_pos");
1600     SupportedExtensions.EXT_shadow_funcs = QueryExtension("GL_EXT_shadow_funcs");
1601 }
1602
1603 /* init the extensions and load all the functions */
1604 int glInitialize()
1605 {
1606     error = 0;
1607     InitSupportedExtensions();
1608     
1609     /* first load the etensions */
1610     InitARBImaging();
1611     InitARBTransposeMatrix();
1612     InitARBMultisample();
1613     InitEXTCompiledVertexArray();
1614     InitEXTSecondaryColor();
1615     InitEXTFogCoord();
1616     InitNVVertexArrayRange();
1617     InitEXTPointParameters();
1618     InitNVRegisterCombiners();
1619     InitEXTVertexWeighting();
1620     InitNVVertexProgram();
1621     InitNVFence();
1622     InitNVRegisterCombiners2();
1623     InitATIPNTriangles();
1624     InitARBPointParameters();
1625     InitARBVertexBlend();
1626     InitEXTMultiDrawArrays();
1627     InitARBMatrixPalette();
1628     InitEXTVertexShader();
1629     InitATIEnvmapBumpmap();
1630     InitATIFragmentShader();
1631     InitATIElementArray();
1632     InitATIVertexStreams();
1633     InitATIVertexArrayObject();
1634     InitNVOcclusionQuery();
1635     InitNVPointSprite();
1636     InitARBWindowPos();
1637
1638 #ifdef WIN32
1639     InitARBMultitexture();
1640     /* now load core opengl */
1641     InitOpenGL1_2();
1642     InitOpenGL1_3();
1643     wglInitialize(_dc);
1644 #endif
1645     return error;
1646 }
1647