PageRenderTime 58ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 0ms

/ui/gl/gl_bindings_autogen_gl.cc

https://gitlab.com/jonnialva90/iridium-browser
C++ | 1197 lines | 1112 code | 76 blank | 9 comment | 221 complexity | 799157a590ab935c9a2c696b885bc23a MD5 | raw file
  1. // Copyright 2014 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. //
  5. // This file is auto-generated from
  6. // ui/gl/generate_bindings.py
  7. // It's formatted by clang-format using chromium coding style:
  8. // clang-format -i -style=chromium filename
  9. // DO NOT EDIT!
  10. #include <string>
  11. #include "base/trace_event/trace_event.h"
  12. #include "ui/gl/gl_bindings.h"
  13. #include "ui/gl/gl_context.h"
  14. #include "ui/gl/gl_enums.h"
  15. #include "ui/gl/gl_gl_api_implementation.h"
  16. #include "ui/gl/gl_implementation.h"
  17. #include "ui/gl/gl_version_info.h"
  18. namespace gfx {
  19. static bool g_debugBindingsInitialized;
  20. DriverGL g_driver_gl;
  21. void DriverGL::InitializeStaticBindings() {
  22. fn.glActiveTextureFn = reinterpret_cast<glActiveTextureProc>(
  23. GetGLProcAddress("glActiveTexture"));
  24. fn.glApplyFramebufferAttachmentCMAAINTELFn = 0;
  25. fn.glAttachShaderFn =
  26. reinterpret_cast<glAttachShaderProc>(GetGLProcAddress("glAttachShader"));
  27. fn.glBeginQueryFn = 0;
  28. fn.glBeginTransformFeedbackFn = 0;
  29. fn.glBindAttribLocationFn = reinterpret_cast<glBindAttribLocationProc>(
  30. GetGLProcAddress("glBindAttribLocation"));
  31. fn.glBindBufferFn =
  32. reinterpret_cast<glBindBufferProc>(GetGLProcAddress("glBindBuffer"));
  33. fn.glBindBufferBaseFn = 0;
  34. fn.glBindBufferRangeFn = 0;
  35. fn.glBindFragDataLocationFn = 0;
  36. fn.glBindFragDataLocationIndexedFn = 0;
  37. fn.glBindFramebufferEXTFn = 0;
  38. fn.glBindRenderbufferEXTFn = 0;
  39. fn.glBindSamplerFn = 0;
  40. fn.glBindTextureFn =
  41. reinterpret_cast<glBindTextureProc>(GetGLProcAddress("glBindTexture"));
  42. fn.glBindTransformFeedbackFn = 0;
  43. fn.glBindVertexArrayOESFn = 0;
  44. fn.glBlendBarrierKHRFn = 0;
  45. fn.glBlendColorFn =
  46. reinterpret_cast<glBlendColorProc>(GetGLProcAddress("glBlendColor"));
  47. fn.glBlendEquationFn = reinterpret_cast<glBlendEquationProc>(
  48. GetGLProcAddress("glBlendEquation"));
  49. fn.glBlendEquationSeparateFn = reinterpret_cast<glBlendEquationSeparateProc>(
  50. GetGLProcAddress("glBlendEquationSeparate"));
  51. fn.glBlendFuncFn =
  52. reinterpret_cast<glBlendFuncProc>(GetGLProcAddress("glBlendFunc"));
  53. fn.glBlendFuncSeparateFn = reinterpret_cast<glBlendFuncSeparateProc>(
  54. GetGLProcAddress("glBlendFuncSeparate"));
  55. fn.glBlitFramebufferFn = 0;
  56. fn.glBlitFramebufferANGLEFn = 0;
  57. fn.glBlitFramebufferEXTFn = 0;
  58. fn.glBufferDataFn =
  59. reinterpret_cast<glBufferDataProc>(GetGLProcAddress("glBufferData"));
  60. fn.glBufferSubDataFn = reinterpret_cast<glBufferSubDataProc>(
  61. GetGLProcAddress("glBufferSubData"));
  62. fn.glCheckFramebufferStatusEXTFn = 0;
  63. fn.glClearFn = reinterpret_cast<glClearProc>(GetGLProcAddress("glClear"));
  64. fn.glClearBufferfiFn = 0;
  65. fn.glClearBufferfvFn = 0;
  66. fn.glClearBufferivFn = 0;
  67. fn.glClearBufferuivFn = 0;
  68. fn.glClearColorFn =
  69. reinterpret_cast<glClearColorProc>(GetGLProcAddress("glClearColor"));
  70. fn.glClearDepthFn =
  71. reinterpret_cast<glClearDepthProc>(GetGLProcAddress("glClearDepth"));
  72. fn.glClearDepthfFn = 0;
  73. fn.glClearStencilFn =
  74. reinterpret_cast<glClearStencilProc>(GetGLProcAddress("glClearStencil"));
  75. fn.glClientWaitSyncFn = 0;
  76. fn.glColorMaskFn =
  77. reinterpret_cast<glColorMaskProc>(GetGLProcAddress("glColorMask"));
  78. fn.glCompileShaderFn = reinterpret_cast<glCompileShaderProc>(
  79. GetGLProcAddress("glCompileShader"));
  80. fn.glCompressedTexImage2DFn = reinterpret_cast<glCompressedTexImage2DProc>(
  81. GetGLProcAddress("glCompressedTexImage2D"));
  82. fn.glCompressedTexImage3DFn = 0;
  83. fn.glCompressedTexSubImage2DFn =
  84. reinterpret_cast<glCompressedTexSubImage2DProc>(
  85. GetGLProcAddress("glCompressedTexSubImage2D"));
  86. fn.glCompressedTexSubImage3DFn = 0;
  87. fn.glCopyBufferSubDataFn = 0;
  88. fn.glCopyTexImage2DFn = reinterpret_cast<glCopyTexImage2DProc>(
  89. GetGLProcAddress("glCopyTexImage2D"));
  90. fn.glCopyTexSubImage2DFn = reinterpret_cast<glCopyTexSubImage2DProc>(
  91. GetGLProcAddress("glCopyTexSubImage2D"));
  92. fn.glCopyTexSubImage3DFn = 0;
  93. fn.glCoverFillPathNVFn = 0;
  94. fn.glCoverStrokePathNVFn = 0;
  95. fn.glCreateProgramFn = reinterpret_cast<glCreateProgramProc>(
  96. GetGLProcAddress("glCreateProgram"));
  97. fn.glCreateShaderFn =
  98. reinterpret_cast<glCreateShaderProc>(GetGLProcAddress("glCreateShader"));
  99. fn.glCullFaceFn =
  100. reinterpret_cast<glCullFaceProc>(GetGLProcAddress("glCullFace"));
  101. fn.glDeleteBuffersARBFn = reinterpret_cast<glDeleteBuffersARBProc>(
  102. GetGLProcAddress("glDeleteBuffers"));
  103. fn.glDeleteFencesAPPLEFn = 0;
  104. fn.glDeleteFencesNVFn = 0;
  105. fn.glDeleteFramebuffersEXTFn = 0;
  106. fn.glDeletePathsNVFn = 0;
  107. fn.glDeleteProgramFn = reinterpret_cast<glDeleteProgramProc>(
  108. GetGLProcAddress("glDeleteProgram"));
  109. fn.glDeleteQueriesFn = 0;
  110. fn.glDeleteRenderbuffersEXTFn = 0;
  111. fn.glDeleteSamplersFn = 0;
  112. fn.glDeleteShaderFn =
  113. reinterpret_cast<glDeleteShaderProc>(GetGLProcAddress("glDeleteShader"));
  114. fn.glDeleteSyncFn = 0;
  115. fn.glDeleteTexturesFn = reinterpret_cast<glDeleteTexturesProc>(
  116. GetGLProcAddress("glDeleteTextures"));
  117. fn.glDeleteTransformFeedbacksFn = 0;
  118. fn.glDeleteVertexArraysOESFn = 0;
  119. fn.glDepthFuncFn =
  120. reinterpret_cast<glDepthFuncProc>(GetGLProcAddress("glDepthFunc"));
  121. fn.glDepthMaskFn =
  122. reinterpret_cast<glDepthMaskProc>(GetGLProcAddress("glDepthMask"));
  123. fn.glDepthRangeFn =
  124. reinterpret_cast<glDepthRangeProc>(GetGLProcAddress("glDepthRange"));
  125. fn.glDepthRangefFn = 0;
  126. fn.glDetachShaderFn =
  127. reinterpret_cast<glDetachShaderProc>(GetGLProcAddress("glDetachShader"));
  128. fn.glDisableFn =
  129. reinterpret_cast<glDisableProc>(GetGLProcAddress("glDisable"));
  130. fn.glDisableVertexAttribArrayFn =
  131. reinterpret_cast<glDisableVertexAttribArrayProc>(
  132. GetGLProcAddress("glDisableVertexAttribArray"));
  133. fn.glDiscardFramebufferEXTFn = 0;
  134. fn.glDrawArraysFn =
  135. reinterpret_cast<glDrawArraysProc>(GetGLProcAddress("glDrawArrays"));
  136. fn.glDrawArraysInstancedANGLEFn = 0;
  137. fn.glDrawBufferFn = 0;
  138. fn.glDrawBuffersARBFn = 0;
  139. fn.glDrawElementsFn =
  140. reinterpret_cast<glDrawElementsProc>(GetGLProcAddress("glDrawElements"));
  141. fn.glDrawElementsInstancedANGLEFn = 0;
  142. fn.glDrawRangeElementsFn = 0;
  143. fn.glEGLImageTargetRenderbufferStorageOESFn = 0;
  144. fn.glEGLImageTargetTexture2DOESFn = 0;
  145. fn.glEnableFn = reinterpret_cast<glEnableProc>(GetGLProcAddress("glEnable"));
  146. fn.glEnableVertexAttribArrayFn =
  147. reinterpret_cast<glEnableVertexAttribArrayProc>(
  148. GetGLProcAddress("glEnableVertexAttribArray"));
  149. fn.glEndQueryFn = 0;
  150. fn.glEndTransformFeedbackFn = 0;
  151. fn.glFenceSyncFn = 0;
  152. fn.glFinishFn = reinterpret_cast<glFinishProc>(GetGLProcAddress("glFinish"));
  153. fn.glFinishFenceAPPLEFn = 0;
  154. fn.glFinishFenceNVFn = 0;
  155. fn.glFlushFn = reinterpret_cast<glFlushProc>(GetGLProcAddress("glFlush"));
  156. fn.glFlushMappedBufferRangeFn = 0;
  157. fn.glFramebufferRenderbufferEXTFn = 0;
  158. fn.glFramebufferTexture2DEXTFn = 0;
  159. fn.glFramebufferTexture2DMultisampleEXTFn = 0;
  160. fn.glFramebufferTexture2DMultisampleIMGFn = 0;
  161. fn.glFramebufferTextureLayerFn = 0;
  162. fn.glFrontFaceFn =
  163. reinterpret_cast<glFrontFaceProc>(GetGLProcAddress("glFrontFace"));
  164. fn.glGenBuffersARBFn =
  165. reinterpret_cast<glGenBuffersARBProc>(GetGLProcAddress("glGenBuffers"));
  166. fn.glGenerateMipmapEXTFn = 0;
  167. fn.glGenFencesAPPLEFn = 0;
  168. fn.glGenFencesNVFn = 0;
  169. fn.glGenFramebuffersEXTFn = 0;
  170. fn.glGenPathsNVFn = 0;
  171. fn.glGenQueriesFn = 0;
  172. fn.glGenRenderbuffersEXTFn = 0;
  173. fn.glGenSamplersFn = 0;
  174. fn.glGenTexturesFn =
  175. reinterpret_cast<glGenTexturesProc>(GetGLProcAddress("glGenTextures"));
  176. fn.glGenTransformFeedbacksFn = 0;
  177. fn.glGenVertexArraysOESFn = 0;
  178. fn.glGetActiveAttribFn = reinterpret_cast<glGetActiveAttribProc>(
  179. GetGLProcAddress("glGetActiveAttrib"));
  180. fn.glGetActiveUniformFn = reinterpret_cast<glGetActiveUniformProc>(
  181. GetGLProcAddress("glGetActiveUniform"));
  182. fn.glGetActiveUniformBlockivFn = 0;
  183. fn.glGetActiveUniformBlockNameFn = 0;
  184. fn.glGetActiveUniformsivFn = 0;
  185. fn.glGetAttachedShadersFn = reinterpret_cast<glGetAttachedShadersProc>(
  186. GetGLProcAddress("glGetAttachedShaders"));
  187. fn.glGetAttribLocationFn = reinterpret_cast<glGetAttribLocationProc>(
  188. GetGLProcAddress("glGetAttribLocation"));
  189. fn.glGetBooleanvFn =
  190. reinterpret_cast<glGetBooleanvProc>(GetGLProcAddress("glGetBooleanv"));
  191. fn.glGetBufferParameterivFn = reinterpret_cast<glGetBufferParameterivProc>(
  192. GetGLProcAddress("glGetBufferParameteriv"));
  193. fn.glGetErrorFn =
  194. reinterpret_cast<glGetErrorProc>(GetGLProcAddress("glGetError"));
  195. fn.glGetFenceivNVFn = 0;
  196. fn.glGetFloatvFn =
  197. reinterpret_cast<glGetFloatvProc>(GetGLProcAddress("glGetFloatv"));
  198. fn.glGetFragDataLocationFn = 0;
  199. fn.glGetFramebufferAttachmentParameterivEXTFn = 0;
  200. fn.glGetGraphicsResetStatusARBFn = 0;
  201. fn.glGetInteger64i_vFn = 0;
  202. fn.glGetInteger64vFn = 0;
  203. fn.glGetIntegeri_vFn = 0;
  204. fn.glGetIntegervFn =
  205. reinterpret_cast<glGetIntegervProc>(GetGLProcAddress("glGetIntegerv"));
  206. fn.glGetInternalformativFn = 0;
  207. fn.glGetProgramBinaryFn = 0;
  208. fn.glGetProgramInfoLogFn = reinterpret_cast<glGetProgramInfoLogProc>(
  209. GetGLProcAddress("glGetProgramInfoLog"));
  210. fn.glGetProgramivFn =
  211. reinterpret_cast<glGetProgramivProc>(GetGLProcAddress("glGetProgramiv"));
  212. fn.glGetProgramResourceLocationFn = 0;
  213. fn.glGetQueryivFn = 0;
  214. fn.glGetQueryObjecti64vFn = 0;
  215. fn.glGetQueryObjectivFn = 0;
  216. fn.glGetQueryObjectui64vFn = 0;
  217. fn.glGetQueryObjectuivFn = 0;
  218. fn.glGetRenderbufferParameterivEXTFn = 0;
  219. fn.glGetSamplerParameterfvFn = 0;
  220. fn.glGetSamplerParameterivFn = 0;
  221. fn.glGetShaderInfoLogFn = reinterpret_cast<glGetShaderInfoLogProc>(
  222. GetGLProcAddress("glGetShaderInfoLog"));
  223. fn.glGetShaderivFn =
  224. reinterpret_cast<glGetShaderivProc>(GetGLProcAddress("glGetShaderiv"));
  225. fn.glGetShaderPrecisionFormatFn = 0;
  226. fn.glGetShaderSourceFn = reinterpret_cast<glGetShaderSourceProc>(
  227. GetGLProcAddress("glGetShaderSource"));
  228. fn.glGetStringFn =
  229. reinterpret_cast<glGetStringProc>(GetGLProcAddress("glGetString"));
  230. fn.glGetStringiFn =
  231. reinterpret_cast<glGetStringiProc>(GetGLProcAddress("glGetStringi"));
  232. fn.glGetSyncivFn = 0;
  233. fn.glGetTexLevelParameterfvFn = 0;
  234. fn.glGetTexLevelParameterivFn = 0;
  235. fn.glGetTexParameterfvFn = reinterpret_cast<glGetTexParameterfvProc>(
  236. GetGLProcAddress("glGetTexParameterfv"));
  237. fn.glGetTexParameterivFn = reinterpret_cast<glGetTexParameterivProc>(
  238. GetGLProcAddress("glGetTexParameteriv"));
  239. fn.glGetTransformFeedbackVaryingFn = 0;
  240. fn.glGetTranslatedShaderSourceANGLEFn = 0;
  241. fn.glGetUniformBlockIndexFn = 0;
  242. fn.glGetUniformfvFn =
  243. reinterpret_cast<glGetUniformfvProc>(GetGLProcAddress("glGetUniformfv"));
  244. fn.glGetUniformIndicesFn = 0;
  245. fn.glGetUniformivFn =
  246. reinterpret_cast<glGetUniformivProc>(GetGLProcAddress("glGetUniformiv"));
  247. fn.glGetUniformLocationFn = reinterpret_cast<glGetUniformLocationProc>(
  248. GetGLProcAddress("glGetUniformLocation"));
  249. fn.glGetUniformuivFn = 0;
  250. fn.glGetVertexAttribfvFn = reinterpret_cast<glGetVertexAttribfvProc>(
  251. GetGLProcAddress("glGetVertexAttribfv"));
  252. fn.glGetVertexAttribivFn = reinterpret_cast<glGetVertexAttribivProc>(
  253. GetGLProcAddress("glGetVertexAttribiv"));
  254. fn.glGetVertexAttribPointervFn =
  255. reinterpret_cast<glGetVertexAttribPointervProc>(
  256. GetGLProcAddress("glGetVertexAttribPointerv"));
  257. fn.glHintFn = reinterpret_cast<glHintProc>(GetGLProcAddress("glHint"));
  258. fn.glInsertEventMarkerEXTFn = 0;
  259. fn.glInvalidateFramebufferFn = 0;
  260. fn.glInvalidateSubFramebufferFn = 0;
  261. fn.glIsBufferFn =
  262. reinterpret_cast<glIsBufferProc>(GetGLProcAddress("glIsBuffer"));
  263. fn.glIsEnabledFn =
  264. reinterpret_cast<glIsEnabledProc>(GetGLProcAddress("glIsEnabled"));
  265. fn.glIsFenceAPPLEFn = 0;
  266. fn.glIsFenceNVFn = 0;
  267. fn.glIsFramebufferEXTFn = 0;
  268. fn.glIsPathNVFn = 0;
  269. fn.glIsProgramFn =
  270. reinterpret_cast<glIsProgramProc>(GetGLProcAddress("glIsProgram"));
  271. fn.glIsQueryFn = 0;
  272. fn.glIsRenderbufferEXTFn = 0;
  273. fn.glIsSamplerFn = 0;
  274. fn.glIsShaderFn =
  275. reinterpret_cast<glIsShaderProc>(GetGLProcAddress("glIsShader"));
  276. fn.glIsSyncFn = 0;
  277. fn.glIsTextureFn =
  278. reinterpret_cast<glIsTextureProc>(GetGLProcAddress("glIsTexture"));
  279. fn.glIsTransformFeedbackFn = 0;
  280. fn.glIsVertexArrayOESFn = 0;
  281. fn.glLineWidthFn =
  282. reinterpret_cast<glLineWidthProc>(GetGLProcAddress("glLineWidth"));
  283. fn.glLinkProgramFn =
  284. reinterpret_cast<glLinkProgramProc>(GetGLProcAddress("glLinkProgram"));
  285. fn.glMapBufferFn = 0;
  286. fn.glMapBufferRangeFn = 0;
  287. fn.glMatrixLoadfEXTFn = 0;
  288. fn.glMatrixLoadIdentityEXTFn = 0;
  289. fn.glPathCommandsNVFn = 0;
  290. fn.glPathParameterfNVFn = 0;
  291. fn.glPathParameteriNVFn = 0;
  292. fn.glPathStencilFuncNVFn = 0;
  293. fn.glPauseTransformFeedbackFn = 0;
  294. fn.glPixelStoreiFn =
  295. reinterpret_cast<glPixelStoreiProc>(GetGLProcAddress("glPixelStorei"));
  296. fn.glPointParameteriFn = 0;
  297. fn.glPolygonOffsetFn = reinterpret_cast<glPolygonOffsetProc>(
  298. GetGLProcAddress("glPolygonOffset"));
  299. fn.glPopGroupMarkerEXTFn = 0;
  300. fn.glProgramBinaryFn = 0;
  301. fn.glProgramParameteriFn = 0;
  302. fn.glPushGroupMarkerEXTFn = 0;
  303. fn.glQueryCounterFn = 0;
  304. fn.glReadBufferFn = 0;
  305. fn.glReadPixelsFn =
  306. reinterpret_cast<glReadPixelsProc>(GetGLProcAddress("glReadPixels"));
  307. fn.glReleaseShaderCompilerFn = 0;
  308. fn.glRenderbufferStorageEXTFn = 0;
  309. fn.glRenderbufferStorageMultisampleFn = 0;
  310. fn.glRenderbufferStorageMultisampleANGLEFn = 0;
  311. fn.glRenderbufferStorageMultisampleEXTFn = 0;
  312. fn.glRenderbufferStorageMultisampleIMGFn = 0;
  313. fn.glResumeTransformFeedbackFn = 0;
  314. fn.glSampleCoverageFn = reinterpret_cast<glSampleCoverageProc>(
  315. GetGLProcAddress("glSampleCoverage"));
  316. fn.glSamplerParameterfFn = 0;
  317. fn.glSamplerParameterfvFn = 0;
  318. fn.glSamplerParameteriFn = 0;
  319. fn.glSamplerParameterivFn = 0;
  320. fn.glScissorFn =
  321. reinterpret_cast<glScissorProc>(GetGLProcAddress("glScissor"));
  322. fn.glSetFenceAPPLEFn = 0;
  323. fn.glSetFenceNVFn = 0;
  324. fn.glShaderBinaryFn = 0;
  325. fn.glShaderSourceFn =
  326. reinterpret_cast<glShaderSourceProc>(GetGLProcAddress("glShaderSource"));
  327. fn.glStencilFillPathNVFn = 0;
  328. fn.glStencilFuncFn =
  329. reinterpret_cast<glStencilFuncProc>(GetGLProcAddress("glStencilFunc"));
  330. fn.glStencilFuncSeparateFn = reinterpret_cast<glStencilFuncSeparateProc>(
  331. GetGLProcAddress("glStencilFuncSeparate"));
  332. fn.glStencilMaskFn =
  333. reinterpret_cast<glStencilMaskProc>(GetGLProcAddress("glStencilMask"));
  334. fn.glStencilMaskSeparateFn = reinterpret_cast<glStencilMaskSeparateProc>(
  335. GetGLProcAddress("glStencilMaskSeparate"));
  336. fn.glStencilOpFn =
  337. reinterpret_cast<glStencilOpProc>(GetGLProcAddress("glStencilOp"));
  338. fn.glStencilOpSeparateFn = reinterpret_cast<glStencilOpSeparateProc>(
  339. GetGLProcAddress("glStencilOpSeparate"));
  340. fn.glStencilStrokePathNVFn = 0;
  341. fn.glStencilThenCoverFillPathNVFn = 0;
  342. fn.glStencilThenCoverStrokePathNVFn = 0;
  343. fn.glTestFenceAPPLEFn = 0;
  344. fn.glTestFenceNVFn = 0;
  345. fn.glTexImage2DFn =
  346. reinterpret_cast<glTexImage2DProc>(GetGLProcAddress("glTexImage2D"));
  347. fn.glTexImage3DFn = 0;
  348. fn.glTexParameterfFn = reinterpret_cast<glTexParameterfProc>(
  349. GetGLProcAddress("glTexParameterf"));
  350. fn.glTexParameterfvFn = reinterpret_cast<glTexParameterfvProc>(
  351. GetGLProcAddress("glTexParameterfv"));
  352. fn.glTexParameteriFn = reinterpret_cast<glTexParameteriProc>(
  353. GetGLProcAddress("glTexParameteri"));
  354. fn.glTexParameterivFn = reinterpret_cast<glTexParameterivProc>(
  355. GetGLProcAddress("glTexParameteriv"));
  356. fn.glTexStorage2DEXTFn = 0;
  357. fn.glTexStorage3DFn = 0;
  358. fn.glTexSubImage2DFn = reinterpret_cast<glTexSubImage2DProc>(
  359. GetGLProcAddress("glTexSubImage2D"));
  360. fn.glTexSubImage3DFn = 0;
  361. fn.glTransformFeedbackVaryingsFn = 0;
  362. fn.glUniform1fFn =
  363. reinterpret_cast<glUniform1fProc>(GetGLProcAddress("glUniform1f"));
  364. fn.glUniform1fvFn =
  365. reinterpret_cast<glUniform1fvProc>(GetGLProcAddress("glUniform1fv"));
  366. fn.glUniform1iFn =
  367. reinterpret_cast<glUniform1iProc>(GetGLProcAddress("glUniform1i"));
  368. fn.glUniform1ivFn =
  369. reinterpret_cast<glUniform1ivProc>(GetGLProcAddress("glUniform1iv"));
  370. fn.glUniform1uiFn = 0;
  371. fn.glUniform1uivFn = 0;
  372. fn.glUniform2fFn =
  373. reinterpret_cast<glUniform2fProc>(GetGLProcAddress("glUniform2f"));
  374. fn.glUniform2fvFn =
  375. reinterpret_cast<glUniform2fvProc>(GetGLProcAddress("glUniform2fv"));
  376. fn.glUniform2iFn =
  377. reinterpret_cast<glUniform2iProc>(GetGLProcAddress("glUniform2i"));
  378. fn.glUniform2ivFn =
  379. reinterpret_cast<glUniform2ivProc>(GetGLProcAddress("glUniform2iv"));
  380. fn.glUniform2uiFn = 0;
  381. fn.glUniform2uivFn = 0;
  382. fn.glUniform3fFn =
  383. reinterpret_cast<glUniform3fProc>(GetGLProcAddress("glUniform3f"));
  384. fn.glUniform3fvFn =
  385. reinterpret_cast<glUniform3fvProc>(GetGLProcAddress("glUniform3fv"));
  386. fn.glUniform3iFn =
  387. reinterpret_cast<glUniform3iProc>(GetGLProcAddress("glUniform3i"));
  388. fn.glUniform3ivFn =
  389. reinterpret_cast<glUniform3ivProc>(GetGLProcAddress("glUniform3iv"));
  390. fn.glUniform3uiFn = 0;
  391. fn.glUniform3uivFn = 0;
  392. fn.glUniform4fFn =
  393. reinterpret_cast<glUniform4fProc>(GetGLProcAddress("glUniform4f"));
  394. fn.glUniform4fvFn =
  395. reinterpret_cast<glUniform4fvProc>(GetGLProcAddress("glUniform4fv"));
  396. fn.glUniform4iFn =
  397. reinterpret_cast<glUniform4iProc>(GetGLProcAddress("glUniform4i"));
  398. fn.glUniform4ivFn =
  399. reinterpret_cast<glUniform4ivProc>(GetGLProcAddress("glUniform4iv"));
  400. fn.glUniform4uiFn = 0;
  401. fn.glUniform4uivFn = 0;
  402. fn.glUniformBlockBindingFn = 0;
  403. fn.glUniformMatrix2fvFn = reinterpret_cast<glUniformMatrix2fvProc>(
  404. GetGLProcAddress("glUniformMatrix2fv"));
  405. fn.glUniformMatrix2x3fvFn = 0;
  406. fn.glUniformMatrix2x4fvFn = 0;
  407. fn.glUniformMatrix3fvFn = reinterpret_cast<glUniformMatrix3fvProc>(
  408. GetGLProcAddress("glUniformMatrix3fv"));
  409. fn.glUniformMatrix3x2fvFn = 0;
  410. fn.glUniformMatrix3x4fvFn = 0;
  411. fn.glUniformMatrix4fvFn = reinterpret_cast<glUniformMatrix4fvProc>(
  412. GetGLProcAddress("glUniformMatrix4fv"));
  413. fn.glUniformMatrix4x2fvFn = 0;
  414. fn.glUniformMatrix4x3fvFn = 0;
  415. fn.glUnmapBufferFn = 0;
  416. fn.glUseProgramFn =
  417. reinterpret_cast<glUseProgramProc>(GetGLProcAddress("glUseProgram"));
  418. fn.glValidateProgramFn = reinterpret_cast<glValidateProgramProc>(
  419. GetGLProcAddress("glValidateProgram"));
  420. fn.glVertexAttrib1fFn = reinterpret_cast<glVertexAttrib1fProc>(
  421. GetGLProcAddress("glVertexAttrib1f"));
  422. fn.glVertexAttrib1fvFn = reinterpret_cast<glVertexAttrib1fvProc>(
  423. GetGLProcAddress("glVertexAttrib1fv"));
  424. fn.glVertexAttrib2fFn = reinterpret_cast<glVertexAttrib2fProc>(
  425. GetGLProcAddress("glVertexAttrib2f"));
  426. fn.glVertexAttrib2fvFn = reinterpret_cast<glVertexAttrib2fvProc>(
  427. GetGLProcAddress("glVertexAttrib2fv"));
  428. fn.glVertexAttrib3fFn = reinterpret_cast<glVertexAttrib3fProc>(
  429. GetGLProcAddress("glVertexAttrib3f"));
  430. fn.glVertexAttrib3fvFn = reinterpret_cast<glVertexAttrib3fvProc>(
  431. GetGLProcAddress("glVertexAttrib3fv"));
  432. fn.glVertexAttrib4fFn = reinterpret_cast<glVertexAttrib4fProc>(
  433. GetGLProcAddress("glVertexAttrib4f"));
  434. fn.glVertexAttrib4fvFn = reinterpret_cast<glVertexAttrib4fvProc>(
  435. GetGLProcAddress("glVertexAttrib4fv"));
  436. fn.glVertexAttribDivisorANGLEFn = 0;
  437. fn.glVertexAttribI4iFn = 0;
  438. fn.glVertexAttribI4ivFn = 0;
  439. fn.glVertexAttribI4uiFn = 0;
  440. fn.glVertexAttribI4uivFn = 0;
  441. fn.glVertexAttribIPointerFn = 0;
  442. fn.glVertexAttribPointerFn = reinterpret_cast<glVertexAttribPointerProc>(
  443. GetGLProcAddress("glVertexAttribPointer"));
  444. fn.glViewportFn =
  445. reinterpret_cast<glViewportProc>(GetGLProcAddress("glViewport"));
  446. fn.glWaitSyncFn = 0;
  447. }
  448. void DriverGL::InitializeDynamicBindings(GLContext* context) {
  449. DCHECK(context && context->IsCurrent(NULL));
  450. const GLVersionInfo* ver = context->GetVersionInfo();
  451. ALLOW_UNUSED_LOCAL(ver);
  452. std::string extensions = context->GetExtensions() + " ";
  453. ALLOW_UNUSED_LOCAL(extensions);
  454. ext.b_GL_ANGLE_framebuffer_blit =
  455. extensions.find("GL_ANGLE_framebuffer_blit ") != std::string::npos;
  456. ext.b_GL_ANGLE_framebuffer_multisample =
  457. extensions.find("GL_ANGLE_framebuffer_multisample ") != std::string::npos;
  458. ext.b_GL_ANGLE_instanced_arrays =
  459. extensions.find("GL_ANGLE_instanced_arrays ") != std::string::npos;
  460. ext.b_GL_ANGLE_translated_shader_source =
  461. extensions.find("GL_ANGLE_translated_shader_source ") !=
  462. std::string::npos;
  463. ext.b_GL_APPLE_fence =
  464. extensions.find("GL_APPLE_fence ") != std::string::npos;
  465. ext.b_GL_APPLE_vertex_array_object =
  466. extensions.find("GL_APPLE_vertex_array_object ") != std::string::npos;
  467. ext.b_GL_ARB_draw_buffers =
  468. extensions.find("GL_ARB_draw_buffers ") != std::string::npos;
  469. ext.b_GL_ARB_draw_instanced =
  470. extensions.find("GL_ARB_draw_instanced ") != std::string::npos;
  471. ext.b_GL_ARB_get_program_binary =
  472. extensions.find("GL_ARB_get_program_binary ") != std::string::npos;
  473. ext.b_GL_ARB_instanced_arrays =
  474. extensions.find("GL_ARB_instanced_arrays ") != std::string::npos;
  475. ext.b_GL_ARB_map_buffer_range =
  476. extensions.find("GL_ARB_map_buffer_range ") != std::string::npos;
  477. ext.b_GL_ARB_occlusion_query =
  478. extensions.find("GL_ARB_occlusion_query ") != std::string::npos;
  479. ext.b_GL_ARB_robustness =
  480. extensions.find("GL_ARB_robustness ") != std::string::npos;
  481. ext.b_GL_ARB_sync = extensions.find("GL_ARB_sync ") != std::string::npos;
  482. ext.b_GL_ARB_texture_storage =
  483. extensions.find("GL_ARB_texture_storage ") != std::string::npos;
  484. ext.b_GL_ARB_timer_query =
  485. extensions.find("GL_ARB_timer_query ") != std::string::npos;
  486. ext.b_GL_ARB_vertex_array_object =
  487. extensions.find("GL_ARB_vertex_array_object ") != std::string::npos;
  488. ext.b_GL_CHROMIUM_gles_depth_binding_hack =
  489. extensions.find("GL_CHROMIUM_gles_depth_binding_hack ") !=
  490. std::string::npos;
  491. ext.b_GL_CHROMIUM_glgetstringi_hack =
  492. extensions.find("GL_CHROMIUM_glgetstringi_hack ") != std::string::npos;
  493. ext.b_GL_EXT_debug_marker =
  494. extensions.find("GL_EXT_debug_marker ") != std::string::npos;
  495. ext.b_GL_EXT_direct_state_access =
  496. extensions.find("GL_EXT_direct_state_access ") != std::string::npos;
  497. ext.b_GL_EXT_discard_framebuffer =
  498. extensions.find("GL_EXT_discard_framebuffer ") != std::string::npos;
  499. ext.b_GL_EXT_disjoint_timer_query =
  500. extensions.find("GL_EXT_disjoint_timer_query ") != std::string::npos;
  501. ext.b_GL_EXT_draw_buffers =
  502. extensions.find("GL_EXT_draw_buffers ") != std::string::npos;
  503. ext.b_GL_EXT_framebuffer_blit =
  504. extensions.find("GL_EXT_framebuffer_blit ") != std::string::npos;
  505. ext.b_GL_EXT_framebuffer_multisample =
  506. extensions.find("GL_EXT_framebuffer_multisample ") != std::string::npos;
  507. ext.b_GL_EXT_framebuffer_object =
  508. extensions.find("GL_EXT_framebuffer_object ") != std::string::npos;
  509. ext.b_GL_EXT_map_buffer_range =
  510. extensions.find("GL_EXT_map_buffer_range ") != std::string::npos;
  511. ext.b_GL_EXT_multisampled_render_to_texture =
  512. extensions.find("GL_EXT_multisampled_render_to_texture ") !=
  513. std::string::npos;
  514. ext.b_GL_EXT_occlusion_query_boolean =
  515. extensions.find("GL_EXT_occlusion_query_boolean ") != std::string::npos;
  516. ext.b_GL_EXT_robustness =
  517. extensions.find("GL_EXT_robustness ") != std::string::npos;
  518. ext.b_GL_EXT_texture_storage =
  519. extensions.find("GL_EXT_texture_storage ") != std::string::npos;
  520. ext.b_GL_EXT_timer_query =
  521. extensions.find("GL_EXT_timer_query ") != std::string::npos;
  522. ext.b_GL_IMG_multisampled_render_to_texture =
  523. extensions.find("GL_IMG_multisampled_render_to_texture ") !=
  524. std::string::npos;
  525. ext.b_GL_INTEL_framebuffer_CMAA =
  526. extensions.find("GL_INTEL_framebuffer_CMAA ") != std::string::npos;
  527. ext.b_GL_KHR_blend_equation_advanced =
  528. extensions.find("GL_KHR_blend_equation_advanced ") != std::string::npos;
  529. ext.b_GL_KHR_robustness =
  530. extensions.find("GL_KHR_robustness ") != std::string::npos;
  531. ext.b_GL_NV_blend_equation_advanced =
  532. extensions.find("GL_NV_blend_equation_advanced ") != std::string::npos;
  533. ext.b_GL_NV_fence = extensions.find("GL_NV_fence ") != std::string::npos;
  534. ext.b_GL_NV_path_rendering =
  535. extensions.find("GL_NV_path_rendering ") != std::string::npos;
  536. ext.b_GL_OES_EGL_image =
  537. extensions.find("GL_OES_EGL_image ") != std::string::npos;
  538. ext.b_GL_OES_get_program_binary =
  539. extensions.find("GL_OES_get_program_binary ") != std::string::npos;
  540. ext.b_GL_OES_mapbuffer =
  541. extensions.find("GL_OES_mapbuffer ") != std::string::npos;
  542. ext.b_GL_OES_vertex_array_object =
  543. extensions.find("GL_OES_vertex_array_object ") != std::string::npos;
  544. debug_fn.glApplyFramebufferAttachmentCMAAINTELFn = 0;
  545. if (ext.b_GL_INTEL_framebuffer_CMAA) {
  546. fn.glApplyFramebufferAttachmentCMAAINTELFn =
  547. reinterpret_cast<glApplyFramebufferAttachmentCMAAINTELProc>(
  548. GetGLProcAddress("glApplyFramebufferAttachmentCMAAINTEL"));
  549. DCHECK(fn.glApplyFramebufferAttachmentCMAAINTELFn);
  550. }
  551. debug_fn.glBeginQueryFn = 0;
  552. if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
  553. fn.glBeginQueryFn =
  554. reinterpret_cast<glBeginQueryProc>(GetGLProcAddress("glBeginQuery"));
  555. DCHECK(fn.glBeginQueryFn);
  556. } else if (ext.b_GL_ARB_occlusion_query) {
  557. fn.glBeginQueryFn =
  558. reinterpret_cast<glBeginQueryProc>(GetGLProcAddress("glBeginQueryARB"));
  559. DCHECK(fn.glBeginQueryFn);
  560. } else if (ext.b_GL_EXT_disjoint_timer_query ||
  561. ext.b_GL_EXT_occlusion_query_boolean) {
  562. fn.glBeginQueryFn =
  563. reinterpret_cast<glBeginQueryProc>(GetGLProcAddress("glBeginQueryEXT"));
  564. DCHECK(fn.glBeginQueryFn);
  565. }
  566. debug_fn.glBeginTransformFeedbackFn = 0;
  567. if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
  568. fn.glBeginTransformFeedbackFn =
  569. reinterpret_cast<glBeginTransformFeedbackProc>(
  570. GetGLProcAddress("glBeginTransformFeedback"));
  571. DCHECK(fn.glBeginTransformFeedbackFn);
  572. }
  573. debug_fn.glBindBufferBaseFn = 0;
  574. if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
  575. fn.glBindBufferBaseFn = reinterpret_cast<glBindBufferBaseProc>(
  576. GetGLProcAddress("glBindBufferBase"));
  577. DCHECK(fn.glBindBufferBaseFn);
  578. }
  579. debug_fn.glBindBufferRangeFn = 0;
  580. if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
  581. fn.glBindBufferRangeFn = reinterpret_cast<glBindBufferRangeProc>(
  582. GetGLProcAddress("glBindBufferRange"));
  583. DCHECK(fn.glBindBufferRangeFn);
  584. }
  585. debug_fn.glBindFragDataLocationFn = 0;
  586. if (ver->IsAtLeastGL(3u, 0u)) {
  587. fn.glBindFragDataLocationFn = reinterpret_cast<glBindFragDataLocationProc>(
  588. GetGLProcAddress("glBindFragDataLocation"));
  589. DCHECK(fn.glBindFragDataLocationFn);
  590. }
  591. debug_fn.glBindFragDataLocationIndexedFn = 0;
  592. if (ver->IsAtLeastGL(3u, 3u)) {
  593. fn.glBindFragDataLocationIndexedFn =
  594. reinterpret_cast<glBindFragDataLocationIndexedProc>(
  595. GetGLProcAddress("glBindFragDataLocationIndexed"));
  596. DCHECK(fn.glBindFragDataLocationIndexedFn);
  597. }
  598. debug_fn.glBindFramebufferEXTFn = 0;
  599. if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
  600. fn.glBindFramebufferEXTFn = reinterpret_cast<glBindFramebufferEXTProc>(
  601. GetGLProcAddress("glBindFramebuffer"));
  602. DCHECK(fn.glBindFramebufferEXTFn);
  603. } else if (ext.b_GL_EXT_framebuffer_object) {
  604. fn.glBindFramebufferEXTFn = reinterpret_cast<glBindFramebufferEXTProc>(
  605. GetGLProcAddress("glBindFramebufferEXT"));
  606. DCHECK(fn.glBindFramebufferEXTFn);
  607. }
  608. debug_fn.glBindRenderbufferEXTFn = 0;
  609. if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
  610. fn.glBindRenderbufferEXTFn = reinterpret_cast<glBindRenderbufferEXTProc>(
  611. GetGLProcAddress("glBindRenderbuffer"));
  612. DCHECK(fn.glBindRenderbufferEXTFn);
  613. } else if (ext.b_GL_EXT_framebuffer_object) {
  614. fn.glBindRenderbufferEXTFn = reinterpret_cast<glBindRenderbufferEXTProc>(
  615. GetGLProcAddress("glBindRenderbufferEXT"));
  616. DCHECK(fn.glBindRenderbufferEXTFn);
  617. }
  618. debug_fn.glBindSamplerFn = 0;
  619. if (ver->IsAtLeastGL(3u, 3u) || ver->IsAtLeastGLES(3u, 0u)) {
  620. fn.glBindSamplerFn =
  621. reinterpret_cast<glBindSamplerProc>(GetGLProcAddress("glBindSampler"));
  622. DCHECK(fn.glBindSamplerFn);
  623. }
  624. debug_fn.glBindTransformFeedbackFn = 0;
  625. if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(4u, 0u)) {
  626. fn.glBindTransformFeedbackFn =
  627. reinterpret_cast<glBindTransformFeedbackProc>(
  628. GetGLProcAddress("glBindTransformFeedback"));
  629. DCHECK(fn.glBindTransformFeedbackFn);
  630. }
  631. debug_fn.glBindVertexArrayOESFn = 0;
  632. if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u) ||
  633. ext.b_GL_ARB_vertex_array_object) {
  634. fn.glBindVertexArrayOESFn = reinterpret_cast<glBindVertexArrayOESProc>(
  635. GetGLProcAddress("glBindVertexArray"));
  636. DCHECK(fn.glBindVertexArrayOESFn);
  637. } else if (ext.b_GL_OES_vertex_array_object) {
  638. fn.glBindVertexArrayOESFn = reinterpret_cast<glBindVertexArrayOESProc>(
  639. GetGLProcAddress("glBindVertexArrayOES"));
  640. DCHECK(fn.glBindVertexArrayOESFn);
  641. } else if (ext.b_GL_APPLE_vertex_array_object) {
  642. fn.glBindVertexArrayOESFn = reinterpret_cast<glBindVertexArrayOESProc>(
  643. GetGLProcAddress("glBindVertexArrayAPPLE"));
  644. DCHECK(fn.glBindVertexArrayOESFn);
  645. }
  646. debug_fn.glBlendBarrierKHRFn = 0;
  647. if (ext.b_GL_NV_blend_equation_advanced) {
  648. fn.glBlendBarrierKHRFn = reinterpret_cast<glBlendBarrierKHRProc>(
  649. GetGLProcAddress("glBlendBarrierNV"));
  650. DCHECK(fn.glBlendBarrierKHRFn);
  651. } else if (ext.b_GL_KHR_blend_equation_advanced) {
  652. fn.glBlendBarrierKHRFn = reinterpret_cast<glBlendBarrierKHRProc>(
  653. GetGLProcAddress("glBlendBarrierKHR"));
  654. DCHECK(fn.glBlendBarrierKHRFn);
  655. }
  656. debug_fn.glBlitFramebufferFn = 0;
  657. if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
  658. fn.glBlitFramebufferFn = reinterpret_cast<glBlitFramebufferProc>(
  659. GetGLProcAddress("glBlitFramebuffer"));
  660. DCHECK(fn.glBlitFramebufferFn);
  661. }
  662. debug_fn.glBlitFramebufferANGLEFn = 0;
  663. if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
  664. fn.glBlitFramebufferANGLEFn = reinterpret_cast<glBlitFramebufferANGLEProc>(
  665. GetGLProcAddress("glBlitFramebuffer"));
  666. DCHECK(fn.glBlitFramebufferANGLEFn);
  667. } else if (ext.b_GL_ANGLE_framebuffer_blit) {
  668. fn.glBlitFramebufferANGLEFn = reinterpret_cast<glBlitFramebufferANGLEProc>(
  669. GetGLProcAddress("glBlitFramebufferANGLE"));
  670. DCHECK(fn.glBlitFramebufferANGLEFn);
  671. }
  672. debug_fn.glBlitFramebufferEXTFn = 0;
  673. if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
  674. fn.glBlitFramebufferEXTFn = reinterpret_cast<glBlitFramebufferEXTProc>(
  675. GetGLProcAddress("glBlitFramebuffer"));
  676. DCHECK(fn.glBlitFramebufferEXTFn);
  677. } else if (ext.b_GL_EXT_framebuffer_blit) {
  678. fn.glBlitFramebufferEXTFn = reinterpret_cast<glBlitFramebufferEXTProc>(
  679. GetGLProcAddress("glBlitFramebufferEXT"));
  680. DCHECK(fn.glBlitFramebufferEXTFn);
  681. }
  682. debug_fn.glCheckFramebufferStatusEXTFn = 0;
  683. if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
  684. fn.glCheckFramebufferStatusEXTFn =
  685. reinterpret_cast<glCheckFramebufferStatusEXTProc>(
  686. GetGLProcAddress("glCheckFramebufferStatus"));
  687. DCHECK(fn.glCheckFramebufferStatusEXTFn);
  688. } else if (ext.b_GL_EXT_framebuffer_object) {
  689. fn.glCheckFramebufferStatusEXTFn =
  690. reinterpret_cast<glCheckFramebufferStatusEXTProc>(
  691. GetGLProcAddress("glCheckFramebufferStatusEXT"));
  692. DCHECK(fn.glCheckFramebufferStatusEXTFn);
  693. }
  694. debug_fn.glClearBufferfiFn = 0;
  695. if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
  696. fn.glClearBufferfiFn = reinterpret_cast<glClearBufferfiProc>(
  697. GetGLProcAddress("glClearBufferfi"));
  698. DCHECK(fn.glClearBufferfiFn);
  699. }
  700. debug_fn.glClearBufferfvFn = 0;
  701. if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
  702. fn.glClearBufferfvFn = reinterpret_cast<glClearBufferfvProc>(
  703. GetGLProcAddress("glClearBufferfv"));
  704. DCHECK(fn.glClearBufferfvFn);
  705. }
  706. debug_fn.glClearBufferivFn = 0;
  707. if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
  708. fn.glClearBufferivFn = reinterpret_cast<glClearBufferivProc>(
  709. GetGLProcAddress("glClearBufferiv"));
  710. DCHECK(fn.glClearBufferivFn);
  711. }
  712. debug_fn.glClearBufferuivFn = 0;
  713. if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
  714. fn.glClearBufferuivFn = reinterpret_cast<glClearBufferuivProc>(
  715. GetGLProcAddress("glClearBufferuiv"));
  716. DCHECK(fn.glClearBufferuivFn);
  717. }
  718. debug_fn.glClearDepthfFn = 0;
  719. if (ver->IsAtLeastGL(4u, 1u) || ver->is_es) {
  720. fn.glClearDepthfFn =
  721. reinterpret_cast<glClearDepthfProc>(GetGLProcAddress("glClearDepthf"));
  722. DCHECK(fn.glClearDepthfFn);
  723. }
  724. debug_fn.glClientWaitSyncFn = 0;
  725. if (ver->IsAtLeastGL(3u, 2u) || ver->IsAtLeastGLES(3u, 0u) ||
  726. ext.b_GL_ARB_sync) {
  727. fn.glClientWaitSyncFn = reinterpret_cast<glClientWaitSyncProc>(
  728. GetGLProcAddress("glClientWaitSync"));
  729. DCHECK(fn.glClientWaitSyncFn);
  730. }
  731. debug_fn.glCompressedTexImage3DFn = 0;
  732. if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
  733. fn.glCompressedTexImage3DFn = reinterpret_cast<glCompressedTexImage3DProc>(
  734. GetGLProcAddress("glCompressedTexImage3D"));
  735. DCHECK(fn.glCompressedTexImage3DFn);
  736. }
  737. debug_fn.glCompressedTexSubImage3DFn = 0;
  738. if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
  739. fn.glCompressedTexSubImage3DFn =
  740. reinterpret_cast<glCompressedTexSubImage3DProc>(
  741. GetGLProcAddress("glCompressedTexSubImage3D"));
  742. DCHECK(fn.glCompressedTexSubImage3DFn);
  743. }
  744. debug_fn.glCopyBufferSubDataFn = 0;
  745. if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(3u, 1u)) {
  746. fn.glCopyBufferSubDataFn = reinterpret_cast<glCopyBufferSubDataProc>(
  747. GetGLProcAddress("glCopyBufferSubData"));
  748. DCHECK(fn.glCopyBufferSubDataFn);
  749. }
  750. debug_fn.glCopyTexSubImage3DFn = 0;
  751. if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
  752. fn.glCopyTexSubImage3DFn = reinterpret_cast<glCopyTexSubImage3DProc>(
  753. GetGLProcAddress("glCopyTexSubImage3D"));
  754. DCHECK(fn.glCopyTexSubImage3DFn);
  755. }
  756. debug_fn.glCoverFillPathNVFn = 0;
  757. if (ext.b_GL_NV_path_rendering) {
  758. fn.glCoverFillPathNVFn = reinterpret_cast<glCoverFillPathNVProc>(
  759. GetGLProcAddress("glCoverFillPathNV"));
  760. DCHECK(fn.glCoverFillPathNVFn);
  761. }
  762. debug_fn.glCoverStrokePathNVFn = 0;
  763. if (ext.b_GL_NV_path_rendering) {
  764. fn.glCoverStrokePathNVFn = reinterpret_cast<glCoverStrokePathNVProc>(
  765. GetGLProcAddress("glCoverStrokePathNV"));
  766. DCHECK(fn.glCoverStrokePathNVFn);
  767. }
  768. debug_fn.glDeleteFencesAPPLEFn = 0;
  769. if (ext.b_GL_APPLE_fence) {
  770. fn.glDeleteFencesAPPLEFn = reinterpret_cast<glDeleteFencesAPPLEProc>(
  771. GetGLProcAddress("glDeleteFencesAPPLE"));
  772. DCHECK(fn.glDeleteFencesAPPLEFn);
  773. }
  774. debug_fn.glDeleteFencesNVFn = 0;
  775. if (ext.b_GL_NV_fence) {
  776. fn.glDeleteFencesNVFn = reinterpret_cast<glDeleteFencesNVProc>(
  777. GetGLProcAddress("glDeleteFencesNV"));
  778. DCHECK(fn.glDeleteFencesNVFn);
  779. }
  780. debug_fn.glDeleteFramebuffersEXTFn = 0;
  781. if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
  782. fn.glDeleteFramebuffersEXTFn =
  783. reinterpret_cast<glDeleteFramebuffersEXTProc>(
  784. GetGLProcAddress("glDeleteFramebuffers"));
  785. DCHECK(fn.glDeleteFramebuffersEXTFn);
  786. } else if (ext.b_GL_EXT_framebuffer_object) {
  787. fn.glDeleteFramebuffersEXTFn =
  788. reinterpret_cast<glDeleteFramebuffersEXTProc>(
  789. GetGLProcAddress("glDeleteFramebuffersEXT"));
  790. DCHECK(fn.glDeleteFramebuffersEXTFn);
  791. }
  792. debug_fn.glDeletePathsNVFn = 0;
  793. if (ext.b_GL_NV_path_rendering) {
  794. fn.glDeletePathsNVFn = reinterpret_cast<glDeletePathsNVProc>(
  795. GetGLProcAddress("glDeletePathsNV"));
  796. DCHECK(fn.glDeletePathsNVFn);
  797. }
  798. debug_fn.glDeleteQueriesFn = 0;
  799. if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
  800. fn.glDeleteQueriesFn = reinterpret_cast<glDeleteQueriesProc>(
  801. GetGLProcAddress("glDeleteQueries"));
  802. DCHECK(fn.glDeleteQueriesFn);
  803. } else if (ext.b_GL_ARB_occlusion_query) {
  804. fn.glDeleteQueriesFn = reinterpret_cast<glDeleteQueriesProc>(
  805. GetGLProcAddress("glDeleteQueriesARB"));
  806. DCHECK(fn.glDeleteQueriesFn);
  807. } else if (ext.b_GL_EXT_disjoint_timer_query ||
  808. ext.b_GL_EXT_occlusion_query_boolean) {
  809. fn.glDeleteQueriesFn = reinterpret_cast<glDeleteQueriesProc>(
  810. GetGLProcAddress("glDeleteQueriesEXT"));
  811. DCHECK(fn.glDeleteQueriesFn);
  812. }
  813. debug_fn.glDeleteRenderbuffersEXTFn = 0;
  814. if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
  815. fn.glDeleteRenderbuffersEXTFn =
  816. reinterpret_cast<glDeleteRenderbuffersEXTProc>(
  817. GetGLProcAddress("glDeleteRenderbuffers"));
  818. DCHECK(fn.glDeleteRenderbuffersEXTFn);
  819. } else if (ext.b_GL_EXT_framebuffer_object) {
  820. fn.glDeleteRenderbuffersEXTFn =
  821. reinterpret_cast<glDeleteRenderbuffersEXTProc>(
  822. GetGLProcAddress("glDeleteRenderbuffersEXT"));
  823. DCHECK(fn.glDeleteRenderbuffersEXTFn);
  824. }
  825. debug_fn.glDeleteSamplersFn = 0;
  826. if (ver->IsAtLeastGL(3u, 3u) || ver->IsAtLeastGLES(3u, 0u)) {
  827. fn.glDeleteSamplersFn = reinterpret_cast<glDeleteSamplersProc>(
  828. GetGLProcAddress("glDeleteSamplers"));
  829. DCHECK(fn.glDeleteSamplersFn);
  830. }
  831. debug_fn.glDeleteSyncFn = 0;
  832. if (ver->IsAtLeastGL(3u, 2u) || ver->IsAtLeastGLES(3u, 0u) ||
  833. ext.b_GL_ARB_sync) {
  834. fn.glDeleteSyncFn =
  835. reinterpret_cast<glDeleteSyncProc>(GetGLProcAddress("glDeleteSync"));
  836. DCHECK(fn.glDeleteSyncFn);
  837. }
  838. debug_fn.glDeleteTransformFeedbacksFn = 0;
  839. if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(4u, 0u)) {
  840. fn.glDeleteTransformFeedbacksFn =
  841. reinterpret_cast<glDeleteTransformFeedbacksProc>(
  842. GetGLProcAddress("glDeleteTransformFeedbacks"));
  843. DCHECK(fn.glDeleteTransformFeedbacksFn);
  844. }
  845. debug_fn.glDeleteVertexArraysOESFn = 0;
  846. if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u) ||
  847. ext.b_GL_ARB_vertex_array_object) {
  848. fn.glDeleteVertexArraysOESFn =
  849. reinterpret_cast<glDeleteVertexArraysOESProc>(
  850. GetGLProcAddress("glDeleteVertexArrays"));
  851. DCHECK(fn.glDeleteVertexArraysOESFn);
  852. } else if (ext.b_GL_OES_vertex_array_object) {
  853. fn.glDeleteVertexArraysOESFn =
  854. reinterpret_cast<glDeleteVertexArraysOESProc>(
  855. GetGLProcAddress("glDeleteVertexArraysOES"));
  856. DCHECK(fn.glDeleteVertexArraysOESFn);
  857. } else if (ext.b_GL_APPLE_vertex_array_object) {
  858. fn.glDeleteVertexArraysOESFn =
  859. reinterpret_cast<glDeleteVertexArraysOESProc>(
  860. GetGLProcAddress("glDeleteVertexArraysAPPLE"));
  861. DCHECK(fn.glDeleteVertexArraysOESFn);
  862. }
  863. debug_fn.glDepthRangefFn = 0;
  864. if (ver->IsAtLeastGL(4u, 1u) || ver->is_es) {
  865. fn.glDepthRangefFn =
  866. reinterpret_cast<glDepthRangefProc>(GetGLProcAddress("glDepthRangef"));
  867. DCHECK(fn.glDepthRangefFn);
  868. }
  869. debug_fn.glDiscardFramebufferEXTFn = 0;
  870. if (ext.b_GL_EXT_discard_framebuffer) {
  871. fn.glDiscardFramebufferEXTFn =
  872. reinterpret_cast<glDiscardFramebufferEXTProc>(
  873. GetGLProcAddress("glDiscardFramebufferEXT"));
  874. DCHECK(fn.glDiscardFramebufferEXTFn);
  875. }
  876. debug_fn.glDrawArraysInstancedANGLEFn = 0;
  877. if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(3u, 1u)) {
  878. fn.glDrawArraysInstancedANGLEFn =
  879. reinterpret_cast<glDrawArraysInstancedANGLEProc>(
  880. GetGLProcAddress("glDrawArraysInstanced"));
  881. DCHECK(fn.glDrawArraysInstancedANGLEFn);
  882. } else if (ext.b_GL_ARB_draw_instanced) {
  883. fn.glDrawArraysInstancedANGLEFn =
  884. reinterpret_cast<glDrawArraysInstancedANGLEProc>(
  885. GetGLProcAddress("glDrawArraysInstancedARB"));
  886. DCHECK(fn.glDrawArraysInstancedANGLEFn);
  887. } else if (ext.b_GL_ANGLE_instanced_arrays) {
  888. fn.glDrawArraysInstancedANGLEFn =
  889. reinterpret_cast<glDrawArraysInstancedANGLEProc>(
  890. GetGLProcAddress("glDrawArraysInstancedANGLE"));
  891. DCHECK(fn.glDrawArraysInstancedANGLEFn);
  892. }
  893. debug_fn.glDrawBufferFn = 0;
  894. if (!ver->is_es) {
  895. fn.glDrawBufferFn =
  896. reinterpret_cast<glDrawBufferProc>(GetGLProcAddress("glDrawBuffer"));
  897. DCHECK(fn.glDrawBufferFn);
  898. }
  899. debug_fn.glDrawBuffersARBFn = 0;
  900. if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
  901. fn.glDrawBuffersARBFn = reinterpret_cast<glDrawBuffersARBProc>(
  902. GetGLProcAddress("glDrawBuffers"));
  903. DCHECK(fn.glDrawBuffersARBFn);
  904. } else if (ext.b_GL_ARB_draw_buffers) {
  905. fn.glDrawBuffersARBFn = reinterpret_cast<glDrawBuffersARBProc>(
  906. GetGLProcAddress("glDrawBuffersARB"));
  907. DCHECK(fn.glDrawBuffersARBFn);
  908. } else if (ext.b_GL_EXT_draw_buffers) {
  909. fn.glDrawBuffersARBFn = reinterpret_cast<glDrawBuffersARBProc>(
  910. GetGLProcAddress("glDrawBuffersEXT"));
  911. DCHECK(fn.glDrawBuffersARBFn);
  912. }
  913. debug_fn.glDrawElementsInstancedANGLEFn = 0;
  914. if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(3u, 1u)) {
  915. fn.glDrawElementsInstancedANGLEFn =
  916. reinterpret_cast<glDrawElementsInstancedANGLEProc>(
  917. GetGLProcAddress("glDrawElementsInstanced"));
  918. DCHECK(fn.glDrawElementsInstancedANGLEFn);
  919. } else if (ext.b_GL_ARB_draw_instanced) {
  920. fn.glDrawElementsInstancedANGLEFn =
  921. reinterpret_cast<glDrawElementsInstancedANGLEProc>(
  922. GetGLProcAddress("glDrawElementsInstancedARB"));
  923. DCHECK(fn.glDrawElementsInstancedANGLEFn);
  924. } else if (ext.b_GL_ANGLE_instanced_arrays) {
  925. fn.glDrawElementsInstancedANGLEFn =
  926. reinterpret_cast<glDrawElementsInstancedANGLEProc>(
  927. GetGLProcAddress("glDrawElementsInstancedANGLE"));
  928. DCHECK(fn.glDrawElementsInstancedANGLEFn);
  929. }
  930. debug_fn.glDrawRangeElementsFn = 0;
  931. if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
  932. fn.glDrawRangeElementsFn = reinterpret_cast<glDrawRangeElementsProc>(
  933. GetGLProcAddress("glDrawRangeElements"));
  934. DCHECK(fn.glDrawRangeElementsFn);
  935. }
  936. debug_fn.glEGLImageTargetRenderbufferStorageOESFn = 0;
  937. if (ext.b_GL_OES_EGL_image) {
  938. fn.glEGLImageTargetRenderbufferStorageOESFn =
  939. reinterpret_cast<glEGLImageTargetRenderbufferStorageOESProc>(
  940. GetGLProcAddress("glEGLImageTargetRenderbufferStorageOES"));
  941. DCHECK(fn.glEGLImageTargetRenderbufferStorageOESFn);
  942. }
  943. debug_fn.glEGLImageTargetTexture2DOESFn = 0;
  944. if (ext.b_GL_OES_EGL_image) {
  945. fn.glEGLImageTargetTexture2DOESFn =
  946. reinterpret_cast<glEGLImageTargetTexture2DOESProc>(
  947. GetGLProcAddress("glEGLImageTargetTexture2DOES"));
  948. DCHECK(fn.glEGLImageTargetTexture2DOESFn);
  949. }
  950. debug_fn.glEndQueryFn = 0;
  951. if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
  952. fn.glEndQueryFn =
  953. reinterpret_cast<glEndQueryProc>(GetGLProcAddress("glEndQuery"));
  954. DCHECK(fn.glEndQueryFn);
  955. } else if (ext.b_GL_ARB_occlusion_query) {
  956. fn.glEndQueryFn =
  957. reinterpret_cast<glEndQueryProc>(GetGLProcAddress("glEndQueryARB"));
  958. DCHECK(fn.glEndQueryFn);
  959. } else if (ext.b_GL_EXT_disjoint_timer_query ||
  960. ext.b_GL_EXT_occlusion_query_boolean) {
  961. fn.glEndQueryFn =
  962. reinterpret_cast<glEndQueryProc>(GetGLProcAddress("glEndQueryEXT"));
  963. DCHECK(fn.glEndQueryFn);
  964. }
  965. debug_fn.glEndTransformFeedbackFn = 0;
  966. if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
  967. fn.glEndTransformFeedbackFn = reinterpret_cast<glEndTransformFeedbackProc>(
  968. GetGLProcAddress("glEndTransformFeedback"));
  969. DCHECK(fn.glEndTransformFeedbackFn);
  970. }
  971. debug_fn.glFenceSyncFn = 0;
  972. if (ver->IsAtLeastGL(3u, 2u) || ver->IsAtLeastGLES(3u, 0u) ||
  973. ext.b_GL_ARB_sync) {
  974. fn.glFenceSyncFn =
  975. reinterpret_cast<glFenceSyncProc>(GetGLProcAddress("glFenceSync"));
  976. DCHECK(fn.glFenceSyncFn);
  977. }
  978. debug_fn.glFinishFenceAPPLEFn = 0;
  979. if (ext.b_GL_APPLE_fence) {
  980. fn.glFinishFenceAPPLEFn = reinterpret_cast<glFinishFenceAPPLEProc>(
  981. GetGLProcAddress("glFinishFenceAPPLE"));
  982. DCHECK(fn.glFinishFenceAPPLEFn);
  983. }
  984. debug_fn.glFinishFenceNVFn = 0;
  985. if (ext.b_GL_NV_fence) {
  986. fn.glFinishFenceNVFn = reinterpret_cast<glFinishFenceNVProc>(
  987. GetGLProcAddress("glFinishFenceNV"));
  988. DCHECK(fn.glFinishFenceNVFn);
  989. }
  990. debug_fn.glFlushMappedBufferRangeFn = 0;
  991. if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
  992. fn.glFlushMappedBufferRangeFn =
  993. reinterpret_cast<glFlushMappedBufferRangeProc>(
  994. GetGLProcAddress("glFlushMappedBufferRange"));
  995. DCHECK(fn.glFlushMappedBufferRangeFn);
  996. }
  997. debug_fn.glFramebufferRenderbufferEXTFn = 0;
  998. if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
  999. fn.glFramebufferRenderbufferEXTFn =
  1000. reinterpret_cast<glFramebufferRenderbufferEXTProc>(
  1001. GetGLProcAddress("glFramebufferRenderbuffer"));
  1002. DCHECK(fn.glFramebufferRenderbufferEXTFn);
  1003. } else if (ext.b_GL_EXT_framebuffer_object) {
  1004. fn.glFramebufferRenderbufferEXTFn =
  1005. reinterpret_cast<glFramebufferRenderbufferEXTProc>(
  1006. GetGLProcAddress("glFramebufferRenderbufferEXT"));
  1007. DCHECK(fn.glFramebufferRenderbufferEXTFn);
  1008. }
  1009. debug_fn.glFramebufferTexture2DEXTFn = 0;
  1010. if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
  1011. fn.glFramebufferTexture2DEXTFn =
  1012. reinterpret_cast<glFramebufferTexture2DEXTProc>(
  1013. GetGLProcAddress("glFramebufferTexture2D"));
  1014. DCHECK(fn.glFramebufferTexture2DEXTFn);
  1015. } else if (ext.b_GL_EXT_framebuffer_object) {
  1016. fn.glFramebufferTexture2DEXTFn =
  1017. reinterpret_cast<glFramebufferTexture2DEXTProc>(
  1018. GetGLProcAddress("glFramebufferTexture2DEXT"));
  1019. DCHECK(fn.glFramebufferTexture2DEXTFn);
  1020. }
  1021. debug_fn.glFramebufferTexture2DMultisampleEXTFn = 0;
  1022. if (ext.b_GL_EXT_multisampled_render_to_texture) {
  1023. fn.glFramebufferTexture2DMultisampleEXTFn =
  1024. reinterpret_cast<glFramebufferTexture2DMultisampleEXTProc>(
  1025. GetGLProcAddress("glFramebufferTexture2DMultisampleEXT"));
  1026. DCHECK(fn.glFramebufferTexture2DMultisampleEXTFn);
  1027. }
  1028. debug_fn.glFramebufferTexture2DMultisampleIMGFn = 0;
  1029. if (ext.b_GL_IMG_multisampled_render_to_texture) {
  1030. fn.glFramebufferTexture2DMultisampleIMGFn =
  1031. reinterpret_cast<glFramebufferTexture2DMultisampleIMGProc>(
  1032. GetGLProcAddress("glFramebufferTexture2DMultisampleIMG"));
  1033. DCHECK(fn.glFramebufferTexture2DMultisampleIMGFn);
  1034. }
  1035. debug_fn.glFramebufferTextureLayerFn = 0;
  1036. if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
  1037. fn.glFramebufferTextureLayerFn =
  1038. reinterpret_cast<glFramebufferTextureLayerProc>(
  1039. GetGLProcAddress("glFramebufferTextureLayer"));
  1040. DCHECK(fn.glFramebufferTextureLayerFn);
  1041. }
  1042. debug_fn.glGenerateMipmapEXTFn = 0;
  1043. if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
  1044. fn.glGenerateMipmapEXTFn = reinterpret_cast<glGenerateMipmapEXTProc>(
  1045. GetGLProcAddress("glGenerateMipmap"));
  1046. DCHECK(fn.glGenerateMipmapEXTFn);
  1047. } else if (ext.b_GL_EXT_framebuffer_object) {
  1048. fn.glGenerateMipmapEXTFn = reinterpret_cast<glGenerateMipmapEXTProc>(
  1049. GetGLProcAddress("glGenerateMipmapEXT"));
  1050. DCHECK(fn.glGenerateMipmapEXTFn);
  1051. }
  1052. debug_fn.glGenFencesAPPLEFn = 0;
  1053. if (ext.b_GL_APPLE_fence) {
  1054. fn.glGenFencesAPPLEFn = reinterpret_cast<glGenFencesAPPLEProc>(
  1055. GetGLProcAddress("glGenFencesAPPLE"));
  1056. DCHECK(fn.glGenFencesAPPLEFn);
  1057. }
  1058. debug_fn.glGenFencesNVFn = 0;
  1059. if (ext.b_GL_NV_fence) {
  1060. fn.glGenFencesNVFn =
  1061. reinterpret_cast<glGenFencesNVProc>(GetGLProcAddress("glGenFencesNV"));
  1062. DCHECK(fn.glGenFencesNVFn);
  1063. }
  1064. debug_fn.glGenFramebuffersEXTFn = 0;
  1065. if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
  1066. fn.glGenFramebuffersEXTFn = reinterpret_cast<glGenFramebuffersEXTProc>(
  1067. GetGLProcAddress("glGenFramebuffers"));
  1068. DCHECK(fn.glGenFramebuffersEXTFn);
  1069. } else if (ext.b_GL_EXT_framebuffer_object) {
  1070. fn.glGenFramebuffersEXTFn = reinterpret_cast<glGenFramebuffersEXTProc>(
  1071. GetGLProcAddress("glGenFramebuffersEXT"));
  1072. DCHECK(fn.glGenFramebuffersEXTFn);
  1073. }
  1074. debug_fn.glGenPathsNVFn = 0;
  1075. if (ext.b_GL_NV_path_rendering) {
  1076. fn.glGenPathsNVFn =
  1077. reinterpret_cast<glGenPathsNVProc>(GetGLProcAddress("glGenPathsNV"));
  1078. DCHECK(fn.glGenPathsNVFn);
  1079. }
  1080. debug_fn.glGenQueriesFn = 0;
  1081. if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
  1082. fn.glGenQueriesFn =
  1083. reinterpret_cast<glGenQueriesProc>(GetGLProcAddress("glGenQueries"));
  1084. DCHECK(fn.glGenQueriesFn);
  1085. } else if (ext.b_GL_ARB_occlusion_query) {
  1086. fn.glGenQueriesFn =
  1087. reinterpret_cast<glGenQueriesProc>(GetGLProcAddress("glGenQueriesARB"));
  1088. DCHECK(fn.glGenQueriesFn);
  1089. } else if (ext.b_GL_EXT_disjoint_timer_query ||
  1090. ext.b_GL_EXT_occlusion_query_boolean) {
  1091. fn.glGenQueriesFn =
  1092. reinterpret_cast<glGenQueriesProc>(GetGLProcAddress("glGenQueriesEXT"));
  1093. DCHECK(fn.glGenQueriesFn);
  1094. }
  1095. debug_fn.glGenRenderbuffersEXTFn = 0;
  1096. if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
  1097. fn.glGenRenderbuffersEXTFn = reinterpret_cast<glGenRenderbuffersEXTProc>(
  1098. GetGLProcAddress("glGenRenderbuffers"));
  1099. DCHECK(fn.glGenRenderbuffersEXTFn);
  1100. } else if (ext.b_GL_EXT_framebuffer_object) {
  1101. fn.glGenRenderbuffersEXTFn = reinterpret_cast<glGenRenderbuffersEXTProc>(
  1102. GetGLProcAddress("glGenRenderbuffersEXT"));
  1103. DCHECK(fn.glGenRenderbuffersEXTFn);
  1104. }
  1105. debug_fn.glGenSamplersFn = 0;
  1106. if (ver->IsAtLeastGL(3u, 3u) || ver->IsAtLeastGLES(3u, 0u)) {
  1107. fn.glGenSamplersFn =
  1108. reinterpret_cast<glGenSamplersProc>(GetGLProcAddress("glGenSamplers"));
  1109. DCHECK(fn.glGenSamplersFn);
  1110. }
  1111. debug_fn.glGenTransformFeedbacksFn = 0;
  1112. if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(4u, 0u)) {
  1113. fn.glGenTransformFeedbacksFn =
  1114. reinterpret_cast<glGenTransformFeedbacksProc>(
  1115. GetGLProcAddress("glGenTransformFeedbacks"));
  1116. DCHECK(fn.glGenTransformFeedbacksFn);
  1117. }
  1118. debug_fn.glGenVertexArraysOESFn = 0;
  1119. if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u) ||
  1120. ext.b_GL_ARB_vertex_array_object) {
  1121. fn.glGenVertexArraysOESFn = reinterpret_cast<glGenVertexArr