1 // glext.cpp
2 //
3 // Copyright (C) 2001, Chris Laurel <claurel@shatters.net>
4 //
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
9 
10 #include <string.h>
11 #include "gl.h"
12 
13 #ifndef _WIN32
14 // Assume that this is a UNIX/X11 system if it's not Windows or Mac OS X.
15 #ifndef TARGET_OS_MAC
16 #include "GL/glx.h"
17 #include <dlfcn.h>
18 #endif /* ! TARGET_OS_MAC */
19 #endif /* ! _WIN32 */
20 
21 #include "glext.h"
22 
23 // ARB_texture_compression
24 glx::PFNGLCOMPRESSEDTEXIMAGE3DARBPROC glx::glCompressedTexImage3DARB;
25 glx::PFNGLCOMPRESSEDTEXIMAGE2DARBPROC glx::glCompressedTexImage2DARB;
26 glx::PFNGLCOMPRESSEDTEXIMAGE1DARBPROC glx::glCompressedTexImage1DARB;
27 glx::PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC glx::glCompressedTexSubImage3DARB;
28 glx::PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC glx::glCompressedTexSubImage2DARB;
29 glx::PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC glx::glCompressedTexSubImage1DARB;
30 
31 // ARB_multitexture command function pointers
32 glx::PFNGLMULTITEXCOORD2IARBPROC glx::glMultiTexCoord2iARB;
33 glx::PFNGLMULTITEXCOORD2FARBPROC glx::glMultiTexCoord2fARB;
34 glx::PFNGLMULTITEXCOORD3FARBPROC glx::glMultiTexCoord3fARB;
35 glx::PFNGLMULTITEXCOORD3FVARBPROC glx::glMultiTexCoord3fvARB;
36 glx::PFNGLACTIVETEXTUREARBPROC glx::glActiveTextureARB;
37 glx::PFNGLCLIENTACTIVETEXTUREARBPROC glx::glClientActiveTextureARB;
38 
39 // NV_register_combiners command function pointers
40 glx::PFNGLCOMBINERPARAMETERFVNVPROC glx::glCombinerParameterfvNV;
41 glx::PFNGLCOMBINERPARAMETERIVNVPROC glx::glCombinerParameterivNV;
42 glx::PFNGLCOMBINERPARAMETERFNVPROC glx::glCombinerParameterfNV;
43 glx::PFNGLCOMBINERPARAMETERINVPROC glx::glCombinerParameteriNV;
44 glx::PFNGLCOMBINERINPUTNVPROC glx::glCombinerInputNV;
45 glx::PFNGLCOMBINEROUTPUTNVPROC glx::glCombinerOutputNV;
46 glx::PFNGLFINALCOMBINERINPUTNVPROC glx::glFinalCombinerInputNV;
47 glx::PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC glx::glGetCombinerInputParameterfvNV;
48 glx::PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC glx::glGetCombinerInputParameterivNV;
49 glx::PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC glx::glGetCombinerOutputParameterfvNV;
50 glx::PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC glx::glGetCombinerOutputParameterivNV;
51 glx::PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC glx::glGetFinalCombinerInputParameterfvNV;
52 glx::PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC glx::glGetFinalCombinerInputParameterivNV;
53 
54 // NV_register_combiners2 command function pointers
55 glx::PFNGLCOMBINERSTAGEPARAMETERFVNVPROC glx::glCombinerStageParameterfvNV;
56 glx::PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC glx::glGetCombinerStageParameterfvNV;
57 
58 // NV_vertex_program function pointers
59 glx::PFNGLAREPROGRAMSRESIDENTNVPROC glx::glAreProgramsResidentNV ;
60 glx::PFNGLBINDPROGRAMNVPROC glx::glBindProgramNV ;
61 glx::PFNGLDELETEPROGRAMSNVPROC glx::glDeleteProgramsNV ;
62 glx::PFNGLEXECUTEPROGRAMNVPROC glx::glExecuteProgramNV ;
63 glx::PFNGLGENPROGRAMSNVPROC glx::glGenProgramsNV ;
64 glx::PFNGLGETPROGRAMPARAMETERDVNVPROC glx::glGetProgramParameterdvNV ;
65 glx::PFNGLGETPROGRAMPARAMETERFVNVPROC glx::glGetProgramParameterfvNV ;
66 glx::PFNGLGETPROGRAMIVNVPROC glx::glGetProgramivNV ;
67 glx::PFNGLGETPROGRAMSTRINGNVPROC glx::glGetProgramStringNV ;
68 glx::PFNGLGETTRACKMATRIXIVNVPROC glx::glGetTrackMatrixivNV ;
69 glx::PFNGLGETVERTEXATTRIBDVNVPROC glx::glGetVertexAttribdvNV ;
70 glx::PFNGLGETVERTEXATTRIBFVNVPROC glx::glGetVertexAttribfvNV ;
71 glx::PFNGLGETVERTEXATTRIBIVNVPROC glx::glGetVertexAttribivNV ;
72 glx::PFNGLGETVERTEXATTRIBPOINTERVNVPROC glx::glGetVertexAttribPointervNV ;
73 glx::PFNGLISPROGRAMNVPROC glx::glIsProgramNV ;
74 glx::PFNGLLOADPROGRAMNVPROC glx::glLoadProgramNV ;
75 glx::PFNGLPROGRAMPARAMETER4DNVPROC glx::glProgramParameter4dNV ;
76 glx::PFNGLPROGRAMPARAMETER4DVNVPROC glx::glProgramParameter4dvNV ;
77 glx::PFNGLPROGRAMPARAMETER4FNVPROC glx::glProgramParameter4fNV ;
78 glx::PFNGLPROGRAMPARAMETER4FVNVPROC glx::glProgramParameter4fvNV ;
79 glx::PFNGLPROGRAMPARAMETERS4DVNVPROC glx::glProgramParameters4dvNV ;
80 glx::PFNGLPROGRAMPARAMETERS4FVNVPROC glx::glProgramParameters4fvNV ;
81 glx::PFNGLREQUESTRESIDENTPROGRAMSNVPROC glx::glRequestResidentProgramsNV ;
82 glx::PFNGLTRACKMATRIXNVPROC glx::glTrackMatrixNV ;
83 glx::PFNGLVERTEXATTRIBPOINTERNVPROC glx::glVertexAttribPointerNV ;
84 glx::PFNGLVERTEXATTRIB1DNVPROC glx::glVertexAttrib1dNV ;
85 glx::PFNGLVERTEXATTRIB1DVNVPROC glx::glVertexAttrib1dvNV ;
86 glx::PFNGLVERTEXATTRIB1FNVPROC glx::glVertexAttrib1fNV ;
87 glx::PFNGLVERTEXATTRIB1FVNVPROC glx::glVertexAttrib1fvNV ;
88 glx::PFNGLVERTEXATTRIB1SNVPROC glx::glVertexAttrib1sNV ;
89 glx::PFNGLVERTEXATTRIB1SVNVPROC glx::glVertexAttrib1svNV ;
90 glx::PFNGLVERTEXATTRIB2DNVPROC glx::glVertexAttrib2dNV ;
91 glx::PFNGLVERTEXATTRIB2DVNVPROC glx::glVertexAttrib2dvNV ;
92 glx::PFNGLVERTEXATTRIB2FNVPROC glx::glVertexAttrib2fNV ;
93 glx::PFNGLVERTEXATTRIB2FVNVPROC glx::glVertexAttrib2fvNV ;
94 glx::PFNGLVERTEXATTRIB2SNVPROC glx::glVertexAttrib2sNV ;
95 glx::PFNGLVERTEXATTRIB2SVNVPROC glx::glVertexAttrib2svNV ;
96 glx::PFNGLVERTEXATTRIB3DNVPROC glx::glVertexAttrib3dNV ;
97 glx::PFNGLVERTEXATTRIB3DVNVPROC glx::glVertexAttrib3dvNV ;
98 glx::PFNGLVERTEXATTRIB3FNVPROC glx::glVertexAttrib3fNV ;
99 glx::PFNGLVERTEXATTRIB3FVNVPROC glx::glVertexAttrib3fvNV ;
100 glx::PFNGLVERTEXATTRIB3SNVPROC glx::glVertexAttrib3sNV ;
101 glx::PFNGLVERTEXATTRIB3SVNVPROC glx::glVertexAttrib3svNV ;
102 glx::PFNGLVERTEXATTRIB4DNVPROC glx::glVertexAttrib4dNV ;
103 glx::PFNGLVERTEXATTRIB4DVNVPROC glx::glVertexAttrib4dvNV ;
104 glx::PFNGLVERTEXATTRIB4FNVPROC glx::glVertexAttrib4fNV ;
105 glx::PFNGLVERTEXATTRIB4FVNVPROC glx::glVertexAttrib4fvNV ;
106 glx::PFNGLVERTEXATTRIB4SNVPROC glx::glVertexAttrib4sNV ;
107 glx::PFNGLVERTEXATTRIB4SVNVPROC glx::glVertexAttrib4svNV ;
108 glx::PFNGLVERTEXATTRIB4UBVNVPROC glx::glVertexAttrib4ubvNV ;
109 glx::PFNGLVERTEXATTRIBS1DVNVPROC glx::glVertexAttribs1dvNV ;
110 glx::PFNGLVERTEXATTRIBS1FVNVPROC glx::glVertexAttribs1fvNV ;
111 glx::PFNGLVERTEXATTRIBS1SVNVPROC glx::glVertexAttribs1svNV ;
112 glx::PFNGLVERTEXATTRIBS2DVNVPROC glx::glVertexAttribs2dvNV ;
113 glx::PFNGLVERTEXATTRIBS2FVNVPROC glx::glVertexAttribs2fvNV ;
114 glx::PFNGLVERTEXATTRIBS2SVNVPROC glx::glVertexAttribs2svNV ;
115 glx::PFNGLVERTEXATTRIBS3DVNVPROC glx::glVertexAttribs3dvNV ;
116 glx::PFNGLVERTEXATTRIBS3FVNVPROC glx::glVertexAttribs3fvNV ;
117 glx::PFNGLVERTEXATTRIBS3SVNVPROC glx::glVertexAttribs3svNV ;
118 glx::PFNGLVERTEXATTRIBS4DVNVPROC glx::glVertexAttribs4dvNV ;
119 glx::PFNGLVERTEXATTRIBS4FVNVPROC glx::glVertexAttribs4fvNV ;
120 glx::PFNGLVERTEXATTRIBS4SVNVPROC glx::glVertexAttribs4svNV ;
121 glx::PFNGLVERTEXATTRIBS4UBVNVPROC glx::glVertexAttribs4ubvNV ;
122 
123 // EXT_paletted_texture command function pointers
124 glx::PFNGLCOLORTABLEEXTPROC glx::glColorTableEXT;
125 
126 // EXT_blend_minmax command function pointers
127 glx::PFNGLBLENDEQUATIONEXTPROC glx::glBlendEquationEXT;
128 
129 // WGL_EXT_swap_control command function pointers
130 glx::PFNWGLSWAPINTERVALEXTPROC glx::wglSwapIntervalEXT;
131 glx::PFNWGLGETSWAPINTERVALEXTPROC glx::wglGetSwapIntervalEXT;
132 
133 // GLX_SGI_video_sync command function pointers
134 glx::PFNGLXGETVIDEOSYNCSGIPROC glx::glXGetVideoSyncSGI;
135 glx::PFNGLXWAITVIDEOSYNCSGIPROC glx::glXWaitVideoSyncSGI;
136 glx::PFNGLXGETREFRESHRATESGIPROC glx::glXGetRefreshRateSGI;
137 
138 // ARB_vertex_program function pointers
139 glx::PFNGLBINDPROGRAMARBPROC glx::glBindProgramARB;
140 glx::PFNGLDELETEPROGRAMSARBPROC glx::glDeleteProgramsARB;
141 glx::PFNGLGENPROGRAMSARBPROC glx::glGenProgramsARB;
142 glx::PFNGLISPROGRAMARBPROC glx::glIsProgramARB;
143 glx::PFNGLVERTEXATTRIB1SARBPROC glx::glVertexAttrib1sARB;
144 glx::PFNGLVERTEXATTRIB1FARBPROC glx::glVertexAttrib1fARB;
145 glx::PFNGLVERTEXATTRIB1DARBPROC glx::glVertexAttrib1dARB;
146 glx::PFNGLVERTEXATTRIB2SARBPROC glx::glVertexAttrib2sARB;
147 glx::PFNGLVERTEXATTRIB2FARBPROC glx::glVertexAttrib2fARB;
148 glx::PFNGLVERTEXATTRIB2DARBPROC glx::glVertexAttrib2dARB;
149 glx::PFNGLVERTEXATTRIB3SARBPROC glx::glVertexAttrib3sARB;
150 glx::PFNGLVERTEXATTRIB3FARBPROC glx::glVertexAttrib3fARB;
151 glx::PFNGLVERTEXATTRIB3DARBPROC glx::glVertexAttrib3dARB;
152 glx::PFNGLVERTEXATTRIB4SARBPROC glx::glVertexAttrib4sARB;
153 glx::PFNGLVERTEXATTRIB4FARBPROC glx::glVertexAttrib4fARB;
154 glx::PFNGLVERTEXATTRIB4DARBPROC glx::glVertexAttrib4dARB;
155 glx::PFNGLVERTEXATTRIB4NUBARBPROC glx::glVertexAttrib4NubARB;
156 glx::PFNGLVERTEXATTRIB1SVARBPROC glx::glVertexAttrib1svARB;
157 glx::PFNGLVERTEXATTRIB1FVARBPROC glx::glVertexAttrib1fvARB;
158 glx::PFNGLVERTEXATTRIB1DVARBPROC glx::glVertexAttrib1dvARB;
159 glx::PFNGLVERTEXATTRIB2SVARBPROC glx::glVertexAttrib2svARB;
160 glx::PFNGLVERTEXATTRIB2FVARBPROC glx::glVertexAttrib2fvARB;
161 glx::PFNGLVERTEXATTRIB2DVARBPROC glx::glVertexAttrib2dvARB;
162 glx::PFNGLVERTEXATTRIB3SVARBPROC glx::glVertexAttrib3svARB;
163 glx::PFNGLVERTEXATTRIB3FVARBPROC glx::glVertexAttrib3fvARB;
164 glx::PFNGLVERTEXATTRIB3DVARBPROC glx::glVertexAttrib3dvARB;
165 glx::PFNGLVERTEXATTRIB4BVARBPROC glx::glVertexAttrib4bvARB;
166 glx::PFNGLVERTEXATTRIB4SVARBPROC glx::glVertexAttrib4svARB;
167 glx::PFNGLVERTEXATTRIB4IVARBPROC glx::glVertexAttrib4ivARB;
168 glx::PFNGLVERTEXATTRIB4UBVARBPROC glx::glVertexAttrib4ubvARB;
169 glx::PFNGLVERTEXATTRIB4USVARBPROC glx::glVertexAttrib4usvARB;
170 glx::PFNGLVERTEXATTRIB4UIVARBPROC glx::glVertexAttrib4uivARB;
171 glx::PFNGLVERTEXATTRIB4FVARBPROC glx::glVertexAttrib4fvARB;
172 glx::PFNGLVERTEXATTRIB4DVARBPROC glx::glVertexAttrib4dvARB;
173 glx::PFNGLVERTEXATTRIB4NBVARBPROC glx::glVertexAttrib4NbvARB;
174 glx::PFNGLVERTEXATTRIB4NSVARBPROC glx::glVertexAttrib4NsvARB;
175 glx::PFNGLVERTEXATTRIB4NIVARBPROC glx::glVertexAttrib4NivARB;
176 glx::PFNGLVERTEXATTRIB4NUBVARBPROC glx::glVertexAttrib4NubvARB;
177 glx::PFNGLVERTEXATTRIB4NUSVARBPROC glx::glVertexAttrib4NusvARB;
178 glx::PFNGLVERTEXATTRIB4NUIVARBPROC glx::glVertexAttrib4NuivARB;
179 glx::PFNGLVERTEXATTRIBPOINTERARBPROC glx::glVertexAttribPointerARB;
180 glx::PFNGLENABLEVERTEXATTRIBARRAYARBPROC glx::glEnableVertexAttribArrayARB;
181 glx::PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glx::glDisableVertexAttribArrayARB;
182 glx::PFNGLGETVERTEXATTRIBDVARBPROC glx::glGetVertexAttribdvARB;
183 glx::PFNGLGETVERTEXATTRIBFVARBPROC glx::glGetVertexAttribfvARB;
184 glx::PFNGLGETVERTEXATTRIBIVARBPROC glx::glGetVertexAttribivARB;
185 glx::PFNGLGETVERTEXATTRIBPOINTERVARBPROC glx::glGetVertexAttribPointervARB;
186 glx::PFNGLPROGRAMENVPARAMETER4DARBPROC glx::glProgramEnvParameter4dARB;
187 glx::PFNGLPROGRAMENVPARAMETER4DVARBPROC glx::glProgramEnvParameter4dvARB;
188 glx::PFNGLPROGRAMENVPARAMETER4FARBPROC glx::glProgramEnvParameter4fARB;
189 glx::PFNGLPROGRAMENVPARAMETER4FVARBPROC glx::glProgramEnvParameter4fvARB;
190 glx::PFNGLPROGRAMLOCALPARAMETER4DARBPROC glx::glProgramLocalParameter4dARB;
191 glx::PFNGLPROGRAMLOCALPARAMETER4DVARBPROC glx::glProgramLocalParameter4dvARB;
192 glx::PFNGLPROGRAMLOCALPARAMETER4FARBPROC glx::glProgramLocalParameter4fARB;
193 glx::PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glx::glProgramLocalParameter4fvARB;
194 glx::PFNGLGETPROGRAMENVPARAMETERDVARBPROC glx::glGetProgramEnvParameterdvARB;
195 glx::PFNGLGETPROGRAMENVPARAMETERFVARBPROC glx::glGetProgramEnvParameterfvARB;
196 glx::PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glx::glGetProgramLocalParameterdvARB;
197 glx::PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC glx::glGetProgramLocalParameterfvARB;
198 glx::PFNGLPROGRAMSTRINGARBPROC glx::glProgramStringARB;
199 glx::PFNGLGETPROGRAMSTRINGARBPROC glx::glGetProgramStringARB;
200 glx::PFNGLGETPROGRAMIVARBPROC glx::glGetProgramivARB;
201 
202 // NV_fragment_program function pointers
203 glx::PFNGLPROGRAMNAMEDPARAMETER4FNVPROC    glx::glProgramNamedParameter4fNV;
204 glx::PFNGLPROGRAMNAMEDPARAMETER4DNVPROC    glx::glProgramNamedParameter4dNV;
205 glx::PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC   glx::glProgramNamedParameter4fvNV;
206 glx::PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC   glx::glProgramNamedParameter4dvNV;
207 glx::PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC glx::glGetProgramNamedParameterfvNV;
208 glx::PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC glx::glGetProgramNamedParameterdvNV;
209 glx::PFNGLPROGRAMLOCALPARAMETER4FNVPROC    glx::glProgramLocalParameter4fNV;
210 glx::PFNGLPROGRAMLOCALPARAMETER4DNVPROC    glx::glProgramLocalParameter4dNV;
211 glx::PFNGLPROGRAMLOCALPARAMETER4FVNVPROC   glx::glProgramLocalParameter4fvNV;
212 glx::PFNGLPROGRAMLOCALPARAMETER4DVNVPROC   glx::glProgramLocalParameter4dvNV;
213 glx::PFNGLGETPROGRAMLOCALPARAMETERFVNVPROC glx::glGetProgramLocalParameterfvNV;
214 glx::PFNGLGETPROGRAMLOCALPARAMETERDVNVPROC glx::glGetProgramLocalParameterdvNV;
215 
216 // ARB_vertex_buffer_object function pointers
217 glx::PFNGLBINDBUFFERARBPROC                glx::glBindBufferARB;
218 glx::PFNGLDELETEBUFFERSARBPROC             glx::glDeleteBuffersARB;
219 glx::PFNGLGENBUFFERSARBPROC                glx::glGenBuffersARB;
220 glx::PFNGLISBUFFERARBPROC                  glx::glIsBufferARB;
221 glx::PFNGLBUFFERDATAARBPROC                glx::glBufferDataARB;
222 glx::PFNGLBUFFERSUBDATAARBPROC             glx::glBufferSubDataARB;
223 glx::PFNGLGETBUFFERSUBDATAARBPROC          glx::glGetBufferSubDataARB;
224 glx::PFNGLMAPBUFFERARBPROC                 glx::glMapBufferARB;
225 glx::PFNGLUNMAPBUFFERARBPROC               glx::glUnmapBufferARB;
226 glx::PFNGLGETBUFFERPARAMETERIVARBPROC      glx::glGetBufferParameterivARB;
227 glx::PFNGLGETBUFFERPOINTERVARBPROC         glx::glGetBufferPointervARB;
228 
229 // ARB_vertex_shader function pointers
230 glx::PFNGLBINDATTRIBLOCATIONARBPROC        glx::glBindAttribLocationARB;
231 glx::PFNGLGETACTIVEATTRIBARBPROC           glx::glGetActiveAttribARB;
232 glx::PFNGLGETATTRIBLOCATIONARBPROC         glx::glGetAttribLocationARB;
233 
234 // ARB_shader_objects function pointers
235 glx::PFNGLDELETEOBJECTARBPROC              glx::glDeleteObjectARB;
236 glx::PFNGLGETHANDLEARBPROC                 glx::glGetHandleARB;
237 glx::PFNGLDETACHOBJECTARBPROC              glx::glDetachObjectARB;
238 glx::PFNGLCREATESHADEROBJECTARBPROC        glx::glCreateShaderObjectARB;
239 glx::PFNGLSHADERSOURCEARBPROC              glx::glShaderSourceARB;
240 glx::PFNGLCOMPILESHADERARBPROC             glx::glCompileShaderARB;
241 glx::PFNGLCREATEPROGRAMOBJECTARBPROC       glx::glCreateProgramObjectARB;
242 glx::PFNGLATTACHOBJECTARBPROC              glx::glAttachObjectARB;
243 glx::PFNGLLINKPROGRAMARBPROC               glx::glLinkProgramARB;
244 glx::PFNGLUSEPROGRAMOBJECTARBPROC          glx::glUseProgramObjectARB;
245 glx::PFNGLVALIDATEPROGRAMARBPROC           glx::glValidateProgramARB;
246 glx::PFNGLUNIFORM1FARBPROC                 glx::glUniform1fARB;
247 glx::PFNGLUNIFORM2FARBPROC                 glx::glUniform2fARB;
248 glx::PFNGLUNIFORM3FARBPROC                 glx::glUniform3fARB;
249 glx::PFNGLUNIFORM4FARBPROC                 glx::glUniform4fARB;
250 glx::PFNGLUNIFORM1IARBPROC                 glx::glUniform1iARB;
251 glx::PFNGLUNIFORM2IARBPROC                 glx::glUniform2iARB;
252 glx::PFNGLUNIFORM3IARBPROC                 glx::glUniform3iARB;
253 glx::PFNGLUNIFORM4IARBPROC                 glx::glUniform4iARB;
254 glx::PFNGLUNIFORM1FVARBPROC                glx::glUniform1fvARB;
255 glx::PFNGLUNIFORM2FVARBPROC                glx::glUniform2fvARB;
256 glx::PFNGLUNIFORM3FVARBPROC                glx::glUniform3fvARB;
257 glx::PFNGLUNIFORM4FVARBPROC                glx::glUniform4fvARB;
258 glx::PFNGLUNIFORM1IVARBPROC                glx::glUniform1ivARB;
259 glx::PFNGLUNIFORM2IVARBPROC                glx::glUniform2ivARB;
260 glx::PFNGLUNIFORM3IVARBPROC                glx::glUniform3ivARB;
261 glx::PFNGLUNIFORM4IVARBPROC                glx::glUniform4ivARB;
262 glx::PFNGLUNIFORMMATRIX2FVARBPROC          glx::glUniformMatrix2fvARB;
263 glx::PFNGLUNIFORMMATRIX3FVARBPROC          glx::glUniformMatrix3fvARB;
264 glx::PFNGLUNIFORMMATRIX4FVARBPROC          glx::glUniformMatrix4fvARB;
265 glx::PFNGLGETOBJECTPARAMETERFVARBPROC      glx::glGetObjectParameterfvARB;
266 glx::PFNGLGETOBJECTPARAMETERIVARBPROC      glx::glGetObjectParameterivARB;
267 glx::PFNGLGETINFOLOGARBPROC                glx::glGetInfoLogARB;
268 glx::PFNGLGETATTACHEDOBJECTSARBPROC        glx::glGetAttachedObjectsARB;
269 glx::PFNGLGETUNIFORMLOCATIONARBPROC        glx::glGetUniformLocationARB;
270 glx::PFNGLGETACTIVEUNIFORMARBPROC          glx::glGetActiveUniformARB;
271 glx::PFNGLGETUNIFORMFVARBPROC              glx::glGetUniformfvARB;
272 glx::PFNGLGETUNIFORMIVARBPROC              glx::glGetUniformivARB;
273 glx::PFNGLGETSHADERSOURCEARBPROC           glx::glGetShaderSourceARB;
274 
275 // ARB_color_buffer_float
276 glx::PFNGLCLAMPCOLORARBPROC                glx::glClampColorARB;
277 
278 // EXT_framebuffer_object
279 glx::PFNGLISRENDERBUFFEREXTPROC                       glx::glIsRenderbufferEXT;
280 glx::PFNGLBINDRENDERBUFFEREXTPROC                     glx::glBindRenderbufferEXT;
281 glx::PFNGLDELETERENDERBUFFERSEXTPROC                  glx::glDeleteRenderbuffersEXT;
282 glx::PFNGLGENRENDERBUFFERSEXTPROC                     glx::glGenRenderbuffersEXT;
283 glx::PFNGLRENDERBUFFERSTORAGEEXTPROC                  glx::glRenderbufferStorageEXT;
284 glx::PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC           glx::glGetRenderbufferParameterivEXT;
285 glx::PFNGLISFRAMEBUFFEREXTPROC                        glx::glIsFramebufferEXT;
286 glx::PFNGLBINDFRAMEBUFFEREXTPROC                      glx::glBindFramebufferEXT;
287 glx::PFNGLDELETEFRAMEBUFFERSEXTPROC                   glx::glDeleteFramebuffersEXT;
288 glx::PFNGLGENFRAMEBUFFERSEXTPROC                      glx::glGenFramebuffersEXT;
289 glx::PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC               glx::glCheckFramebufferStatusEXT;
290 glx::PFNGLFRAMEBUFFERTEXTURE1DEXTPROC                 glx::glFramebufferTexture1DEXT;
291 glx::PFNGLFRAMEBUFFERTEXTURE2DEXTPROC                 glx::glFramebufferTexture2DEXT;
292 glx::PFNGLFRAMEBUFFERTEXTURE3DEXTPROC                 glx::glFramebufferTexture3DEXT;
293 glx::PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC              glx::glFramebufferRenderbufferEXT;
294 glx::PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC  glx::glGetFramebufferAttachmentParameterivEXT;
295 glx::PFNGLGENERATEMIPMAPEXTPROC                       glx::glGenerateMipmapEXT;
296 
297 
298 // extern void Alert(const char *szFormat, ...);
299 
300 #if defined(QT_OPENGL_LIB) && defined(_WIN32) && !defined(_MSC_VER)
301 
302 // TODO: We should use something other than a global GL context
303 #include <QGLContext>
304 extern QGLContext* glctx;
305 #define GET_GL_PROC_ADDRESS(name) glctx->getProcAddress(name)
306 
307 #else
308 
309 #ifndef TARGET_OS_MAC
310 #if defined(_WIN32)
311 
312 #define GET_GL_PROC_ADDRESS(name) wglGetProcAddress(name)
313 
314 #else
315 
316 #ifdef GLX_VERSION_1_4
317 extern "C" {
318 extern void (*glXGetProcAddressARB(const GLubyte *procName))();
319 }
320 #define GET_GL_PROC_ADDRESS(name) GetGLProcAddress((GLubyte*) (name))
321 #else
322 #define GET_GL_PROC_ADDRESS(name) GetGLProcAddress((GLubyte*) (name))
323 #endif
324 
325 typedef void (*FUNCS) (void);
326 
327 // Works around an apparent problem in ATI's libGL.so where glXGetProcAddress
328 // returns NULL.
GetGLProcAddress(const GLubyte * procName)329 FUNCS GetGLProcAddress(const GLubyte* procName)
330 {
331     FUNCS func = glXGetProcAddressARB(procName);
332     if (!func)
333     {
334         void* libGL = dlopen(0, RTLD_LAZY);
335         func = (FUNCS) dlsym(libGL, (const char*) procName);
336         dlclose(libGL);
337     }
338 
339     return func;
340 }
341 
342 #endif // defined(WIN32)
343 #endif // !TARGET_OS_MAC
344 
345 #endif // QT_CORE_LIB
346 
347 
348 #ifdef TARGET_OS_MAC
349 #include <mach-o/dyld.h>
350 #include <stdio.h>
351 typedef void (*FUNCS) (void);
352 const struct mach_header *openGLImagePtr = NULL;
osxGetProcAddress(const GLubyte * procName)353 FUNCS osxGetProcAddress(const GLubyte *procName) {
354     char myProcName[128];
355     NSSymbol mySymbol = NULL;
356     FUNCS myPtr = NULL;
357     if (openGLImagePtr == NULL) {
358         openGLImagePtr = NSAddImage("/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL",NSADDIMAGE_OPTION_RETURN_ON_ERROR);
359 #if 0
360         unsigned long i;
361         unsigned long imageCount = _dyld_image_count();
362         for (i=0;i<imageCount;++i) {
363             printf("Image[%d] = %s\n",(int)i,_dyld_get_image_name(i));
364             if (!strcmp(_dyld_get_image_name(i),"/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL")) {
365                 printf("Found OpenGL image.\n");
366                 openGLImagePtr = _dyld_get_image_header(i);
367                 break;
368             }
369         }
370 #endif
371     }
372     if (openGLImagePtr == NULL) {
373         printf("Can't find OpenGL??\n");
374         return NULL;
375     }
376     strcpy(myProcName,"_");
377 
378     /* sanity check */
379     if (strlen((char *)procName)>125) return NULL;
380     strcat(myProcName,(char *)procName);
381     //printf("%s\n",myProcName);
382     //if (NSIsSymbolNameDefinedInImage(openGLImagePtr,myProcName) != FALSE) {
383     mySymbol = NSLookupSymbolInImage(openGLImagePtr, myProcName, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND_NOW | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR);
384     if (mySymbol != NULL)
385         myPtr = (FUNCS)NSAddressOfSymbol(mySymbol);
386     //printf("  (symbol, address) -> (%08x -> %08x)\n",(unsigned int)mySymbol,(unsigned int)myPtr);
387     return myPtr;
388     //}
389 }
390 #define GET_GL_PROC_ADDRESS(name) osxGetProcAddress((GLubyte *)name)
391 #endif /* TARGET_OS_MAC */
392 
393 
Alert(const char,...)394 void Alert(const char /* *szFormat*/, ...)
395 {
396 }
397 
398 
399 // ARB_multitexture
InitExt_ARB_multitexture()400 static void InitExt_ARB_multitexture()
401 {
402 // #ifndef GL_ARB_multitexture
403 #ifdef GET_GL_PROC_ADDRESS
404     glx::glMultiTexCoord2iARB = (glx::PFNGLMULTITEXCOORD2IARBPROC) GET_GL_PROC_ADDRESS("glMultiTexCoord2iARB");
405     glx::glMultiTexCoord2fARB = (glx::PFNGLMULTITEXCOORD2FARBPROC) GET_GL_PROC_ADDRESS("glMultiTexCoord2fARB");
406     glx::glMultiTexCoord3fARB = (glx::PFNGLMULTITEXCOORD3FARBPROC) GET_GL_PROC_ADDRESS("glMultiTexCoord3fARB");
407     glx::glMultiTexCoord3fvARB = (glx::PFNGLMULTITEXCOORD3FVARBPROC) GET_GL_PROC_ADDRESS("glMultiTexCoord3fvARB");
408     glx::glActiveTextureARB = (glx::PFNGLACTIVETEXTUREARBPROC) GET_GL_PROC_ADDRESS("glActiveTextureARB");
409     glx::glClientActiveTextureARB = (glx::PFNGLCLIENTACTIVETEXTUREARBPROC) GET_GL_PROC_ADDRESS("glClientActiveTextureARB");
410 #endif // GET_GL_PROC_ADDRESS
411 // #endif // GL_ARB_multitexture
412 }
413 
414 
InitExt_ARB_texture_compression()415 static void InitExt_ARB_texture_compression()
416 {
417 #if defined(GET_GL_PROC_ADDRESS)
418     glx::glCompressedTexImage3DARB =
419         (glx::PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)
420         GET_GL_PROC_ADDRESS("glCompressedTexImage3DARB");
421     glx::glCompressedTexImage2DARB =
422         (glx::PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)
423         GET_GL_PROC_ADDRESS("glCompressedTexImage2DARB");
424     glx::glCompressedTexImage1DARB =
425         (glx::PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)
426         GET_GL_PROC_ADDRESS("glCompressedTexImage1DARB");
427     glx::glCompressedTexSubImage3DARB =
428         (glx::PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)
429         GET_GL_PROC_ADDRESS("glCompressedTexSubImage3DARB");
430     glx::glCompressedTexSubImage2DARB =
431         (glx::PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)
432         GET_GL_PROC_ADDRESS("glCompressedTexSubImage2DARB");
433     glx::glCompressedTexSubImage1DARB =
434         (glx::PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)
435         GET_GL_PROC_ADDRESS("glCompressedTexSubImage1DARB");
436 #endif // GL_ARB_texture_compression
437 }
438 
439 
440 // NV_register_combiners
InitExt_NV_register_combiners()441 static void InitExt_NV_register_combiners()
442 {
443 #if defined(GET_GL_PROC_ADDRESS)
444   /* Retrieve all NV_register_combiners routines. */
445   glx::glCombinerParameterfvNV = (glx::PFNGLCOMBINERPARAMETERFVNVPROC) GET_GL_PROC_ADDRESS("glCombinerParameterfvNV");
446   glx::glCombinerParameterivNV = (glx::PFNGLCOMBINERPARAMETERIVNVPROC) GET_GL_PROC_ADDRESS("glCombinerParameterivNV");
447   glx::glCombinerParameterfNV = (glx::PFNGLCOMBINERPARAMETERFNVPROC) GET_GL_PROC_ADDRESS("glCombinerParameterfNV");
448   glx::glCombinerParameteriNV = (glx::PFNGLCOMBINERPARAMETERINVPROC) GET_GL_PROC_ADDRESS("glCombinerParameteriNV");
449   glx::glCombinerInputNV = (glx::PFNGLCOMBINERINPUTNVPROC) GET_GL_PROC_ADDRESS("glCombinerInputNV");
450   glx::glCombinerOutputNV = (glx::PFNGLCOMBINEROUTPUTNVPROC) GET_GL_PROC_ADDRESS("glCombinerOutputNV");
451   glx::glFinalCombinerInputNV = (glx::PFNGLFINALCOMBINERINPUTNVPROC) GET_GL_PROC_ADDRESS("glFinalCombinerInputNV");
452   glx::glGetCombinerInputParameterfvNV = (glx::PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) GET_GL_PROC_ADDRESS("glGetCombinerInputParameterfvNV");
453   glx::glGetCombinerInputParameterivNV = (glx::PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) GET_GL_PROC_ADDRESS("glGetCombinerInputParameterivNV");
454   glx::glGetCombinerOutputParameterfvNV = (glx::PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) GET_GL_PROC_ADDRESS("glGetCombinerOutputParameterfvNV");
455   glx::glGetCombinerOutputParameterivNV = (glx::PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) GET_GL_PROC_ADDRESS("glGetCombinerOutputParameterivNV");
456   glx::glGetFinalCombinerInputParameterfvNV = (glx::PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) GET_GL_PROC_ADDRESS("glGetFinalCombinerInputParameterfvNV");
457   glx::glGetFinalCombinerInputParameterivNV = (glx::PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) GET_GL_PROC_ADDRESS("glGetFinalCombinerInputParameterivNV");
458 #endif // GET_GL_PROC_ADDRESS
459 }
460 
461 
InitExt_NV_register_combiners2()462 static void InitExt_NV_register_combiners2()
463 {
464 #if defined(GET_GL_PROC_ADDRESS)
465     /* Retrieve all NV_register_combiners routines. */
466     glx::glCombinerStageParameterfvNV = (glx::PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) GET_GL_PROC_ADDRESS("glCombinerStageParameterfvNV");
467     glx::glGetCombinerStageParameterfvNV = (glx::PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) GET_GL_PROC_ADDRESS("glGetCombinerStageParameterfvNV");
468 #endif
469 }
470 
471 
InitExt_NV_vertex_program()472 static void InitExt_NV_vertex_program()
473 {
474 #if defined(GET_GL_PROC_ADDRESS)
475     glx::glAreProgramsResidentNV =
476         (glx::PFNGLAREPROGRAMSRESIDENTNVPROC)
477         GET_GL_PROC_ADDRESS("glAreProgramsResidentNV");
478     glx::glBindProgramNV =
479         (glx::PFNGLBINDPROGRAMNVPROC)
480         GET_GL_PROC_ADDRESS("glBindProgramNV");
481     glx::glDeleteProgramsNV =
482         (glx::PFNGLDELETEPROGRAMSNVPROC)
483         GET_GL_PROC_ADDRESS("glDeleteProgramsNV");
484     glx::glExecuteProgramNV =
485         (glx::PFNGLEXECUTEPROGRAMNVPROC)
486         GET_GL_PROC_ADDRESS("glExecuteProgramNV");
487     glx::glGenProgramsNV =
488         (glx::PFNGLGENPROGRAMSNVPROC)
489         GET_GL_PROC_ADDRESS("glGenProgramsNV");
490     glx::glGetProgramParameterdvNV =
491         (glx::PFNGLGETPROGRAMPARAMETERDVNVPROC)
492         GET_GL_PROC_ADDRESS("glGetProgramParameterdvNV");
493     glx::glGetProgramParameterfvNV =
494         (glx::PFNGLGETPROGRAMPARAMETERFVNVPROC)
495         GET_GL_PROC_ADDRESS("glGetProgramParameterfvNV");
496     glx::glGetProgramivNV =
497         (glx::PFNGLGETPROGRAMIVNVPROC)
498         GET_GL_PROC_ADDRESS("glGetProgramivNV");
499     glx::glGetProgramStringNV =
500         (glx::PFNGLGETPROGRAMSTRINGNVPROC)
501         GET_GL_PROC_ADDRESS("glGetProgramStringNV");
502     glx::glGetTrackMatrixivNV =
503         (glx::PFNGLGETTRACKMATRIXIVNVPROC)
504         GET_GL_PROC_ADDRESS("glGetTrackMatrixivNV");
505     glx::glGetVertexAttribdvNV =
506         (glx::PFNGLGETVERTEXATTRIBDVNVPROC)
507         GET_GL_PROC_ADDRESS("glGetVertexAttribdvNV");
508     glx::glGetVertexAttribfvNV =
509         (glx::PFNGLGETVERTEXATTRIBFVNVPROC)
510         GET_GL_PROC_ADDRESS("glGetVertexAttribfvNV");
511     glx::glGetVertexAttribivNV =
512         (glx::PFNGLGETVERTEXATTRIBIVNVPROC)
513         GET_GL_PROC_ADDRESS("glGetVertexAttribivNV");
514     glx::glGetVertexAttribPointervNV =
515         (glx::PFNGLGETVERTEXATTRIBPOINTERVNVPROC)
516         GET_GL_PROC_ADDRESS("glGetVertexAttribPointervNV");
517     glx::glIsProgramNV =
518         (glx::PFNGLISPROGRAMNVPROC)
519         GET_GL_PROC_ADDRESS("glIsProgramNV");
520     glx::glLoadProgramNV =
521         (glx::PFNGLLOADPROGRAMNVPROC)
522         GET_GL_PROC_ADDRESS("glLoadProgramNV");
523     glx::glProgramParameter4dNV =
524         (glx::PFNGLPROGRAMPARAMETER4DNVPROC)
525         GET_GL_PROC_ADDRESS("glProgramParameter4dNV");
526     glx::glProgramParameter4dvNV =
527         (glx::PFNGLPROGRAMPARAMETER4DVNVPROC)
528         GET_GL_PROC_ADDRESS("glProgramParameter4dvNV");
529     glx::glProgramParameter4fNV =
530         (glx::PFNGLPROGRAMPARAMETER4FNVPROC)
531         GET_GL_PROC_ADDRESS("glProgramParameter4fNV");
532     glx::glProgramParameter4fvNV =
533         (glx::PFNGLPROGRAMPARAMETER4FVNVPROC)
534         GET_GL_PROC_ADDRESS("glProgramParameter4fvNV");
535     glx::glProgramParameters4dvNV =
536         (glx::PFNGLPROGRAMPARAMETERS4DVNVPROC)
537         GET_GL_PROC_ADDRESS("glProgramParameters4dvNV");
538     glx::glProgramParameters4fvNV =
539         (glx::PFNGLPROGRAMPARAMETERS4FVNVPROC)
540         GET_GL_PROC_ADDRESS("glProgramParameters4fvNV");
541     glx::glRequestResidentProgramsNV =
542         (glx::PFNGLREQUESTRESIDENTPROGRAMSNVPROC)
543         GET_GL_PROC_ADDRESS("glRequestResidentProgramsNV");
544     glx::glTrackMatrixNV =
545         (glx::PFNGLTRACKMATRIXNVPROC)
546         GET_GL_PROC_ADDRESS("glTrackMatrixNV");
547     glx::glVertexAttribPointerNV =
548         (glx::PFNGLVERTEXATTRIBPOINTERNVPROC)
549         GET_GL_PROC_ADDRESS("glVertexAttribPointerNV");
550     glx::glVertexAttrib1dNV =
551         (glx::PFNGLVERTEXATTRIB1DNVPROC)
552         GET_GL_PROC_ADDRESS("glVertexAttrib1dNV");
553     glx::glVertexAttrib1dvNV =
554         (glx::PFNGLVERTEXATTRIB1DVNVPROC)
555         GET_GL_PROC_ADDRESS("glVertexAttrib1dvNV");
556     glx::glVertexAttrib1fNV =
557         (glx::PFNGLVERTEXATTRIB1FNVPROC)
558         GET_GL_PROC_ADDRESS("glVertexAttrib1fNV");
559     glx::glVertexAttrib1fvNV =
560         (glx::PFNGLVERTEXATTRIB1FVNVPROC)
561         GET_GL_PROC_ADDRESS("glVertexAttrib1fvNV");
562     glx::glVertexAttrib1sNV =
563         (glx::PFNGLVERTEXATTRIB1SNVPROC)
564         GET_GL_PROC_ADDRESS("glVertexAttrib1sNV");
565     glx::glVertexAttrib1svNV =
566         (glx::PFNGLVERTEXATTRIB1SVNVPROC)
567         GET_GL_PROC_ADDRESS("glVertexAttrib1svNV");
568     glx::glVertexAttrib2dNV =
569         (glx::PFNGLVERTEXATTRIB2DNVPROC)
570         GET_GL_PROC_ADDRESS("glVertexAttrib2dNV");
571     glx::glVertexAttrib2dvNV =
572         (glx::PFNGLVERTEXATTRIB2DVNVPROC)
573         GET_GL_PROC_ADDRESS("glVertexAttrib2dvNV");
574     glx::glVertexAttrib2fNV =
575         (glx::PFNGLVERTEXATTRIB2FNVPROC)
576         GET_GL_PROC_ADDRESS("glVertexAttrib2fNV");
577     glx::glVertexAttrib2fvNV =
578         (glx::PFNGLVERTEXATTRIB2FVNVPROC)
579         GET_GL_PROC_ADDRESS("glVertexAttrib2fvNV");
580     glx::glVertexAttrib2sNV =
581         (glx::PFNGLVERTEXATTRIB2SNVPROC)
582         GET_GL_PROC_ADDRESS("glVertexAttrib2sNV");
583     glx::glVertexAttrib2svNV =
584         (glx::PFNGLVERTEXATTRIB2SVNVPROC)
585         GET_GL_PROC_ADDRESS("glVertexAttrib2svNV");
586     glx::glVertexAttrib3dNV =
587         (glx::PFNGLVERTEXATTRIB3DNVPROC)
588         GET_GL_PROC_ADDRESS("glVertexAttrib3dNV");
589     glx::glVertexAttrib3dvNV =
590         (glx::PFNGLVERTEXATTRIB3DVNVPROC)
591         GET_GL_PROC_ADDRESS("glVertexAttrib3dvNV");
592     glx::glVertexAttrib3fNV =
593         (glx::PFNGLVERTEXATTRIB3FNVPROC)
594         GET_GL_PROC_ADDRESS("glVertexAttrib3fNV");
595     glx::glVertexAttrib3fvNV =
596         (glx::PFNGLVERTEXATTRIB3FVNVPROC)
597         GET_GL_PROC_ADDRESS("glVertexAttrib3fvNV");
598     glx::glVertexAttrib3sNV =
599         (glx::PFNGLVERTEXATTRIB3SNVPROC)
600         GET_GL_PROC_ADDRESS("glVertexAttrib3sNV");
601     glx::glVertexAttrib3svNV =
602         (glx::PFNGLVERTEXATTRIB3SVNVPROC)
603         GET_GL_PROC_ADDRESS("glVertexAttrib3svNV");
604     glx::glVertexAttrib4dNV =
605         (glx::PFNGLVERTEXATTRIB4DNVPROC)
606         GET_GL_PROC_ADDRESS("glVertexAttrib4dNV");
607     glx::glVertexAttrib4dvNV =
608         (glx::PFNGLVERTEXATTRIB4DVNVPROC)
609         GET_GL_PROC_ADDRESS("glVertexAttrib4dvNV");
610     glx::glVertexAttrib4fNV =
611         (glx::PFNGLVERTEXATTRIB4FNVPROC)
612         GET_GL_PROC_ADDRESS("glVertexAttrib4fNV");
613     glx::glVertexAttrib4fvNV =
614         (glx::PFNGLVERTEXATTRIB4FVNVPROC)
615         GET_GL_PROC_ADDRESS("glVertexAttrib4fvNV");
616     glx::glVertexAttrib4sNV =
617         (glx::PFNGLVERTEXATTRIB4SNVPROC)
618         GET_GL_PROC_ADDRESS("glVertexAttrib4sNV");
619     glx::glVertexAttrib4svNV =
620         (glx::PFNGLVERTEXATTRIB4SVNVPROC)
621         GET_GL_PROC_ADDRESS("glVertexAttrib4svNV");
622     glx::glVertexAttrib4ubvNV =
623         (glx::PFNGLVERTEXATTRIB4UBVNVPROC)
624         GET_GL_PROC_ADDRESS("glVertexAttrib4ubvNV");
625     glx::glVertexAttribs1dvNV =
626         (glx::PFNGLVERTEXATTRIBS1DVNVPROC)
627         GET_GL_PROC_ADDRESS("glVertexAttribs1dvNV");
628     glx::glVertexAttribs1fvNV =
629         (glx::PFNGLVERTEXATTRIBS1FVNVPROC)
630         GET_GL_PROC_ADDRESS("glVertexAttribs1fvNV");
631     glx::glVertexAttribs1svNV =
632         (glx::PFNGLVERTEXATTRIBS1SVNVPROC)
633         GET_GL_PROC_ADDRESS("glVertexAttribs1svNV");
634     glx::glVertexAttribs2dvNV =
635         (glx::PFNGLVERTEXATTRIBS2DVNVPROC)
636         GET_GL_PROC_ADDRESS("glVertexAttribs2dvNV");
637     glx::glVertexAttribs2fvNV =
638         (glx::PFNGLVERTEXATTRIBS2FVNVPROC)
639         GET_GL_PROC_ADDRESS("glVertexAttribs2fvNV");
640     glx::glVertexAttribs2svNV =
641         (glx::PFNGLVERTEXATTRIBS2SVNVPROC)
642         GET_GL_PROC_ADDRESS("glVertexAttribs2svNV");
643     glx::glVertexAttribs3dvNV =
644         (glx::PFNGLVERTEXATTRIBS3DVNVPROC)
645         GET_GL_PROC_ADDRESS("glVertexAttribs3dvNV");
646     glx::glVertexAttribs3fvNV =
647         (glx::PFNGLVERTEXATTRIBS3FVNVPROC)
648         GET_GL_PROC_ADDRESS("glVertexAttribs3fvNV");
649     glx::glVertexAttribs3svNV =
650         (glx::PFNGLVERTEXATTRIBS3SVNVPROC)
651         GET_GL_PROC_ADDRESS("glVertexAttribs3svNV");
652     glx::glVertexAttribs4dvNV =
653         (glx::PFNGLVERTEXATTRIBS4DVNVPROC)
654         GET_GL_PROC_ADDRESS("glVertexAttribs4dvNV");
655     glx::glVertexAttribs4fvNV =
656         (glx::PFNGLVERTEXATTRIBS4FVNVPROC)
657         GET_GL_PROC_ADDRESS("glVertexAttribs4fvNV");
658     glx::glVertexAttribs4svNV =
659         (glx::PFNGLVERTEXATTRIBS4SVNVPROC)
660         GET_GL_PROC_ADDRESS("glVertexAttribs4svNV");
661     glx::glVertexAttribs4ubvNV =
662         (glx::PFNGLVERTEXATTRIBS4UBVNVPROC)
663         GET_GL_PROC_ADDRESS("glVertexAttribs4ubvNV");
664 #endif
665 }
666 
667 
InitExt_EXT_paletted_texture()668 static void InitExt_EXT_paletted_texture()
669 {
670 #if defined(GET_GL_PROC_ADDRESS)
671     glx::glColorTableEXT = (glx::PFNGLCOLORTABLEEXTPROC) GET_GL_PROC_ADDRESS("glColorTableEXT");
672 #endif
673 }
674 
675 
InitExt_EXT_blend_minmax()676 static void InitExt_EXT_blend_minmax()
677 {
678 #if defined(GET_GL_PROC_ADDRESS)
679     glx::glBlendEquationEXT = (glx::PFNGLBLENDEQUATIONEXTPROC) GET_GL_PROC_ADDRESS("glBlendEquationEXT");
680 #endif
681 }
682 
683 
InitExt_EXT_swap_control()684 static void InitExt_EXT_swap_control()
685 {
686 #ifdef _WIN32
687     glx::wglSwapIntervalEXT = (glx::PFNWGLSWAPINTERVALEXTPROC) GET_GL_PROC_ADDRESS("wglSwapIntervalEXT");
688     glx::wglGetSwapIntervalEXT = (glx::PFNWGLGETSWAPINTERVALEXTPROC) GET_GL_PROC_ADDRESS("wglGetSwapIntervalEXT");
689 #endif // _WIN32
690 }
691 
692 
InitExt_GLX_SGI_video_sync()693 static void InitExt_GLX_SGI_video_sync()
694 {
695     glx::glXGetVideoSyncSGI = (glx::PFNGLXGETVIDEOSYNCSGIPROC) GET_GL_PROC_ADDRESS("glXGetVideoSyncSGI");
696     glx::glXWaitVideoSyncSGI = (glx::PFNGLXWAITVIDEOSYNCSGIPROC) GET_GL_PROC_ADDRESS("glXWaitVideoSyncSGI");
697     glx::glXGetRefreshRateSGI = (glx::PFNGLXGETREFRESHRATESGIPROC) GET_GL_PROC_ADDRESS("glXGetRefreshRateSGI");
698 }
699 
700 
InitExt_NV_fragment_program()701 static void InitExt_NV_fragment_program()
702 {
703 #if defined(GET_GL_PROC_ADDRESS)
704     glx::glProgramNamedParameter4fNV = (glx::PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) GET_GL_PROC_ADDRESS("glProgramNamedParameter4fNV");
705     glx::glProgramNamedParameter4dNV = (glx::PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) GET_GL_PROC_ADDRESS("glProgramNamedParameter4dNV");
706     glx::glProgramNamedParameter4fvNV = (glx::PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) GET_GL_PROC_ADDRESS("glProgramNamedParameter4fvNV");
707     glx::glProgramNamedParameter4dvNV = (glx::PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) GET_GL_PROC_ADDRESS("glProgramNamedParameter4dvNV");
708     glx::glGetProgramNamedParameterfvNV = (glx::PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) GET_GL_PROC_ADDRESS("glGetProgramNamedParameterfvNV");
709     glx::glGetProgramNamedParameterdvNV = (glx::PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) GET_GL_PROC_ADDRESS("glGetProgramNamedParameterdvNV");
710     glx::glProgramLocalParameter4fNV = (glx::PFNGLPROGRAMLOCALPARAMETER4FNVPROC) GET_GL_PROC_ADDRESS("glProgramLocalParameter4fNV");
711     glx::glProgramLocalParameter4dNV = (glx::PFNGLPROGRAMLOCALPARAMETER4DNVPROC) GET_GL_PROC_ADDRESS("glProgramLocalParameter4dNV");
712     glx::glProgramLocalParameter4fvNV = (glx::PFNGLPROGRAMLOCALPARAMETER4FVNVPROC) GET_GL_PROC_ADDRESS("glProgramLocalParameter4fvNV");
713     glx::glProgramLocalParameter4dvNV = (glx::PFNGLPROGRAMLOCALPARAMETER4DVNVPROC) GET_GL_PROC_ADDRESS("glProgramLocalParameter4dvNV");
714     glx::glGetProgramLocalParameterfvNV = (glx::PFNGLGETPROGRAMLOCALPARAMETERFVNVPROC) GET_GL_PROC_ADDRESS("glGetProgramLocalParameterfvNV");
715     glx::glGetProgramLocalParameterdvNV = (glx::PFNGLGETPROGRAMLOCALPARAMETERDVNVPROC) GET_GL_PROC_ADDRESS("glGetProgramLocalParameterdvNV");
716 #endif // GET_GL_PROC_ADDRESS
717 }
718 
719 
InitExt_ARB_vertex_program()720 static void InitExt_ARB_vertex_program()
721 {
722 #if defined(GET_GL_PROC_ADDRESS)
723     glx::glBindProgramARB = (glx::PFNGLBINDPROGRAMARBPROC) GET_GL_PROC_ADDRESS("glBindProgramARB");
724     glx::glDeleteProgramsARB = (glx::PFNGLDELETEPROGRAMSARBPROC) GET_GL_PROC_ADDRESS("glDeleteProgramsARB");
725     glx::glGenProgramsARB = (glx::PFNGLGENPROGRAMSARBPROC) GET_GL_PROC_ADDRESS("glGenProgramsARB");
726     glx::glIsProgramARB = (glx::PFNGLISPROGRAMARBPROC) GET_GL_PROC_ADDRESS("glIsProgramARB");
727     glx::glVertexAttrib1sARB = (glx::PFNGLVERTEXATTRIB1SARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib1sARB");
728     glx::glVertexAttrib1fARB = (glx::PFNGLVERTEXATTRIB1FARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib1fARB");
729     glx::glVertexAttrib1dARB = (glx::PFNGLVERTEXATTRIB1DARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib1dARB");
730     glx::glVertexAttrib2sARB = (glx::PFNGLVERTEXATTRIB2SARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib2sARB");
731     glx::glVertexAttrib2fARB = (glx::PFNGLVERTEXATTRIB2FARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib2fARB");
732     glx::glVertexAttrib2dARB = (glx::PFNGLVERTEXATTRIB2DARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib2dARB");
733     glx::glVertexAttrib3sARB = (glx::PFNGLVERTEXATTRIB3SARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib3sARB");
734     glx::glVertexAttrib3fARB = (glx::PFNGLVERTEXATTRIB3FARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib3fARB");
735     glx::glVertexAttrib3dARB = (glx::PFNGLVERTEXATTRIB3DARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib3dARB");
736     glx::glVertexAttrib4sARB = (glx::PFNGLVERTEXATTRIB4SARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4sARB");
737     glx::glVertexAttrib4fARB = (glx::PFNGLVERTEXATTRIB4FARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4fARB");
738     glx::glVertexAttrib4dARB = (glx::PFNGLVERTEXATTRIB4DARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4dARB");
739     glx::glVertexAttrib4NubARB = (glx::PFNGLVERTEXATTRIB4NUBARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4NubARB");
740     glx::glVertexAttrib1svARB = (glx::PFNGLVERTEXATTRIB1SVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib1svARB");
741     glx::glVertexAttrib1fvARB = (glx::PFNGLVERTEXATTRIB1FVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib1fvARB");
742     glx::glVertexAttrib1dvARB = (glx::PFNGLVERTEXATTRIB1DVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib1dvARB");
743     glx::glVertexAttrib2svARB = (glx::PFNGLVERTEXATTRIB2SVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib2svARB");
744     glx::glVertexAttrib2fvARB = (glx::PFNGLVERTEXATTRIB2FVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib2fvARB");
745     glx::glVertexAttrib2dvARB = (glx::PFNGLVERTEXATTRIB2DVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib2dvARB");
746     glx::glVertexAttrib3svARB = (glx::PFNGLVERTEXATTRIB3SVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib3svARB");
747     glx::glVertexAttrib3fvARB = (glx::PFNGLVERTEXATTRIB3FVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib3fvARB");
748     glx::glVertexAttrib3dvARB = (glx::PFNGLVERTEXATTRIB3DVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib3dvARB");
749     glx::glVertexAttrib4bvARB = (glx::PFNGLVERTEXATTRIB4BVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4bvARB");
750     glx::glVertexAttrib4svARB = (glx::PFNGLVERTEXATTRIB4SVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4svARB");
751     glx::glVertexAttrib4ivARB = (glx::PFNGLVERTEXATTRIB4IVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4ivARB");
752     glx::glVertexAttrib4ubvARB = (glx::PFNGLVERTEXATTRIB4UBVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4ubvARB");
753     glx::glVertexAttrib4usvARB = (glx::PFNGLVERTEXATTRIB4USVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4usvARB");
754     glx::glVertexAttrib4uivARB = (glx::PFNGLVERTEXATTRIB4UIVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4uivARB");
755     glx::glVertexAttrib4fvARB = (glx::PFNGLVERTEXATTRIB4FVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4fvARB");
756     glx::glVertexAttrib4dvARB = (glx::PFNGLVERTEXATTRIB4DVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4dvARB");
757     glx::glVertexAttrib4NbvARB = (glx::PFNGLVERTEXATTRIB4NBVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4NbvARB");
758     glx::glVertexAttrib4NsvARB = (glx::PFNGLVERTEXATTRIB4NSVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4NsvARB");
759     glx::glVertexAttrib4NivARB = (glx::PFNGLVERTEXATTRIB4NIVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4NivARB");
760     glx::glVertexAttrib4NubvARB = (glx::PFNGLVERTEXATTRIB4NUBVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4NubvARB");
761     glx::glVertexAttrib4NusvARB = (glx::PFNGLVERTEXATTRIB4NUSVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4NusvARB");
762     glx::glVertexAttrib4NuivARB = (glx::PFNGLVERTEXATTRIB4NUIVARBPROC) GET_GL_PROC_ADDRESS("glVertexAttrib4NuivARB");
763     glx::glVertexAttribPointerARB = (glx::PFNGLVERTEXATTRIBPOINTERARBPROC) GET_GL_PROC_ADDRESS("glVertexAttribPointerARB");
764     glx::glEnableVertexAttribArrayARB = (glx::PFNGLENABLEVERTEXATTRIBARRAYARBPROC) GET_GL_PROC_ADDRESS("glEnableVertexAttribArrayARB");
765     glx::glDisableVertexAttribArrayARB = (glx::PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) GET_GL_PROC_ADDRESS("glDisableVertexAttribArrayARB");
766     glx::glGetVertexAttribdvARB = (glx::PFNGLGETVERTEXATTRIBDVARBPROC) GET_GL_PROC_ADDRESS("glGetVertexAttribdvARB");
767     glx::glGetVertexAttribfvARB = (glx::PFNGLGETVERTEXATTRIBFVARBPROC) GET_GL_PROC_ADDRESS("glGetVertexAttribfvARB");
768     glx::glGetVertexAttribivARB = (glx::PFNGLGETVERTEXATTRIBIVARBPROC) GET_GL_PROC_ADDRESS("glGetVertexAttribivARB");
769     glx::glGetVertexAttribPointervARB = (glx::PFNGLGETVERTEXATTRIBPOINTERVARBPROC) GET_GL_PROC_ADDRESS("glGetVertexAttribPointervARB");
770     glx::glProgramEnvParameter4dARB = (glx::PFNGLPROGRAMENVPARAMETER4DARBPROC) GET_GL_PROC_ADDRESS("glProgramEnvParameter4dARB");
771     glx::glProgramEnvParameter4dvARB = (glx::PFNGLPROGRAMENVPARAMETER4DVARBPROC) GET_GL_PROC_ADDRESS("glProgramEnvParameter4dvARB");
772     glx::glProgramEnvParameter4fARB = (glx::PFNGLPROGRAMENVPARAMETER4FARBPROC) GET_GL_PROC_ADDRESS("glProgramEnvParameter4fARB");
773     glx::glProgramEnvParameter4fvARB = (glx::PFNGLPROGRAMENVPARAMETER4FVARBPROC) GET_GL_PROC_ADDRESS("glProgramEnvParameter4fvARB");
774     glx::glProgramLocalParameter4dARB = (glx::PFNGLPROGRAMLOCALPARAMETER4DARBPROC) GET_GL_PROC_ADDRESS("glProgramLocalParameter4dARB");
775     glx::glProgramLocalParameter4dvARB = (glx::PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) GET_GL_PROC_ADDRESS("glProgramLocalParameter4dvARB");
776     glx::glProgramLocalParameter4fARB = (glx::PFNGLPROGRAMLOCALPARAMETER4FARBPROC) GET_GL_PROC_ADDRESS("glProgramLocalParameter4fARB");
777     glx::glProgramLocalParameter4fvARB = (glx::PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) GET_GL_PROC_ADDRESS("glProgramLocalParameter4fvARB");
778     glx::glGetProgramEnvParameterdvARB = (glx::PFNGLGETPROGRAMENVPARAMETERDVARBPROC) GET_GL_PROC_ADDRESS("glGetProgramEnvParameterdvARB");
779     glx::glGetProgramEnvParameterfvARB = (glx::PFNGLGETPROGRAMENVPARAMETERFVARBPROC) GET_GL_PROC_ADDRESS("glGetProgramEnvParameterfvARB");
780     glx::glGetProgramLocalParameterdvARB = (glx::PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) GET_GL_PROC_ADDRESS("glGetProgramLocalParameterdvARB");
781     glx::glGetProgramLocalParameterfvARB = (glx::PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) GET_GL_PROC_ADDRESS("glGetProgramLocalParameterfvARB");
782     glx::glProgramStringARB = (glx::PFNGLPROGRAMSTRINGARBPROC) GET_GL_PROC_ADDRESS("glProgramStringARB");
783     glx::glGetProgramStringARB = (glx::PFNGLGETPROGRAMSTRINGARBPROC) GET_GL_PROC_ADDRESS("glGetProgramStringARB");
784     glx::glGetProgramivARB = (glx::PFNGLGETPROGRAMIVARBPROC) GET_GL_PROC_ADDRESS("glGetProgramivARB");
785 #endif // GET_GL_PROC_ADDRESS
786 }
787 
788 
InitExt_ARB_vertex_buffer_object()789 static void InitExt_ARB_vertex_buffer_object()
790 {
791 #if defined(GET_GL_PROC_ADDRESS)
792     glx::glBindBufferARB = (glx::PFNGLBINDBUFFERARBPROC) GET_GL_PROC_ADDRESS("glBindBufferARB");
793     glx::glDeleteBuffersARB = (glx::PFNGLDELETEBUFFERSARBPROC) GET_GL_PROC_ADDRESS("glDeleteBuffersARB");
794     glx::glGenBuffersARB = (glx::PFNGLGENBUFFERSARBPROC) GET_GL_PROC_ADDRESS("glGenBuffersARB");
795     glx::glIsBufferARB = (glx::PFNGLISBUFFERARBPROC) GET_GL_PROC_ADDRESS("glIsBufferARB");
796     glx::glBufferDataARB = (glx::PFNGLBUFFERDATAARBPROC) GET_GL_PROC_ADDRESS("glBufferDataARB");
797     glx::glBufferSubDataARB = (glx::PFNGLBUFFERSUBDATAARBPROC) GET_GL_PROC_ADDRESS("glBufferSubDataARB");
798     glx::glGetBufferSubDataARB = (glx::PFNGLGETBUFFERSUBDATAARBPROC) GET_GL_PROC_ADDRESS("glGetBufferSubDataARB");
799     glx::glMapBufferARB = (glx::PFNGLMAPBUFFERARBPROC) GET_GL_PROC_ADDRESS("glMapBufferARB");
800     glx::glUnmapBufferARB = (glx::PFNGLUNMAPBUFFERARBPROC) GET_GL_PROC_ADDRESS("glUnmapBufferARB");
801     glx::glGetBufferParameterivARB = (glx::PFNGLGETBUFFERPARAMETERIVARBPROC) GET_GL_PROC_ADDRESS("glGetBufferParameterivARB");
802     glx::glGetBufferPointervARB = (glx::PFNGLGETBUFFERPOINTERVARBPROC) GET_GL_PROC_ADDRESS("glGetBufferPointervARB");
803 #endif
804 }
805 
806 
InitExt_ARB_vertex_shader()807 static void InitExt_ARB_vertex_shader()
808 {
809 #if defined(GET_GL_PROC_ADDRESS)
810     glx::glBindAttribLocationARB = (glx::PFNGLBINDATTRIBLOCATIONARBPROC) GET_GL_PROC_ADDRESS("glBindAttribLocationARB");
811     glx::glGetActiveAttribARB = (glx::PFNGLGETACTIVEATTRIBARBPROC) GET_GL_PROC_ADDRESS("glGetActiveAttribARB");
812     glx::glGetAttribLocationARB = (glx::PFNGLGETATTRIBLOCATIONARBPROC) GET_GL_PROC_ADDRESS("glGetAttribLocationARB");
813 #endif
814 }
815 
816 
InitExt_ARB_shader_objects()817 static void InitExt_ARB_shader_objects()
818 {
819 #if defined(GET_GL_PROC_ADDRESS)
820     glx::glDeleteObjectARB = (glx::PFNGLDELETEOBJECTARBPROC) GET_GL_PROC_ADDRESS("glDeleteObjectARB");
821     glx::glGetHandleARB = (glx::PFNGLGETHANDLEARBPROC) GET_GL_PROC_ADDRESS("glGetHandleARB");
822     glx::glDetachObjectARB = (glx::PFNGLDETACHOBJECTARBPROC) GET_GL_PROC_ADDRESS("glDetachObjectARB");
823     glx::glCreateShaderObjectARB = (glx::PFNGLCREATESHADEROBJECTARBPROC) GET_GL_PROC_ADDRESS("glCreateShaderObjectARB");
824     glx::glShaderSourceARB = (glx::PFNGLSHADERSOURCEARBPROC) GET_GL_PROC_ADDRESS("glShaderSourceARB");
825     glx::glCompileShaderARB = (glx::PFNGLCOMPILESHADERARBPROC) GET_GL_PROC_ADDRESS("glCompileShaderARB");
826     glx::glCreateProgramObjectARB = (glx::PFNGLCREATEPROGRAMOBJECTARBPROC) GET_GL_PROC_ADDRESS("glCreateProgramObjectARB");
827     glx::glAttachObjectARB = (glx::PFNGLATTACHOBJECTARBPROC) GET_GL_PROC_ADDRESS("glAttachObjectARB");
828     glx::glLinkProgramARB = (glx::PFNGLLINKPROGRAMARBPROC) GET_GL_PROC_ADDRESS("glLinkProgramARB");
829     glx::glUseProgramObjectARB = (glx::PFNGLUSEPROGRAMOBJECTARBPROC) GET_GL_PROC_ADDRESS("glUseProgramObjectARB");
830     glx::glValidateProgramARB = (glx::PFNGLVALIDATEPROGRAMARBPROC) GET_GL_PROC_ADDRESS("glValidateProgramARB");
831     glx::glUniform1fARB = (glx::PFNGLUNIFORM1FARBPROC) GET_GL_PROC_ADDRESS("glUniform1fARB");
832     glx::glUniform2fARB = (glx::PFNGLUNIFORM2FARBPROC) GET_GL_PROC_ADDRESS("glUniform2fARB");
833     glx::glUniform3fARB = (glx::PFNGLUNIFORM3FARBPROC) GET_GL_PROC_ADDRESS("glUniform3fARB");
834     glx::glUniform4fARB = (glx::PFNGLUNIFORM4FARBPROC) GET_GL_PROC_ADDRESS("glUniform4fARB");
835     glx::glUniform1iARB = (glx::PFNGLUNIFORM1IARBPROC) GET_GL_PROC_ADDRESS("glUniform1iARB");
836     glx::glUniform2iARB = (glx::PFNGLUNIFORM2IARBPROC) GET_GL_PROC_ADDRESS("glUniform2iARB");
837     glx::glUniform3iARB = (glx::PFNGLUNIFORM3IARBPROC) GET_GL_PROC_ADDRESS("glUniform3iARB");
838     glx::glUniform4iARB = (glx::PFNGLUNIFORM4IARBPROC) GET_GL_PROC_ADDRESS("glUniform4iARB");
839     glx::glUniform1fvARB = (glx::PFNGLUNIFORM1FVARBPROC) GET_GL_PROC_ADDRESS("glUniform1fvARB");
840     glx::glUniform2fvARB = (glx::PFNGLUNIFORM2FVARBPROC) GET_GL_PROC_ADDRESS("glUniform2fvARB");
841     glx::glUniform3fvARB = (glx::PFNGLUNIFORM3FVARBPROC) GET_GL_PROC_ADDRESS("glUniform3fvARB");
842     glx::glUniform4fvARB = (glx::PFNGLUNIFORM4FVARBPROC) GET_GL_PROC_ADDRESS("glUniform4fvARB");
843     glx::glUniform1ivARB = (glx::PFNGLUNIFORM1IVARBPROC) GET_GL_PROC_ADDRESS("glUniform1ivARB");
844     glx::glUniform2ivARB = (glx::PFNGLUNIFORM2IVARBPROC) GET_GL_PROC_ADDRESS("glUniform2ivARB");
845     glx::glUniform3ivARB = (glx::PFNGLUNIFORM3IVARBPROC) GET_GL_PROC_ADDRESS("glUniform3ivARB");
846     glx::glUniform4ivARB = (glx::PFNGLUNIFORM4IVARBPROC) GET_GL_PROC_ADDRESS("glUniform4ivARB");
847     glx::glUniformMatrix2fvARB = (glx::PFNGLUNIFORMMATRIX2FVARBPROC) GET_GL_PROC_ADDRESS("glUniformMatrix2fvARB");
848     glx::glUniformMatrix3fvARB = (glx::PFNGLUNIFORMMATRIX3FVARBPROC) GET_GL_PROC_ADDRESS("glUniformMatrix3fvARB");
849     glx::glUniformMatrix4fvARB = (glx::PFNGLUNIFORMMATRIX4FVARBPROC) GET_GL_PROC_ADDRESS("glUniformMatrix4fvARB");
850     glx::glGetObjectParameterfvARB = (glx::PFNGLGETOBJECTPARAMETERFVARBPROC) GET_GL_PROC_ADDRESS("glGetObjectParameterfvARB");
851     glx::glGetObjectParameterivARB = (glx::PFNGLGETOBJECTPARAMETERIVARBPROC) GET_GL_PROC_ADDRESS("glGetObjectParameterivARB");
852     glx::glGetInfoLogARB = (glx::PFNGLGETINFOLOGARBPROC) GET_GL_PROC_ADDRESS("glGetInfoLogARB");
853     glx::glGetAttachedObjectsARB = (glx::PFNGLGETATTACHEDOBJECTSARBPROC) GET_GL_PROC_ADDRESS("glGetAttachedObjectsARB");
854     glx::glGetUniformLocationARB = (glx::PFNGLGETUNIFORMLOCATIONARBPROC) GET_GL_PROC_ADDRESS("glGetUniformLocationARB");
855     glx::glGetActiveUniformARB = (glx::PFNGLGETACTIVEUNIFORMARBPROC) GET_GL_PROC_ADDRESS("glGetActiveUniformARB");
856     glx::glGetUniformfvARB = (glx::PFNGLGETUNIFORMFVARBPROC) GET_GL_PROC_ADDRESS("glGetUniformfvARB");
857     glx::glGetUniformivARB = (glx::PFNGLGETUNIFORMIVARBPROC) GET_GL_PROC_ADDRESS("glGetUniformivARB");
858     glx::glGetShaderSourceARB = (glx::PFNGLGETSHADERSOURCEARBPROC) GET_GL_PROC_ADDRESS("glGetShaderSourceARB");
859 #endif
860 }
861 
862 
InitExt_ARB_color_buffer_float()863 static void InitExt_ARB_color_buffer_float()
864 {
865 #if defined(GET_GL_PROC_ADDRESS)
866     glx::glClampColorARB = (glx::PFNGLCLAMPCOLORARBPROC) GET_GL_PROC_ADDRESS("glClampColorARB");
867 #endif
868 }
869 
InitExt_EXT_framebuffer_object()870 static void InitExt_EXT_framebuffer_object()
871 {
872 #if defined(GET_GL_PROC_ADDRESS)
873     glx::glIsRenderbufferEXT = (glx::PFNGLISRENDERBUFFEREXTPROC) GET_GL_PROC_ADDRESS("glIsRenderbufferEXT");
874     glx::glBindRenderbufferEXT = (glx::PFNGLBINDRENDERBUFFEREXTPROC) GET_GL_PROC_ADDRESS("glBindRenderbufferEXT");
875     glx::glDeleteRenderbuffersEXT = (glx::PFNGLDELETERENDERBUFFERSEXTPROC) GET_GL_PROC_ADDRESS("glDeleteRenderbuffersEXT");
876     glx::glGenRenderbuffersEXT = (glx::PFNGLGENRENDERBUFFERSEXTPROC) GET_GL_PROC_ADDRESS("glGenRenderbuffersEXT");
877     glx::glRenderbufferStorageEXT = (glx::PFNGLRENDERBUFFERSTORAGEEXTPROC) GET_GL_PROC_ADDRESS("glRenderbufferStorageEXT");
878     glx::glGetRenderbufferParameterivEXT = (glx::PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) GET_GL_PROC_ADDRESS("glGetRenderbufferParameterivEXT");
879     glx::glIsFramebufferEXT = (glx::PFNGLISFRAMEBUFFEREXTPROC) GET_GL_PROC_ADDRESS("glIsFramebufferEXT");
880     glx::glBindFramebufferEXT = (glx::PFNGLBINDFRAMEBUFFEREXTPROC) GET_GL_PROC_ADDRESS("glBindFramebufferEXT");
881     glx::glDeleteFramebuffersEXT = (glx::PFNGLDELETEFRAMEBUFFERSEXTPROC) GET_GL_PROC_ADDRESS("glDeleteFramebuffersEXT");
882     glx::glGenFramebuffersEXT = (glx::PFNGLGENFRAMEBUFFERSEXTPROC) GET_GL_PROC_ADDRESS("glGenFramebuffersEXT");
883     glx::glCheckFramebufferStatusEXT = (glx::PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) GET_GL_PROC_ADDRESS("glCheckFramebufferStatusEXT");
884     glx::glFramebufferTexture1DEXT  = (glx::PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) GET_GL_PROC_ADDRESS("glFramebufferTexture1DEXT");
885     glx::glFramebufferTexture2DEXT  = (glx::PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) GET_GL_PROC_ADDRESS("glFramebufferTexture2DEXT");
886     glx::glFramebufferTexture3DEXT  = (glx::PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) GET_GL_PROC_ADDRESS("glFramebufferTexture3DEXT");
887     glx::glFramebufferRenderbufferEXT = (glx::PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) GET_GL_PROC_ADDRESS("glFramebufferRenderbufferEXT");
888     glx::glGetFramebufferAttachmentParameterivEXT = (glx::PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) GET_GL_PROC_ADDRESS("glGetFramebufferAttachmentParameterivEXT");
889     glx::glGenerateMipmapEXT = (glx::PFNGLGENERATEMIPMAPEXTPROC) GET_GL_PROC_ADDRESS("glGenerateMipmapEXT");
890 #endif
891 }
892 
InitExtension(const char * ext)893 void InitExtension(const char* ext)
894 {
895     if (!strcmp(ext, "GL_NV_fragment_program"))
896         InitExt_NV_fragment_program();
897     else if (!strcmp(ext, "GL_ARB_vertex_program"))
898         InitExt_ARB_vertex_program();
899     else if (!strcmp(ext, "GL_ARB_multitexture"))
900         InitExt_ARB_multitexture();
901     else if (!strcmp(ext, "GL_ARB_vertex_buffer_object"))
902         InitExt_ARB_vertex_buffer_object();
903     else if (!strcmp(ext, "GL_NV_register_combiners"))
904         InitExt_NV_register_combiners();
905     else if (!strcmp(ext, "GL_NV_register_combiners2"))
906         InitExt_NV_register_combiners2();
907     else if (!strcmp(ext, "GL_NV_vertex_program"))
908         InitExt_NV_vertex_program();
909     else if (!strcmp(ext, "GL_ARB_texture_compression"))
910         InitExt_ARB_texture_compression();
911     else if (!strcmp(ext, "GL_EXT_blend_minmax"))
912         InitExt_EXT_blend_minmax();
913     else if (!strcmp(ext, "GL_EXT_paletted_texture"))
914         InitExt_EXT_paletted_texture();
915     else if (!strcmp(ext, "GL_ARB_shader_objects"))
916         InitExt_ARB_shader_objects();
917     else if (!strcmp(ext, "GL_ARB_vertex_shader"))
918         InitExt_ARB_vertex_shader();
919     else if (!strcmp(ext, "WGL_EXT_swap_control"))
920         InitExt_EXT_swap_control();
921     else if (!strcmp(ext, "GLX_SGI_video_sync"))
922         InitExt_GLX_SGI_video_sync();
923     else if (!strcmp(ext, "GLX_ARB_color_buffer_float"))
924         InitExt_ARB_color_buffer_float();
925     else if (!strcmp(ext, "GL_EXT_framebuffer_object"))
926         InitExt_EXT_framebuffer_object();
927 }
928 
929 
ExtensionSupported(const char * ext)930 bool ExtensionSupported(const char *ext)
931 {
932     char *extensions = (char *) glGetString(GL_EXTENSIONS);
933 
934     if (extensions == NULL)
935         return false;
936 
937     int len = strlen(ext);
938     for (;;) {
939         if (strncmp(extensions, ext, len) == 0)
940             return true;
941         extensions = strchr(extensions, ' ');
942         if  (extensions != NULL)
943             extensions++;
944         else
945             break;
946     }
947 
948     return false;
949 }
950