glext.cpp
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:52k
源码类别:

OpenGL

开发平台:

Visual C++

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