PageRenderTime 62ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 1ms

/src/gui/opengl/qopenglextrafunctions.h

https://gitlab.com/f3822/qtbase
C Header | 783 lines | 711 code | 27 blank | 45 comment | 2 complexity | b9ee3c93859375be7e451407eae5d0b1 MD5 | raw file
  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2016 The Qt Company Ltd.
  4. ** Contact: https://www.qt.io/licensing/
  5. **
  6. ** This file is part of the QtGui module of the Qt Toolkit.
  7. **
  8. ** $QT_BEGIN_LICENSE:LGPL$
  9. ** Commercial License Usage
  10. ** Licensees holding valid commercial Qt licenses may use this file in
  11. ** accordance with the commercial license agreement provided with the
  12. ** Software or, alternatively, in accordance with the terms contained in
  13. ** a written agreement between you and The Qt Company. For licensing terms
  14. ** and conditions see https://www.qt.io/terms-conditions. For further
  15. ** information use the contact form at https://www.qt.io/contact-us.
  16. **
  17. ** GNU Lesser General Public License Usage
  18. ** Alternatively, this file may be used under the terms of the GNU Lesser
  19. ** General Public License version 3 as published by the Free Software
  20. ** Foundation and appearing in the file LICENSE.LGPL3 included in the
  21. ** packaging of this file. Please review the following information to
  22. ** ensure the GNU Lesser General Public License version 3 requirements
  23. ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
  24. **
  25. ** GNU General Public License Usage
  26. ** Alternatively, this file may be used under the terms of the GNU
  27. ** General Public License version 2.0 or (at your option) the GNU General
  28. ** Public license version 3 or any later version approved by the KDE Free
  29. ** Qt Foundation. The licenses are as published by the Free Software
  30. ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
  31. ** included in the packaging of this file. Please review the following
  32. ** information to ensure the GNU General Public License requirements will
  33. ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
  34. ** https://www.gnu.org/licenses/gpl-3.0.html.
  35. **
  36. ** $QT_END_LICENSE$
  37. **
  38. ****************************************************************************/
  39. #ifndef QOPENGLEXTRAFUNCTIONS_H
  40. #define QOPENGLEXTRAFUNCTIONS_H
  41. #include <QtGui/qtguiglobal.h>
  42. #ifndef QT_NO_OPENGL
  43. #include <QtGui/qopenglfunctions.h>
  44. // MemoryBarrier is a macro on some architectures on Windows
  45. #ifdef Q_OS_WIN
  46. #pragma push_macro("MemoryBarrier")
  47. #undef MemoryBarrier
  48. #endif
  49. // GLES build without having included gl32.h -> GLDEBUGPROC is still need for the protos, define it here
  50. #if QT_CONFIG(opengles2) && !QT_CONFIG(opengles32)
  51. typedef void (QOPENGLF_APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
  52. #endif
  53. QT_BEGIN_NAMESPACE
  54. class QOpenGLExtraFunctionsPrivate;
  55. #undef glReadBuffer
  56. #undef glDrawRangeElements
  57. #undef glTexImage3D
  58. #undef glTexSubImage3D
  59. #undef glCopyTexSubImage3D
  60. #undef glCompressedTexImage3D
  61. #undef glCompressedTexSubImage3D
  62. #undef glGenQueries
  63. #undef glDeleteQueries
  64. #undef glIsQuery
  65. #undef glBeginQuery
  66. #undef glEndQuery
  67. #undef glGetQueryiv
  68. #undef glGetQueryObjectuiv
  69. #undef glUnmapBuffer
  70. #undef glGetBufferPointerv
  71. #undef glDrawBuffers
  72. #undef glUniformMatrix2x3fv
  73. #undef glUniformMatrix3x2fv
  74. #undef glUniformMatrix2x4fv
  75. #undef glUniformMatrix4x2fv
  76. #undef glUniformMatrix3x4fv
  77. #undef glUniformMatrix4x3fv
  78. #undef glBlitFramebuffer
  79. #undef glRenderbufferStorageMultisample
  80. #undef glFramebufferTextureLayer
  81. #undef glMapBufferRange
  82. #undef glFlushMappedBufferRange
  83. #undef glBindVertexArray
  84. #undef glDeleteVertexArrays
  85. #undef glGenVertexArrays
  86. #undef glIsVertexArray
  87. #undef glGetIntegeri_v
  88. #undef glBeginTransformFeedback
  89. #undef glEndTransformFeedback
  90. #undef glBindBufferRange
  91. #undef glBindBufferBase
  92. #undef glTransformFeedbackVaryings
  93. #undef glGetTransformFeedbackVarying
  94. #undef glVertexAttribIPointer
  95. #undef glGetVertexAttribIiv
  96. #undef glGetVertexAttribIuiv
  97. #undef glVertexAttribI4i
  98. #undef glVertexAttribI4ui
  99. #undef glVertexAttribI4iv
  100. #undef glVertexAttribI4uiv
  101. #undef glGetUniformuiv
  102. #undef glGetFragDataLocation
  103. #undef glUniform1ui
  104. #undef glUniform2ui
  105. #undef glUniform3ui
  106. #undef glUniform4ui
  107. #undef glUniform1uiv
  108. #undef glUniform2uiv
  109. #undef glUniform3uiv
  110. #undef glUniform4uiv
  111. #undef glClearBufferiv
  112. #undef glClearBufferuiv
  113. #undef glClearBufferfv
  114. #undef glClearBufferfi
  115. #undef glGetStringi
  116. #undef glCopyBufferSubData
  117. #undef glGetUniformIndices
  118. #undef glGetActiveUniformsiv
  119. #undef glGetUniformBlockIndex
  120. #undef glGetActiveUniformBlockiv
  121. #undef glGetActiveUniformBlockName
  122. #undef glUniformBlockBinding
  123. #undef glDrawArraysInstanced
  124. #undef glDrawElementsInstanced
  125. #undef glFenceSync
  126. #undef glIsSync
  127. #undef glDeleteSync
  128. #undef glClientWaitSync
  129. #undef glWaitSync
  130. #undef glGetInteger64v
  131. #undef glGetSynciv
  132. #undef glGetInteger64i_v
  133. #undef glGetBufferParameteri64v
  134. #undef glGenSamplers
  135. #undef glDeleteSamplers
  136. #undef glIsSampler
  137. #undef glBindSampler
  138. #undef glSamplerParameteri
  139. #undef glSamplerParameteriv
  140. #undef glSamplerParameterf
  141. #undef glSamplerParameterfv
  142. #undef glGetSamplerParameteriv
  143. #undef glGetSamplerParameterfv
  144. #undef glVertexAttribDivisor
  145. #undef glBindTransformFeedback
  146. #undef glDeleteTransformFeedbacks
  147. #undef glGenTransformFeedbacks
  148. #undef glIsTransformFeedback
  149. #undef glPauseTransformFeedback
  150. #undef glResumeTransformFeedback
  151. #undef glGetProgramBinary
  152. #undef glProgramBinary
  153. #undef glProgramParameteri
  154. #undef glInvalidateFramebuffer
  155. #undef glInvalidateSubFramebuffer
  156. #undef glTexStorage2D
  157. #undef glTexStorage3D
  158. #undef glGetInternalformativ
  159. #undef glDispatchCompute
  160. #undef glDispatchComputeIndirect
  161. #undef glDrawArraysIndirect
  162. #undef glDrawElementsIndirect
  163. #undef glFramebufferParameteri
  164. #undef glGetFramebufferParameteriv
  165. #undef glGetProgramInterfaceiv
  166. #undef glGetProgramResourceIndex
  167. #undef glGetProgramResourceName
  168. #undef glGetProgramResourceiv
  169. #undef glGetProgramResourceLocation
  170. #undef glUseProgramStages
  171. #undef glActiveShaderProgram
  172. #undef glCreateShaderProgramv
  173. #undef glBindProgramPipeline
  174. #undef glDeleteProgramPipelines
  175. #undef glGenProgramPipelines
  176. #undef glIsProgramPipeline
  177. #undef glGetProgramPipelineiv
  178. #undef glProgramUniform1i
  179. #undef glProgramUniform2i
  180. #undef glProgramUniform3i
  181. #undef glProgramUniform4i
  182. #undef glProgramUniform1ui
  183. #undef glProgramUniform2ui
  184. #undef glProgramUniform3ui
  185. #undef glProgramUniform4ui
  186. #undef glProgramUniform1f
  187. #undef glProgramUniform2f
  188. #undef glProgramUniform3f
  189. #undef glProgramUniform4f
  190. #undef glProgramUniform1iv
  191. #undef glProgramUniform2iv
  192. #undef glProgramUniform3iv
  193. #undef glProgramUniform4iv
  194. #undef glProgramUniform1uiv
  195. #undef glProgramUniform2uiv
  196. #undef glProgramUniform3uiv
  197. #undef glProgramUniform4uiv
  198. #undef glProgramUniform1fv
  199. #undef glProgramUniform2fv
  200. #undef glProgramUniform3fv
  201. #undef glProgramUniform4fv
  202. #undef glProgramUniformMatrix2fv
  203. #undef glProgramUniformMatrix3fv
  204. #undef glProgramUniformMatrix4fv
  205. #undef glProgramUniformMatrix2x3fv
  206. #undef glProgramUniformMatrix3x2fv
  207. #undef glProgramUniformMatrix2x4fv
  208. #undef glProgramUniformMatrix4x2fv
  209. #undef glProgramUniformMatrix3x4fv
  210. #undef glProgramUniformMatrix4x3fv
  211. #undef glValidateProgramPipeline
  212. #undef glGetProgramPipelineInfoLog
  213. #undef glBindImageTexture
  214. #undef glGetBooleani_v
  215. #undef glMemoryBarrier
  216. #undef glMemoryBarrierByRegion
  217. #undef glTexStorage2DMultisample
  218. #undef glGetMultisamplefv
  219. #undef glSampleMaski
  220. #undef glGetTexLevelParameteriv
  221. #undef glGetTexLevelParameterfv
  222. #undef glBindVertexBuffer
  223. #undef glVertexAttribFormat
  224. #undef glVertexAttribIFormat
  225. #undef glVertexAttribBinding
  226. #undef glVertexBindingDivisor
  227. #undef glBlendBarrier
  228. #undef glCopyImageSubData
  229. #undef glDebugMessageControl
  230. #undef glDebugMessageInsert
  231. #undef glDebugMessageCallback
  232. #undef glGetDebugMessageLog
  233. #undef glPushDebugGroup
  234. #undef glPopDebugGroup
  235. #undef glObjectLabel
  236. #undef glGetObjectLabel
  237. #undef glGetObjectPtrLabel
  238. #undef glGetPointerv
  239. #undef glEnablei
  240. #undef glDisablei
  241. #undef glBlendEquationi
  242. #undef glBlendEquationSeparatei
  243. #undef glBlendFunci
  244. #undef glBlendFuncSeparatei
  245. #undef glColorMaski
  246. #undef glIsEnabledi
  247. #undef glDrawElementsBaseVertex
  248. #undef glDrawRangeElementsBaseVertex
  249. #undef glDrawElementsInstancedBaseVertex
  250. #undef glFrameBufferTexture
  251. #undef glPrimitiveBoundingBox
  252. #undef glGetGraphicsResetStatus
  253. #undef glReadnPixels
  254. #undef glGetnUniformfv
  255. #undef glGetnUniformiv
  256. #undef glGetnUniformuiv
  257. #undef glMinSampleShading
  258. #undef glPatchParameteri
  259. #undef glTexParameterIiv
  260. #undef glTexParameterIuiv
  261. #undef glGetTexParameterIiv
  262. #undef glGetTexParameterIuiv
  263. #undef glSamplerParameterIiv
  264. #undef glSamplerParameterIuiv
  265. #undef glGetSamplerParameterIiv
  266. #undef glGetSamplerParameterIuiv
  267. #undef glTexBuffer
  268. #undef glTexBufferRange
  269. #undef glTexStorage3DMultisample
  270. class Q_GUI_EXPORT QOpenGLExtraFunctions : public QOpenGLFunctions
  271. {
  272. Q_DECLARE_PRIVATE(QOpenGLExtraFunctions)
  273. public:
  274. QOpenGLExtraFunctions();
  275. QOpenGLExtraFunctions(QOpenGLContext *context);
  276. ~QOpenGLExtraFunctions() {}
  277. // GLES3
  278. void glReadBuffer(GLenum mode);
  279. void glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
  280. void glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
  281. void glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
  282. void glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
  283. void glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
  284. void glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
  285. void glGenQueries(GLsizei n, GLuint *ids);
  286. void glDeleteQueries(GLsizei n, const GLuint *ids);
  287. GLboolean glIsQuery(GLuint id);
  288. void glBeginQuery(GLenum target, GLuint id);
  289. void glEndQuery(GLenum target);
  290. void glGetQueryiv(GLenum target, GLenum pname, GLint *params);
  291. void glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);
  292. GLboolean glUnmapBuffer(GLenum target);
  293. void glGetBufferPointerv(GLenum target, GLenum pname, void **params);
  294. void glDrawBuffers(GLsizei n, const GLenum *bufs);
  295. void glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  296. void glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  297. void glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  298. void glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  299. void glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  300. void glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  301. void glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
  302. void glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
  303. void glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
  304. void *glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
  305. void glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length);
  306. void glBindVertexArray(GLuint array);
  307. void glDeleteVertexArrays(GLsizei n, const GLuint *arrays);
  308. void glGenVertexArrays(GLsizei n, GLuint *arrays);
  309. GLboolean glIsVertexArray(GLuint array);
  310. void glGetIntegeri_v(GLenum target, GLuint index, GLint *data);
  311. void glBeginTransformFeedback(GLenum primitiveMode);
  312. void glEndTransformFeedback(void);
  313. void glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
  314. void glBindBufferBase(GLenum target, GLuint index, GLuint buffer);
  315. void glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
  316. void glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
  317. void glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
  318. void glGetVertexAttribIiv(GLuint index, GLenum pname, GLint *params);
  319. void glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params);
  320. void glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
  321. void glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
  322. void glVertexAttribI4iv(GLuint index, const GLint *v);
  323. void glVertexAttribI4uiv(GLuint index, const GLuint *v);
  324. void glGetUniformuiv(GLuint program, GLint location, GLuint *params);
  325. GLint glGetFragDataLocation(GLuint program, const GLchar *name);
  326. void glUniform1ui(GLint location, GLuint v0);
  327. void glUniform2ui(GLint location, GLuint v0, GLuint v1);
  328. void glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2);
  329. void glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
  330. void glUniform1uiv(GLint location, GLsizei count, const GLuint *value);
  331. void glUniform2uiv(GLint location, GLsizei count, const GLuint *value);
  332. void glUniform3uiv(GLint location, GLsizei count, const GLuint *value);
  333. void glUniform4uiv(GLint location, GLsizei count, const GLuint *value);
  334. void glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value);
  335. void glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value);
  336. void glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value);
  337. void glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
  338. const GLubyte *glGetStringi(GLenum name, GLuint index);
  339. void glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
  340. void glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
  341. void glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
  342. GLuint glGetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName);
  343. void glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
  344. void glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
  345. void glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
  346. void glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
  347. void glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
  348. GLsync glFenceSync(GLenum condition, GLbitfield flags);
  349. GLboolean glIsSync(GLsync sync);
  350. void glDeleteSync(GLsync sync);
  351. GLenum glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout);
  352. void glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout);
  353. void glGetInteger64v(GLenum pname, GLint64 *data);
  354. void glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
  355. void glGetInteger64i_v(GLenum target, GLuint index, GLint64 *data);
  356. void glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params);
  357. void glGenSamplers(GLsizei count, GLuint *samplers);
  358. void glDeleteSamplers(GLsizei count, const GLuint *samplers);
  359. GLboolean glIsSampler(GLuint sampler);
  360. void glBindSampler(GLuint unit, GLuint sampler);
  361. void glSamplerParameteri(GLuint sampler, GLenum pname, GLint param);
  362. void glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint *param);
  363. void glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param);
  364. void glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param);
  365. void glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params);
  366. void glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params);
  367. void glVertexAttribDivisor(GLuint index, GLuint divisor);
  368. void glBindTransformFeedback(GLenum target, GLuint id);
  369. void glDeleteTransformFeedbacks(GLsizei n, const GLuint *ids);
  370. void glGenTransformFeedbacks(GLsizei n, GLuint *ids);
  371. GLboolean glIsTransformFeedback(GLuint id);
  372. void glPauseTransformFeedback(void);
  373. void glResumeTransformFeedback(void);
  374. void glGetProgramBinary(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
  375. void glProgramBinary(GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
  376. void glProgramParameteri(GLuint program, GLenum pname, GLint value);
  377. void glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments);
  378. void glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
  379. void glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
  380. void glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
  381. void glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
  382. // GLES 3.1
  383. void glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
  384. void glDispatchComputeIndirect(GLintptr indirect);
  385. void glDrawArraysIndirect(GLenum mode, const void *indirect);
  386. void glDrawElementsIndirect(GLenum mode, GLenum type, const void *indirect);
  387. void glFramebufferParameteri(GLenum target, GLenum pname, GLint param);
  388. void glGetFramebufferParameteriv(GLenum target, GLenum pname, GLint *params);
  389. void glGetProgramInterfaceiv(GLuint program, GLenum programInterface, GLenum pname, GLint *params);
  390. GLuint glGetProgramResourceIndex(GLuint program, GLenum programInterface, const GLchar *name);
  391. void glGetProgramResourceName(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
  392. void glGetProgramResourceiv(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
  393. GLint glGetProgramResourceLocation(GLuint program, GLenum programInterface, const GLchar *name);
  394. void glUseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program);
  395. void glActiveShaderProgram(GLuint pipeline, GLuint program);
  396. GLuint glCreateShaderProgramv(GLenum type, GLsizei count, const GLchar *const*strings);
  397. void glBindProgramPipeline(GLuint pipeline);
  398. void glDeleteProgramPipelines(GLsizei n, const GLuint *pipelines);
  399. void glGenProgramPipelines(GLsizei n, GLuint *pipelines);
  400. GLboolean glIsProgramPipeline(GLuint pipeline);
  401. void glGetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint *params);
  402. void glProgramUniform1i(GLuint program, GLint location, GLint v0);
  403. void glProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1);
  404. void glProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
  405. void glProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
  406. void glProgramUniform1ui(GLuint program, GLint location, GLuint v0);
  407. void glProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1);
  408. void glProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
  409. void glProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
  410. void glProgramUniform1f(GLuint program, GLint location, GLfloat v0);
  411. void glProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1);
  412. void glProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
  413. void glProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
  414. void glProgramUniform1iv(GLuint program, GLint location, GLsizei count, const GLint *value);
  415. void glProgramUniform2iv(GLuint program, GLint location, GLsizei count, const GLint *value);
  416. void glProgramUniform3iv(GLuint program, GLint location, GLsizei count, const GLint *value);
  417. void glProgramUniform4iv(GLuint program, GLint location, GLsizei count, const GLint *value);
  418. void glProgramUniform1uiv(GLuint program, GLint location, GLsizei count, const GLuint *value);
  419. void glProgramUniform2uiv(GLuint program, GLint location, GLsizei count, const GLuint *value);
  420. void glProgramUniform3uiv(GLuint program, GLint location, GLsizei count, const GLuint *value);
  421. void glProgramUniform4uiv(GLuint program, GLint location, GLsizei count, const GLuint *value);
  422. void glProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat *value);
  423. void glProgramUniform2fv(GLuint program, GLint location, GLsizei count, const GLfloat *value);
  424. void glProgramUniform3fv(GLuint program, GLint location, GLsizei count, const GLfloat *value);
  425. void glProgramUniform4fv(GLuint program, GLint location, GLsizei count, const GLfloat *value);
  426. void glProgramUniformMatrix2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  427. void glProgramUniformMatrix3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  428. void glProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  429. void glProgramUniformMatrix2x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  430. void glProgramUniformMatrix3x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  431. void glProgramUniformMatrix2x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  432. void glProgramUniformMatrix4x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  433. void glProgramUniformMatrix3x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  434. void glProgramUniformMatrix4x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  435. void glValidateProgramPipeline(GLuint pipeline);
  436. void glGetProgramPipelineInfoLog(GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
  437. void glBindImageTexture(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
  438. void glGetBooleani_v(GLenum target, GLuint index, GLboolean *data);
  439. void glMemoryBarrier(GLbitfield barriers);
  440. void glMemoryBarrierByRegion(GLbitfield barriers);
  441. void glTexStorage2DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
  442. void glGetMultisamplefv(GLenum pname, GLuint index, GLfloat *val);
  443. void glSampleMaski(GLuint maskNumber, GLbitfield mask);
  444. void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params);
  445. void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params);
  446. void glBindVertexBuffer(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
  447. void glVertexAttribFormat(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
  448. void glVertexAttribIFormat(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
  449. void glVertexAttribBinding(GLuint attribindex, GLuint bindingindex);
  450. void glVertexBindingDivisor(GLuint bindingindex, GLuint divisor);
  451. // GLES 3.2
  452. void glBlendBarrier(void);
  453. void glCopyImageSubData(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
  454. void glDebugMessageControl(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
  455. void glDebugMessageInsert(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
  456. void glDebugMessageCallback(GLDEBUGPROC callback, const void *userParam);
  457. GLuint glGetDebugMessageLog(GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
  458. void glPushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar *message);
  459. void glPopDebugGroup(void);
  460. void glObjectLabel(GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
  461. void glGetObjectLabel(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
  462. void glObjectPtrLabel(const void *ptr, GLsizei length, const GLchar *label);
  463. void glGetObjectPtrLabel(const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
  464. void glGetPointerv(GLenum pname, void **params);
  465. void glEnablei(GLenum target, GLuint index);
  466. void glDisablei(GLenum target, GLuint index);
  467. void glBlendEquationi(GLuint buf, GLenum mode);
  468. void glBlendEquationSeparatei(GLuint buf, GLenum modeRGB, GLenum modeAlpha);
  469. void glBlendFunci(GLuint buf, GLenum src, GLenum dst);
  470. void glBlendFuncSeparatei(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
  471. void glColorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
  472. GLboolean glIsEnabledi(GLenum target, GLuint index);
  473. void glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
  474. void glDrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
  475. void glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
  476. void glFramebufferTexture(GLenum target, GLenum attachment, GLuint texture, GLint level);
  477. void glPrimitiveBoundingBox(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
  478. GLenum glGetGraphicsResetStatus(void);
  479. void glReadnPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
  480. void glGetnUniformfv(GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
  481. void glGetnUniformiv(GLuint program, GLint location, GLsizei bufSize, GLint *params);
  482. void glGetnUniformuiv(GLuint program, GLint location, GLsizei bufSize, GLuint *params);
  483. void glMinSampleShading(GLfloat value);
  484. void glPatchParameteri(GLenum pname, GLint value);
  485. void glTexParameterIiv(GLenum target, GLenum pname, const GLint *params);
  486. void glTexParameterIuiv(GLenum target, GLenum pname, const GLuint *params);
  487. void glGetTexParameterIiv(GLenum target, GLenum pname, GLint *params);
  488. void glGetTexParameterIuiv(GLenum target, GLenum pname, GLuint *params);
  489. void glSamplerParameterIiv(GLuint sampler, GLenum pname, const GLint *param);
  490. void glSamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint *param);
  491. void glGetSamplerParameterIiv(GLuint sampler, GLenum pname, GLint *params);
  492. void glGetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint *params);
  493. void glTexBuffer(GLenum target, GLenum internalformat, GLuint buffer);
  494. void glTexBufferRange(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
  495. void glTexStorage3DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
  496. private:
  497. static bool isInitialized(const QOpenGLExtraFunctionsPrivate *d) { return d != nullptr; }
  498. };
  499. #define QT_OPENGL_DECLARE_FUNCTIONS(ret, name, args) \
  500. ret (QOPENGLF_APIENTRYP name)args;
  501. #define QT_OPENGL_COUNT_FUNCTIONS(ret, name, args) +1
  502. #define QT_OPENGL_DECLARE(FUNCTIONS) \
  503. public: \
  504. struct Functions { \
  505. FUNCTIONS(QT_OPENGL_DECLARE_FUNCTIONS) \
  506. }; \
  507. union { \
  508. QFunctionPointer functions[FUNCTIONS(QT_OPENGL_COUNT_FUNCTIONS)]; \
  509. Functions f; \
  510. }; \
  511. private: \
  512. void init(QOpenGLContext *context);
  513. class QOpenGLExtraFunctionsPrivate : public QOpenGLFunctionsPrivate
  514. {
  515. public:
  516. QOpenGLExtraFunctionsPrivate(QOpenGLContext *ctx);
  517. // GLES3
  518. #define QT_OPENGL_EXTRA_FUNCTIONS(F) \
  519. F(void, ReadBuffer, (GLenum mode)) \
  520. F(void, DrawRangeElements, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices)) \
  521. F(void, TexImage3D, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels)) \
  522. F(void, TexSubImage3D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels)) \
  523. F(void, CopyTexSubImage3D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)) \
  524. F(void, CompressedTexImage3D, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data)) \
  525. F(void, CompressedTexSubImage3D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data)) \
  526. F(void, GenQueries, (GLsizei n, GLuint *ids)) \
  527. F(void, DeleteQueries, (GLsizei n, const GLuint *ids)) \
  528. F(GLboolean, IsQuery, (GLuint id)) \
  529. F(void, BeginQuery, (GLenum target, GLuint id)) \
  530. F(void, EndQuery, (GLenum target)) \
  531. F(void, GetQueryiv, (GLenum target, GLenum pname, GLint *params)) \
  532. F(void, GetQueryObjectuiv, (GLuint id, GLenum pname, GLuint *params)) \
  533. F(GLboolean, UnmapBuffer, (GLenum target)) \
  534. F(void, GetBufferPointerv, (GLenum target, GLenum pname, void **params)) \
  535. F(void, DrawBuffers, (GLsizei n, const GLenum *bufs)) \
  536. F(void, UniformMatrix2x3fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
  537. F(void, UniformMatrix3x2fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
  538. F(void, UniformMatrix2x4fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
  539. F(void, UniformMatrix4x2fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
  540. F(void, UniformMatrix3x4fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
  541. F(void, UniformMatrix4x3fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
  542. F(void, BlitFramebuffer, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)) \
  543. F(void, RenderbufferStorageMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)) \
  544. F(void, FramebufferTextureLayer, (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)) \
  545. F(void *,MapBufferRange, (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)) \
  546. F(void, FlushMappedBufferRange, (GLenum target, GLintptr offset, GLsizeiptr length)) \
  547. F(void, BindVertexArray, (GLuint array)) \
  548. F(void, DeleteVertexArrays, (GLsizei n, const GLuint *arrays)) \
  549. F(void, GenVertexArrays, (GLsizei n, GLuint *arrays)) \
  550. F(GLboolean, IsVertexArray, (GLuint array)) \
  551. F(void, GetIntegeri_v, (GLenum target, GLuint index, GLint *data)) \
  552. F(void, BeginTransformFeedback, (GLenum primitiveMode)) \
  553. F(void, EndTransformFeedback, (void)) \
  554. F(void, BindBufferRange, (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)) \
  555. F(void, BindBufferBase, (GLenum target, GLuint index, GLuint buffer)) \
  556. F(void, TransformFeedbackVaryings, (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode)) \
  557. F(void, GetTransformFeedbackVarying, (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name)) \
  558. F(void, VertexAttribIPointer, (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer)) \
  559. F(void, GetVertexAttribIiv, (GLuint index, GLenum pname, GLint *params)) \
  560. F(void, GetVertexAttribIuiv, (GLuint index, GLenum pname, GLuint *params)) \
  561. F(void, VertexAttribI4i, (GLuint index, GLint x, GLint y, GLint z, GLint w)) \
  562. F(void, VertexAttribI4ui, (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)) \
  563. F(void, VertexAttribI4iv, (GLuint index, const GLint *v)) \
  564. F(void, VertexAttribI4uiv, (GLuint index, const GLuint *v)) \
  565. F(void, GetUniformuiv, (GLuint program, GLint location, GLuint *params)) \
  566. F(GLint, GetFragDataLocation, (GLuint program, const GLchar *name)) \
  567. F(void, Uniform1ui, (GLint location, GLuint v0)) \
  568. F(void, Uniform2ui, (GLint location, GLuint v0, GLuint v1)) \
  569. F(void, Uniform3ui, (GLint location, GLuint v0, GLuint v1, GLuint v2)) \
  570. F(void, Uniform4ui, (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)) \
  571. F(void, Uniform1uiv, (GLint location, GLsizei count, const GLuint *value)) \
  572. F(void, Uniform2uiv, (GLint location, GLsizei count, const GLuint *value)) \
  573. F(void, Uniform3uiv, (GLint location, GLsizei count, const GLuint *value)) \
  574. F(void, Uniform4uiv, (GLint location, GLsizei count, const GLuint *value)) \
  575. F(void, ClearBufferiv, (GLenum buffer, GLint drawbuffer, const GLint *value)) \
  576. F(void, ClearBufferuiv, (GLenum buffer, GLint drawbuffer, const GLuint *value)) \
  577. F(void, ClearBufferfv, (GLenum buffer, GLint drawbuffer, const GLfloat *value)) \
  578. F(void, ClearBufferfi, (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)) \
  579. F(const GLubyte *, GetStringi, (GLenum name, GLuint index)) \
  580. F(void, CopyBufferSubData, (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)) \
  581. F(void, GetUniformIndices, (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices)) \
  582. F(void, GetActiveUniformsiv, (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params)) \
  583. F(GLuint, GetUniformBlockIndex, (GLuint program, const GLchar *uniformBlockName)) \
  584. F(void, GetActiveUniformBlockiv, (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params)) \
  585. F(void, GetActiveUniformBlockName, (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName)) \
  586. F(void, UniformBlockBinding, (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)) \
  587. F(void, DrawArraysInstanced, (GLenum mode, GLint first, GLsizei count, GLsizei instancecount)) \
  588. F(void, DrawElementsInstanced, (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount)) \
  589. F(GLsync, FenceSync, (GLenum condition, GLbitfield flags)) \
  590. F(GLboolean, IsSync, (GLsync sync)) \
  591. F(void, DeleteSync, (GLsync sync)) \
  592. F(GLenum, ClientWaitSync, (GLsync sync, GLbitfield flags, GLuint64 timeout)) \
  593. F(void, WaitSync, (GLsync sync, GLbitfield flags, GLuint64 timeout)) \
  594. F(void, GetInteger64v, (GLenum pname, GLint64 *data)) \
  595. F(void, GetSynciv, (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)) \
  596. F(void, GetInteger64i_v, (GLenum target, GLuint index, GLint64 *data)) \
  597. F(void, GetBufferParameteri64v, (GLenum target, GLenum pname, GLint64 *params)) \
  598. F(void, GenSamplers, (GLsizei count, GLuint *samplers)) \
  599. F(void, DeleteSamplers, (GLsizei count, const GLuint *samplers)) \
  600. F(GLboolean, IsSampler, (GLuint sampler)) \
  601. F(void, BindSampler, (GLuint unit, GLuint sampler)) \
  602. F(void, SamplerParameteri, (GLuint sampler, GLenum pname, GLint param)) \
  603. F(void, SamplerParameteriv, (GLuint sampler, GLenum pname, const GLint *param)) \
  604. F(void, SamplerParameterf, (GLuint sampler, GLenum pname, GLfloat param)) \
  605. F(void, SamplerParameterfv, (GLuint sampler, GLenum pname, const GLfloat *param)) \
  606. F(void, GetSamplerParameteriv, (GLuint sampler, GLenum pname, GLint *params)) \
  607. F(void, GetSamplerParameterfv, (GLuint sampler, GLenum pname, GLfloat *params)) \
  608. F(void, VertexAttribDivisor, (GLuint index, GLuint divisor)) \
  609. F(void, BindTransformFeedback, (GLenum target, GLuint id)) \
  610. F(void, DeleteTransformFeedbacks, (GLsizei n, const GLuint *ids)) \
  611. F(void, GenTransformFeedbacks, (GLsizei n, GLuint *ids)) \
  612. F(GLboolean, IsTransformFeedback, (GLuint id)) \
  613. F(void, PauseTransformFeedback, (void)) \
  614. F(void, ResumeTransformFeedback, (void)) \
  615. F(void, GetProgramBinary, (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary)) \
  616. F(void, ProgramBinary, (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length)) \
  617. F(void, ProgramParameteri, (GLuint program, GLenum pname, GLint value)) \
  618. F(void, InvalidateFramebuffer, (GLenum target, GLsizei numAttachments, const GLenum *attachments)) \
  619. F(void, InvalidateSubFramebuffer, (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height)) \
  620. F(void, TexStorage2D, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)) \
  621. F(void, TexStorage3D, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)) \
  622. F(void, GetInternalformativ, (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params)) \
  623. F(void, DispatchCompute, (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z)) \
  624. F(void, DispatchComputeIndirect, (GLintptr indirect)) \
  625. F(void, DrawArraysIndirect, (GLenum mode, const void *indirect)) \
  626. F(void, DrawElementsIndirect, (GLenum mode, GLenum type, const void *indirect)) \
  627. F(void, FramebufferParameteri, (GLenum target, GLenum pname, GLint param)) \
  628. F(void, GetFramebufferParameteriv, (GLenum target, GLenum pname, GLint *params)) \
  629. F(void, GetProgramInterfaceiv, (GLuint program, GLenum programInterface, GLenum pname, GLint *params)) \
  630. F(GLuint, GetProgramResourceIndex, (GLuint program, GLenum programInterface, const GLchar *name)) \
  631. F(void, GetProgramResourceName, (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name)) \
  632. F(void, GetProgramResourceiv, (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params)) \
  633. F(GLint, GetProgramResourceLocation, (GLuint program, GLenum programInterface, const GLchar *name)) \
  634. F(void, UseProgramStages, (GLuint pipeline, GLbitfield stages, GLuint program)) \
  635. F(void, ActiveShaderProgram, (GLuint pipeline, GLuint program)) \
  636. F(GLuint, CreateShaderProgramv, (GLenum type, GLsizei count, const GLchar *const*strings)) \
  637. F(void, BindProgramPipeline, (GLuint pipeline)) \
  638. F(void, DeleteProgramPipelines, (GLsizei n, const GLuint *pipelines)) \
  639. F(void, GenProgramPipelines, (GLsizei n, GLuint *pipelines)) \
  640. F(GLboolean, IsProgramPipeline, (GLuint pipeline)) \
  641. F(void, GetProgramPipelineiv, (GLuint pipeline, GLenum pname, GLint *params)) \
  642. F(void, ProgramUniform1i, (GLuint program, GLint location, GLint v0)) \
  643. F(void, ProgramUniform2i, (GLuint program, GLint location, GLint v0, GLint v1)) \
  644. F(void, ProgramUniform3i, (GLuint program, GLint location, GLint v0, GLint v1, GLint v2)) \
  645. F(void, ProgramUniform4i, (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)) \
  646. F(void, ProgramUniform1ui, (GLuint program, GLint location, GLuint v0)) \
  647. F(void, ProgramUniform2ui, (GLuint program, GLint location, GLuint v0, GLuint v1)) \
  648. F(void, ProgramUniform3ui, (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2)) \
  649. F(void, ProgramUniform4ui, (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)) \
  650. F(void, ProgramUniform1f, (GLuint program, GLint location, GLfloat v0)) \
  651. F(void, ProgramUniform2f, (GLuint program, GLint location, GLfloat v0, GLfloat v1)) \
  652. F(void, ProgramUniform3f, (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)) \
  653. F(void, ProgramUniform4f, (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)) \
  654. F(void, ProgramUniform1iv, (GLuint program, GLint location, GLsizei count, const GLint *value)) \
  655. F(void, ProgramUniform2iv, (GLuint program, GLint location, GLsizei count, const GLint *value)) \
  656. F(void, ProgramUniform3iv, (GLuint program, GLint location, GLsizei count, const GLint *value)) \
  657. F(void, ProgramUniform4iv, (GLuint program, GLint location, GLsizei count, const GLint *value)) \
  658. F(void, ProgramUniform1uiv, (GLuint program, GLint location, GLsizei count, const GLuint *value)) \
  659. F(void, ProgramUniform2uiv, (GLuint program, GLint location, GLsizei count, const GLuint *value)) \
  660. F(void, ProgramUniform3uiv, (GLuint program, GLint location, GLsizei count, const GLuint *value)) \
  661. F(void, ProgramUniform4uiv, (GLuint program, GLint location, GLsizei count, const GLuint *value)) \
  662. F(void, ProgramUniform1fv, (GLuint program, GLint location, GLsizei count, const GLfloat *value)) \
  663. F(void, ProgramUniform2fv, (GLuint program, GLint location, GLsizei count, const GLfloat *value)) \
  664. F(void, ProgramUniform3fv, (GLuint program, GLint location, GLsizei count, const GLfloat *value)) \
  665. F(void, ProgramUniform4fv, (GLuint program, GLint location, GLsizei count, const GLfloat *value)) \
  666. F(void, ProgramUniformMatrix2fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
  667. F(void, ProgramUniformMatrix3fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
  668. F(void, ProgramUniformMatrix4fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
  669. F(void, ProgramUniformMatrix2x3fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
  670. F(void, ProgramUniformMatrix3x2fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
  671. F(void, ProgramUniformMatrix2x4fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
  672. F(void, ProgramUniformMatrix4x2fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
  673. F(void, ProgramUniformMatrix3x4fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
  674. F(void, ProgramUniformMatrix4x3fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \
  675. F(void, ValidateProgramPipeline, (GLuint pipeline)) \
  676. F(void, GetProgramPipelineInfoLog, (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog)) \
  677. F(void, BindImageTexture, (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format)) \
  678. F(void, GetBooleani_v, (GLenum target, GLuint index, GLboolean *data)) \
  679. F(void, MemoryBarrier, (GLbitfield barriers)) \
  680. F(void, MemoryBarrierByRegion, (GLbitfield barriers)) \
  681. F(void, TexStorage2DMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)) \
  682. F(void, GetMultisamplefv, (GLenum pname, GLuint index, GLfloat *val)) \
  683. F(void, SampleMaski, (GLuint maskNumber, GLbitfield mask)) \
  684. F(void, GetTexLevelParameteriv, (GLenum target, GLint level, GLenum pname, GLint *params)) \
  685. F(void, GetTexLevelParameterfv, (GLenum target, GLint level, GLenum pname, GLfloat *params)) \
  686. F(void, BindVertexBuffer, (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride)) \
  687. F(void, VertexAttribFormat, (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset)) \
  688. F(void, VertexAttribIFormat, (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset)) \
  689. F(void, VertexAttribBinding, (GLuint attribindex, GLuint bindingindex)) \
  690. F(void, VertexBindingDivisor, (GLuint bindingindex, GLuint divisor)) \
  691. F(void, BlendBarrier, (void)) \
  692. F(void, BlendEquationSeparatei, (GLuint buf, GLenum modeRGB, GLenum modeAlpha)) \
  693. F(void, BlendEquationi, (GLuint buf, GLenum mode)) \
  694. F(void, BlendFuncSeparatei, (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)) \
  695. F(void, BlendFunci, (GLuint buf, GLenum src, GLenum dst)) \
  696. F(void, ColorMaski, (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a)) \
  697. F(void, CopyImageSubData, (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth)) \
  698. F(void, DebugMessageCallback, (GLDEBUGPROC callback, const void * userParam)) \
  699. F(void, DebugMessageControl, (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled)) \
  700. F(void, DebugMessageInsert, (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf)) \
  701. F(void, Disablei, (GLenum target, GLuint index)) \
  702. F(void, DrawElementsBaseVertex, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex)) \
  703. F(void, DrawElementsInstancedBaseVertex, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex)) \
  704. F(void, DrawRangeElementsBaseVertex, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex)) \
  705. F(void, Enablei, (GLenum target, GLuint index)) \
  706. F(void, FramebufferTexture, (GLenum target, GLenum attachment, GLuint texture, GLint level)) \
  707. F(GLuint, GetDebugMessageLog, (GLuint count, GLsizei bufSize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog)) \
  708. F(GLenum, GetGraphicsResetStatus, (void)) \
  709. F(void, GetObjectLabel, (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei* length, GLchar* label)) \
  710. F(void, GetObjectPtrLabel, (const void * ptr, GLsizei bufSize, GLsizei* length, GLchar* label)) \
  711. F(void, GetPointerv, (GLenum pname, void ** params)) \
  712. F(void, GetSamplerParameterIiv, (GLuint sampler, GLenum pname, GLint* params)) \
  713. F(void, GetSamplerParameterIuiv, (GLuint sampler, GLenum pname, GLuint* params)) \
  714. F(void, GetTexParameterIiv, (GLenum target, GLenum pname, GLint* params)) \
  715. F(void, GetTexParameterIuiv, (GLenum target, GLenum pname, GLuint* params)) \
  716. F(void, GetnUniformfv, (GLuint program, GLint location, GLsizei bufSize, GLfloat* params)) \
  717. F(void, GetnUniformiv, (GLuint program, GLint location, GLsizei bufSize, GLint* params)) \
  718. F(void, GetnUniformuiv, (GLuint program, GLint location, GLsizei bufSize, GLuint* params)) \
  719. F(GLboolean, IsEnabledi, (GLenum target, GLuint index)) \
  720. F(void, MinSampleShading, (GLfloat value)) \
  721. F(void, ObjectLabel, (GLenum identifier, GLuint name, GLsizei length, const GLchar * label)) \
  722. F(void, ObjectPtrLabel, (const void * ptr, GLsizei length, const GLchar * label)) \
  723. F(void, PatchParameteri, (GLenum pname, GLint value)) \
  724. F(void, PopDebugGroup, (void)) \
  725. F(void, PrimitiveBoundingBox, (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW)) \
  726. F(void, PushDebugGroup, (GLenum source, GLuint id, GLsizei length, const GLchar * message)) \
  727. F(void, ReadnPixels, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data)) \
  728. F(void, SamplerParameterIiv, (GLuint sampler, GLenum pname, const GLint * param)) \
  729. F(void, SamplerParameterIuiv, (GLuint sampler, GLenum pname, const GLuint * param)) \
  730. F(void, TexBuffer, (GLenum target, GLenum internalformat, GLuint buffer)) \
  731. F(void, TexBufferRange, (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size)) \
  732. F(void, TexParameterIiv, (GLenum target, GLenum pname, const GLint * params)) \
  733. F(void, TexParameterIuiv, (GLenum target, GLenum pname, const GLuint * params)) \
  734. F(void, TexStorage3DMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations)) \
  735. QT_OPENGL_DECLARE(QT_OPENGL_EXTRA_FUNCTIONS)
  736. };
  737. // GLES 3.0 and 3.1
  738. inline void QOpenGLExtraFunctions::glBeginQuery(GLenum target, GLuint id)
  739. {
  740. Q_D(QOpenGLExtraFunctions);
  741. Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
  742. d->f.BeginQuery(target, id);
  743. Q_OPENGL_FUNCTIONS_DEBUG
  744. }
  745. inline void QOpenGLExtraFunctions::glBeginTransformFeedback(GLenum primitiveMode)
  746. {
  747. Q_D(QOpenGLExtraFunctions);
  748. Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
  749. d->f.BeginTransformFeedback(primitiveMode);
  750. Q_OPENGL_FUNCTIONS_DEBUG
  751. }
  752. inline void QOpenGLExtraFunctions::glBindBufferBase(GLenum target, GLuint index, GLuint buffer)
  753. {
  754. Q_D(QOpenGLExtraFunctions);
  755. Q_ASSERT(QOpenGLExtraFunctions::isInitialized(d));
  756. d->f.BindBufferBa