PageRenderTime 64ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 1ms

/src/osg/GL2Extensions.cpp

https://github.com/dev2dev/OpenSceneGraph-port-to-IOS
C++ | 2226 lines | 1804 code | 378 blank | 44 comment | 284 complexity | 40948b9d6793bc50d0dc71999293f78f MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1

Large files files are truncated, but you can click here to view the full file

  1. /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
  2. * Copyright (C) 2003-2005 3Dlabs Inc. Ltd.
  3. * Copyright (C) 2004-2005 Nathan Cournia
  4. * Copyright (C) 2008 Zebra Imaging
  5. *
  6. * This application is open source and may be redistributed and/or modified
  7. * freely and without restriction, both in commericial and non commericial
  8. * applications, as long as this copyright notice is maintained.
  9. *
  10. * This application is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  13. *
  14. */
  15. /* file: src/osg/GL2Extensions.cpp
  16. * author: Mike Weiblen 2008-01-19
  17. */
  18. #include <osg/Notify>
  19. #include <osg/buffered_value>
  20. #include <osg/ref_ptr>
  21. #include <osg/GL2Extensions>
  22. #include <osg/GLExtensions>
  23. #include <osg/Math>
  24. using namespace osg;
  25. ///////////////////////////////////////////////////////////////////////////
  26. // Extension function pointers for OpenGL v2.x
  27. GL2Extensions::GL2Extensions(unsigned int contextID)
  28. {
  29. setupGL2Extensions(contextID);
  30. }
  31. GL2Extensions::GL2Extensions(const GL2Extensions& rhs) : osg::Referenced()
  32. {
  33. _glVersion = rhs._glVersion;
  34. _glslLanguageVersion = rhs._glslLanguageVersion;
  35. _isShaderObjectsSupported = rhs._isShaderObjectsSupported;
  36. _isVertexShaderSupported = rhs._isVertexShaderSupported;
  37. _isFragmentShaderSupported = rhs._isFragmentShaderSupported;
  38. _isLanguage100Supported = rhs._isLanguage100Supported;
  39. _isGeometryShader4Supported = rhs._isGeometryShader4Supported;
  40. _isGpuShader4Supported = rhs._isGpuShader4Supported;
  41. _glBlendEquationSeparate = rhs._glBlendEquationSeparate;
  42. _glDrawBuffers = rhs._glDrawBuffers;
  43. _glStencilOpSeparate = rhs._glStencilOpSeparate;
  44. _glStencilFuncSeparate = rhs._glStencilFuncSeparate;
  45. _glStencilMaskSeparate = rhs._glStencilMaskSeparate;
  46. _glAttachShader = rhs._glAttachShader;
  47. _glBindAttribLocation = rhs._glBindAttribLocation;
  48. _glCompileShader = rhs._glCompileShader;
  49. _glCreateProgram = rhs._glCreateProgram;
  50. _glCreateShader = rhs._glCreateShader;
  51. _glDeleteProgram = rhs._glDeleteProgram;
  52. _glDeleteShader = rhs._glDeleteShader;
  53. _glDetachShader = rhs._glDetachShader;
  54. _glDisableVertexAttribArray = rhs._glDisableVertexAttribArray;
  55. _glEnableVertexAttribArray = rhs._glEnableVertexAttribArray;
  56. _glGetActiveAttrib = rhs._glGetActiveAttrib;
  57. _glGetActiveUniform = rhs._glGetActiveUniform;
  58. _glGetAttachedShaders = rhs._glGetAttachedShaders;
  59. _glGetAttribLocation = rhs._glGetAttribLocation;
  60. _glGetProgramiv = rhs._glGetProgramiv;
  61. _glGetProgramInfoLog = rhs._glGetProgramInfoLog;
  62. _glGetShaderiv = rhs._glGetShaderiv;
  63. _glGetShaderInfoLog = rhs._glGetShaderInfoLog;
  64. _glGetShaderSource = rhs._glGetShaderSource;
  65. _glGetUniformLocation = rhs._glGetUniformLocation;
  66. _glGetUniformfv = rhs._glGetUniformfv;
  67. _glGetUniformiv = rhs._glGetUniformiv;
  68. _glGetVertexAttribdv = rhs._glGetVertexAttribdv;
  69. _glGetVertexAttribfv = rhs._glGetVertexAttribfv;
  70. _glGetVertexAttribiv = rhs._glGetVertexAttribiv;
  71. _glGetVertexAttribPointerv = rhs._glGetVertexAttribPointerv;
  72. _glIsProgram = rhs._glIsProgram;
  73. _glIsShader = rhs._glIsShader;
  74. _glLinkProgram = rhs._glLinkProgram;
  75. _glShaderSource = rhs._glShaderSource;
  76. _glUseProgram = rhs._glUseProgram;
  77. _glUniform1f = rhs._glUniform1f;
  78. _glUniform2f = rhs._glUniform2f;
  79. _glUniform3f = rhs._glUniform3f;
  80. _glUniform4f = rhs._glUniform4f;
  81. _glUniform1i = rhs._glUniform1i;
  82. _glUniform2i = rhs._glUniform2i;
  83. _glUniform3i = rhs._glUniform3i;
  84. _glUniform4i = rhs._glUniform4i;
  85. _glUniform1fv = rhs._glUniform1fv;
  86. _glUniform2fv = rhs._glUniform2fv;
  87. _glUniform3fv = rhs._glUniform3fv;
  88. _glUniform4fv = rhs._glUniform4fv;
  89. _glUniform1iv = rhs._glUniform1iv;
  90. _glUniform2iv = rhs._glUniform2iv;
  91. _glUniform3iv = rhs._glUniform3iv;
  92. _glUniform4iv = rhs._glUniform4iv;
  93. _glUniformMatrix2fv = rhs._glUniformMatrix2fv;
  94. _glUniformMatrix3fv = rhs._glUniformMatrix3fv;
  95. _glUniformMatrix4fv = rhs._glUniformMatrix4fv;
  96. _glValidateProgram = rhs._glValidateProgram;
  97. _glVertexAttrib1d = rhs._glVertexAttrib1d;
  98. _glVertexAttrib1dv = rhs._glVertexAttrib1dv;
  99. _glVertexAttrib1f = rhs._glVertexAttrib1f;
  100. _glVertexAttrib1fv = rhs._glVertexAttrib1fv;
  101. _glVertexAttrib1s = rhs._glVertexAttrib1s;
  102. _glVertexAttrib1sv = rhs._glVertexAttrib1sv;
  103. _glVertexAttrib2d = rhs._glVertexAttrib2d;
  104. _glVertexAttrib2dv = rhs._glVertexAttrib2dv;
  105. _glVertexAttrib2f = rhs._glVertexAttrib2f;
  106. _glVertexAttrib2fv = rhs._glVertexAttrib2fv;
  107. _glVertexAttrib2s = rhs._glVertexAttrib2s;
  108. _glVertexAttrib2sv = rhs._glVertexAttrib2sv;
  109. _glVertexAttrib3d = rhs._glVertexAttrib3d;
  110. _glVertexAttrib3dv = rhs._glVertexAttrib3dv;
  111. _glVertexAttrib3f = rhs._glVertexAttrib3f;
  112. _glVertexAttrib3fv = rhs._glVertexAttrib3fv;
  113. _glVertexAttrib3s = rhs._glVertexAttrib3s;
  114. _glVertexAttrib3sv = rhs._glVertexAttrib3sv;
  115. _glVertexAttrib4Nbv = rhs._glVertexAttrib4Nbv;
  116. _glVertexAttrib4Niv = rhs._glVertexAttrib4Niv;
  117. _glVertexAttrib4Nsv = rhs._glVertexAttrib4Nsv;
  118. _glVertexAttrib4Nub = rhs._glVertexAttrib4Nub;
  119. _glVertexAttrib4Nubv = rhs._glVertexAttrib4Nubv;
  120. _glVertexAttrib4Nuiv = rhs._glVertexAttrib4Nuiv;
  121. _glVertexAttrib4Nusv = rhs._glVertexAttrib4Nusv;
  122. _glVertexAttrib4bv = rhs._glVertexAttrib4bv;
  123. _glVertexAttrib4d = rhs._glVertexAttrib4d;
  124. _glVertexAttrib4dv = rhs._glVertexAttrib4dv;
  125. _glVertexAttrib4f = rhs._glVertexAttrib4f;
  126. _glVertexAttrib4fv = rhs._glVertexAttrib4fv;
  127. _glVertexAttrib4iv = rhs._glVertexAttrib4iv;
  128. _glVertexAttrib4s = rhs._glVertexAttrib4s;
  129. _glVertexAttrib4sv = rhs._glVertexAttrib4sv;
  130. _glVertexAttrib4ubv = rhs._glVertexAttrib4ubv;
  131. _glVertexAttrib4uiv = rhs._glVertexAttrib4uiv;
  132. _glVertexAttrib4usv = rhs._glVertexAttrib4usv;
  133. _glVertexAttribPointer = rhs._glVertexAttribPointer;
  134. _glGetInfoLogARB = rhs._glGetInfoLogARB;
  135. _glGetObjectParameterivARB = rhs._glGetObjectParameterivARB;
  136. _glDeleteObjectARB = rhs._glDeleteObjectARB;
  137. _glGetHandleARB = rhs._glGetHandleARB;
  138. // GL 2.1
  139. _glUniformMatrix2x3fv = rhs._glUniformMatrix2x3fv;
  140. _glUniformMatrix3x2fv = rhs._glUniformMatrix3x2fv;
  141. _glUniformMatrix2x4fv = rhs._glUniformMatrix2x4fv;
  142. _glUniformMatrix4x2fv = rhs._glUniformMatrix4x2fv;
  143. _glUniformMatrix3x4fv = rhs._glUniformMatrix3x4fv;
  144. _glUniformMatrix4x3fv = rhs._glUniformMatrix4x3fv;
  145. // EXT_geometry_shader4
  146. _glProgramParameteri = rhs._glProgramParameteri;
  147. _glFramebufferTexture = rhs._glFramebufferTexture;
  148. _glFramebufferTextureLayer = rhs._glFramebufferTextureLayer;
  149. _glFramebufferTextureFace = rhs._glFramebufferTextureFace;
  150. // EXT_gpu_shader4
  151. _glGetUniformuiv = rhs._glGetUniformuiv;
  152. _glBindFragDataLocation = rhs._glBindFragDataLocation;
  153. _glGetFragDataLocation = rhs._glGetFragDataLocation;
  154. _glUniform1ui = rhs._glUniform1ui;
  155. _glUniform2ui = rhs._glUniform2ui;
  156. _glUniform3ui = rhs._glUniform3ui;
  157. _glUniform4ui = rhs._glUniform4ui;
  158. _glUniform1uiv = rhs._glUniform1uiv;
  159. _glUniform2uiv = rhs._glUniform2uiv;
  160. _glUniform3uiv = rhs._glUniform3uiv;
  161. _glUniform4uiv = rhs._glUniform4uiv;
  162. }
  163. void GL2Extensions::lowestCommonDenominator(const GL2Extensions& rhs)
  164. {
  165. if (rhs._glVersion < _glVersion) _glVersion = rhs._glVersion;
  166. if (rhs._glslLanguageVersion < _glslLanguageVersion)
  167. _glslLanguageVersion = rhs._glslLanguageVersion;
  168. if (!rhs._isShaderObjectsSupported) _isShaderObjectsSupported = false;
  169. if (!rhs._isVertexShaderSupported) _isVertexShaderSupported = false;
  170. if (!rhs._isFragmentShaderSupported) _isFragmentShaderSupported = false;
  171. if (!rhs._isLanguage100Supported) _isLanguage100Supported = false;
  172. if (!rhs._isGeometryShader4Supported) _isGeometryShader4Supported = false;
  173. if (!rhs._isGpuShader4Supported) _isGpuShader4Supported = false;
  174. if (!rhs._glBlendEquationSeparate) _glBlendEquationSeparate = 0;
  175. if (!rhs._glDrawBuffers) _glDrawBuffers = 0;
  176. if (!rhs._glStencilOpSeparate) _glStencilOpSeparate = 0;
  177. if (!rhs._glStencilFuncSeparate) _glStencilFuncSeparate = 0;
  178. if (!rhs._glStencilMaskSeparate) _glStencilMaskSeparate = 0;
  179. if (!rhs._glAttachShader) _glAttachShader = 0;
  180. if (!rhs._glBindAttribLocation) _glBindAttribLocation = 0;
  181. if (!rhs._glCompileShader) _glCompileShader = 0;
  182. if (!rhs._glCreateProgram) _glCreateProgram = 0;
  183. if (!rhs._glCreateShader) _glCreateShader = 0;
  184. if (!rhs._glDeleteProgram) _glDeleteProgram = 0;
  185. if (!rhs._glDeleteShader) _glDeleteShader = 0;
  186. if (!rhs._glDetachShader) _glDetachShader = 0;
  187. if (!rhs._glDisableVertexAttribArray) _glDisableVertexAttribArray = 0;
  188. if (!rhs._glEnableVertexAttribArray) _glEnableVertexAttribArray = 0;
  189. if (!rhs._glGetActiveAttrib) _glGetActiveAttrib = 0;
  190. if (!rhs._glGetActiveUniform) _glGetActiveUniform = 0;
  191. if (!rhs._glGetAttachedShaders) _glGetAttachedShaders = 0;
  192. if (!rhs._glGetAttribLocation) _glGetAttribLocation = 0;
  193. if (!rhs._glGetProgramiv) _glGetProgramiv = 0;
  194. if (!rhs._glGetProgramInfoLog) _glGetProgramInfoLog = 0;
  195. if (!rhs._glGetShaderiv) _glGetShaderiv = 0;
  196. if (!rhs._glGetShaderInfoLog) _glGetShaderInfoLog = 0;
  197. if (!rhs._glGetShaderSource) _glGetShaderSource = 0;
  198. if (!rhs._glGetUniformLocation) _glGetUniformLocation = 0;
  199. if (!rhs._glGetUniformfv) _glGetUniformfv = 0;
  200. if (!rhs._glGetUniformiv) _glGetUniformiv = 0;
  201. if (!rhs._glGetVertexAttribdv) _glGetVertexAttribdv = 0;
  202. if (!rhs._glGetVertexAttribfv) _glGetVertexAttribfv = 0;
  203. if (!rhs._glGetVertexAttribiv) _glGetVertexAttribiv = 0;
  204. if (!rhs._glGetVertexAttribPointerv) _glGetVertexAttribPointerv = 0;
  205. if (!rhs._glIsProgram) _glIsProgram = 0;
  206. if (!rhs._glIsShader) _glIsShader = 0;
  207. if (!rhs._glLinkProgram) _glLinkProgram = 0;
  208. if (!rhs._glShaderSource) _glShaderSource = 0;
  209. if (!rhs._glUseProgram) _glUseProgram = 0;
  210. if (!rhs._glUniform1f) _glUniform1f = 0;
  211. if (!rhs._glUniform2f) _glUniform2f = 0;
  212. if (!rhs._glUniform3f) _glUniform3f = 0;
  213. if (!rhs._glUniform4f) _glUniform4f = 0;
  214. if (!rhs._glUniform1i) _glUniform1i = 0;
  215. if (!rhs._glUniform2i) _glUniform2i = 0;
  216. if (!rhs._glUniform3i) _glUniform3i = 0;
  217. if (!rhs._glUniform4i) _glUniform4i = 0;
  218. if (!rhs._glUniform1fv) _glUniform1fv = 0;
  219. if (!rhs._glUniform2fv) _glUniform2fv = 0;
  220. if (!rhs._glUniform3fv) _glUniform3fv = 0;
  221. if (!rhs._glUniform4fv) _glUniform4fv = 0;
  222. if (!rhs._glUniform1iv) _glUniform1iv = 0;
  223. if (!rhs._glUniform2iv) _glUniform2iv = 0;
  224. if (!rhs._glUniform3iv) _glUniform3iv = 0;
  225. if (!rhs._glUniform4iv) _glUniform4iv = 0;
  226. if (!rhs._glUniformMatrix2fv) _glUniformMatrix2fv = 0;
  227. if (!rhs._glUniformMatrix3fv) _glUniformMatrix3fv = 0;
  228. if (!rhs._glUniformMatrix4fv) _glUniformMatrix4fv = 0;
  229. if (!rhs._glValidateProgram) _glValidateProgram = 0;
  230. if (!rhs._glVertexAttrib1d) _glVertexAttrib1d = 0;
  231. if (!rhs._glVertexAttrib1dv) _glVertexAttrib1dv = 0;
  232. if (!rhs._glVertexAttrib1f) _glVertexAttrib1f = 0;
  233. if (!rhs._glVertexAttrib1fv) _glVertexAttrib1fv = 0;
  234. if (!rhs._glVertexAttrib1s) _glVertexAttrib1s = 0;
  235. if (!rhs._glVertexAttrib1sv) _glVertexAttrib1sv = 0;
  236. if (!rhs._glVertexAttrib2d) _glVertexAttrib2d = 0;
  237. if (!rhs._glVertexAttrib2dv) _glVertexAttrib2dv = 0;
  238. if (!rhs._glVertexAttrib2f) _glVertexAttrib2f = 0;
  239. if (!rhs._glVertexAttrib2fv) _glVertexAttrib2fv = 0;
  240. if (!rhs._glVertexAttrib2s) _glVertexAttrib2s = 0;
  241. if (!rhs._glVertexAttrib2sv) _glVertexAttrib2sv = 0;
  242. if (!rhs._glVertexAttrib3d) _glVertexAttrib3d = 0;
  243. if (!rhs._glVertexAttrib3dv) _glVertexAttrib3dv = 0;
  244. if (!rhs._glVertexAttrib3f) _glVertexAttrib3f = 0;
  245. if (!rhs._glVertexAttrib3fv) _glVertexAttrib3fv = 0;
  246. if (!rhs._glVertexAttrib3s) _glVertexAttrib3s = 0;
  247. if (!rhs._glVertexAttrib3sv) _glVertexAttrib3sv = 0;
  248. if (!rhs._glVertexAttrib4Nbv) _glVertexAttrib4Nbv = 0;
  249. if (!rhs._glVertexAttrib4Niv) _glVertexAttrib4Niv = 0;
  250. if (!rhs._glVertexAttrib4Nsv) _glVertexAttrib4Nsv = 0;
  251. if (!rhs._glVertexAttrib4Nub) _glVertexAttrib4Nub = 0;
  252. if (!rhs._glVertexAttrib4Nubv) _glVertexAttrib4Nubv = 0;
  253. if (!rhs._glVertexAttrib4Nuiv) _glVertexAttrib4Nuiv = 0;
  254. if (!rhs._glVertexAttrib4Nusv) _glVertexAttrib4Nusv = 0;
  255. if (!rhs._glVertexAttrib4bv) _glVertexAttrib4bv = 0;
  256. if (!rhs._glVertexAttrib4d) _glVertexAttrib4d = 0;
  257. if (!rhs._glVertexAttrib4dv) _glVertexAttrib4dv = 0;
  258. if (!rhs._glVertexAttrib4f) _glVertexAttrib4f = 0;
  259. if (!rhs._glVertexAttrib4fv) _glVertexAttrib4fv = 0;
  260. if (!rhs._glVertexAttrib4iv) _glVertexAttrib4iv = 0;
  261. if (!rhs._glVertexAttrib4s) _glVertexAttrib4s = 0;
  262. if (!rhs._glVertexAttrib4sv) _glVertexAttrib4sv = 0;
  263. if (!rhs._glVertexAttrib4ubv) _glVertexAttrib4ubv = 0;
  264. if (!rhs._glVertexAttrib4uiv) _glVertexAttrib4uiv = 0;
  265. if (!rhs._glVertexAttrib4usv) _glVertexAttrib4usv = 0;
  266. if (!rhs._glVertexAttribPointer) _glVertexAttribPointer = 0;
  267. if (!rhs._glGetInfoLogARB) _glGetInfoLogARB = 0;
  268. if (!rhs._glGetObjectParameterivARB) _glGetObjectParameterivARB = 0;
  269. if (!rhs._glDeleteObjectARB) _glDeleteObjectARB = 0;
  270. if (!rhs._glGetHandleARB) _glGetHandleARB = 0;
  271. // GL 2.1
  272. if (!rhs._glUniformMatrix2x3fv) _glUniformMatrix2x3fv = 0;
  273. if (!rhs._glUniformMatrix3x2fv) _glUniformMatrix3x2fv = 0;
  274. if (!rhs._glUniformMatrix2x4fv) _glUniformMatrix2x4fv = 0;
  275. if (!rhs._glUniformMatrix4x2fv) _glUniformMatrix4x2fv = 0;
  276. if (!rhs._glUniformMatrix3x4fv) _glUniformMatrix3x4fv = 0;
  277. if (!rhs._glUniformMatrix4x3fv) _glUniformMatrix4x3fv = 0;
  278. // EXT_geometry_shader4
  279. if (!rhs._glProgramParameteri) _glProgramParameteri = 0;
  280. if (!rhs._glFramebufferTexture) _glFramebufferTexture = 0;
  281. if (!rhs._glFramebufferTextureLayer) _glFramebufferTextureLayer = 0;
  282. if (!rhs._glFramebufferTextureFace) _glFramebufferTextureFace = 0;
  283. // EXT_gpu_shader4
  284. if (!rhs._glGetUniformuiv) _glGetUniformuiv = 0;
  285. if (!rhs._glBindFragDataLocation) _glBindFragDataLocation = 0;
  286. if (!rhs._glGetFragDataLocation) _glGetFragDataLocation = 0;
  287. if (!rhs._glUniform1ui) _glUniform1ui = 0;
  288. if (!rhs._glUniform2ui) _glUniform2ui = 0;
  289. if (!rhs._glUniform3ui) _glUniform3ui = 0;
  290. if (!rhs._glUniform4ui) _glUniform4ui = 0;
  291. if (!rhs._glUniform1uiv) _glUniform1uiv = 0;
  292. if (!rhs._glUniform2uiv) _glUniform2uiv = 0;
  293. if (!rhs._glUniform3uiv) _glUniform3uiv = 0;
  294. if (!rhs._glUniform4uiv) _glUniform4uiv = 0;
  295. }
  296. void GL2Extensions::setupGL2Extensions(unsigned int contextID)
  297. {
  298. const char* version = (const char*) glGetString( GL_VERSION );
  299. if (!version)
  300. {
  301. OSG_NOTIFY(osg::FATAL)<<"Error: OpenGL version test failed, requires valid graphics context."<<std::endl;
  302. return;
  303. }
  304. _glVersion = asciiToFloat( version );
  305. _glslLanguageVersion = 0.0f;
  306. bool shadersBuiltIn = OSG_GLES2_FEATURES || OSG_GL3_FEATURES;
  307. _isShaderObjectsSupported = shadersBuiltIn || osg::isGLExtensionSupported(contextID,"GL_ARB_shader_objects");
  308. _isVertexShaderSupported = shadersBuiltIn || osg::isGLExtensionSupported(contextID,"GL_ARB_vertex_shader");
  309. _isFragmentShaderSupported = shadersBuiltIn || osg::isGLExtensionSupported(contextID,"GL_ARB_fragment_shader");
  310. _isLanguage100Supported = shadersBuiltIn || osg::isGLExtensionSupported(contextID,"GL_ARB_shading_language_100");
  311. _isGeometryShader4Supported = osg::isGLExtensionSupported(contextID,"GL_EXT_geometry_shader4");
  312. _isGpuShader4Supported = osg::isGLExtensionSupported(contextID,"GL_EXT_gpu_shader4");
  313. if( isGlslSupported() )
  314. {
  315. // If glGetString raises an error, assume initial release "1.00"
  316. while(glGetError() != GL_NO_ERROR) {} // reset error flag
  317. const char* langVerStr = (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION);
  318. if( (glGetError() == GL_NO_ERROR) && langVerStr )
  319. _glslLanguageVersion = asciiToFloat( langVerStr );
  320. else
  321. _glslLanguageVersion = 1.0f;
  322. }
  323. OSG_INFO
  324. << "glVersion=" << getGlVersion() << ", "
  325. << "isGlslSupported=" << (isGlslSupported() ? "YES" : "NO") << ", "
  326. << "glslLanguageVersion=" << getLanguageVersion()
  327. << std::endl;
  328. setGLExtensionFuncPtr(_glBlendEquationSeparate, "glBlendEquationSeparate");
  329. setGLExtensionFuncPtr(_glDrawBuffers, "glDrawBuffers", "glDrawBuffersARB");
  330. setGLExtensionFuncPtr(_glStencilOpSeparate, "glStencilOpSeparate");
  331. setGLExtensionFuncPtr(_glStencilFuncSeparate, "glStencilFuncSeparate");
  332. setGLExtensionFuncPtr(_glStencilMaskSeparate, "glStencilMaskSeparate");
  333. setGLExtensionFuncPtr(_glAttachShader, "glAttachShader", "glAttachObjectARB");
  334. setGLExtensionFuncPtr(_glBindAttribLocation, "glBindAttribLocation", "glBindAttribLocationARB");
  335. setGLExtensionFuncPtr(_glCompileShader, "glCompileShader", "glCompileShaderARB");
  336. setGLExtensionFuncPtr(_glCreateProgram, "glCreateProgram", "glCreateProgramObjectARB");
  337. setGLExtensionFuncPtr(_glCreateShader, "glCreateShader", "glCreateShaderObjectARB");
  338. setGLExtensionFuncPtr(_glDeleteProgram, "glDeleteProgram");
  339. setGLExtensionFuncPtr(_glDeleteShader, "glDeleteShader");
  340. setGLExtensionFuncPtr(_glDetachShader, "glDetachShader", "glDetachObjectARB");
  341. setGLExtensionFuncPtr(_glDisableVertexAttribArray, "glDisableVertexAttribArray");
  342. setGLExtensionFuncPtr(_glEnableVertexAttribArray, "glEnableVertexAttribArray");
  343. setGLExtensionFuncPtr(_glGetActiveAttrib, "glGetActiveAttrib", "glGetActiveAttribARB");
  344. setGLExtensionFuncPtr(_glGetActiveUniform, "glGetActiveUniform", "glGetActiveUniformARB");
  345. setGLExtensionFuncPtr(_glGetAttachedShaders, "glGetAttachedShaders", "glGetAttachedObjectsARB");
  346. setGLExtensionFuncPtr(_glGetAttribLocation, "glGetAttribLocation", "glGetAttribLocationARB");
  347. setGLExtensionFuncPtr(_glGetProgramiv, "glGetProgramiv");
  348. setGLExtensionFuncPtr(_glGetProgramInfoLog, "glGetProgramInfoLog");
  349. setGLExtensionFuncPtr(_glGetShaderiv, "glGetShaderiv");
  350. setGLExtensionFuncPtr(_glGetShaderInfoLog, "glGetShaderInfoLog");
  351. setGLExtensionFuncPtr(_glGetShaderSource, "glGetShaderSource", "glGetShaderSourceARB");
  352. setGLExtensionFuncPtr(_glGetUniformLocation, "glGetUniformLocation", "glGetUniformLocationARB");
  353. setGLExtensionFuncPtr(_glGetUniformfv, "glGetUniformfv", "glGetUniformfvARB");
  354. setGLExtensionFuncPtr(_glGetUniformiv, "glGetUniformiv", "glGetUniformivARB");
  355. setGLExtensionFuncPtr(_glGetVertexAttribdv, "glGetVertexAttribdv");
  356. setGLExtensionFuncPtr(_glGetVertexAttribfv, "glGetVertexAttribfv");
  357. setGLExtensionFuncPtr(_glGetVertexAttribiv, "glGetVertexAttribiv");
  358. setGLExtensionFuncPtr(_glGetVertexAttribPointerv, "glGetVertexAttribPointerv");
  359. setGLExtensionFuncPtr(_glIsProgram, "glIsProgram");
  360. setGLExtensionFuncPtr(_glIsShader, "glIsShader");
  361. setGLExtensionFuncPtr(_glLinkProgram, "glLinkProgram", "glLinkProgramARB");
  362. setGLExtensionFuncPtr(_glShaderSource, "glShaderSource", "glShaderSourceARB");
  363. setGLExtensionFuncPtr(_glUseProgram, "glUseProgram", "glUseProgramObjectARB");
  364. setGLExtensionFuncPtr(_glUniform1f, "glUniform1f", "glUniform1fARB");
  365. setGLExtensionFuncPtr(_glUniform2f, "glUniform2f", "glUniform2fARB");
  366. setGLExtensionFuncPtr(_glUniform3f, "glUniform3f", "glUniform3fARB");
  367. setGLExtensionFuncPtr(_glUniform4f, "glUniform4f", "glUniform4fARB");
  368. setGLExtensionFuncPtr(_glUniform1i, "glUniform1i", "glUniform1iARB");
  369. setGLExtensionFuncPtr(_glUniform2i, "glUniform2i", "glUniform2iARB");
  370. setGLExtensionFuncPtr(_glUniform3i, "glUniform3i", "glUniform3iARB");
  371. setGLExtensionFuncPtr(_glUniform4i, "glUniform4i", "glUniform4iARB");
  372. setGLExtensionFuncPtr(_glUniform1fv, "glUniform1fv", "glUniform1fvARB");
  373. setGLExtensionFuncPtr(_glUniform2fv, "glUniform2fv", "glUniform2fvARB");
  374. setGLExtensionFuncPtr(_glUniform3fv, "glUniform3fv", "glUniform3fvARB");
  375. setGLExtensionFuncPtr(_glUniform4fv, "glUniform4fv", "glUniform4fvARB");
  376. setGLExtensionFuncPtr(_glUniform1iv, "glUniform1iv", "glUniform1ivARB");
  377. setGLExtensionFuncPtr(_glUniform2iv, "glUniform2iv", "glUniform2ivARB");
  378. setGLExtensionFuncPtr(_glUniform3iv, "glUniform3iv", "glUniform3ivARB");
  379. setGLExtensionFuncPtr(_glUniform4iv, "glUniform4iv", "glUniform4ivARB");
  380. setGLExtensionFuncPtr(_glUniformMatrix2fv, "glUniformMatrix2fv", "glUniformMatrix2fvARB");
  381. setGLExtensionFuncPtr(_glUniformMatrix3fv, "glUniformMatrix3fv", "glUniformMatrix3fvARB");
  382. setGLExtensionFuncPtr(_glUniformMatrix4fv, "glUniformMatrix4fv", "glUniformMatrix4fvARB");
  383. setGLExtensionFuncPtr(_glValidateProgram, "glValidateProgram", "glValidateProgramARB");
  384. setGLExtensionFuncPtr(_glVertexAttrib1d, "glVertexAttrib1d");
  385. setGLExtensionFuncPtr(_glVertexAttrib1dv, "glVertexAttrib1dv");
  386. setGLExtensionFuncPtr(_glVertexAttrib1f, "glVertexAttrib1f");
  387. setGLExtensionFuncPtr(_glVertexAttrib1fv, "glVertexAttrib1fv");
  388. setGLExtensionFuncPtr(_glVertexAttrib1s, "glVertexAttrib1s");
  389. setGLExtensionFuncPtr(_glVertexAttrib1sv, "glVertexAttrib1sv");
  390. setGLExtensionFuncPtr(_glVertexAttrib2d, "glVertexAttrib2d");
  391. setGLExtensionFuncPtr(_glVertexAttrib2dv, "glVertexAttrib2dv");
  392. setGLExtensionFuncPtr(_glVertexAttrib2f, "glVertexAttrib2f");
  393. setGLExtensionFuncPtr(_glVertexAttrib2fv, "glVertexAttrib2fv");
  394. setGLExtensionFuncPtr(_glVertexAttrib2s, "glVertexAttrib2s");
  395. setGLExtensionFuncPtr(_glVertexAttrib2sv, "glVertexAttrib2sv");
  396. setGLExtensionFuncPtr(_glVertexAttrib3d, "glVertexAttrib3d");
  397. setGLExtensionFuncPtr(_glVertexAttrib3dv, "glVertexAttrib3dv");
  398. setGLExtensionFuncPtr(_glVertexAttrib3f, "glVertexAttrib3f");
  399. setGLExtensionFuncPtr(_glVertexAttrib3fv, "glVertexAttrib3fv");
  400. setGLExtensionFuncPtr(_glVertexAttrib3s, "glVertexAttrib3s");
  401. setGLExtensionFuncPtr(_glVertexAttrib3sv, "glVertexAttrib3sv");
  402. setGLExtensionFuncPtr(_glVertexAttrib4Nbv, "glVertexAttrib4Nbv");
  403. setGLExtensionFuncPtr(_glVertexAttrib4Niv, "glVertexAttrib4Niv");
  404. setGLExtensionFuncPtr(_glVertexAttrib4Nsv, "glVertexAttrib4Nsv");
  405. setGLExtensionFuncPtr(_glVertexAttrib4Nub, "glVertexAttrib4Nub");
  406. setGLExtensionFuncPtr(_glVertexAttrib4Nubv, "glVertexAttrib4Nubv");
  407. setGLExtensionFuncPtr(_glVertexAttrib4Nuiv, "glVertexAttrib4Nuiv");
  408. setGLExtensionFuncPtr(_glVertexAttrib4Nusv, "glVertexAttrib4Nusv");
  409. setGLExtensionFuncPtr(_glVertexAttrib4bv, "glVertexAttrib4bv");
  410. setGLExtensionFuncPtr(_glVertexAttrib4d, "glVertexAttrib4d");
  411. setGLExtensionFuncPtr(_glVertexAttrib4dv, "glVertexAttrib4dv");
  412. setGLExtensionFuncPtr(_glVertexAttrib4f, "glVertexAttrib4f");
  413. setGLExtensionFuncPtr(_glVertexAttrib4fv, "glVertexAttrib4fv");
  414. setGLExtensionFuncPtr(_glVertexAttrib4iv, "glVertexAttrib4iv");
  415. setGLExtensionFuncPtr(_glVertexAttrib4s, "glVertexAttrib4s");
  416. setGLExtensionFuncPtr(_glVertexAttrib4sv, "glVertexAttrib4sv");
  417. setGLExtensionFuncPtr(_glVertexAttrib4ubv, "glVertexAttrib4ubv");
  418. setGLExtensionFuncPtr(_glVertexAttrib4uiv, "glVertexAttrib4uiv");
  419. setGLExtensionFuncPtr(_glVertexAttrib4usv, "glVertexAttrib4usv");
  420. setGLExtensionFuncPtr(_glVertexAttribPointer, "glVertexAttribPointer");
  421. // v1.5-only ARB entry points, in case they're needed for fallback
  422. setGLExtensionFuncPtr(_glGetInfoLogARB, "glGetInfoLogARB");
  423. setGLExtensionFuncPtr(_glGetObjectParameterivARB, "glGetObjectParameterivARB");
  424. setGLExtensionFuncPtr(_glDeleteObjectARB, "glDeleteObjectARB");
  425. setGLExtensionFuncPtr(_glGetHandleARB, "glGetHandleARB");
  426. // GL 2.1
  427. setGLExtensionFuncPtr(_glUniformMatrix2x3fv, "glUniformMatrix2x3fv" );
  428. setGLExtensionFuncPtr(_glUniformMatrix3x2fv, "glUniformMatrix3x2fv" );
  429. setGLExtensionFuncPtr(_glUniformMatrix2x4fv, "glUniformMatrix2x4fv" );
  430. setGLExtensionFuncPtr(_glUniformMatrix4x2fv, "glUniformMatrix4x2fv" );
  431. setGLExtensionFuncPtr(_glUniformMatrix3x4fv, "glUniformMatrix3x4fv" );
  432. setGLExtensionFuncPtr(_glUniformMatrix4x3fv, "glUniformMatrix4x3fv" );
  433. // EXT_geometry_shader4
  434. setGLExtensionFuncPtr(_glProgramParameteri, "glProgramParameteri", "glProgramParameteriEXT" );
  435. setGLExtensionFuncPtr(_glFramebufferTexture, "glFramebufferTexture", "glFramebufferTextureEXT" );
  436. setGLExtensionFuncPtr(_glFramebufferTextureLayer, "glFramebufferTextureLayer", "glFramebufferTextureLayerEXT" );
  437. setGLExtensionFuncPtr(_glFramebufferTextureFace, "glFramebufferTextureFace", "glFramebufferTextureFaceEXT" );
  438. // EXT_gpu_shader4
  439. setGLExtensionFuncPtr(_glGetUniformuiv, "glGetUniformuiv", "glGetUniformuivEXT" );
  440. setGLExtensionFuncPtr(_glBindFragDataLocation, "glBindFragDataLocation", "glBindFragDataLocationEXT" );
  441. setGLExtensionFuncPtr(_glGetFragDataLocation, "glGetFragDataLocation", "glGetFragDataLocationEXT" );
  442. setGLExtensionFuncPtr(_glUniform1ui, "glUniform1ui", "glUniform1uiEXT" );
  443. setGLExtensionFuncPtr(_glUniform2ui, "glUniform2ui", "glUniform2uiEXT" );
  444. setGLExtensionFuncPtr(_glUniform3ui, "glUniform3ui", "glUniform3uiEXT" );
  445. setGLExtensionFuncPtr(_glUniform4ui, "glUniform4ui", "glUniform4uiEXT" );
  446. setGLExtensionFuncPtr(_glUniform1uiv, "glUniform1uiv", "glUniform1uivEXT" );
  447. setGLExtensionFuncPtr(_glUniform2uiv, "glUniform2uiv", "glUniform2uivEXT" );
  448. setGLExtensionFuncPtr(_glUniform3uiv, "glUniform3uiv", "glUniform3uivEXT" );
  449. setGLExtensionFuncPtr(_glUniform4uiv, "glUniform4uiv", "glUniform4uivEXT" );
  450. }
  451. bool GL2Extensions::isGlslSupported() const
  452. {
  453. return ( _glVersion >= 2.0f ) ||
  454. ( _isShaderObjectsSupported &&
  455. _isVertexShaderSupported &&
  456. _isFragmentShaderSupported &&
  457. _isLanguage100Supported );
  458. }
  459. ///////////////////////////////////////////////////////////////////////////
  460. // Static array of per-context osg::GL2Extensions instances
  461. typedef osg::buffered_object< osg::ref_ptr<GL2Extensions> > BufferedExtensions;
  462. static BufferedExtensions s_extensions;
  463. GL2Extensions* GL2Extensions::Get(unsigned int contextID, bool createIfNotInitalized)
  464. {
  465. if (!s_extensions[contextID] && createIfNotInitalized)
  466. s_extensions[contextID] = new GL2Extensions(contextID);
  467. return s_extensions[contextID].get();
  468. }
  469. void GL2Extensions::Set(unsigned int contextID, GL2Extensions* extensions)
  470. {
  471. s_extensions[contextID] = extensions;
  472. }
  473. ///////////////////////////////////////////////////////////////////////////
  474. static void NotSupported( const char* funcName )
  475. {
  476. OSG_WARN
  477. <<"Error: "<<funcName<<" not supported by OpenGL driver"<<std::endl;
  478. }
  479. void GL2Extensions::glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) const
  480. {
  481. if (_glBlendEquationSeparate)
  482. {
  483. _glBlendEquationSeparate(modeRGB, modeAlpha);
  484. }
  485. else
  486. {
  487. NotSupported( "glBlendEquationSeparate" );
  488. }
  489. }
  490. void GL2Extensions::glDrawBuffers(GLsizei n, const GLenum *bufs) const
  491. {
  492. if (_glDrawBuffers)
  493. {
  494. _glDrawBuffers(n, bufs);
  495. }
  496. else
  497. {
  498. NotSupported( "glDrawBuffers" );
  499. }
  500. }
  501. void GL2Extensions::glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) const
  502. {
  503. if (_glStencilOpSeparate)
  504. {
  505. _glStencilOpSeparate(face, sfail, dpfail, dppass);
  506. }
  507. else
  508. {
  509. NotSupported( "glStencilOpSeparate" );
  510. }
  511. }
  512. void GL2Extensions::glStencilFuncSeparate(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) const
  513. {
  514. if (_glStencilFuncSeparate)
  515. {
  516. _glStencilFuncSeparate(frontfunc, backfunc, ref, mask);
  517. }
  518. else
  519. {
  520. NotSupported( "glStencilFuncSeparate" );
  521. }
  522. }
  523. void GL2Extensions::glStencilMaskSeparate(GLenum face, GLuint mask) const
  524. {
  525. if (_glStencilMaskSeparate)
  526. {
  527. _glStencilMaskSeparate(face, mask);
  528. }
  529. else
  530. {
  531. NotSupported( "glStencilMaskSeparate" );
  532. }
  533. }
  534. void GL2Extensions::glAttachShader(GLuint program, GLuint shader) const
  535. {
  536. if (_glAttachShader)
  537. {
  538. _glAttachShader(program, shader);
  539. }
  540. else
  541. {
  542. NotSupported( "glAttachShader" );
  543. }
  544. }
  545. void GL2Extensions::glBindAttribLocation(GLuint program, GLuint index, const GLchar *name) const
  546. {
  547. if (_glBindAttribLocation)
  548. {
  549. _glBindAttribLocation(program, index, name);
  550. }
  551. else
  552. {
  553. NotSupported( "glBindAttribLocation" );
  554. }
  555. }
  556. void GL2Extensions::glCompileShader(GLuint shader) const
  557. {
  558. if (_glCompileShader)
  559. {
  560. _glCompileShader(shader);
  561. }
  562. else
  563. {
  564. NotSupported( "glCompileShader" );
  565. }
  566. }
  567. GLuint GL2Extensions::glCreateProgram(void) const
  568. {
  569. if (_glCreateProgram)
  570. {
  571. return _glCreateProgram();
  572. }
  573. else
  574. {
  575. NotSupported( "glCreateProgram" );
  576. return 0;
  577. }
  578. }
  579. GLuint GL2Extensions::glCreateShader(GLenum type) const
  580. {
  581. if (_glCreateShader)
  582. {
  583. return _glCreateShader(type);
  584. }
  585. else
  586. {
  587. NotSupported( "glCreateShader" );
  588. return 0;
  589. }
  590. }
  591. void GL2Extensions::glDeleteProgram(GLuint program) const
  592. {
  593. if (_glDeleteProgram)
  594. {
  595. _glDeleteProgram(program);
  596. }
  597. else if (_glDeleteObjectARB)
  598. {
  599. _glDeleteObjectARB(program);
  600. }
  601. else
  602. {
  603. NotSupported( "glDeleteProgram" );
  604. }
  605. }
  606. void GL2Extensions::glDeleteShader(GLuint shader) const
  607. {
  608. if (_glDeleteShader)
  609. {
  610. _glDeleteShader(shader);
  611. }
  612. else if (_glDeleteObjectARB)
  613. {
  614. _glDeleteObjectARB(shader);
  615. }
  616. else
  617. {
  618. NotSupported( "glDeleteShader" );
  619. }
  620. }
  621. void GL2Extensions::glDetachShader(GLuint program, GLuint shader) const
  622. {
  623. if (_glDetachShader)
  624. {
  625. _glDetachShader(program, shader);
  626. }
  627. else
  628. {
  629. NotSupported( "glDetachShader" );
  630. }
  631. }
  632. void GL2Extensions::glDisableVertexAttribArray(GLuint index) const
  633. {
  634. if (_glDisableVertexAttribArray)
  635. {
  636. _glDisableVertexAttribArray(index);
  637. }
  638. else
  639. {
  640. NotSupported( "glDisableVertexAttribArray" );
  641. }
  642. }
  643. void GL2Extensions::glEnableVertexAttribArray(GLuint index) const
  644. {
  645. if (_glEnableVertexAttribArray)
  646. {
  647. _glEnableVertexAttribArray(index);
  648. }
  649. else
  650. {
  651. NotSupported( "glEnableVertexAttribArray" );
  652. }
  653. }
  654. void GL2Extensions::glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name) const
  655. {
  656. if (_glGetActiveAttrib)
  657. {
  658. _glGetActiveAttrib(program, index, bufSize, length, size, type, name);
  659. }
  660. else
  661. {
  662. NotSupported( "glGetActiveAttrib" );
  663. }
  664. }
  665. void GL2Extensions::glGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name) const
  666. {
  667. if (_glGetActiveUniform)
  668. {
  669. _glGetActiveUniform(program, index, bufSize, length, size, type, name);
  670. }
  671. else
  672. {
  673. NotSupported( "glGetActiveUniform" );
  674. }
  675. }
  676. void GL2Extensions::glGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj) const
  677. {
  678. if (_glGetAttachedShaders)
  679. {
  680. _glGetAttachedShaders(program, maxCount, count, obj);
  681. }
  682. else
  683. {
  684. NotSupported( "glGetAttachedShaders" );
  685. }
  686. }
  687. GLint GL2Extensions::glGetAttribLocation(GLuint program, const GLchar *name) const
  688. {
  689. if (_glGetAttribLocation)
  690. {
  691. return _glGetAttribLocation(program, name);
  692. }
  693. else
  694. {
  695. NotSupported( "glGetAttribLocation" );
  696. return 0;
  697. }
  698. }
  699. void GL2Extensions::glGetProgramiv(GLuint program, GLenum pname, GLint *params) const
  700. {
  701. if (_glGetProgramiv)
  702. {
  703. _glGetProgramiv(program, pname, params);
  704. }
  705. else if (_glGetObjectParameterivARB)
  706. {
  707. _glGetObjectParameterivARB(program, pname, params);
  708. }
  709. else
  710. {
  711. NotSupported( "glGetProgramiv" );
  712. }
  713. }
  714. void GL2Extensions::glGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog) const
  715. {
  716. if (_glGetProgramInfoLog)
  717. {
  718. _glGetProgramInfoLog(program, bufSize, length, infoLog);
  719. }
  720. else if (_glGetInfoLogARB)
  721. {
  722. _glGetInfoLogARB(program, bufSize, length, infoLog);
  723. }
  724. else
  725. {
  726. NotSupported( "glGetProgramInfoLog" );
  727. }
  728. }
  729. void GL2Extensions::glGetShaderiv(GLuint shader, GLenum pname, GLint *params) const
  730. {
  731. if (_glGetShaderiv)
  732. {
  733. _glGetShaderiv(shader, pname, params);
  734. }
  735. else if (_glGetObjectParameterivARB)
  736. {
  737. _glGetObjectParameterivARB(shader, pname, params);
  738. }
  739. else
  740. {
  741. NotSupported( "glGetShaderiv" );
  742. }
  743. }
  744. void GL2Extensions::glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog) const
  745. {
  746. if (_glGetShaderInfoLog)
  747. {
  748. _glGetShaderInfoLog(shader, bufSize, length, infoLog);
  749. }
  750. else if (_glGetInfoLogARB)
  751. {
  752. _glGetInfoLogARB(shader, bufSize, length, infoLog);
  753. }
  754. else
  755. {
  756. NotSupported( "glGetShaderInfoLog" );
  757. }
  758. }
  759. void GL2Extensions::glGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source) const
  760. {
  761. if (_glGetShaderSource)
  762. {
  763. _glGetShaderSource(shader, bufSize, length, source);
  764. }
  765. else
  766. {
  767. NotSupported( "glGetShaderSource" );
  768. }
  769. }
  770. GLint GL2Extensions::glGetUniformLocation(GLuint program, const GLchar *name) const
  771. {
  772. if (_glGetUniformLocation)
  773. {
  774. return _glGetUniformLocation(program, name);
  775. }
  776. else
  777. {
  778. NotSupported( "glGetUniformLocation" );
  779. return 0;
  780. }
  781. }
  782. void GL2Extensions::glGetUniformfv(GLuint program, GLint location, GLfloat *params) const
  783. {
  784. if (_glGetUniformfv)
  785. {
  786. _glGetUniformfv(program, location, params);
  787. }
  788. else
  789. {
  790. NotSupported( "glGetUniformfv" );
  791. }
  792. }
  793. void GL2Extensions::glGetUniformiv(GLuint program, GLint location, GLint *params) const
  794. {
  795. if (_glGetUniformiv)
  796. {
  797. _glGetUniformiv(program, location, params);
  798. }
  799. else
  800. {
  801. NotSupported( "glGetUniformiv" );
  802. }
  803. }
  804. void GL2Extensions::glGetVertexAttribdv(GLuint index, GLenum pname, GLdouble *params) const
  805. {
  806. if (_glGetVertexAttribdv)
  807. {
  808. _glGetVertexAttribdv(index, pname, params);
  809. }
  810. else
  811. {
  812. NotSupported( "glGetVertexAttribdv" );
  813. }
  814. }
  815. void GL2Extensions::glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params) const
  816. {
  817. if (_glGetVertexAttribfv)
  818. {
  819. _glGetVertexAttribfv(index, pname, params);
  820. }
  821. else
  822. {
  823. NotSupported( "glGetVertexAttribfv" );
  824. }
  825. }
  826. void GL2Extensions::glGetVertexAttribiv(GLuint index, GLenum pname, GLint *params) const
  827. {
  828. if (_glGetVertexAttribiv)
  829. {
  830. _glGetVertexAttribiv(index, pname, params);
  831. }
  832. else
  833. {
  834. NotSupported( "glGetVertexAttribiv" );
  835. }
  836. }
  837. void GL2Extensions::glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid* *pointer) const
  838. {
  839. if (_glGetVertexAttribPointerv)
  840. {
  841. _glGetVertexAttribPointerv(index, pname, pointer);
  842. }
  843. else
  844. {
  845. NotSupported( "glGetVertexAttribPointerv" );
  846. }
  847. }
  848. GLboolean GL2Extensions::glIsProgram(GLuint program) const
  849. {
  850. if (_glIsProgram)
  851. {
  852. return _glIsProgram(program);
  853. }
  854. else
  855. {
  856. NotSupported( "glIsProgram" );
  857. return 0;
  858. }
  859. }
  860. GLboolean GL2Extensions::glIsShader(GLuint shader) const
  861. {
  862. if (_glIsShader)
  863. {
  864. return _glIsShader(shader);
  865. }
  866. else
  867. {
  868. NotSupported( "glIsShader" );
  869. return 0;
  870. }
  871. }
  872. void GL2Extensions::glLinkProgram(GLuint program) const
  873. {
  874. if (_glLinkProgram)
  875. {
  876. _glLinkProgram(program);
  877. }
  878. else
  879. {
  880. NotSupported( "glLinkProgram" );
  881. }
  882. }
  883. void GL2Extensions::glShaderSource(GLuint shader, GLsizei count, const GLchar* *string, const GLint *length) const
  884. {
  885. if (_glShaderSource)
  886. {
  887. _glShaderSource(shader, count, string, length);
  888. }
  889. else
  890. {
  891. NotSupported( "glShaderSource" );
  892. }
  893. }
  894. void GL2Extensions::glUseProgram(GLuint program) const
  895. {
  896. if (_glUseProgram)
  897. {
  898. _glUseProgram(program);
  899. }
  900. else
  901. {
  902. NotSupported( "glUseProgram" );
  903. }
  904. }
  905. void GL2Extensions::glUniform1f(GLint location, GLfloat v0) const
  906. {
  907. if (_glUniform1f)
  908. {
  909. _glUniform1f(location, v0);
  910. }
  911. else
  912. {
  913. NotSupported( "glUniform1f" );
  914. }
  915. }
  916. void GL2Extensions::glUniform2f(GLint location, GLfloat v0, GLfloat v1) const
  917. {
  918. if (_glUniform2f)
  919. {
  920. _glUniform2f(location, v0, v1);
  921. }
  922. else
  923. {
  924. NotSupported( "glUniform2f" );
  925. }
  926. }
  927. void GL2Extensions::glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) const
  928. {
  929. if (_glUniform3f)
  930. {
  931. _glUniform3f(location, v0, v1, v2);
  932. }
  933. else
  934. {
  935. NotSupported( "glUniform3f" );
  936. }
  937. }
  938. void GL2Extensions::glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) const
  939. {
  940. if (_glUniform4f)
  941. {
  942. _glUniform4f(location, v0, v1, v2, v3);
  943. }
  944. else
  945. {
  946. NotSupported( "glUniform4f" );
  947. }
  948. }
  949. void GL2Extensions::glUniform1i(GLint location, GLint v0) const
  950. {
  951. if (_glUniform1i)
  952. {
  953. _glUniform1i(location, v0);
  954. }
  955. else
  956. {
  957. NotSupported( "glUniform1i" );
  958. }
  959. }
  960. void GL2Extensions::glUniform2i(GLint location, GLint v0, GLint v1) const
  961. {
  962. if (_glUniform2i)
  963. {
  964. _glUniform2i(location, v0, v1);
  965. }
  966. else
  967. {
  968. NotSupported( "glUniform2i" );
  969. }
  970. }
  971. void GL2Extensions::glUniform3i(GLint location, GLint v0, GLint v1, GLint v2) const
  972. {
  973. if (_glUniform3i)
  974. {
  975. _glUniform3i(location, v0, v1, v2);
  976. }
  977. else
  978. {
  979. NotSupported( "glUniform3i" );
  980. }
  981. }
  982. void GL2Extensions::glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) const
  983. {
  984. if (_glUniform4i)
  985. {
  986. _glUniform4i(location, v0, v1, v2, v3);
  987. }
  988. else
  989. {
  990. NotSupported( "glUniform4i" );
  991. }
  992. }
  993. void GL2Extensions::glUniform1fv(GLint location, GLsizei count, const GLfloat *value) const
  994. {
  995. if (_glUniform1fv)
  996. {
  997. _glUniform1fv(location, count, value);
  998. }
  999. else
  1000. {
  1001. NotSupported( "glUniform1fv" );
  1002. }
  1003. }
  1004. void GL2Extensions::glUniform2fv(GLint location, GLsizei count, const GLfloat *value) const
  1005. {
  1006. if (_glUniform2fv)
  1007. {
  1008. _glUniform2fv(location, count, value);
  1009. }
  1010. else
  1011. {
  1012. NotSupported( "glUniform2fv" );
  1013. }
  1014. }
  1015. void GL2Extensions::glUniform3fv(GLint location, GLsizei count, const GLfloat *value) const
  1016. {
  1017. if (_glUniform3fv)
  1018. {
  1019. _glUniform3fv(location, count, value);
  1020. }
  1021. else
  1022. {
  1023. NotSupported( "glUniform3fv" );
  1024. }
  1025. }
  1026. void GL2Extensions::glUniform4fv(GLint location, GLsizei count, const GLfloat *value) const
  1027. {
  1028. if (_glUniform4fv)
  1029. {
  1030. _glUniform4fv(location, count, value);
  1031. }
  1032. else
  1033. {
  1034. NotSupported( "glUniform4fv" );
  1035. }
  1036. }
  1037. void GL2Extensions::glUniform1iv(GLint location, GLsizei count, const GLint *value) const
  1038. {
  1039. if (_glUniform1iv)
  1040. {
  1041. _glUniform1iv(location, count, value);
  1042. }
  1043. else
  1044. {
  1045. NotSupported( "glUniform1iv" );
  1046. }
  1047. }
  1048. void GL2Extensions::glUniform2iv(GLint location, GLsizei count, const GLint *value) const
  1049. {
  1050. if (_glUniform2iv)
  1051. {
  1052. _glUniform2iv(location, count, value);
  1053. }
  1054. else
  1055. {
  1056. NotSupported( "glUniform2iv" );
  1057. }
  1058. }
  1059. void GL2Extensions::glUniform3iv(GLint location, GLsizei count, const GLint *value) const
  1060. {
  1061. if (_glUniform3iv)
  1062. {
  1063. _glUniform3iv(location, count, value);
  1064. }
  1065. else
  1066. {
  1067. NotSupported( "glUniform3iv" );
  1068. }
  1069. }
  1070. void GL2Extensions::glUniform4iv(GLint location, GLsizei count, const GLint *value) const
  1071. {
  1072. if (_glUniform4iv)
  1073. {
  1074. _glUniform4iv(location, count, value);
  1075. }
  1076. else
  1077. {
  1078. NotSupported( "glUniform4iv" );
  1079. }
  1080. }
  1081. void GL2Extensions::glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) const
  1082. {
  1083. if (_glUniformMatrix2fv)
  1084. {
  1085. _glUniformMatrix2fv(location, count, transpose, value);
  1086. }
  1087. else
  1088. {
  1089. NotSupported( "glUniformMatrix2fv" );
  1090. }
  1091. }
  1092. void GL2Extensions::glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) const
  1093. {
  1094. if (_glUniformMatrix3fv)
  1095. {
  1096. _glUniformMatrix3fv(location, count, transpose, value);
  1097. }
  1098. else
  1099. {
  1100. NotSupported( "glUniformMatrix3fv" );
  1101. }
  1102. }
  1103. void GL2Extensions::glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) const
  1104. {
  1105. if (_glUniformMatrix4fv)
  1106. {
  1107. _glUniformMatrix4fv(location, count, transpose, value);
  1108. }
  1109. else
  1110. {
  1111. NotSupported( "glUniformMatrix4fv" );
  1112. }
  1113. }
  1114. void GL2Extensions::glValidateProgram(GLuint program) const
  1115. {
  1116. if (_glValidateProgram)
  1117. {
  1118. _glValidateProgram(program);
  1119. }
  1120. else
  1121. {
  1122. NotSupported( "glValidateProgram" );
  1123. }
  1124. }
  1125. void GL2Extensions::glVertexAttrib1d(GLuint index, GLdouble x) const
  1126. {
  1127. if (_glVertexAttrib1d)
  1128. {
  1129. _glVertexAttrib1d(index, x);
  1130. }
  1131. else
  1132. {
  1133. NotSupported( "glVertexAttrib1d" );
  1134. }
  1135. }
  1136. void GL2Extensions::glVertexAttrib1dv(GLuint index, const GLdouble *v) const
  1137. {
  1138. if (_glVertexAttrib1dv)
  1139. {
  1140. _glVertexAttrib1dv(index, v);
  1141. }
  1142. else
  1143. {
  1144. NotSupported( "glVertexAttrib1dv" );
  1145. }
  1146. }
  1147. void GL2Extensions::glVertexAttrib1f(GLuint index, GLfloat x) const
  1148. {
  1149. if (_glVertexAttrib1f)
  1150. {
  1151. _glVertexAttrib1f(index, x);
  1152. }
  1153. else
  1154. {
  1155. NotSupported( "glVertexAttrib1f" );
  1156. }
  1157. }
  1158. void GL2Extensions::glVertexAttrib1fv(GLuint index, const GLfloat *v) const
  1159. {
  1160. if (_glVertexAttrib1fv)
  1161. {
  1162. _glVertexAttrib1fv(index, v);
  1163. }
  1164. else
  1165. {
  1166. NotSupported( "glVertexAttrib1fv" );
  1167. }
  1168. }
  1169. void GL2Extensions::glVertexAttrib1s(GLuint index, GLshort x) const
  1170. {
  1171. if (_glVertexAttrib1s)
  1172. {
  1173. _glVertexAttrib1s(index, x);
  1174. }
  1175. else
  1176. {
  1177. NotSupported( "glVertexAttrib1s" );
  1178. }
  1179. }
  1180. void GL2Extensions::glVertexAttrib1sv(GLuint index, const GLshort *v) const
  1181. {
  1182. if (_glVertexAttrib1sv)
  1183. {
  1184. _glVertexAttrib1sv(index, v);
  1185. }
  1186. else
  1187. {
  1188. NotSupported( "glVertexAttrib1sv" );
  1189. }
  1190. }
  1191. void GL2Extensions::glVertexAttrib2d(GLuint index, GLdouble x, GLdouble y) const
  1192. {
  1193. if (_glVertexAttrib2d)
  1194. {
  1195. _glVertexAttrib2d(index, x, y);
  1196. }
  1197. else
  1198. {
  1199. NotSupported( "glVertexAttrib2d" );
  1200. }
  1201. }
  1202. void GL2Extensions::glVertexAttrib2dv(GLuint index, const GLdouble *v) const
  1203. {
  1204. if (_glVertexAttrib2dv)
  1205. {
  1206. _glVertexAttrib2dv(index, v);
  1207. }
  1208. else
  1209. {
  1210. NotSupported( "glVertexAttrib2dv" );
  1211. }
  1212. }
  1213. void GL2Extensions::glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y) const
  1214. {
  1215. if (_glVertexAttrib2f)
  1216. {
  1217. _glVertexAttrib2f(index, x, y);
  1218. }
  1219. else
  1220. {
  1221. NotSupported( "glVertexAttrib2f" );
  1222. }
  1223. }
  1224. void GL2Extensions::glVertexAttrib2fv(GLuint index, const GLfloat *v) const
  1225. {
  1226. if (_glVertexAttrib2fv)
  1227. {
  1228. _glVertexAttrib2fv(index, v);
  1229. }
  1230. else
  1231. {
  1232. NotSupported( "glVertexAttrib2fv" );
  1233. }
  1234. }
  1235. void GL2Extensions::glVertexAttrib2s(GLuint index, GLshort x, GLshort y) const
  1236. {
  1237. if (_glVertexAttrib2s)
  1238. {
  1239. _glVertexAttrib2s(index, x, y);
  1240. }
  1241. else
  1242. {
  1243. NotSupported( "glVertexAttrib2s" );
  1244. }
  1245. }
  1246. void GL2Extensions::glVertexAttrib2sv(GLuint index, const GLshort *v) const
  1247. {
  1248. if (_glVertexAttrib2sv)
  1249. {
  1250. _glVertexAttrib2sv(index, v);
  1251. }
  1252. else
  1253. {
  1254. NotSupported( "glVertexAttrib2sv" );
  1255. }
  1256. }
  1257. void GL2Extensions::glVertexAttrib3d(GLuint index, GLdouble x, GLdouble y, GLdouble z) const
  1258. {
  1259. if (_glVertexAttrib3d)
  1260. {
  1261. _glVertexAttrib3d(index, x, y, z);
  1262. }
  1263. else
  1264. {
  1265. NotSupported( "glVertexAttrib3d" );
  1266. }
  1267. }
  1268. void GL2Extensions::glVertexAttrib3dv(GLuint index, const GLdouble *v) const
  1269. {
  1270. if (_glVertexAttrib3dv)
  1271. {
  1272. _glVertexAttrib3dv(index, v);
  1273. }
  1274. else
  1275. {
  1276. NotSupported( "glVertexAttrib3dv" );
  1277. }
  1278. }
  1279. void GL2Extensions::glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z) const
  1280. {
  1281. if (_glVertexAttrib3f)
  1282. {
  1283. _glVertexAttrib3f(index, x, y, z);
  1284. }
  1285. else
  1286. {
  1287. NotSupported( "glVertexAttrib3f" );
  1288. }
  1289. }
  1290. void GL2Extensions::glVertexAttrib3fv(GLuint index, const GLfloat *v) const
  1291. {
  1292. if (_glVertexAttrib3fv)
  1293. {
  1294. _glVertexAttrib3fv(index, v);
  1295. }
  1296. else
  1297. {
  1298. NotSupported( "glVertexAttrib3fv" );
  1299. }
  1300. }
  1301. void GL2Extensions::glVertexAttrib3s(GLuint index, GLshort x, GLshort y, GLshort z) const
  1302. {
  1303. if (_glVertexAttrib3s)
  1304. {
  1305. _glVertexAttrib3s(index, x, y, z);
  1306. }
  1307. else
  1308. {
  1309. NotSupported( "glVertexAttrib3s" );
  1310. }
  1311. }
  1312. void GL2Extensions::glVertexAttrib3sv(GLuint index, const GLshort *v) const
  1313. {
  1314. if (_glVertexAttrib3sv)
  1315. {
  1316. _glVertexAttrib3sv(index, v);
  1317. }
  1318. else
  1319. {
  1320. NotSupported( "glVertexAttrib3sv" );
  1321. }
  1322. }
  1323. void GL2Extensions::glVertexAttrib4Nbv(GLuint index, const GLbyte *v) const
  1324. {
  1325. if (_glVertexAttrib4Nbv)
  1326. {
  1327. _glVertexAttrib4Nbv(index, v);
  1328. }
  1329. else
  1330. {
  1331. NotSupported( "glVertexAttrib4Nbv" );
  1332. }
  1333. }
  1334. void GL2Extensions::glVertexAttrib4Niv(GLuint index, const GLint *v) const
  1335. {
  1336. if (_glVertexAttrib4Niv)
  1337. {
  1338. _glVertexAttrib4Niv(index, v);
  1339. }
  1340. else
  1341. {
  1342. NotSupported( "glVertexAttrib4Niv" );
  1343. }
  1344. }
  1345. void GL2Extensions::glVertexAttrib4Nsv(GLuint index, const GLshort *v) const
  1346. {
  1347. if (_glVertexAttrib4Nsv)
  1348. {
  1349. _glVertexAttrib4Nsv(index, v);
  1350. }
  1351. else
  1352. {
  1353. NotSupported( "glVertexAttrib4Nsv" );
  1354. }
  1355. }
  1356. void GL2Extensions::glVertexAttrib4Nub(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) const
  1357. {
  1358. if (_glVertexAttrib4Nub)
  1359. {
  1360. _glVertexAttrib4Nub(index, x, y, z, w);
  1361. }
  1362. else
  1363. {
  1364. NotSupported( "glVertexAttrib4Nub" );
  1365. }
  1366. }
  1367. void GL2Extensions::glVertexAttrib4Nubv(GLuint index, const GLubyte *v) const
  1368. {
  1369. if (_glVertexAttrib4Nubv)
  1370. {
  1371. _glVertexAttrib4Nubv(index, v);
  1372. }
  1373. else
  1374. {
  1375. NotSupported( "glVertexAttrib4Nubv" );
  1376. }
  1377. }
  1378. void GL2Extensions::glVertexAttrib4Nuiv(GLuint index, const GLuint *v) const
  1379. {
  1380. if (_glVertexAttrib4Nuiv)
  1381. {
  1382. _glVertexAttrib4Nuiv(index, v);
  1383. }
  1384. else
  1385. {
  1386. NotSupported( "glVertexAttrib4Nuiv" );
  1387. }
  1388. }
  1389. void GL2Extensions::glVertexAttrib4Nusv(GLuint index, const GLushort *v) const
  1390. {
  1391. if (_glVertexAttrib4Nusv)
  1392. {
  1393. _glVertexAttrib4Nusv(index, v);
  1394. }
  1395. else
  1396. {
  1397. NotSupported( "glVertexAttrib4Nusv" );
  1398. }
  1399. }
  1400. void GL2Extensions::glVertexAttrib4bv(GLuint index, const GLbyte *v) const
  1401. {
  1402. if (_glVertexAttrib4bv)
  1403. {
  1404. _glVertexAttrib4bv(index, v);
  1405. }
  1406. else
  1407. {
  1408. NotSupported( "glVertexAttrib4bv" );
  1409. }
  1410. }
  1411. void GL2Extensions::glVertexAttrib4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) const
  1412. {
  1413. if (_glVertexAttrib4d)
  1414. {
  1415. _glVertexAttrib4d(index, x, y, z, w);
  1416. }
  1417. else
  1418. {
  1419. NotSupported( "glVertexAttrib4d" );
  1420. }
  1421. }
  1422. void GL2Extensions::glVertexAttrib4dv(GLuint index, const GLdouble *v) const
  1423. {
  1424. if (_glVertexAttrib4dv)
  1425. {
  1426. _glVertexAttrib4dv(index, v);
  1427. }
  1428. else
  1429. {
  1430. NotSupported( "glVertexAttrib4dv" );
  1431. }
  1432. }
  1433. void GL2Extensions::glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) const
  1434. {
  1435. if (_glVertexAttrib4f)
  1436. {
  1437. _glVertexAttrib4f(index, x, y, z, w);
  1438. }
  1439. else
  1440. {
  1441. NotSupported( "glVertexAttrib4f" );
  1442. }
  1443. }
  1444. void GL2Extensions::glVertexAttrib4fv(GLuint index, const GLfloat *v) const
  1445. {
  1446. if (_glVertexAttrib4fv)
  1447. {
  1448. _glVertexAttrib4fv(index, v);
  1449. }
  1450. else
  1451. {
  1452. NotSupported( "glVertexAttrib4fv" );
  1453. }
  1454. }
  1455. void GL2Extensions::glVertexAttrib4iv(GLuint index, const GLint *v) const
  1456. {
  1457. if (_glVertexAttrib4iv)
  1458. {
  1459. _glVertexAttrib4iv(index, v);
  1460. }
  1461. else
  1462. {
  1463. NotSupported( "glVertexAttrib4iv" );
  1464. }
  1465. }
  1466. void GL2Extensions::glVertexAttrib4s(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) const
  1467. {
  1468. if (_glVertexAttrib4s)
  1469. {
  1470. _glVertexAttrib4s(index, x, y, z, w);
  1471. }
  1472. else
  1473. {
  1474. NotSupported( "glVertexAttrib4s" );
  1475. }
  1476. }
  1477. void GL2Extensions::glVertexAttrib4sv(GLuint index, const GLshort *v) const
  1478. {
  1479. if (_glVertexAttrib4sv)
  1480. {
  1481. _glVertexAttrib4sv(index, v);
  1482. }
  1483. else
  1484. {
  1485. NotSupported( "glVertexAttrib4sv" );
  1486. }
  1487. }
  1488. void GL2Extensions::glVertexAttrib4ubv(GLuint index, const GLubyte *v) const
  1489. {
  1490. if (_glVertexAttrib4ubv)
  1491. {
  1492. _glVertexAttrib4ubv(index, v);
  1493. }
  1494. else
  1495. {
  1496. NotSupported( "glVertexAttrib4ubv" );
  1497. }
  1498. }
  1499. void GL2Extensions::glVertexAttrib4uiv(GLuint index, const GLuint *v) const
  1500. {
  1501. if (_glVertexAttrib4uiv)
  1502. {
  1503. _glVertexAttrib4uiv(index, v);
  1504. }
  1505. else
  1506. {
  1507. NotSupported( "glVertexAttrib4uiv" );
  1508. }
  1509. }
  1510. void GL2Extensions::glVertexAttrib4usv(GLuint index, const GLushort *v) const
  1511. {
  1512. if (_glVertexAttrib4usv)
  1513. {
  1514. _glVertexAttrib4usv(index, v);
  1515. }
  1516. else
  1517. {
  1518. NotSupported( "glVertexAttrib4usv" );
  1519. }
  1520. }
  1521. void GL2Extensions::glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer) const
  1522. {
  1523. if (_glVertexAttribPointer)
  1524. {
  1525. _glVertexAttribPointer(index, size, type, normalized, stride, pointer);
  1526. }
  1527. else
  1528. {
  1529. N

Large files files are truncated, but you can click here to view the full file