1 // Created on: 2014-03-17
2 // Created by: Kirill GAVRILOV
3 // Copyright (c) 2014 OPEN CASCADE SAS
5 // This file is part of Open CASCADE Technology software library.
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
16 #ifndef _OpenGl_GlFunctions_Header
17 #define _OpenGl_GlFunctions_Header
19 // required for correct APIENTRY definition
20 #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
21 #define WIN32_LEAN_AND_MEAN
25 #include <Standard_Macro.hxx>
26 #include <Standard_TypeDef.hxx>
32 #define APIENTRYP APIENTRY *
38 // exclude modern definitions and system-provided glext.h, should be defined before gl.h inclusion
39 #define GL_GLEXT_LEGACY
40 #define GLX_GLXEXT_LEGACY
42 // include main OpenGL header provided with system
43 #if defined(__APPLE__)
44 #import <TargetConditionals.h>
45 #if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
46 #include <OpenGLES/ES2/gl.h>
48 #include <OpenGL/gl.h>
50 #define __X_GL_H // prevent chaotic gl.h inclusions to avoid compile errors
51 #elif defined(HAVE_GLES2) || defined(OCCT_UWP) || defined(__ANDROID__) || defined(__QNX__)
53 // Angle OpenGL ES headers do not define function prototypes even for core functions,
54 // however OCCT is expected to be linked against libGLESv2
55 #define GL_GLEXT_PROTOTYPES
57 #include <GLES2/gl2.h>
58 //#include <GLES3/gl3.h>
63 #if defined(GL_ES_VERSION_2_0)
64 // define items to unify code paths with desktop OpenGL
65 typedef double GLdouble;
66 typedef double GLclampd;
67 typedef uint64_t GLuint64;
70 // OpenGL ES 3.0+ or GL_OES_element_index_uint extension
71 #define GL_UNSIGNED_INT 0x1405
74 #define GL_TEXTURE_2D_MULTISAMPLE 0x9100
75 #define GL_MAX_SAMPLES 0x8D57
77 // OpenGL ES 3.2+ or GL_EXT_texture_buffer for OpenGL ES 3.1+
78 #define GL_TEXTURE_BUFFER 0x8C2A
80 // in core since OpenGL ES 3.0, extension GL_EXT_texture_rg
83 // in core since OpenGL ES 3.0, extension GL_OES_rgb8_rgba8
84 #define GL_RGB8 0x8051
85 #define GL_RGBA8 0x8058
86 #define GL_LUMINANCE8 0x8040
87 // GL_EXT_texture_format_BGRA8888
88 #define GL_BGRA_EXT 0x80E1 // same as GL_BGRA on desktop
91 #define GL_R16F 0x822D
92 #define GL_R32F 0x822E
93 #define GL_RGB16F 0x881B
94 #define GL_RGBA32F 0x8814
95 #define GL_RGB32F 0x8815
96 #define GL_RGBA16F 0x881A
97 #define GL_RGB16F 0x881B
98 #define GL_RGB4 0x804F
99 #define GL_RGB5 0x8050
100 #define GL_RGB8 0x8051
101 #define GL_RGB10 0x8052
102 #define GL_RGB12 0x8053
103 #define GL_RGB16 0x8054
104 #define GL_RGBA8 0x8058
105 #define GL_RGB10_A2 0x8059
106 #define GL_RGBA12 0x805A
107 #define GL_RGBA16 0x805B
108 #define GL_ALPHA8 0x803C
109 #define GL_ALPHA16 0x803E
112 #define GL_RG8 0x822B
113 #define GL_RG16 0x822C
114 #define GL_RG16F 0x822F
115 #define GL_RG32F 0x8230
116 #define GL_RG_INTEGER 0x8228
117 #define GL_RED_INTEGER 0x8D94
119 #define GL_R8I 0x8231
120 #define GL_R8UI 0x8232
121 #define GL_R16I 0x8233
122 #define GL_R16UI 0x8234
123 #define GL_R32I 0x8235
124 #define GL_R32UI 0x8236
125 #define GL_RG8I 0x8237
126 #define GL_RG8UI 0x8238
127 #define GL_RG16I 0x8239
128 #define GL_RG16UI 0x823A
129 #define GL_RG32I 0x823B
130 #define GL_RG32UI 0x823C
131 #define GL_RGBA32UI 0x8D70
132 #define GL_RGB32UI 0x8D71
133 #define GL_RGBA16UI 0x8D76
134 #define GL_RGB16UI 0x8D77
135 #define GL_RGBA8UI 0x8D7C
136 #define GL_RGB8UI 0x8D7D
137 #define GL_RGBA32I 0x8D82
138 #define GL_RGB32I 0x8D83
139 #define GL_RGBA16I 0x8D88
140 #define GL_RGB16I 0x8D89
141 #define GL_RGBA8I 0x8D8E
142 #define GL_RGB8I 0x8D8F
144 // GL_OES_packed_depth_stencil
145 #define GL_DEPTH_STENCIL 0x84F9
146 #define GL_UNSIGNED_INT_24_8 0x84FA
147 #define GL_DEPTH24_STENCIL8 0x88F0
150 #define GL_DEPTH_COMPONENT24 0x81A6
151 #define GL_DEPTH_COMPONENT32F 0x8CAC
152 #define GL_DEPTH32F_STENCIL8 0x8CAD
153 #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
155 #define GL_READ_FRAMEBUFFER 0x8CA8
156 #define GL_DRAW_FRAMEBUFFER 0x8CA9
158 #define GL_TEXTURE_3D 0x806F
159 #define GL_TEXTURE_WRAP_R 0x8072
161 // GL_EXT_texture_filter_anisotropic
162 #define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
163 #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
165 // debug ARB extension
166 #define GL_DEBUG_OUTPUT 0x92E0
167 #define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242
168 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243
169 #define GL_DEBUG_CALLBACK_FUNCTION 0x8244
170 #define GL_DEBUG_CALLBACK_USER_PARAM 0x8245
171 #define GL_DEBUG_SOURCE_API 0x8246
172 #define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247
173 #define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248
174 #define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249
175 #define GL_DEBUG_SOURCE_APPLICATION 0x824A
176 #define GL_DEBUG_SOURCE_OTHER 0x824B
177 #define GL_DEBUG_TYPE_ERROR 0x824C
178 #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D
179 #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E
180 #define GL_DEBUG_TYPE_PORTABILITY 0x824F
181 #define GL_DEBUG_TYPE_PERFORMANCE 0x8250
182 #define GL_DEBUG_TYPE_OTHER 0x8251
183 #define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143
184 #define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144
185 #define GL_DEBUG_LOGGED_MESSAGES 0x9145
186 #define GL_DEBUG_SEVERITY_HIGH 0x9146
187 #define GL_DEBUG_SEVERITY_MEDIUM 0x9147
188 #define GL_DEBUG_SEVERITY_LOW 0x9148
191 #if !defined(HAVE_EGL) && (defined(__ANDROID__) || defined(__QNX__) || defined(HAVE_GLES2) || defined(OCCT_UWP))
195 #include <InterfaceGraphic.hxx>
197 // GL version can be defined by system gl.h header
198 #if !defined(GL_ES_VERSION_2_0)
199 #undef GL_VERSION_1_2
200 #undef GL_VERSION_1_3
201 #undef GL_VERSION_1_4
202 #undef GL_VERSION_1_5
203 #undef GL_VERSION_2_0
204 #undef GL_VERSION_2_1
205 #undef GL_VERSION_3_0
206 #undef GL_VERSION_3_1
207 #undef GL_VERSION_3_2
208 #undef GL_VERSION_3_3
209 #undef GL_VERSION_4_0
210 #undef GL_VERSION_4_1
211 #undef GL_VERSION_4_2
212 #undef GL_VERSION_4_3
213 #undef GL_VERSION_4_4
214 #undef GL_VERSION_4_5
216 // include glext.h provided by Khronos group
220 //! Mega structure defines the complete list of OpenGL functions.
221 struct OpenGl_GlFunctions
224 public: //! @name OpenGL ES 1.1
226 #if defined(GL_ES_VERSION_2_0)
228 inline void glActiveTexture (GLenum texture)
230 ::glActiveTexture (texture);
233 inline void glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data)
235 ::glCompressedTexImage2D (target, level, internalformat, width, height, border, imageSize, data);
238 inline void glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data)
240 ::glCompressedTexSubImage2D (target, level, xoffset, yoffset, width, height, format, imageSize, data);
243 inline void glBindBuffer (GLenum target, GLuint buffer)
245 ::glBindBuffer (target, buffer);
248 inline void glBufferData (GLenum target, GLsizeiptr size, const void* data, GLenum usage)
250 ::glBufferData (target, size, data, usage);
253 inline void glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void* data)
255 ::glBufferSubData (target, offset, size, data);
258 inline void glDeleteBuffers (GLsizei n, const GLuint *buffers)
260 ::glDeleteBuffers (n, buffers);
263 inline void glDeleteTextures (GLsizei n, const GLuint *textures)
265 ::glDeleteTextures (n, textures);
268 inline void glDepthFunc (GLenum func)
270 ::glDepthFunc (func);
273 inline void glDepthMask (GLboolean flag)
275 ::glDepthMask (flag);
278 inline void glDepthRangef (GLfloat n, GLfloat f)
280 ::glDepthRangef (n, f);
283 inline void glGenBuffers (GLsizei n, GLuint *buffers)
285 ::glGenBuffers (n, buffers);
288 inline void glGenTextures (GLsizei n, GLuint *textures)
290 ::glGenTextures (n, textures);
293 inline void glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params)
295 ::glGetBufferParameteriv (target, pname, params);
298 inline GLboolean glIsBuffer (GLuint buffer)
300 return ::glIsBuffer (buffer);
303 inline void glSampleCoverage (GLfloat value, GLboolean invert)
305 ::glSampleCoverage (value, invert);
308 inline void glMultiDrawElements (GLenum theMode, const GLsizei* theCount, GLenum theType, const void* const* theIndices, GLsizei theDrawCount)
311 || theIndices == NULL)
316 for (GLsizei aBatchIter = 0; aBatchIter < theDrawCount; ++aBatchIter)
318 ::glDrawElements (theMode, theCount[aBatchIter], theType, theIndices[aBatchIter]);
324 public: //! @name OpenGL ES 2.0
326 #if defined(GL_ES_VERSION_2_0)
327 inline void glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
329 ::glBlendColor (red, green, blue, alpha);
332 inline void glBlendEquation (GLenum mode)
334 ::glBlendEquation (mode);
337 inline void glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
339 ::glBlendFuncSeparate (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
342 inline void glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha)
344 ::glBlendEquationSeparate (modeRGB, modeAlpha);
347 inline void glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass)
349 ::glStencilOpSeparate (face, sfail, dpfail, dppass);
352 inline void glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask)
354 ::glStencilFuncSeparate (face, func, ref, mask);
357 inline void glStencilMaskSeparate (GLenum face, GLuint mask)
359 ::glStencilMaskSeparate (face, mask);
362 inline void glAttachShader (GLuint program, GLuint shader)
364 ::glAttachShader (program, shader);
367 inline void glBindAttribLocation (GLuint program, GLuint index, const GLchar *name)
369 ::glBindAttribLocation (program, index, name);
372 inline void glBindFramebuffer (GLenum target, GLuint framebuffer)
374 ::glBindFramebuffer (target, framebuffer);
377 inline void glBindRenderbuffer (GLenum target, GLuint renderbuffer)
379 ::glBindRenderbuffer (target, renderbuffer);
382 inline GLenum glCheckFramebufferStatus (GLenum target)
384 return ::glCheckFramebufferStatus (target);
387 inline void glCompileShader (GLuint shader)
389 ::glCompileShader (shader);
392 inline GLuint glCreateProgram()
394 return ::glCreateProgram();
397 inline GLuint glCreateShader (GLenum type)
399 return ::glCreateShader (type);
402 inline void glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers)
404 ::glDeleteFramebuffers (n, framebuffers);
407 inline void glDeleteProgram (GLuint program)
409 ::glDeleteProgram (program);
412 inline void glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers)
414 ::glDeleteRenderbuffers (n, renderbuffers);
417 inline void glDeleteShader (GLuint shader)
419 ::glDeleteShader (shader);
422 inline void glDetachShader (GLuint program, GLuint shader)
424 ::glDetachShader (program, shader);
427 inline void glDisableVertexAttribArray (GLuint index)
429 ::glDisableVertexAttribArray (index);
432 inline void glEnableVertexAttribArray (GLuint index)
434 ::glEnableVertexAttribArray (index);
437 inline void glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
439 ::glFramebufferRenderbuffer (target, attachment, renderbuffertarget, renderbuffer);
442 inline void glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
444 ::glFramebufferTexture2D (target, attachment, textarget, texture, level);
447 inline void glGenerateMipmap (GLenum target)
449 ::glGenerateMipmap (target);
452 inline void glGenFramebuffers (GLsizei n, GLuint *framebuffers)
454 ::glGenFramebuffers (n, framebuffers);
457 inline void glGenRenderbuffers (GLsizei n, GLuint *renderbuffers)
459 ::glGenRenderbuffers (n, renderbuffers);
462 inline void glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint* size, GLenum *type, GLchar *name)
464 ::glGetActiveAttrib (program, index, bufSize, length, size, type, name);
467 inline void glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint* size, GLenum *type, GLchar *name)
469 ::glGetActiveUniform (program, index, bufSize, length, size, type, name);
472 inline void glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders)
474 ::glGetAttachedShaders (program, maxCount, count, shaders);
477 inline GLint glGetAttribLocation (GLuint program, const GLchar *name)
479 return ::glGetAttribLocation (program, name);
482 inline void glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params)
484 ::glGetFramebufferAttachmentParameteriv (target, attachment, pname, params);
487 inline void glGetProgramiv (GLuint program, GLenum pname, GLint* params)
489 ::glGetProgramiv (program, pname, params);
492 inline void glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog)
494 ::glGetProgramInfoLog (program, bufSize, length, infoLog);
497 inline void glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params)
499 ::glGetRenderbufferParameteriv (target, pname, params);
502 inline void glGetShaderiv (GLuint shader, GLenum pname, GLint* params)
504 ::glGetShaderiv (shader, pname, params);
507 inline void glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog)
509 ::glGetShaderInfoLog (shader, bufSize, length, infoLog);
512 inline void glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
514 ::glGetShaderPrecisionFormat (shadertype, precisiontype, range, precision);
517 inline void glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source)
519 ::glGetShaderSource (shader, bufSize, length, source);
522 inline void glGetUniformfv (GLuint program, GLint location, GLfloat* params)
524 ::glGetUniformfv (program, location, params);
527 inline void glGetUniformiv (GLuint program, GLint location, GLint* params)
529 ::glGetUniformiv (program, location, params);
532 GLint glGetUniformLocation (GLuint program, const GLchar *name)
534 return ::glGetUniformLocation (program, name);
537 inline void glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params)
539 ::glGetVertexAttribfv (index, pname, params);
542 inline void glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params)
544 ::glGetVertexAttribiv (index, pname, params);
547 inline void glGetVertexAttribPointerv (GLuint index, GLenum pname, void* *pointer)
549 ::glGetVertexAttribPointerv (index, pname, pointer);
552 inline GLboolean glIsFramebuffer (GLuint framebuffer)
554 return ::glIsFramebuffer (framebuffer);
557 inline GLboolean glIsProgram (GLuint program)
559 return ::glIsProgram (program);
562 inline GLboolean glIsRenderbuffer (GLuint renderbuffer)
564 return ::glIsRenderbuffer (renderbuffer);
567 inline GLboolean glIsShader (GLuint shader)
569 return ::glIsShader (shader);
572 inline void glLinkProgram (GLuint program)
574 ::glLinkProgram (program);
577 inline void glReleaseShaderCompiler()
579 ::glReleaseShaderCompiler();
582 inline void glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
584 ::glRenderbufferStorage (target, internalformat, width, height);
587 inline void glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void* binary, GLsizei length)
589 ::glShaderBinary (count, shaders, binaryformat, binary, length);
592 inline void glShaderSource (GLuint shader, GLsizei count, const GLchar** string, const GLint* length)
594 ::glShaderSource (shader, count, string, length);
597 inline void glUniform1f (GLint location, GLfloat v0)
599 ::glUniform1f (location, v0);
602 inline void glUniform1fv (GLint location, GLsizei count, const GLfloat* value)
604 ::glUniform1fv (location, count, value);
607 inline void glUniform1i (GLint location, GLint v0)
609 ::glUniform1i (location, v0);
612 inline void glUniform1iv (GLint location, GLsizei count, const GLint* value)
614 ::glUniform1iv (location, count, value);
617 inline void glUniform2f (GLint location, GLfloat v0, GLfloat v1)
619 ::glUniform2f (location, v0, v1);
622 inline void glUniform2fv (GLint location, GLsizei count, const GLfloat* value)
624 ::glUniform2fv (location, count, value);
627 inline void glUniform2i (GLint location, GLint v0, GLint v1)
629 ::glUniform2i (location, v0, v1);
632 inline void glUniform2iv (GLint location, GLsizei count, const GLint* value)
634 ::glUniform2iv (location, count, value);
637 inline void glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
639 ::glUniform3f (location, v0, v1, v2);
642 inline void glUniform3fv (GLint location, GLsizei count, const GLfloat* value)
644 ::glUniform3fv (location, count, value);
647 inline void glUniform3i (GLint location, GLint v0, GLint v1, GLint v2)
649 ::glUniform3i (location, v0, v1, v2);
652 inline void glUniform3iv (GLint location, GLsizei count, const GLint* value)
654 ::glUniform3iv (location, count, value);
657 inline void glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
659 ::glUniform4f (location, v0, v1, v2, v3);
662 inline void glUniform4fv (GLint location, GLsizei count, const GLfloat* value)
664 ::glUniform4fv (location, count, value);
667 inline void glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
669 ::glUniform4i (location, v0, v1, v2, v3);
672 inline void glUniform4iv (GLint location, GLsizei count, const GLint* value)
674 ::glUniform4iv (location, count, value);
677 inline void glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
679 ::glUniformMatrix2fv (location, count, transpose, value);
682 inline void glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
684 ::glUniformMatrix3fv (location, count, transpose, value);
687 inline void glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
689 ::glUniformMatrix4fv (location, count, transpose, value);
692 inline void glUseProgram (GLuint program)
694 ::glUseProgram (program);
697 inline void glValidateProgram (GLuint program)
699 ::glValidateProgram (program);
702 inline void glVertexAttrib1f (GLuint index, GLfloat x)
704 ::glVertexAttrib1f (index, x);
707 inline void glVertexAttrib1fv (GLuint index, const GLfloat* v)
709 ::glVertexAttrib1fv (index, v);
712 inline void glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y)
714 ::glVertexAttrib2f (index, x, y);
717 inline void glVertexAttrib2fv (GLuint index, const GLfloat* v)
719 ::glVertexAttrib2fv (index, v);
722 inline void glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z)
724 ::glVertexAttrib3f (index, x, y, z);
727 inline void glVertexAttrib3fv (GLuint index, const GLfloat* v)
729 ::glVertexAttrib3fv (index, v);
732 inline void glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
734 ::glVertexAttrib4f (index, x, y, z, w);
737 inline void glVertexAttrib4fv (GLuint index, const GLfloat* v)
739 ::glVertexAttrib4fv (index, v);
742 inline void glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer)
744 ::glVertexAttribPointer (index, size, type, normalized, stride, pointer);
747 public: //! @name OpenGL ES 3.0
749 typedef void (*glBlitFramebuffer_t)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
750 glBlitFramebuffer_t glBlitFramebuffer;
752 typedef void (*glTexImage3D_t)(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* data);
753 glTexImage3D_t glTexImage3D;
755 public: //! @name OpenGL ES 3.1
757 typedef void (*glTexStorage2DMultisample_t)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
758 glTexStorage2DMultisample_t glTexStorage2DMultisample;
760 public: //! @name OpenGL ES 3.2
762 typedef void (*glTexBuffer_t)(GLenum target, GLenum internalFormat, GLuint buffer);
763 glTexBuffer_t glTexBuffer;
765 public: //! @name GL_KHR_debug (optional)
767 typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam);
769 typedef void (APIENTRYP glDebugMessageControl_t ) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled);
770 typedef void (APIENTRYP glDebugMessageInsert_t ) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf);
771 typedef void (APIENTRYP glDebugMessageCallback_t) (GLDEBUGPROCARB callback, const void* userParam);
772 typedef GLuint (APIENTRYP glGetDebugMessageLog_t ) (GLuint count,
781 glDebugMessageControl_t glDebugMessageControl;
782 glDebugMessageInsert_t glDebugMessageInsert;
783 glDebugMessageCallback_t glDebugMessageCallback;
784 glGetDebugMessageLog_t glGetDebugMessageLog;
786 #else // OpenGL ES vs. desktop
788 public: //! @name OpenGL 1.2
790 PFNGLBLENDCOLORPROC glBlendColor;
791 PFNGLBLENDEQUATIONPROC glBlendEquation;
792 PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements;
793 PFNGLTEXIMAGE3DPROC glTexImage3D;
794 PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D;
795 PFNGLCOPYTEXSUBIMAGE3DPROC glCopyTexSubImage3D;
797 public: //! @name OpenGL 1.3
799 PFNGLACTIVETEXTUREPROC glActiveTexture;
800 PFNGLSAMPLECOVERAGEPROC glSampleCoverage;
801 PFNGLCOMPRESSEDTEXIMAGE3DPROC glCompressedTexImage3D;
802 PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D;
803 PFNGLCOMPRESSEDTEXIMAGE1DPROC glCompressedTexImage1D;
804 PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D;
805 PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glCompressedTexSubImage2D;
806 PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glCompressedTexSubImage1D;
807 PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage;
809 PFNGLCLIENTACTIVETEXTUREPROC glClientActiveTexture;
810 PFNGLMULTITEXCOORD1DPROC glMultiTexCoord1d;
811 PFNGLMULTITEXCOORD1DVPROC glMultiTexCoord1dv;
812 PFNGLMULTITEXCOORD1FPROC glMultiTexCoord1f;
813 PFNGLMULTITEXCOORD1FVPROC glMultiTexCoord1fv;
814 PFNGLMULTITEXCOORD1IPROC glMultiTexCoord1i;
815 PFNGLMULTITEXCOORD1IVPROC glMultiTexCoord1iv;
816 PFNGLMULTITEXCOORD1SPROC glMultiTexCoord1s;
817 PFNGLMULTITEXCOORD1SVPROC glMultiTexCoord1sv;
818 PFNGLMULTITEXCOORD2DPROC glMultiTexCoord2d;
819 PFNGLMULTITEXCOORD2DVPROC glMultiTexCoord2dv;
820 PFNGLMULTITEXCOORD2FPROC glMultiTexCoord2f;
821 PFNGLMULTITEXCOORD2FVPROC glMultiTexCoord2fv;
822 PFNGLMULTITEXCOORD2IPROC glMultiTexCoord2i;
823 PFNGLMULTITEXCOORD2IVPROC glMultiTexCoord2iv;
824 PFNGLMULTITEXCOORD2SPROC glMultiTexCoord2s;
825 PFNGLMULTITEXCOORD2SVPROC glMultiTexCoord2sv;
826 PFNGLMULTITEXCOORD3DPROC glMultiTexCoord3d;
827 PFNGLMULTITEXCOORD3DVPROC glMultiTexCoord3dv;
828 PFNGLMULTITEXCOORD3FPROC glMultiTexCoord3f;
829 PFNGLMULTITEXCOORD3FVPROC glMultiTexCoord3fv;
830 PFNGLMULTITEXCOORD3IPROC glMultiTexCoord3i;
831 PFNGLMULTITEXCOORD3IVPROC glMultiTexCoord3iv;
832 PFNGLMULTITEXCOORD3SPROC glMultiTexCoord3s;
833 PFNGLMULTITEXCOORD3SVPROC glMultiTexCoord3sv;
834 PFNGLMULTITEXCOORD4DPROC glMultiTexCoord4d;
835 PFNGLMULTITEXCOORD4DVPROC glMultiTexCoord4dv;
836 PFNGLMULTITEXCOORD4FPROC glMultiTexCoord4f;
837 PFNGLMULTITEXCOORD4FVPROC glMultiTexCoord4fv;
838 PFNGLMULTITEXCOORD4IPROC glMultiTexCoord4i;
839 PFNGLMULTITEXCOORD4IVPROC glMultiTexCoord4iv;
840 PFNGLMULTITEXCOORD4SPROC glMultiTexCoord4s;
841 PFNGLMULTITEXCOORD4SVPROC glMultiTexCoord4sv;
842 PFNGLLOADTRANSPOSEMATRIXFPROC glLoadTransposeMatrixf;
843 PFNGLLOADTRANSPOSEMATRIXDPROC glLoadTransposeMatrixd;
844 PFNGLMULTTRANSPOSEMATRIXFPROC glMultTransposeMatrixf;
845 PFNGLMULTTRANSPOSEMATRIXDPROC glMultTransposeMatrixd;
847 public: //! @name OpenGL 1.4
849 PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate;
850 PFNGLMULTIDRAWARRAYSPROC glMultiDrawArrays;
851 PFNGLMULTIDRAWELEMENTSPROC glMultiDrawElements;
852 PFNGLPOINTPARAMETERFPROC glPointParameterf;
853 PFNGLPOINTPARAMETERFVPROC glPointParameterfv;
854 PFNGLPOINTPARAMETERIPROC glPointParameteri;
855 PFNGLPOINTPARAMETERIVPROC glPointParameteriv;
857 public: //! @name OpenGL 1.5
859 PFNGLGENQUERIESPROC glGenQueries;
860 PFNGLDELETEQUERIESPROC glDeleteQueries;
861 PFNGLISQUERYPROC glIsQuery;
862 PFNGLBEGINQUERYPROC glBeginQuery;
863 PFNGLENDQUERYPROC glEndQuery;
864 PFNGLGETQUERYIVPROC glGetQueryiv;
865 PFNGLGETQUERYOBJECTIVPROC glGetQueryObjectiv;
866 PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv;
867 PFNGLBINDBUFFERPROC glBindBuffer;
868 PFNGLDELETEBUFFERSPROC glDeleteBuffers;
869 PFNGLGENBUFFERSPROC glGenBuffers;
870 PFNGLISBUFFERPROC glIsBuffer;
871 PFNGLBUFFERDATAPROC glBufferData;
872 PFNGLBUFFERSUBDATAPROC glBufferSubData;
873 PFNGLGETBUFFERSUBDATAPROC glGetBufferSubData;
874 PFNGLMAPBUFFERPROC glMapBuffer;
875 PFNGLUNMAPBUFFERPROC glUnmapBuffer;
876 PFNGLGETBUFFERPARAMETERIVPROC glGetBufferParameteriv;
877 PFNGLGETBUFFERPOINTERVPROC glGetBufferPointerv;
879 public: //! @name OpenGL 2.0
881 PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate;
882 PFNGLDRAWBUFFERSPROC glDrawBuffers;
883 PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate;
884 PFNGLSTENCILFUNCSEPARATEPROC glStencilFuncSeparate;
885 PFNGLSTENCILMASKSEPARATEPROC glStencilMaskSeparate;
886 PFNGLATTACHSHADERPROC glAttachShader;
887 PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation;
888 PFNGLCOMPILESHADERPROC glCompileShader;
889 PFNGLCREATEPROGRAMPROC glCreateProgram;
890 PFNGLCREATESHADERPROC glCreateShader;
891 PFNGLDELETEPROGRAMPROC glDeleteProgram;
892 PFNGLDELETESHADERPROC glDeleteShader;
893 PFNGLDETACHSHADERPROC glDetachShader;
894 PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
895 PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray;
896 PFNGLGETACTIVEATTRIBPROC glGetActiveAttrib;
897 PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform;
898 PFNGLGETATTACHEDSHADERSPROC glGetAttachedShaders;
899 PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation;
900 PFNGLGETPROGRAMIVPROC glGetProgramiv;
901 PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
902 PFNGLGETSHADERIVPROC glGetShaderiv;
903 PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
904 PFNGLGETSHADERSOURCEPROC glGetShaderSource;
905 PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
906 PFNGLGETUNIFORMFVPROC glGetUniformfv;
907 PFNGLGETUNIFORMIVPROC glGetUniformiv;
908 PFNGLGETVERTEXATTRIBDVPROC glGetVertexAttribdv;
909 PFNGLGETVERTEXATTRIBFVPROC glGetVertexAttribfv;
910 PFNGLGETVERTEXATTRIBIVPROC glGetVertexAttribiv;
911 PFNGLGETVERTEXATTRIBPOINTERVPROC glGetVertexAttribPointerv;
912 PFNGLISPROGRAMPROC glIsProgram;
913 PFNGLISSHADERPROC glIsShader;
914 PFNGLLINKPROGRAMPROC glLinkProgram;
915 PFNGLSHADERSOURCEPROC glShaderSource;
916 PFNGLUSEPROGRAMPROC glUseProgram;
917 PFNGLUNIFORM1FPROC glUniform1f;
918 PFNGLUNIFORM2FPROC glUniform2f;
919 PFNGLUNIFORM3FPROC glUniform3f;
920 PFNGLUNIFORM4FPROC glUniform4f;
921 PFNGLUNIFORM1IPROC glUniform1i;
922 PFNGLUNIFORM2IPROC glUniform2i;
923 PFNGLUNIFORM3IPROC glUniform3i;
924 PFNGLUNIFORM4IPROC glUniform4i;
925 PFNGLUNIFORM1FVPROC glUniform1fv;
926 PFNGLUNIFORM2FVPROC glUniform2fv;
927 PFNGLUNIFORM3FVPROC glUniform3fv;
928 PFNGLUNIFORM4FVPROC glUniform4fv;
929 PFNGLUNIFORM1IVPROC glUniform1iv;
930 PFNGLUNIFORM2IVPROC glUniform2iv;
931 PFNGLUNIFORM3IVPROC glUniform3iv;
932 PFNGLUNIFORM4IVPROC glUniform4iv;
933 PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv;
934 PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv;
935 PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
936 PFNGLVALIDATEPROGRAMPROC glValidateProgram;
937 PFNGLVERTEXATTRIB1DPROC glVertexAttrib1d;
938 PFNGLVERTEXATTRIB1DVPROC glVertexAttrib1dv;
939 PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f;
940 PFNGLVERTEXATTRIB1FVPROC glVertexAttrib1fv;
941 PFNGLVERTEXATTRIB1SPROC glVertexAttrib1s;
942 PFNGLVERTEXATTRIB1SVPROC glVertexAttrib1sv;
943 PFNGLVERTEXATTRIB2DPROC glVertexAttrib2d;
944 PFNGLVERTEXATTRIB2DVPROC glVertexAttrib2dv;
945 PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f;
946 PFNGLVERTEXATTRIB2FVPROC glVertexAttrib2fv;
947 PFNGLVERTEXATTRIB2SPROC glVertexAttrib2s;
948 PFNGLVERTEXATTRIB2SVPROC glVertexAttrib2sv;
949 PFNGLVERTEXATTRIB3DPROC glVertexAttrib3d;
950 PFNGLVERTEXATTRIB3DVPROC glVertexAttrib3dv;
951 PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f;
952 PFNGLVERTEXATTRIB3FVPROC glVertexAttrib3fv;
953 PFNGLVERTEXATTRIB3SPROC glVertexAttrib3s;
954 PFNGLVERTEXATTRIB3SVPROC glVertexAttrib3sv;
955 PFNGLVERTEXATTRIB4NBVPROC glVertexAttrib4Nbv;
956 PFNGLVERTEXATTRIB4NIVPROC glVertexAttrib4Niv;
957 PFNGLVERTEXATTRIB4NSVPROC glVertexAttrib4Nsv;
958 PFNGLVERTEXATTRIB4NUBPROC glVertexAttrib4Nub;
959 PFNGLVERTEXATTRIB4NUBVPROC glVertexAttrib4Nubv;
960 PFNGLVERTEXATTRIB4NUIVPROC glVertexAttrib4Nuiv;
961 PFNGLVERTEXATTRIB4NUSVPROC glVertexAttrib4Nusv;
962 PFNGLVERTEXATTRIB4BVPROC glVertexAttrib4bv;
963 PFNGLVERTEXATTRIB4DPROC glVertexAttrib4d;
964 PFNGLVERTEXATTRIB4DVPROC glVertexAttrib4dv;
965 PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f;
966 PFNGLVERTEXATTRIB4FVPROC glVertexAttrib4fv;
967 PFNGLVERTEXATTRIB4IVPROC glVertexAttrib4iv;
968 PFNGLVERTEXATTRIB4SPROC glVertexAttrib4s;
969 PFNGLVERTEXATTRIB4SVPROC glVertexAttrib4sv;
970 PFNGLVERTEXATTRIB4UBVPROC glVertexAttrib4ubv;
971 PFNGLVERTEXATTRIB4UIVPROC glVertexAttrib4uiv;
972 PFNGLVERTEXATTRIB4USVPROC glVertexAttrib4usv;
973 PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
975 public: //! @name OpenGL 2.1
977 PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv;
978 PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv;
979 PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv;
980 PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv;
981 PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv;
982 PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv;
984 public: //! @name GL_ARB_framebuffer_object (added to OpenGL 3.0 core)
986 PFNGLISRENDERBUFFERPROC glIsRenderbuffer;
987 PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer;
988 PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers;
989 PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers;
990 PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;
991 PFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv;
992 PFNGLISFRAMEBUFFERPROC glIsFramebuffer;
993 PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
994 PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
995 PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
996 PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
997 PFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D;
998 PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
999 PFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D;
1000 PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer;
1001 PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv;
1002 PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
1003 PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
1004 PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample;
1005 PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer;
1007 public: //! @name GL_ARB_vertex_array_object (added to OpenGL 3.0 core)
1009 PFNGLBINDVERTEXARRAYPROC glBindVertexArray;
1010 PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays;
1011 PFNGLGENVERTEXARRAYSPROC glGenVertexArrays;
1012 PFNGLISVERTEXARRAYPROC glIsVertexArray;
1014 public: //! @name GL_ARB_map_buffer_range (added to OpenGL 3.0 core)
1016 PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
1017 PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
1019 public: //! @name OpenGL 3.0
1021 PFNGLCOLORMASKIPROC glColorMaski;
1022 PFNGLGETBOOLEANI_VPROC glGetBooleani_v;
1023 PFNGLGETINTEGERI_VPROC glGetIntegeri_v;
1024 PFNGLENABLEIPROC glEnablei;
1025 PFNGLDISABLEIPROC glDisablei;
1026 PFNGLISENABLEDIPROC glIsEnabledi;
1027 PFNGLBEGINTRANSFORMFEEDBACKPROC glBeginTransformFeedback;
1028 PFNGLENDTRANSFORMFEEDBACKPROC glEndTransformFeedback;
1029 PFNGLBINDBUFFERRANGEPROC glBindBufferRange;
1030 PFNGLBINDBUFFERBASEPROC glBindBufferBase;
1031 PFNGLTRANSFORMFEEDBACKVARYINGSPROC glTransformFeedbackVaryings;
1032 PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glGetTransformFeedbackVarying;
1033 PFNGLCLAMPCOLORPROC glClampColor;
1034 PFNGLBEGINCONDITIONALRENDERPROC glBeginConditionalRender;
1035 PFNGLENDCONDITIONALRENDERPROC glEndConditionalRender;
1036 PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer;
1037 PFNGLGETVERTEXATTRIBIIVPROC glGetVertexAttribIiv;
1038 PFNGLGETVERTEXATTRIBIUIVPROC glGetVertexAttribIuiv;
1039 PFNGLVERTEXATTRIBI1IPROC glVertexAttribI1i;
1040 PFNGLVERTEXATTRIBI2IPROC glVertexAttribI2i;
1041 PFNGLVERTEXATTRIBI3IPROC glVertexAttribI3i;
1042 PFNGLVERTEXATTRIBI4IPROC glVertexAttribI4i;
1043 PFNGLVERTEXATTRIBI1UIPROC glVertexAttribI1ui;
1044 PFNGLVERTEXATTRIBI2UIPROC glVertexAttribI2ui;
1045 PFNGLVERTEXATTRIBI3UIPROC glVertexAttribI3ui;
1046 PFNGLVERTEXATTRIBI4UIPROC glVertexAttribI4ui;
1047 PFNGLVERTEXATTRIBI1IVPROC glVertexAttribI1iv;
1048 PFNGLVERTEXATTRIBI2IVPROC glVertexAttribI2iv;
1049 PFNGLVERTEXATTRIBI3IVPROC glVertexAttribI3iv;
1050 PFNGLVERTEXATTRIBI4IVPROC glVertexAttribI4iv;
1051 PFNGLVERTEXATTRIBI1UIVPROC glVertexAttribI1uiv;
1052 PFNGLVERTEXATTRIBI2UIVPROC glVertexAttribI2uiv;
1053 PFNGLVERTEXATTRIBI3UIVPROC glVertexAttribI3uiv;
1054 PFNGLVERTEXATTRIBI4UIVPROC glVertexAttribI4uiv;
1055 PFNGLVERTEXATTRIBI4BVPROC glVertexAttribI4bv;
1056 PFNGLVERTEXATTRIBI4SVPROC glVertexAttribI4sv;
1057 PFNGLVERTEXATTRIBI4UBVPROC glVertexAttribI4ubv;
1058 PFNGLVERTEXATTRIBI4USVPROC glVertexAttribI4usv;
1059 PFNGLGETUNIFORMUIVPROC glGetUniformuiv;
1060 PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation;
1061 PFNGLGETFRAGDATALOCATIONPROC glGetFragDataLocation;
1062 PFNGLUNIFORM1UIPROC glUniform1ui;
1063 PFNGLUNIFORM2UIPROC glUniform2ui;
1064 PFNGLUNIFORM3UIPROC glUniform3ui;
1065 PFNGLUNIFORM4UIPROC glUniform4ui;
1066 PFNGLUNIFORM1UIVPROC glUniform1uiv;
1067 PFNGLUNIFORM2UIVPROC glUniform2uiv;
1068 PFNGLUNIFORM3UIVPROC glUniform3uiv;
1069 PFNGLUNIFORM4UIVPROC glUniform4uiv;
1070 PFNGLTEXPARAMETERIIVPROC glTexParameterIiv;
1071 PFNGLTEXPARAMETERIUIVPROC glTexParameterIuiv;
1072 PFNGLGETTEXPARAMETERIIVPROC glGetTexParameterIiv;
1073 PFNGLGETTEXPARAMETERIUIVPROC glGetTexParameterIuiv;
1074 PFNGLCLEARBUFFERIVPROC glClearBufferiv;
1075 PFNGLCLEARBUFFERUIVPROC glClearBufferuiv;
1076 PFNGLCLEARBUFFERFVPROC glClearBufferfv;
1077 PFNGLCLEARBUFFERFIPROC glClearBufferfi;
1078 PFNGLGETSTRINGIPROC glGetStringi;
1080 public: //! @name GL_ARB_uniform_buffer_object (added to OpenGL 3.1 core)
1082 PFNGLGETUNIFORMINDICESPROC glGetUniformIndices;
1083 PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv;
1084 PFNGLGETACTIVEUNIFORMNAMEPROC glGetActiveUniformName;
1085 PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex;
1086 PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv;
1087 PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glGetActiveUniformBlockName;
1088 PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding;
1090 public: //! @name GL_ARB_copy_buffer (added to OpenGL 3.1 core)
1092 PFNGLCOPYBUFFERSUBDATAPROC glCopyBufferSubData;
1094 public: //! @name OpenGL 3.1
1096 PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced;
1097 PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced;
1098 PFNGLTEXBUFFERPROC glTexBuffer;
1099 PFNGLPRIMITIVERESTARTINDEXPROC glPrimitiveRestartIndex;
1101 public: //! @name GL_ARB_draw_elements_base_vertex (added to OpenGL 3.2 core)
1103 PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex;
1104 PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glDrawRangeElementsBaseVertex;
1105 PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex;
1106 PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glMultiDrawElementsBaseVertex;
1108 public: //! @name GL_ARB_provoking_vertex (added to OpenGL 3.2 core)
1110 PFNGLPROVOKINGVERTEXPROC glProvokingVertex;
1112 public: //! @name GL_ARB_sync (added to OpenGL 3.2 core)
1114 PFNGLFENCESYNCPROC glFenceSync;
1115 PFNGLISSYNCPROC glIsSync;
1116 PFNGLDELETESYNCPROC glDeleteSync;
1117 PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
1118 PFNGLWAITSYNCPROC glWaitSync;
1119 PFNGLGETINTEGER64VPROC glGetInteger64v;
1120 PFNGLGETSYNCIVPROC glGetSynciv;
1122 public: //! @name GL_ARB_texture_multisample (added to OpenGL 3.2 core)
1124 PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample;
1125 PFNGLTEXIMAGE3DMULTISAMPLEPROC glTexImage3DMultisample;
1126 PFNGLGETMULTISAMPLEFVPROC glGetMultisamplefv;
1127 PFNGLSAMPLEMASKIPROC glSampleMaski;
1129 public: //! @name OpenGL 3.2
1131 PFNGLGETINTEGER64I_VPROC glGetInteger64i_v;
1132 PFNGLGETBUFFERPARAMETERI64VPROC glGetBufferParameteri64v;
1133 PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture;
1135 public: //! @name GL_ARB_blend_func_extended (added to OpenGL 3.3 core)
1137 PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glBindFragDataLocationIndexed;
1138 PFNGLGETFRAGDATAINDEXPROC glGetFragDataIndex;
1140 public: //! @name GL_ARB_sampler_objects (added to OpenGL 3.3 core)
1142 PFNGLGENSAMPLERSPROC glGenSamplers;
1143 PFNGLDELETESAMPLERSPROC glDeleteSamplers;
1144 PFNGLISSAMPLERPROC glIsSampler;
1145 PFNGLBINDSAMPLERPROC glBindSampler;
1146 PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri;
1147 PFNGLSAMPLERPARAMETERIVPROC glSamplerParameteriv;
1148 PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf;
1149 PFNGLSAMPLERPARAMETERFVPROC glSamplerParameterfv;
1150 PFNGLSAMPLERPARAMETERIIVPROC glSamplerParameterIiv;
1151 PFNGLSAMPLERPARAMETERIUIVPROC glSamplerParameterIuiv;
1152 PFNGLGETSAMPLERPARAMETERIVPROC glGetSamplerParameteriv;
1153 PFNGLGETSAMPLERPARAMETERIIVPROC glGetSamplerParameterIiv;
1154 PFNGLGETSAMPLERPARAMETERFVPROC glGetSamplerParameterfv;
1155 PFNGLGETSAMPLERPARAMETERIUIVPROC glGetSamplerParameterIuiv;
1157 public: //! @name GL_ARB_timer_query (added to OpenGL 3.3 core)
1159 PFNGLQUERYCOUNTERPROC glQueryCounter;
1160 PFNGLGETQUERYOBJECTI64VPROC glGetQueryObjecti64v;
1161 PFNGLGETQUERYOBJECTUI64VPROC glGetQueryObjectui64v;
1163 public: //! @name GL_ARB_vertex_type_2_10_10_10_rev (added to OpenGL 3.3 core)
1165 PFNGLVERTEXP2UIPROC glVertexP2ui;
1166 PFNGLVERTEXP2UIVPROC glVertexP2uiv;
1167 PFNGLVERTEXP3UIPROC glVertexP3ui;
1168 PFNGLVERTEXP3UIVPROC glVertexP3uiv;
1169 PFNGLVERTEXP4UIPROC glVertexP4ui;
1170 PFNGLVERTEXP4UIVPROC glVertexP4uiv;
1171 PFNGLTEXCOORDP1UIPROC glTexCoordP1ui;
1172 PFNGLTEXCOORDP1UIVPROC glTexCoordP1uiv;
1173 PFNGLTEXCOORDP2UIPROC glTexCoordP2ui;
1174 PFNGLTEXCOORDP2UIVPROC glTexCoordP2uiv;
1175 PFNGLTEXCOORDP3UIPROC glTexCoordP3ui;
1176 PFNGLTEXCOORDP3UIVPROC glTexCoordP3uiv;
1177 PFNGLTEXCOORDP4UIPROC glTexCoordP4ui;
1178 PFNGLTEXCOORDP4UIVPROC glTexCoordP4uiv;
1179 PFNGLMULTITEXCOORDP1UIPROC glMultiTexCoordP1ui;
1180 PFNGLMULTITEXCOORDP1UIVPROC glMultiTexCoordP1uiv;
1181 PFNGLMULTITEXCOORDP2UIPROC glMultiTexCoordP2ui;
1182 PFNGLMULTITEXCOORDP2UIVPROC glMultiTexCoordP2uiv;
1183 PFNGLMULTITEXCOORDP3UIPROC glMultiTexCoordP3ui;
1184 PFNGLMULTITEXCOORDP3UIVPROC glMultiTexCoordP3uiv;
1185 PFNGLMULTITEXCOORDP4UIPROC glMultiTexCoordP4ui;
1186 PFNGLMULTITEXCOORDP4UIVPROC glMultiTexCoordP4uiv;
1187 PFNGLNORMALP3UIPROC glNormalP3ui;
1188 PFNGLNORMALP3UIVPROC glNormalP3uiv;
1189 PFNGLCOLORP3UIPROC glColorP3ui;
1190 PFNGLCOLORP3UIVPROC glColorP3uiv;
1191 PFNGLCOLORP4UIPROC glColorP4ui;
1192 PFNGLCOLORP4UIVPROC glColorP4uiv;
1193 PFNGLSECONDARYCOLORP3UIPROC glSecondaryColorP3ui;
1194 PFNGLSECONDARYCOLORP3UIVPROC glSecondaryColorP3uiv;
1195 PFNGLVERTEXATTRIBP1UIPROC glVertexAttribP1ui;
1196 PFNGLVERTEXATTRIBP1UIVPROC glVertexAttribP1uiv;
1197 PFNGLVERTEXATTRIBP2UIPROC glVertexAttribP2ui;
1198 PFNGLVERTEXATTRIBP2UIVPROC glVertexAttribP2uiv;
1199 PFNGLVERTEXATTRIBP3UIPROC glVertexAttribP3ui;
1200 PFNGLVERTEXATTRIBP3UIVPROC glVertexAttribP3uiv;
1201 PFNGLVERTEXATTRIBP4UIPROC glVertexAttribP4ui;
1202 PFNGLVERTEXATTRIBP4UIVPROC glVertexAttribP4uiv;
1204 public: //! @name OpenGL 3.3
1206 PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor;
1208 public: //! @name GL_ARB_draw_indirect (added to OpenGL 4.0 core)
1210 PFNGLDRAWARRAYSINDIRECTPROC glDrawArraysIndirect;
1211 PFNGLDRAWELEMENTSINDIRECTPROC glDrawElementsIndirect;
1213 public: //! @name GL_ARB_gpu_shader_fp64 (added to OpenGL 4.0 core)
1215 PFNGLUNIFORM1DPROC glUniform1d;
1216 PFNGLUNIFORM2DPROC glUniform2d;
1217 PFNGLUNIFORM3DPROC glUniform3d;
1218 PFNGLUNIFORM4DPROC glUniform4d;
1219 PFNGLUNIFORM1DVPROC glUniform1dv;
1220 PFNGLUNIFORM2DVPROC glUniform2dv;
1221 PFNGLUNIFORM3DVPROC glUniform3dv;
1222 PFNGLUNIFORM4DVPROC glUniform4dv;
1223 PFNGLUNIFORMMATRIX2DVPROC glUniformMatrix2dv;
1224 PFNGLUNIFORMMATRIX3DVPROC glUniformMatrix3dv;
1225 PFNGLUNIFORMMATRIX4DVPROC glUniformMatrix4dv;
1226 PFNGLUNIFORMMATRIX2X3DVPROC glUniformMatrix2x3dv;
1227 PFNGLUNIFORMMATRIX2X4DVPROC glUniformMatrix2x4dv;
1228 PFNGLUNIFORMMATRIX3X2DVPROC glUniformMatrix3x2dv;
1229 PFNGLUNIFORMMATRIX3X4DVPROC glUniformMatrix3x4dv;
1230 PFNGLUNIFORMMATRIX4X2DVPROC glUniformMatrix4x2dv;
1231 PFNGLUNIFORMMATRIX4X3DVPROC glUniformMatrix4x3dv;
1232 PFNGLGETUNIFORMDVPROC glGetUniformdv;
1234 public: //! @name GL_ARB_shader_subroutine (added to OpenGL 4.0 core)
1236 PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glGetSubroutineUniformLocation;
1237 PFNGLGETSUBROUTINEINDEXPROC glGetSubroutineIndex;
1238 PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glGetActiveSubroutineUniformiv;
1239 PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glGetActiveSubroutineUniformName;
1240 PFNGLGETACTIVESUBROUTINENAMEPROC glGetActiveSubroutineName;
1241 PFNGLUNIFORMSUBROUTINESUIVPROC glUniformSubroutinesuiv;
1242 PFNGLGETUNIFORMSUBROUTINEUIVPROC glGetUniformSubroutineuiv;
1243 PFNGLGETPROGRAMSTAGEIVPROC glGetProgramStageiv;
1245 public: //! @name GL_ARB_tessellation_shader (added to OpenGL 4.0 core)
1247 PFNGLPATCHPARAMETERIPROC glPatchParameteri;
1248 PFNGLPATCHPARAMETERFVPROC glPatchParameterfv;
1250 public: //! @name GL_ARB_transform_feedback2 (added to OpenGL 4.0 core)
1252 PFNGLBINDTRANSFORMFEEDBACKPROC glBindTransformFeedback;
1253 PFNGLDELETETRANSFORMFEEDBACKSPROC glDeleteTransformFeedbacks;
1254 PFNGLGENTRANSFORMFEEDBACKSPROC glGenTransformFeedbacks;
1255 PFNGLISTRANSFORMFEEDBACKPROC glIsTransformFeedback;
1256 PFNGLPAUSETRANSFORMFEEDBACKPROC glPauseTransformFeedback;
1257 PFNGLRESUMETRANSFORMFEEDBACKPROC glResumeTransformFeedback;
1258 PFNGLDRAWTRANSFORMFEEDBACKPROC glDrawTransformFeedback;
1260 public: //! @name GL_ARB_transform_feedback3 (added to OpenGL 4.0 core)
1262 PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glDrawTransformFeedbackStream;
1263 PFNGLBEGINQUERYINDEXEDPROC glBeginQueryIndexed;
1264 PFNGLENDQUERYINDEXEDPROC glEndQueryIndexed;
1265 PFNGLGETQUERYINDEXEDIVPROC glGetQueryIndexediv;
1267 public: //! @name OpenGL 4.0
1269 PFNGLMINSAMPLESHADINGPROC glMinSampleShading;
1270 PFNGLBLENDEQUATIONIPROC glBlendEquationi;
1271 PFNGLBLENDEQUATIONSEPARATEIPROC glBlendEquationSeparatei;
1272 PFNGLBLENDFUNCIPROC glBlendFunci;
1273 PFNGLBLENDFUNCSEPARATEIPROC glBlendFuncSeparatei;
1275 public: //! @name GL_ARB_ES2_compatibility (added to OpenGL 4.1 core)
1277 PFNGLRELEASESHADERCOMPILERPROC glReleaseShaderCompiler;
1278 PFNGLSHADERBINARYPROC glShaderBinary;
1279 PFNGLGETSHADERPRECISIONFORMATPROC glGetShaderPrecisionFormat;
1280 PFNGLDEPTHRANGEFPROC glDepthRangef;
1281 PFNGLCLEARDEPTHFPROC glClearDepthf;
1283 public: //! @name GL_ARB_get_program_binary (added to OpenGL 4.1 core)
1285 PFNGLGETPROGRAMBINARYPROC glGetProgramBinary;
1286 PFNGLPROGRAMBINARYPROC glProgramBinary;
1287 PFNGLPROGRAMPARAMETERIPROC glProgramParameteri;
1289 public: //! @name GL_ARB_separate_shader_objects (added to OpenGL 4.1 core)
1291 PFNGLUSEPROGRAMSTAGESPROC glUseProgramStages;
1292 PFNGLACTIVESHADERPROGRAMPROC glActiveShaderProgram;
1293 PFNGLCREATESHADERPROGRAMVPROC glCreateShaderProgramv;
1294 PFNGLBINDPROGRAMPIPELINEPROC glBindProgramPipeline;
1295 PFNGLDELETEPROGRAMPIPELINESPROC glDeleteProgramPipelines;
1296 PFNGLGENPROGRAMPIPELINESPROC glGenProgramPipelines;
1297 PFNGLISPROGRAMPIPELINEPROC glIsProgramPipeline;
1298 PFNGLGETPROGRAMPIPELINEIVPROC glGetProgramPipelineiv;
1299 PFNGLPROGRAMUNIFORM1IPROC glProgramUniform1i;
1300 PFNGLPROGRAMUNIFORM1IVPROC glProgramUniform1iv;
1301 PFNGLPROGRAMUNIFORM1FPROC glProgramUniform1f;
1302 PFNGLPROGRAMUNIFORM1FVPROC glProgramUniform1fv;
1303 PFNGLPROGRAMUNIFORM1DPROC glProgramUniform1d;
1304 PFNGLPROGRAMUNIFORM1DVPROC glProgramUniform1dv;
1305 PFNGLPROGRAMUNIFORM1UIPROC glProgramUniform1ui;
1306 PFNGLPROGRAMUNIFORM1UIVPROC glProgramUniform1uiv;
1307 PFNGLPROGRAMUNIFORM2IPROC glProgramUniform2i;
1308 PFNGLPROGRAMUNIFORM2IVPROC glProgramUniform2iv;
1309 PFNGLPROGRAMUNIFORM2FPROC glProgramUniform2f;
1310 PFNGLPROGRAMUNIFORM2FVPROC glProgramUniform2fv;
1311 PFNGLPROGRAMUNIFORM2DPROC glProgramUniform2d;
1312 PFNGLPROGRAMUNIFORM2DVPROC glProgramUniform2dv;
1313 PFNGLPROGRAMUNIFORM2UIPROC glProgramUniform2ui;
1314 PFNGLPROGRAMUNIFORM2UIVPROC glProgramUniform2uiv;
1315 PFNGLPROGRAMUNIFORM3IPROC glProgramUniform3i;
1316 PFNGLPROGRAMUNIFORM3IVPROC glProgramUniform3iv;
1317 PFNGLPROGRAMUNIFORM3FPROC glProgramUniform3f;
1318 PFNGLPROGRAMUNIFORM3FVPROC glProgramUniform3fv;
1319 PFNGLPROGRAMUNIFORM3DPROC glProgramUniform3d;
1320 PFNGLPROGRAMUNIFORM3DVPROC glProgramUniform3dv;
1321 PFNGLPROGRAMUNIFORM3UIPROC glProgramUniform3ui;
1322 PFNGLPROGRAMUNIFORM3UIVPROC glProgramUniform3uiv;
1323 PFNGLPROGRAMUNIFORM4IPROC glProgramUniform4i;
1324 PFNGLPROGRAMUNIFORM4IVPROC glProgramUniform4iv;
1325 PFNGLPROGRAMUNIFORM4FPROC glProgramUniform4f;
1326 PFNGLPROGRAMUNIFORM4FVPROC glProgramUniform4fv;
1327 PFNGLPROGRAMUNIFORM4DPROC glProgramUniform4d;
1328 PFNGLPROGRAMUNIFORM4DVPROC glProgramUniform4dv;
1329 PFNGLPROGRAMUNIFORM4UIPROC glProgramUniform4ui;
1330 PFNGLPROGRAMUNIFORM4UIVPROC glProgramUniform4uiv;
1331 PFNGLPROGRAMUNIFORMMATRIX2FVPROC glProgramUniformMatrix2fv;
1332 PFNGLPROGRAMUNIFORMMATRIX3FVPROC glProgramUniformMatrix3fv;
1333 PFNGLPROGRAMUNIFORMMATRIX4FVPROC glProgramUniformMatrix4fv;
1334 PFNGLPROGRAMUNIFORMMATRIX2DVPROC glProgramUniformMatrix2dv;
1335 PFNGLPROGRAMUNIFORMMATRIX3DVPROC glProgramUniformMatrix3dv;
1336 PFNGLPROGRAMUNIFORMMATRIX4DVPROC glProgramUniformMatrix4dv;
1337 PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glProgramUniformMatrix2x3fv;
1338 PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glProgramUniformMatrix3x2fv;
1339 PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glProgramUniformMatrix2x4fv;
1340 PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glProgramUniformMatrix4x2fv;
1341 PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glProgramUniformMatrix3x4fv;
1342 PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glProgramUniformMatrix4x3fv;
1343 PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glProgramUniformMatrix2x3dv;
1344 PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glProgramUniformMatrix3x2dv;
1345 PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glProgramUniformMatrix2x4dv;
1346 PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glProgramUniformMatrix4x2dv;
1347 PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glProgramUniformMatrix3x4dv;
1348 PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glProgramUniformMatrix4x3dv;
1349 PFNGLVALIDATEPROGRAMPIPELINEPROC glValidateProgramPipeline;
1350 PFNGLGETPROGRAMPIPELINEINFOLOGPROC glGetProgramPipelineInfoLog;
1352 public: //! @name GL_ARB_vertex_attrib_64bit (added to OpenGL 4.1 core)
1354 PFNGLVERTEXATTRIBL1DPROC glVertexAttribL1d;
1355 PFNGLVERTEXATTRIBL2DPROC glVertexAttribL2d;
1356 PFNGLVERTEXATTRIBL3DPROC glVertexAttribL3d;
1357 PFNGLVERTEXATTRIBL4DPROC glVertexAttribL4d;
1358 PFNGLVERTEXATTRIBL1DVPROC glVertexAttribL1dv;
1359 PFNGLVERTEXATTRIBL2DVPROC glVertexAttribL2dv;
1360 PFNGLVERTEXATTRIBL3DVPROC glVertexAttribL3dv;
1361 PFNGLVERTEXATTRIBL4DVPROC glVertexAttribL4dv;
1362 PFNGLVERTEXATTRIBLPOINTERPROC glVertexAttribLPointer;
1363 PFNGLGETVERTEXATTRIBLDVPROC glGetVertexAttribLdv;
1365 public: //! @name GL_ARB_viewport_array (added to OpenGL 4.1 core)
1367 PFNGLVIEWPORTARRAYVPROC glViewportArrayv;
1368 PFNGLVIEWPORTINDEXEDFPROC glViewportIndexedf;
1369 PFNGLVIEWPORTINDEXEDFVPROC glViewportIndexedfv;
1370 PFNGLSCISSORARRAYVPROC glScissorArrayv;
1371 PFNGLSCISSORINDEXEDPROC glScissorIndexed;
1372 PFNGLSCISSORINDEXEDVPROC glScissorIndexedv;
1373 PFNGLDEPTHRANGEARRAYVPROC glDepthRangeArrayv;
1374 PFNGLDEPTHRANGEINDEXEDPROC glDepthRangeIndexed;
1375 PFNGLGETFLOATI_VPROC glGetFloati_v;
1376 PFNGLGETDOUBLEI_VPROC glGetDoublei_v;
1378 public: //! @name OpenGL 4.1
1382 public: //! @name GL_ARB_base_instance (added to OpenGL 4.2 core)
1384 PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glDrawArraysInstancedBaseInstance;
1385 PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glDrawElementsInstancedBaseInstance;
1386 PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glDrawElementsInstancedBaseVertexBaseInstance;
1388 public: //! @name GL_ARB_transform_feedback_instanced (added to OpenGL 4.2 core)
1390 PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glDrawTransformFeedbackInstanced;
1391 PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glDrawTransformFeedbackStreamInstanced;
1393 public: //! @name GL_ARB_internalformat_query (added to OpenGL 4.2 core)
1395 PFNGLGETINTERNALFORMATIVPROC glGetInternalformativ;
1397 public: //! @name GL_ARB_shader_atomic_counters (added to OpenGL 4.2 core)
1399 PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glGetActiveAtomicCounterBufferiv;
1401 public: //! @name GL_ARB_shader_image_load_store (added to OpenGL 4.2 core)
1403 PFNGLBINDIMAGETEXTUREPROC glBindImageTexture;
1404 PFNGLMEMORYBARRIERPROC glMemoryBarrier;
1406 public: //! @name GL_ARB_texture_storage (added to OpenGL 4.2 core)
1408 PFNGLTEXSTORAGE1DPROC glTexStorage1D;
1409 PFNGLTEXSTORAGE2DPROC glTexStorage2D;
1410 PFNGLTEXSTORAGE3DPROC glTexStorage3D;
1412 public: //! @name OpenGL 4.2
1414 public: //! @name OpenGL 4.3
1416 PFNGLCLEARBUFFERDATAPROC glClearBufferData;
1417 PFNGLCLEARBUFFERSUBDATAPROC glClearBufferSubData;
1418 PFNGLDISPATCHCOMPUTEPROC glDispatchCompute;
1419 PFNGLDISPATCHCOMPUTEINDIRECTPROC glDispatchComputeIndirect;
1420 PFNGLCOPYIMAGESUBDATAPROC glCopyImageSubData;
1421 PFNGLFRAMEBUFFERPARAMETERIPROC glFramebufferParameteri;
1422 PFNGLGETFRAMEBUFFERPARAMETERIVPROC glGetFramebufferParameteriv;
1423 PFNGLGETINTERNALFORMATI64VPROC glGetInternalformati64v;
1424 PFNGLINVALIDATETEXSUBIMAGEPROC glInvalidateTexSubImage;
1425 PFNGLINVALIDATETEXIMAGEPROC glInvalidateTexImage;
1426 PFNGLINVALIDATEBUFFERSUBDATAPROC glInvalidateBufferSubData;
1427 PFNGLINVALIDATEBUFFERDATAPROC glInvalidateBufferData;
1428 PFNGLINVALIDATEFRAMEBUFFERPROC glInvalidateFramebuffer;
1429 PFNGLINVALIDATESUBFRAMEBUFFERPROC glInvalidateSubFramebuffer;
1430 PFNGLMULTIDRAWARRAYSINDIRECTPROC glMultiDrawArraysIndirect;
1431 PFNGLMULTIDRAWELEMENTSINDIRECTPROC glMultiDrawElementsIndirect;
1432 PFNGLGETPROGRAMINTERFACEIVPROC glGetProgramInterfaceiv;
1433 PFNGLGETPROGRAMRESOURCEINDEXPROC glGetProgramResourceIndex;
1434 PFNGLGETPROGRAMRESOURCENAMEPROC glGetProgramResourceName;
1435 PFNGLGETPROGRAMRESOURCEIVPROC glGetProgramResourceiv;
1436 PFNGLGETPROGRAMRESOURCELOCATIONPROC glGetProgramResourceLocation;
1437 PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glGetProgramResourceLocationIndex;
1438 PFNGLSHADERSTORAGEBLOCKBINDINGPROC glShaderStorageBlockBinding;
1439 PFNGLTEXBUFFERRANGEPROC glTexBufferRange;
1440 PFNGLTEXSTORAGE2DMULTISAMPLEPROC glTexStorage2DMultisample;
1441 PFNGLTEXSTORAGE3DMULTISAMPLEPROC glTexStorage3DMultisample;
1442 PFNGLTEXTUREVIEWPROC glTextureView;
1443 PFNGLBINDVERTEXBUFFERPROC glBindVertexBuffer;
1444 PFNGLVERTEXATTRIBFORMATPROC glVertexAttribFormat;
1445 PFNGLVERTEXATTRIBIFORMATPROC glVertexAttribIFormat;
1446 PFNGLVERTEXATTRIBLFORMATPROC glVertexAttribLFormat;
1447 PFNGLVERTEXATTRIBBINDINGPROC glVertexAttribBinding;
1448 PFNGLVERTEXBINDINGDIVISORPROC glVertexBindingDivisor;
1449 PFNGLDEBUGMESSAGECONTROLPROC glDebugMessageControl;
1450 PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert;
1451 PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback;
1452 PFNGLGETDEBUGMESSAGELOGPROC glGetDebugMessageLog;
1453 PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup;
1454 PFNGLPOPDEBUGGROUPPROC glPopDebugGroup;
1455 PFNGLOBJECTLABELPROC glObjectLabel;
1456 PFNGLGETOBJECTLABELPROC glGetObjectLabel;
1457 PFNGLOBJECTPTRLABELPROC glObjectPtrLabel;
1458 PFNGLGETOBJECTPTRLABELPROC glGetObjectPtrLabel;
1460 public: //! @name OpenGL 4.4
1462 PFNGLBUFFERSTORAGEPROC glBufferStorage;
1463 PFNGLCLEARTEXIMAGEPROC glClearTexImage;
1464 PFNGLCLEARTEXSUBIMAGEPROC glClearTexSubImage;
1465 PFNGLBINDBUFFERSBASEPROC glBindBuffersBase;
1466 PFNGLBINDBUFFERSRANGEPROC glBindBuffersRange;
1467 PFNGLBINDTEXTURESPROC glBindTextures;
1468 PFNGLBINDSAMPLERSPROC glBindSamplers;
1469 PFNGLBINDIMAGETEXTURESPROC glBindImageTextures;
1470 PFNGLBINDVERTEXBUFFERSPROC glBindVertexBuffers;
1472 public: //! @name GL_EXT_geometry_shader4
1474 PFNGLPROGRAMPARAMETERIEXTPROC glProgramParameteriEXT;
1476 public: //! @name GL_ARB_bindless_texture
1478 PFNGLGETTEXTUREHANDLEARBPROC glGetTextureHandleARB;
1479 PFNGLGETTEXTURESAMPLERHANDLEARBPROC glGetTextureSamplerHandleARB;
1480 PFNGLMAKETEXTUREHANDLERESIDENTARBPROC glMakeTextureHandleResidentARB;
1481 PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC glMakeTextureHandleNonResidentARB;
1482 PFNGLGETIMAGEHANDLEARBPROC glGetImageHandleARB;
1483 PFNGLMAKEIMAGEHANDLERESIDENTARBPROC glMakeImageHandleResidentARB;
1484 PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC glMakeImageHandleNonResidentARB;
1485 PFNGLUNIFORMHANDLEUI64ARBPROC glUniformHandleui64ARB;
1486 PFNGLUNIFORMHANDLEUI64VARBPROC glUniformHandleui64vARB;
1487 PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC glProgramUniformHandleui64ARB;
1488 PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC glProgramUniformHandleui64vARB;
1489 PFNGLISTEXTUREHANDLERESIDENTARBPROC glIsTextureHandleResidentARB;
1490 PFNGLISIMAGEHANDLERESIDENTARBPROC glIsImageHandleResidentARB;
1491 PFNGLVERTEXATTRIBL1UI64ARBPROC glVertexAttribL1ui64ARB;
1492 PFNGLVERTEXATTRIBL1UI64VARBPROC glVertexAttribL1ui64vARB;
1493 PFNGLGETVERTEXATTRIBLUI64VARBPROC glGetVertexAttribLui64vARB;
1496 public: //! @name wgl extensions
1498 typedef const char* (WINAPI *wglGetExtensionsStringARB_t)(HDC theDeviceContext);
1499 wglGetExtensionsStringARB_t wglGetExtensionsStringARB;
1501 typedef BOOL (WINAPI *wglSwapIntervalEXT_t)(int theInterval);
1502 wglSwapIntervalEXT_t wglSwapIntervalEXT;
1504 // WGL_ARB_pixel_format
1506 #ifndef WGL_NUMBER_PIXEL_FORMATS_ARB
1507 #define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000
1508 #define WGL_DRAW_TO_WINDOW_ARB 0x2001
1509 #define WGL_DRAW_TO_BITMAP_ARB 0x2002
1510 #define WGL_ACCELERATION_ARB 0x2003
1511 #define WGL_NEED_PALETTE_ARB 0x2004
1512 #define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005
1513 #define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006
1514 #define WGL_SWAP_METHOD_ARB 0x2007
1515 #define WGL_NUMBER_OVERLAYS_ARB 0x2008
1516 #define WGL_NUMBER_UNDERLAYS_ARB 0x2009
1517 #define WGL_TRANSPARENT_ARB 0x200A
1518 #define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037
1519 #define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038
1520 #define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039
1521 #define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A
1522 #define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B
1523 #define WGL_SHARE_DEPTH_ARB 0x200C
1524 #define WGL_SHARE_STENCIL_ARB 0x200D
1525 #define WGL_SHARE_ACCUM_ARB 0x200E
1526 #define WGL_SUPPORT_GDI_ARB 0x200F
1527 #define WGL_SUPPORT_OPENGL_ARB 0x2010
1528 #define WGL_DOUBLE_BUFFER_ARB 0x2011
1529 #define WGL_STEREO_ARB 0x2012
1530 #define WGL_PIXEL_TYPE_ARB 0x2013
1531 #define WGL_COLOR_BITS_ARB 0x2014
1532 #define WGL_RED_BITS_ARB 0x2015
1533 #define WGL_RED_SHIFT_ARB 0x2016
1534 #define WGL_GREEN_BITS_ARB 0x2017
1535 #define WGL_GREEN_SHIFT_ARB 0x2018
1536 #define WGL_BLUE_BITS_ARB 0x2019
1537 #define WGL_BLUE_SHIFT_ARB 0x201A
1538 #define WGL_ALPHA_BITS_ARB 0x201B
1539 #define WGL_ALPHA_SHIFT_ARB 0x201C
1540 #define WGL_ACCUM_BITS_ARB 0x201D
1541 #define WGL_ACCUM_RED_BITS_ARB 0x201E
1542 #define WGL_ACCUM_GREEN_BITS_ARB 0x201F
1543 #define WGL_ACCUM_BLUE_BITS_ARB 0x2020
1544 #define WGL_ACCUM_ALPHA_BITS_ARB 0x2021
1545 #define WGL_DEPTH_BITS_ARB 0x2022
1546 #define WGL_STENCIL_BITS_ARB 0x2023
1547 #define WGL_AUX_BUFFERS_ARB 0x2024
1549 #define WGL_NO_ACCELERATION_ARB 0x2025
1550 #define WGL_GENERIC_ACCELERATION_ARB 0x2026
1551 #define WGL_FULL_ACCELERATION_ARB 0x2027
1553 #define WGL_SWAP_EXCHANGE_ARB 0x2028
1554 #define WGL_SWAP_COPY_ARB 0x2029
1555 #define WGL_SWAP_UNDEFINED_ARB 0x202A
1557 #define WGL_TYPE_RGBA_ARB 0x202B
1558 #define WGL_TYPE_COLORINDEX_ARB 0x202C
1560 #endif // WGL_NUMBER_PIXEL_FORMATS_ARB
1562 // WGL_ARB_multisample
1563 #ifndef WGL_SAMPLE_BUFFERS_ARB
1564 #define WGL_SAMPLE_BUFFERS_ARB 0x2041
1565 #define WGL_SAMPLES_ARB 0x2042
1568 // WGL_ARB_create_context_robustness
1569 #ifndef WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB
1570 #define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
1571 #define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
1572 #define WGL_NO_RESET_NOTIFICATION_ARB 0x8261
1573 #define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252
1576 typedef BOOL (WINAPI *wglChoosePixelFormatARB_t)
1578 const int* theIntAttribs,
1579 const float* theFloatAttribs,
1580 unsigned int theMaxFormats,
1582 unsigned int* theNumFormatsOut);
1583 wglChoosePixelFormatARB_t wglChoosePixelFormatARB;
1585 // WGL_ARB_create_context_profile
1587 #ifndef WGL_CONTEXT_MAJOR_VERSION_ARB
1588 #define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091
1589 #define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092
1590 #define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093
1591 #define WGL_CONTEXT_FLAGS_ARB 0x2094
1592 #define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126
1594 // WGL_CONTEXT_FLAGS bits
1595 #define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001
1596 #define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002
1598 // WGL_CONTEXT_PROFILE_MASK_ARB bits
1599 #define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
1600 #define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
1601 #endif // WGL_CONTEXT_MAJOR_VERSION_ARB
1603 typedef HGLRC (WINAPI *wglCreateContextAttribsARB_t)(HDC theDevCtx,
1604 HGLRC theShareContext,
1605 const int* theAttribs);
1606 wglCreateContextAttribsARB_t wglCreateContextAttribsARB;
1608 // WGL_NV_DX_interop
1610 typedef BOOL (WINAPI *wglDXSetResourceShareHandleNV_t)(void* theObjectD3d, HANDLE theShareHandle);
1611 typedef HANDLE (WINAPI *wglDXOpenDeviceNV_t )(void* theDeviceD3d);
1612 typedef BOOL (WINAPI *wglDXCloseDeviceNV_t )(HANDLE theDeviceIOP);
1613 typedef HANDLE (WINAPI *wglDXRegisterObjectNV_t )(HANDLE theDeviceIOP,
1618 typedef BOOL (WINAPI *wglDXUnregisterObjectNV_t)(HANDLE theDeviceIOP,
1620 typedef BOOL (WINAPI *wglDXObjectAccessNV_t )(HANDLE theObject,
1622 typedef BOOL (WINAPI *wglDXLockObjectsNV_t )(HANDLE theDeviceIOP,
1624 HANDLE* theObjects);
1625 typedef BOOL (WINAPI *wglDXUnlockObjectsNV_t )(HANDLE theDeviceIOP,
1627 HANDLE* theObjects);
1629 wglDXSetResourceShareHandleNV_t wglDXSetResourceShareHandleNV;
1630 wglDXOpenDeviceNV_t wglDXOpenDeviceNV;
1631 wglDXCloseDeviceNV_t wglDXCloseDeviceNV;
1632 wglDXRegisterObjectNV_t wglDXRegisterObjectNV;
1633 wglDXUnregisterObjectNV_t wglDXUnregisterObjectNV;
1634 wglDXObjectAccessNV_t wglDXObjectAccessNV;
1635 wglDXLockObjectsNV_t wglDXLockObjectsNV;
1636 wglDXUnlockObjectsNV_t wglDXUnlockObjectsNV;
1638 #ifndef WGL_ACCESS_READ_WRITE_NV
1639 #define WGL_ACCESS_READ_ONLY_NV 0x0000
1640 #define WGL_ACCESS_READ_WRITE_NV 0x0001
1641 #define WGL_ACCESS_WRITE_DISCARD_NV 0x0002
1644 // WGL_AMD_gpu_association
1646 #ifndef WGL_GPU_VENDOR_AMD
1647 #define WGL_GPU_VENDOR_AMD 0x1F00
1648 #define WGL_GPU_RENDERER_STRING_AMD 0x1F01
1649 #define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02
1650 #define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2
1651 #define WGL_GPU_RAM_AMD 0x21A3
1652 #define WGL_GPU_CLOCK_AMD 0x21A4
1653 #define WGL_GPU_NUM_PIPES_AMD 0x21A5
1654 #define WGL_GPU_NUM_SIMD_AMD 0x21A6
1655 #define WGL_GPU_NUM_RB_AMD 0x21A7
1656 #define WGL_GPU_NUM_SPI_AMD 0x21A8
1659 typedef UINT (WINAPI *wglGetGPUIDsAMD_t )(UINT theMaxCount, UINT* theIds);
1660 typedef INT (WINAPI *wglGetGPUInfoAMD_t )(UINT theId, INT theProperty, GLenum theDataType, UINT theSize, void* theData);
1661 typedef UINT (WINAPI *wglGetContextGPUIDAMD_t )(HGLRC theHglrc);
1662 wglGetGPUIDsAMD_t wglGetGPUIDsAMD;
1663 wglGetGPUInfoAMD_t wglGetGPUInfoAMD;
1664 wglGetContextGPUIDAMD_t wglGetContextGPUIDAMD;
1666 #elif defined(__APPLE__)
1667 public: //! @name CGL extensions
1670 public: //! @name glX extensions
1672 // GLX_EXT_swap_control
1673 //typedef int (*glXSwapIntervalEXT_t)(Display* theDisplay, GLXDrawable theDrawable, int theInterval);
1674 typedef int (*glXSwapIntervalEXT_t)();
1675 glXSwapIntervalEXT_t glXSwapIntervalEXT;
1677 typedef int (*glXSwapIntervalSGI_t)(int theInterval);
1678 glXSwapIntervalSGI_t glXSwapIntervalSGI;
1680 // GLX_MESA_query_renderer
1681 #ifndef GLX_RENDERER_VENDOR_ID_MESA
1682 // for glXQueryRendererIntegerMESA() and glXQueryCurrentRendererIntegerMESA()
1683 #define GLX_RENDERER_VENDOR_ID_MESA 0x8183
1684 #define GLX_RENDERER_DEVICE_ID_MESA 0x8184
1685 #define GLX_RENDERER_VERSION_MESA 0x8185
1686 #define GLX_RENDERER_ACCELERATED_MESA 0x8186
1687 #define GLX_RENDERER_VIDEO_MEMORY_MESA 0x8187
1688 #define GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA 0x8188
1689 #define GLX_RENDERER_PREFERRED_PROFILE_MESA 0x8189
1690 #define GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA 0x818A
1691 #define GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA 0x818B
1692 #define GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA 0x818C
1693 #define GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA 0x818D
1695 #define GLX_RENDERER_ID_MESA 0x818E
1696 #endif // GLX_RENDERER_VENDOR_ID_MESA
1698 typedef Bool (*glXQueryRendererIntegerMESA_t)(Display* theDisplay, int theScreen,
1699 int theRenderer, int theAttribute,
1700 unsigned int* theValue);
1701 typedef Bool (*glXQueryCurrentRendererIntegerMESA_t)(int theAttribute, unsigned int* theValue);
1702 typedef const char* (*glXQueryRendererStringMESA_t)(Display* theDisplay, int theScreen,
1703 int theRenderer, int theAttribute);
1704 typedef const char* (*glXQueryCurrentRendererStringMESA_t)(int theAttribute);
1706 glXQueryRendererIntegerMESA_t glXQueryRendererIntegerMESA;
1707 glXQueryCurrentRendererIntegerMESA_t glXQueryCurrentRendererIntegerMESA;
1708 glXQueryRendererStringMESA_t glXQueryRendererStringMESA;
1709 glXQueryCurrentRendererStringMESA_t glXQueryCurrentRendererStringMESA;
1712 #endif // OpenGL ES vs. desktop
1716 #endif // _OpenGl_GlFunctions_Header