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
117 #define GL_R8I 0x8231
118 #define GL_R8UI 0x8232
119 #define GL_R16I 0x8233
120 #define GL_R16UI 0x8234
121 #define GL_R32I 0x8235
122 #define GL_R32UI 0x8236
123 #define GL_RG8I 0x8237
124 #define GL_RG8UI 0x8238
125 #define GL_RG16I 0x8239
126 #define GL_RG16UI 0x823A
127 #define GL_RG32I 0x823B
128 #define GL_RG32UI 0x823C
129 #define GL_RGBA32UI 0x8D70
130 #define GL_RGB32UI 0x8D71
131 #define GL_RGBA16UI 0x8D76
132 #define GL_RGB16UI 0x8D77
133 #define GL_RGBA8UI 0x8D7C
134 #define GL_RGB8UI 0x8D7D
135 #define GL_RGBA32I 0x8D82
136 #define GL_RGB32I 0x8D83
137 #define GL_RGBA16I 0x8D88
138 #define GL_RGB16I 0x8D89
139 #define GL_RGBA8I 0x8D8E
140 #define GL_RGB8I 0x8D8F
142 // GL_OES_packed_depth_stencil
143 #define GL_DEPTH_STENCIL 0x84F9
144 #define GL_UNSIGNED_INT_24_8 0x84FA
145 #define GL_DEPTH24_STENCIL8 0x88F0
148 #define GL_DEPTH_COMPONENT24 0x81A6
149 #define GL_DEPTH_COMPONENT32F 0x8CAC
150 #define GL_DEPTH32F_STENCIL8 0x8CAD
151 #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
153 #define GL_READ_FRAMEBUFFER 0x8CA8
154 #define GL_DRAW_FRAMEBUFFER 0x8CA9
156 #define GL_TEXTURE_3D 0x806F
157 #define GL_TEXTURE_WRAP_R 0x8072
159 // GL_EXT_texture_filter_anisotropic
160 #define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
161 #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
163 // debug ARB extension
164 #define GL_DEBUG_OUTPUT 0x92E0
165 #define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242
166 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243
167 #define GL_DEBUG_CALLBACK_FUNCTION 0x8244
168 #define GL_DEBUG_CALLBACK_USER_PARAM 0x8245
169 #define GL_DEBUG_SOURCE_API 0x8246
170 #define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247
171 #define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248
172 #define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249
173 #define GL_DEBUG_SOURCE_APPLICATION 0x824A
174 #define GL_DEBUG_SOURCE_OTHER 0x824B
175 #define GL_DEBUG_TYPE_ERROR 0x824C
176 #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D
177 #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E
178 #define GL_DEBUG_TYPE_PORTABILITY 0x824F
179 #define GL_DEBUG_TYPE_PERFORMANCE 0x8250
180 #define GL_DEBUG_TYPE_OTHER 0x8251
181 #define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143
182 #define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144
183 #define GL_DEBUG_LOGGED_MESSAGES 0x9145
184 #define GL_DEBUG_SEVERITY_HIGH 0x9146
185 #define GL_DEBUG_SEVERITY_MEDIUM 0x9147
186 #define GL_DEBUG_SEVERITY_LOW 0x9148
189 #if !defined(HAVE_EGL) && (defined(__ANDROID__) || defined(__QNX__) || defined(HAVE_GLES2) || defined(OCCT_UWP))
193 #include <InterfaceGraphic.hxx>
195 // GL version can be defined by system gl.h header
196 #if !defined(GL_ES_VERSION_2_0)
197 #undef GL_VERSION_1_2
198 #undef GL_VERSION_1_3
199 #undef GL_VERSION_1_4
200 #undef GL_VERSION_1_5
201 #undef GL_VERSION_2_0
202 #undef GL_VERSION_2_1
203 #undef GL_VERSION_3_0
204 #undef GL_VERSION_3_1
205 #undef GL_VERSION_3_2
206 #undef GL_VERSION_3_3
207 #undef GL_VERSION_4_0
208 #undef GL_VERSION_4_1
209 #undef GL_VERSION_4_2
210 #undef GL_VERSION_4_3
211 #undef GL_VERSION_4_4
212 #undef GL_VERSION_4_5
214 // include glext.h provided by Khronos group
218 //! Mega structure defines the complete list of OpenGL functions.
219 struct OpenGl_GlFunctions
222 public: //! @name OpenGL ES 1.1
224 #if defined(GL_ES_VERSION_2_0)
226 inline void glActiveTexture (GLenum texture)
228 ::glActiveTexture (texture);
231 inline void glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data)
233 ::glCompressedTexImage2D (target, level, internalformat, width, height, border, imageSize, data);
236 inline void glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data)
238 ::glCompressedTexSubImage2D (target, level, xoffset, yoffset, width, height, format, imageSize, data);
241 inline void glBindBuffer (GLenum target, GLuint buffer)
243 ::glBindBuffer (target, buffer);
246 inline void glBufferData (GLenum target, GLsizeiptr size, const void* data, GLenum usage)
248 ::glBufferData (target, size, data, usage);
251 inline void glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void* data)
253 ::glBufferSubData (target, offset, size, data);
256 inline void glDeleteBuffers (GLsizei n, const GLuint *buffers)
258 ::glDeleteBuffers (n, buffers);
261 inline void glDeleteTextures (GLsizei n, const GLuint *textures)
263 ::glDeleteTextures (n, textures);
266 inline void glDepthFunc (GLenum func)
268 ::glDepthFunc (func);
271 inline void glDepthMask (GLboolean flag)
273 ::glDepthMask (flag);
276 inline void glDepthRangef (GLfloat n, GLfloat f)
278 ::glDepthRangef (n, f);
281 inline void glGenBuffers (GLsizei n, GLuint *buffers)
283 ::glGenBuffers (n, buffers);
286 inline void glGenTextures (GLsizei n, GLuint *textures)
288 ::glGenTextures (n, textures);
291 inline void glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params)
293 ::glGetBufferParameteriv (target, pname, params);
296 inline GLboolean glIsBuffer (GLuint buffer)
298 return ::glIsBuffer (buffer);
301 inline void glSampleCoverage (GLfloat value, GLboolean invert)
303 ::glSampleCoverage (value, invert);
306 inline void glMultiDrawElements (GLenum theMode, const GLsizei* theCount, GLenum theType, const void* const* theIndices, GLsizei theDrawCount)
309 || theIndices == NULL)
314 for (GLsizei aBatchIter = 0; aBatchIter < theDrawCount; ++aBatchIter)
316 ::glDrawElements (theMode, theCount[aBatchIter], theType, theIndices[aBatchIter]);
322 public: //! @name OpenGL ES 2.0
324 #if defined(GL_ES_VERSION_2_0)
325 inline void glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
327 ::glBlendColor (red, green, blue, alpha);
330 inline void glBlendEquation (GLenum mode)
332 ::glBlendEquation (mode);
335 inline void glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
337 ::glBlendFuncSeparate (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
340 inline void glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha)
342 ::glBlendEquationSeparate (modeRGB, modeAlpha);
345 inline void glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass)
347 ::glStencilOpSeparate (face, sfail, dpfail, dppass);
350 inline void glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask)
352 ::glStencilFuncSeparate (face, func, ref, mask);
355 inline void glStencilMaskSeparate (GLenum face, GLuint mask)
357 ::glStencilMaskSeparate (face, mask);
360 inline void glAttachShader (GLuint program, GLuint shader)
362 ::glAttachShader (program, shader);
365 inline void glBindAttribLocation (GLuint program, GLuint index, const GLchar *name)
367 ::glBindAttribLocation (program, index, name);
370 inline void glBindFramebuffer (GLenum target, GLuint framebuffer)
372 ::glBindFramebuffer (target, framebuffer);
375 inline void glBindRenderbuffer (GLenum target, GLuint renderbuffer)
377 ::glBindRenderbuffer (target, renderbuffer);
380 inline GLenum glCheckFramebufferStatus (GLenum target)
382 return ::glCheckFramebufferStatus (target);
385 inline void glCompileShader (GLuint shader)
387 ::glCompileShader (shader);
390 inline GLuint glCreateProgram()
392 return ::glCreateProgram();
395 inline GLuint glCreateShader (GLenum type)
397 return ::glCreateShader (type);
400 inline void glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers)
402 ::glDeleteFramebuffers (n, framebuffers);
405 inline void glDeleteProgram (GLuint program)
407 ::glDeleteProgram (program);
410 inline void glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers)
412 ::glDeleteRenderbuffers (n, renderbuffers);
415 inline void glDeleteShader (GLuint shader)
417 ::glDeleteShader (shader);
420 inline void glDetachShader (GLuint program, GLuint shader)
422 ::glDetachShader (program, shader);
425 inline void glDisableVertexAttribArray (GLuint index)
427 ::glDisableVertexAttribArray (index);
430 inline void glEnableVertexAttribArray (GLuint index)
432 ::glEnableVertexAttribArray (index);
435 inline void glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
437 ::glFramebufferRenderbuffer (target, attachment, renderbuffertarget, renderbuffer);
440 inline void glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
442 ::glFramebufferTexture2D (target, attachment, textarget, texture, level);
445 inline void glGenerateMipmap (GLenum target)
447 ::glGenerateMipmap (target);
450 inline void glGenFramebuffers (GLsizei n, GLuint *framebuffers)
452 ::glGenFramebuffers (n, framebuffers);
455 inline void glGenRenderbuffers (GLsizei n, GLuint *renderbuffers)
457 ::glGenRenderbuffers (n, renderbuffers);
460 inline void glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint* size, GLenum *type, GLchar *name)
462 ::glGetActiveAttrib (program, index, bufSize, length, size, type, name);
465 inline void glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint* size, GLenum *type, GLchar *name)
467 ::glGetActiveUniform (program, index, bufSize, length, size, type, name);
470 inline void glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders)
472 ::glGetAttachedShaders (program, maxCount, count, shaders);
475 inline GLint glGetAttribLocation (GLuint program, const GLchar *name)
477 return ::glGetAttribLocation (program, name);
480 inline void glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params)
482 ::glGetFramebufferAttachmentParameteriv (target, attachment, pname, params);
485 inline void glGetProgramiv (GLuint program, GLenum pname, GLint* params)
487 ::glGetProgramiv (program, pname, params);
490 inline void glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog)
492 ::glGetProgramInfoLog (program, bufSize, length, infoLog);
495 inline void glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params)
497 ::glGetRenderbufferParameteriv (target, pname, params);
500 inline void glGetShaderiv (GLuint shader, GLenum pname, GLint* params)
502 ::glGetShaderiv (shader, pname, params);
505 inline void glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog)
507 ::glGetShaderInfoLog (shader, bufSize, length, infoLog);
510 inline void glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
512 ::glGetShaderPrecisionFormat (shadertype, precisiontype, range, precision);
515 inline void glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source)
517 ::glGetShaderSource (shader, bufSize, length, source);
520 inline void glGetUniformfv (GLuint program, GLint location, GLfloat* params)
522 ::glGetUniformfv (program, location, params);
525 inline void glGetUniformiv (GLuint program, GLint location, GLint* params)
527 ::glGetUniformiv (program, location, params);
530 GLint glGetUniformLocation (GLuint program, const GLchar *name)
532 return ::glGetUniformLocation (program, name);
535 inline void glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params)
537 ::glGetVertexAttribfv (index, pname, params);
540 inline void glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params)
542 ::glGetVertexAttribiv (index, pname, params);
545 inline void glGetVertexAttribPointerv (GLuint index, GLenum pname, void* *pointer)
547 ::glGetVertexAttribPointerv (index, pname, pointer);
550 inline GLboolean glIsFramebuffer (GLuint framebuffer)
552 return ::glIsFramebuffer (framebuffer);
555 inline GLboolean glIsProgram (GLuint program)
557 return ::glIsProgram (program);
560 inline GLboolean glIsRenderbuffer (GLuint renderbuffer)
562 return ::glIsRenderbuffer (renderbuffer);
565 inline GLboolean glIsShader (GLuint shader)
567 return ::glIsShader (shader);
570 inline void glLinkProgram (GLuint program)
572 ::glLinkProgram (program);
575 inline void glReleaseShaderCompiler()
577 ::glReleaseShaderCompiler();
580 inline void glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
582 ::glRenderbufferStorage (target, internalformat, width, height);
585 inline void glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void* binary, GLsizei length)
587 ::glShaderBinary (count, shaders, binaryformat, binary, length);
590 inline void glShaderSource (GLuint shader, GLsizei count, const GLchar** string, const GLint* length)
592 ::glShaderSource (shader, count, string, length);
595 inline void glUniform1f (GLint location, GLfloat v0)
597 ::glUniform1f (location, v0);
600 inline void glUniform1fv (GLint location, GLsizei count, const GLfloat* value)
602 ::glUniform1fv (location, count, value);
605 inline void glUniform1i (GLint location, GLint v0)
607 ::glUniform1i (location, v0);
610 inline void glUniform1iv (GLint location, GLsizei count, const GLint* value)
612 ::glUniform1iv (location, count, value);
615 inline void glUniform2f (GLint location, GLfloat v0, GLfloat v1)
617 ::glUniform2f (location, v0, v1);
620 inline void glUniform2fv (GLint location, GLsizei count, const GLfloat* value)
622 ::glUniform2fv (location, count, value);
625 inline void glUniform2i (GLint location, GLint v0, GLint v1)
627 ::glUniform2i (location, v0, v1);
630 inline void glUniform2iv (GLint location, GLsizei count, const GLint* value)
632 ::glUniform2iv (location, count, value);
635 inline void glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
637 ::glUniform3f (location, v0, v1, v2);
640 inline void glUniform3fv (GLint location, GLsizei count, const GLfloat* value)
642 ::glUniform3fv (location, count, value);
645 inline void glUniform3i (GLint location, GLint v0, GLint v1, GLint v2)
647 ::glUniform3i (location, v0, v1, v2);
650 inline void glUniform3iv (GLint location, GLsizei count, const GLint* value)
652 ::glUniform3iv (location, count, value);
655 inline void glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
657 ::glUniform4f (location, v0, v1, v2, v3);
660 inline void glUniform4fv (GLint location, GLsizei count, const GLfloat* value)
662 ::glUniform4fv (location, count, value);
665 inline void glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
667 ::glUniform4i (location, v0, v1, v2, v3);
670 inline void glUniform4iv (GLint location, GLsizei count, const GLint* value)
672 ::glUniform4iv (location, count, value);
675 inline void glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
677 ::glUniformMatrix2fv (location, count, transpose, value);
680 inline void glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
682 ::glUniformMatrix3fv (location, count, transpose, value);
685 inline void glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
687 ::glUniformMatrix4fv (location, count, transpose, value);
690 inline void glUseProgram (GLuint program)
692 ::glUseProgram (program);
695 inline void glValidateProgram (GLuint program)
697 ::glValidateProgram (program);
700 inline void glVertexAttrib1f (GLuint index, GLfloat x)
702 ::glVertexAttrib1f (index, x);
705 inline void glVertexAttrib1fv (GLuint index, const GLfloat* v)
707 ::glVertexAttrib1fv (index, v);
710 inline void glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y)
712 ::glVertexAttrib2f (index, x, y);
715 inline void glVertexAttrib2fv (GLuint index, const GLfloat* v)
717 ::glVertexAttrib2fv (index, v);
720 inline void glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z)
722 ::glVertexAttrib3f (index, x, y, z);
725 inline void glVertexAttrib3fv (GLuint index, const GLfloat* v)
727 ::glVertexAttrib3fv (index, v);
730 inline void glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
732 ::glVertexAttrib4f (index, x, y, z, w);
735 inline void glVertexAttrib4fv (GLuint index, const GLfloat* v)
737 ::glVertexAttrib4fv (index, v);
740 inline void glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer)
742 ::glVertexAttribPointer (index, size, type, normalized, stride, pointer);
745 public: //! @name OpenGL ES 3.0
747 typedef void (*glBlitFramebuffer_t)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
748 glBlitFramebuffer_t glBlitFramebuffer;
750 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);
751 glTexImage3D_t glTexImage3D;
753 public: //! @name OpenGL ES 3.1
755 typedef void (*glTexStorage2DMultisample_t)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
756 glTexStorage2DMultisample_t glTexStorage2DMultisample;
758 public: //! @name OpenGL ES 3.2
760 typedef void (*glTexBuffer_t)(GLenum target, GLenum internalFormat, GLuint buffer);
761 glTexBuffer_t glTexBuffer;
763 public: //! @name GL_KHR_debug (optional)
765 typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam);
767 typedef void (APIENTRYP glDebugMessageControl_t ) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled);
768 typedef void (APIENTRYP glDebugMessageInsert_t ) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf);
769 typedef void (APIENTRYP glDebugMessageCallback_t) (GLDEBUGPROCARB callback, const void* userParam);
770 typedef GLuint (APIENTRYP glGetDebugMessageLog_t ) (GLuint count,
779 glDebugMessageControl_t glDebugMessageControl;
780 glDebugMessageInsert_t glDebugMessageInsert;
781 glDebugMessageCallback_t glDebugMessageCallback;
782 glGetDebugMessageLog_t glGetDebugMessageLog;
784 #else // OpenGL ES vs. desktop
786 public: //! @name OpenGL 1.2
788 PFNGLBLENDCOLORPROC glBlendColor;
789 PFNGLBLENDEQUATIONPROC glBlendEquation;
790 PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements;
791 PFNGLTEXIMAGE3DPROC glTexImage3D;
792 PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D;
793 PFNGLCOPYTEXSUBIMAGE3DPROC glCopyTexSubImage3D;
795 public: //! @name OpenGL 1.3
797 PFNGLACTIVETEXTUREPROC glActiveTexture;
798 PFNGLSAMPLECOVERAGEPROC glSampleCoverage;
799 PFNGLCOMPRESSEDTEXIMAGE3DPROC glCompressedTexImage3D;
800 PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D;
801 PFNGLCOMPRESSEDTEXIMAGE1DPROC glCompressedTexImage1D;
802 PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D;
803 PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glCompressedTexSubImage2D;
804 PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glCompressedTexSubImage1D;
805 PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage;
807 PFNGLCLIENTACTIVETEXTUREPROC glClientActiveTexture;
808 PFNGLMULTITEXCOORD1DPROC glMultiTexCoord1d;
809 PFNGLMULTITEXCOORD1DVPROC glMultiTexCoord1dv;
810 PFNGLMULTITEXCOORD1FPROC glMultiTexCoord1f;
811 PFNGLMULTITEXCOORD1FVPROC glMultiTexCoord1fv;
812 PFNGLMULTITEXCOORD1IPROC glMultiTexCoord1i;
813 PFNGLMULTITEXCOORD1IVPROC glMultiTexCoord1iv;
814 PFNGLMULTITEXCOORD1SPROC glMultiTexCoord1s;
815 PFNGLMULTITEXCOORD1SVPROC glMultiTexCoord1sv;
816 PFNGLMULTITEXCOORD2DPROC glMultiTexCoord2d;
817 PFNGLMULTITEXCOORD2DVPROC glMultiTexCoord2dv;
818 PFNGLMULTITEXCOORD2FPROC glMultiTexCoord2f;
819 PFNGLMULTITEXCOORD2FVPROC glMultiTexCoord2fv;
820 PFNGLMULTITEXCOORD2IPROC glMultiTexCoord2i;
821 PFNGLMULTITEXCOORD2IVPROC glMultiTexCoord2iv;
822 PFNGLMULTITEXCOORD2SPROC glMultiTexCoord2s;
823 PFNGLMULTITEXCOORD2SVPROC glMultiTexCoord2sv;
824 PFNGLMULTITEXCOORD3DPROC glMultiTexCoord3d;
825 PFNGLMULTITEXCOORD3DVPROC glMultiTexCoord3dv;
826 PFNGLMULTITEXCOORD3FPROC glMultiTexCoord3f;
827 PFNGLMULTITEXCOORD3FVPROC glMultiTexCoord3fv;
828 PFNGLMULTITEXCOORD3IPROC glMultiTexCoord3i;
829 PFNGLMULTITEXCOORD3IVPROC glMultiTexCoord3iv;
830 PFNGLMULTITEXCOORD3SPROC glMultiTexCoord3s;
831 PFNGLMULTITEXCOORD3SVPROC glMultiTexCoord3sv;
832 PFNGLMULTITEXCOORD4DPROC glMultiTexCoord4d;
833 PFNGLMULTITEXCOORD4DVPROC glMultiTexCoord4dv;
834 PFNGLMULTITEXCOORD4FPROC glMultiTexCoord4f;
835 PFNGLMULTITEXCOORD4FVPROC glMultiTexCoord4fv;
836 PFNGLMULTITEXCOORD4IPROC glMultiTexCoord4i;
837 PFNGLMULTITEXCOORD4IVPROC glMultiTexCoord4iv;
838 PFNGLMULTITEXCOORD4SPROC glMultiTexCoord4s;
839 PFNGLMULTITEXCOORD4SVPROC glMultiTexCoord4sv;
840 PFNGLLOADTRANSPOSEMATRIXFPROC glLoadTransposeMatrixf;
841 PFNGLLOADTRANSPOSEMATRIXDPROC glLoadTransposeMatrixd;
842 PFNGLMULTTRANSPOSEMATRIXFPROC glMultTransposeMatrixf;
843 PFNGLMULTTRANSPOSEMATRIXDPROC glMultTransposeMatrixd;
845 public: //! @name OpenGL 1.4
847 PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate;
848 PFNGLMULTIDRAWARRAYSPROC glMultiDrawArrays;
849 PFNGLMULTIDRAWELEMENTSPROC glMultiDrawElements;
850 PFNGLPOINTPARAMETERFPROC glPointParameterf;
851 PFNGLPOINTPARAMETERFVPROC glPointParameterfv;
852 PFNGLPOINTPARAMETERIPROC glPointParameteri;
853 PFNGLPOINTPARAMETERIVPROC glPointParameteriv;
855 public: //! @name OpenGL 1.5
857 PFNGLGENQUERIESPROC glGenQueries;
858 PFNGLDELETEQUERIESPROC glDeleteQueries;
859 PFNGLISQUERYPROC glIsQuery;
860 PFNGLBEGINQUERYPROC glBeginQuery;
861 PFNGLENDQUERYPROC glEndQuery;
862 PFNGLGETQUERYIVPROC glGetQueryiv;
863 PFNGLGETQUERYOBJECTIVPROC glGetQueryObjectiv;
864 PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv;
865 PFNGLBINDBUFFERPROC glBindBuffer;
866 PFNGLDELETEBUFFERSPROC glDeleteBuffers;
867 PFNGLGENBUFFERSPROC glGenBuffers;
868 PFNGLISBUFFERPROC glIsBuffer;
869 PFNGLBUFFERDATAPROC glBufferData;
870 PFNGLBUFFERSUBDATAPROC glBufferSubData;
871 PFNGLGETBUFFERSUBDATAPROC glGetBufferSubData;
872 PFNGLMAPBUFFERPROC glMapBuffer;
873 PFNGLUNMAPBUFFERPROC glUnmapBuffer;
874 PFNGLGETBUFFERPARAMETERIVPROC glGetBufferParameteriv;
875 PFNGLGETBUFFERPOINTERVPROC glGetBufferPointerv;
877 public: //! @name OpenGL 2.0
879 PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate;
880 PFNGLDRAWBUFFERSPROC glDrawBuffers;
881 PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate;
882 PFNGLSTENCILFUNCSEPARATEPROC glStencilFuncSeparate;
883 PFNGLSTENCILMASKSEPARATEPROC glStencilMaskSeparate;
884 PFNGLATTACHSHADERPROC glAttachShader;
885 PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation;
886 PFNGLCOMPILESHADERPROC glCompileShader;
887 PFNGLCREATEPROGRAMPROC glCreateProgram;
888 PFNGLCREATESHADERPROC glCreateShader;
889 PFNGLDELETEPROGRAMPROC glDeleteProgram;
890 PFNGLDELETESHADERPROC glDeleteShader;
891 PFNGLDETACHSHADERPROC glDetachShader;
892 PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
893 PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray;
894 PFNGLGETACTIVEATTRIBPROC glGetActiveAttrib;
895 PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform;
896 PFNGLGETATTACHEDSHADERSPROC glGetAttachedShaders;
897 PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation;
898 PFNGLGETPROGRAMIVPROC glGetProgramiv;
899 PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
900 PFNGLGETSHADERIVPROC glGetShaderiv;
901 PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
902 PFNGLGETSHADERSOURCEPROC glGetShaderSource;
903 PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
904 PFNGLGETUNIFORMFVPROC glGetUniformfv;
905 PFNGLGETUNIFORMIVPROC glGetUniformiv;
906 PFNGLGETVERTEXATTRIBDVPROC glGetVertexAttribdv;
907 PFNGLGETVERTEXATTRIBFVPROC glGetVertexAttribfv;
908 PFNGLGETVERTEXATTRIBIVPROC glGetVertexAttribiv;
909 PFNGLGETVERTEXATTRIBPOINTERVPROC glGetVertexAttribPointerv;
910 PFNGLISPROGRAMPROC glIsProgram;
911 PFNGLISSHADERPROC glIsShader;
912 PFNGLLINKPROGRAMPROC glLinkProgram;
913 PFNGLSHADERSOURCEPROC glShaderSource;
914 PFNGLUSEPROGRAMPROC glUseProgram;
915 PFNGLUNIFORM1FPROC glUniform1f;
916 PFNGLUNIFORM2FPROC glUniform2f;
917 PFNGLUNIFORM3FPROC glUniform3f;
918 PFNGLUNIFORM4FPROC glUniform4f;
919 PFNGLUNIFORM1IPROC glUniform1i;
920 PFNGLUNIFORM2IPROC glUniform2i;
921 PFNGLUNIFORM3IPROC glUniform3i;
922 PFNGLUNIFORM4IPROC glUniform4i;
923 PFNGLUNIFORM1FVPROC glUniform1fv;
924 PFNGLUNIFORM2FVPROC glUniform2fv;
925 PFNGLUNIFORM3FVPROC glUniform3fv;
926 PFNGLUNIFORM4FVPROC glUniform4fv;
927 PFNGLUNIFORM1IVPROC glUniform1iv;
928 PFNGLUNIFORM2IVPROC glUniform2iv;
929 PFNGLUNIFORM3IVPROC glUniform3iv;
930 PFNGLUNIFORM4IVPROC glUniform4iv;
931 PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv;
932 PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv;
933 PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
934 PFNGLVALIDATEPROGRAMPROC glValidateProgram;
935 PFNGLVERTEXATTRIB1DPROC glVertexAttrib1d;
936 PFNGLVERTEXATTRIB1DVPROC glVertexAttrib1dv;
937 PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f;
938 PFNGLVERTEXATTRIB1FVPROC glVertexAttrib1fv;
939 PFNGLVERTEXATTRIB1SPROC glVertexAttrib1s;
940 PFNGLVERTEXATTRIB1SVPROC glVertexAttrib1sv;
941 PFNGLVERTEXATTRIB2DPROC glVertexAttrib2d;
942 PFNGLVERTEXATTRIB2DVPROC glVertexAttrib2dv;
943 PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f;
944 PFNGLVERTEXATTRIB2FVPROC glVertexAttrib2fv;
945 PFNGLVERTEXATTRIB2SPROC glVertexAttrib2s;
946 PFNGLVERTEXATTRIB2SVPROC glVertexAttrib2sv;
947 PFNGLVERTEXATTRIB3DPROC glVertexAttrib3d;
948 PFNGLVERTEXATTRIB3DVPROC glVertexAttrib3dv;
949 PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f;
950 PFNGLVERTEXATTRIB3FVPROC glVertexAttrib3fv;
951 PFNGLVERTEXATTRIB3SPROC glVertexAttrib3s;
952 PFNGLVERTEXATTRIB3SVPROC glVertexAttrib3sv;
953 PFNGLVERTEXATTRIB4NBVPROC glVertexAttrib4Nbv;
954 PFNGLVERTEXATTRIB4NIVPROC glVertexAttrib4Niv;
955 PFNGLVERTEXATTRIB4NSVPROC glVertexAttrib4Nsv;
956 PFNGLVERTEXATTRIB4NUBPROC glVertexAttrib4Nub;
957 PFNGLVERTEXATTRIB4NUBVPROC glVertexAttrib4Nubv;
958 PFNGLVERTEXATTRIB4NUIVPROC glVertexAttrib4Nuiv;
959 PFNGLVERTEXATTRIB4NUSVPROC glVertexAttrib4Nusv;
960 PFNGLVERTEXATTRIB4BVPROC glVertexAttrib4bv;
961 PFNGLVERTEXATTRIB4DPROC glVertexAttrib4d;
962 PFNGLVERTEXATTRIB4DVPROC glVertexAttrib4dv;
963 PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f;
964 PFNGLVERTEXATTRIB4FVPROC glVertexAttrib4fv;
965 PFNGLVERTEXATTRIB4IVPROC glVertexAttrib4iv;
966 PFNGLVERTEXATTRIB4SPROC glVertexAttrib4s;
967 PFNGLVERTEXATTRIB4SVPROC glVertexAttrib4sv;
968 PFNGLVERTEXATTRIB4UBVPROC glVertexAttrib4ubv;
969 PFNGLVERTEXATTRIB4UIVPROC glVertexAttrib4uiv;
970 PFNGLVERTEXATTRIB4USVPROC glVertexAttrib4usv;
971 PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
973 public: //! @name OpenGL 2.1
975 PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv;
976 PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv;
977 PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv;
978 PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv;
979 PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv;
980 PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv;
982 public: //! @name GL_ARB_framebuffer_object (added to OpenGL 3.0 core)
984 PFNGLISRENDERBUFFERPROC glIsRenderbuffer;
985 PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer;
986 PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers;
987 PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers;
988 PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;
989 PFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv;
990 PFNGLISFRAMEBUFFERPROC glIsFramebuffer;
991 PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
992 PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
993 PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
994 PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
995 PFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D;
996 PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
997 PFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D;
998 PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer;
999 PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv;
1000 PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
1001 PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
1002 PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample;
1003 PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer;
1005 public: //! @name GL_ARB_vertex_array_object (added to OpenGL 3.0 core)
1007 PFNGLBINDVERTEXARRAYPROC glBindVertexArray;
1008 PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays;
1009 PFNGLGENVERTEXARRAYSPROC glGenVertexArrays;
1010 PFNGLISVERTEXARRAYPROC glIsVertexArray;
1012 public: //! @name GL_ARB_map_buffer_range (added to OpenGL 3.0 core)
1014 PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
1015 PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
1017 public: //! @name OpenGL 3.0
1019 PFNGLCOLORMASKIPROC glColorMaski;
1020 PFNGLGETBOOLEANI_VPROC glGetBooleani_v;
1021 PFNGLGETINTEGERI_VPROC glGetIntegeri_v;
1022 PFNGLENABLEIPROC glEnablei;
1023 PFNGLDISABLEIPROC glDisablei;
1024 PFNGLISENABLEDIPROC glIsEnabledi;
1025 PFNGLBEGINTRANSFORMFEEDBACKPROC glBeginTransformFeedback;
1026 PFNGLENDTRANSFORMFEEDBACKPROC glEndTransformFeedback;
1027 PFNGLBINDBUFFERRANGEPROC glBindBufferRange;
1028 PFNGLBINDBUFFERBASEPROC glBindBufferBase;
1029 PFNGLTRANSFORMFEEDBACKVARYINGSPROC glTransformFeedbackVaryings;
1030 PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glGetTransformFeedbackVarying;
1031 PFNGLCLAMPCOLORPROC glClampColor;
1032 PFNGLBEGINCONDITIONALRENDERPROC glBeginConditionalRender;
1033 PFNGLENDCONDITIONALRENDERPROC glEndConditionalRender;
1034 PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer;
1035 PFNGLGETVERTEXATTRIBIIVPROC glGetVertexAttribIiv;
1036 PFNGLGETVERTEXATTRIBIUIVPROC glGetVertexAttribIuiv;
1037 PFNGLVERTEXATTRIBI1IPROC glVertexAttribI1i;
1038 PFNGLVERTEXATTRIBI2IPROC glVertexAttribI2i;
1039 PFNGLVERTEXATTRIBI3IPROC glVertexAttribI3i;
1040 PFNGLVERTEXATTRIBI4IPROC glVertexAttribI4i;
1041 PFNGLVERTEXATTRIBI1UIPROC glVertexAttribI1ui;
1042 PFNGLVERTEXATTRIBI2UIPROC glVertexAttribI2ui;
1043 PFNGLVERTEXATTRIBI3UIPROC glVertexAttribI3ui;
1044 PFNGLVERTEXATTRIBI4UIPROC glVertexAttribI4ui;
1045 PFNGLVERTEXATTRIBI1IVPROC glVertexAttribI1iv;
1046 PFNGLVERTEXATTRIBI2IVPROC glVertexAttribI2iv;
1047 PFNGLVERTEXATTRIBI3IVPROC glVertexAttribI3iv;
1048 PFNGLVERTEXATTRIBI4IVPROC glVertexAttribI4iv;
1049 PFNGLVERTEXATTRIBI1UIVPROC glVertexAttribI1uiv;
1050 PFNGLVERTEXATTRIBI2UIVPROC glVertexAttribI2uiv;
1051 PFNGLVERTEXATTRIBI3UIVPROC glVertexAttribI3uiv;
1052 PFNGLVERTEXATTRIBI4UIVPROC glVertexAttribI4uiv;
1053 PFNGLVERTEXATTRIBI4BVPROC glVertexAttribI4bv;
1054 PFNGLVERTEXATTRIBI4SVPROC glVertexAttribI4sv;
1055 PFNGLVERTEXATTRIBI4UBVPROC glVertexAttribI4ubv;
1056 PFNGLVERTEXATTRIBI4USVPROC glVertexAttribI4usv;
1057 PFNGLGETUNIFORMUIVPROC glGetUniformuiv;
1058 PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation;
1059 PFNGLGETFRAGDATALOCATIONPROC glGetFragDataLocation;
1060 PFNGLUNIFORM1UIPROC glUniform1ui;
1061 PFNGLUNIFORM2UIPROC glUniform2ui;
1062 PFNGLUNIFORM3UIPROC glUniform3ui;
1063 PFNGLUNIFORM4UIPROC glUniform4ui;
1064 PFNGLUNIFORM1UIVPROC glUniform1uiv;
1065 PFNGLUNIFORM2UIVPROC glUniform2uiv;
1066 PFNGLUNIFORM3UIVPROC glUniform3uiv;
1067 PFNGLUNIFORM4UIVPROC glUniform4uiv;
1068 PFNGLTEXPARAMETERIIVPROC glTexParameterIiv;
1069 PFNGLTEXPARAMETERIUIVPROC glTexParameterIuiv;
1070 PFNGLGETTEXPARAMETERIIVPROC glGetTexParameterIiv;
1071 PFNGLGETTEXPARAMETERIUIVPROC glGetTexParameterIuiv;
1072 PFNGLCLEARBUFFERIVPROC glClearBufferiv;
1073 PFNGLCLEARBUFFERUIVPROC glClearBufferuiv;
1074 PFNGLCLEARBUFFERFVPROC glClearBufferfv;
1075 PFNGLCLEARBUFFERFIPROC glClearBufferfi;
1076 PFNGLGETSTRINGIPROC glGetStringi;
1078 public: //! @name GL_ARB_uniform_buffer_object (added to OpenGL 3.1 core)
1080 PFNGLGETUNIFORMINDICESPROC glGetUniformIndices;
1081 PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv;
1082 PFNGLGETACTIVEUNIFORMNAMEPROC glGetActiveUniformName;
1083 PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex;
1084 PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv;
1085 PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glGetActiveUniformBlockName;
1086 PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding;
1088 public: //! @name GL_ARB_copy_buffer (added to OpenGL 3.1 core)
1090 PFNGLCOPYBUFFERSUBDATAPROC glCopyBufferSubData;
1092 public: //! @name OpenGL 3.1
1094 PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced;
1095 PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced;
1096 PFNGLTEXBUFFERPROC glTexBuffer;
1097 PFNGLPRIMITIVERESTARTINDEXPROC glPrimitiveRestartIndex;
1099 public: //! @name GL_ARB_draw_elements_base_vertex (added to OpenGL 3.2 core)
1101 PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex;
1102 PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glDrawRangeElementsBaseVertex;
1103 PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex;
1104 PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glMultiDrawElementsBaseVertex;
1106 public: //! @name GL_ARB_provoking_vertex (added to OpenGL 3.2 core)
1108 PFNGLPROVOKINGVERTEXPROC glProvokingVertex;
1110 public: //! @name GL_ARB_sync (added to OpenGL 3.2 core)
1112 PFNGLFENCESYNCPROC glFenceSync;
1113 PFNGLISSYNCPROC glIsSync;
1114 PFNGLDELETESYNCPROC glDeleteSync;
1115 PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
1116 PFNGLWAITSYNCPROC glWaitSync;
1117 PFNGLGETINTEGER64VPROC glGetInteger64v;
1118 PFNGLGETSYNCIVPROC glGetSynciv;
1120 public: //! @name GL_ARB_texture_multisample (added to OpenGL 3.2 core)
1122 PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample;
1123 PFNGLTEXIMAGE3DMULTISAMPLEPROC glTexImage3DMultisample;
1124 PFNGLGETMULTISAMPLEFVPROC glGetMultisamplefv;
1125 PFNGLSAMPLEMASKIPROC glSampleMaski;
1127 public: //! @name OpenGL 3.2
1129 PFNGLGETINTEGER64I_VPROC glGetInteger64i_v;
1130 PFNGLGETBUFFERPARAMETERI64VPROC glGetBufferParameteri64v;
1131 PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture;
1133 public: //! @name GL_ARB_blend_func_extended (added to OpenGL 3.3 core)
1135 PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glBindFragDataLocationIndexed;
1136 PFNGLGETFRAGDATAINDEXPROC glGetFragDataIndex;
1138 public: //! @name GL_ARB_sampler_objects (added to OpenGL 3.3 core)
1140 PFNGLGENSAMPLERSPROC glGenSamplers;
1141 PFNGLDELETESAMPLERSPROC glDeleteSamplers;
1142 PFNGLISSAMPLERPROC glIsSampler;
1143 PFNGLBINDSAMPLERPROC glBindSampler;
1144 PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri;
1145 PFNGLSAMPLERPARAMETERIVPROC glSamplerParameteriv;
1146 PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf;
1147 PFNGLSAMPLERPARAMETERFVPROC glSamplerParameterfv;
1148 PFNGLSAMPLERPARAMETERIIVPROC glSamplerParameterIiv;
1149 PFNGLSAMPLERPARAMETERIUIVPROC glSamplerParameterIuiv;
1150 PFNGLGETSAMPLERPARAMETERIVPROC glGetSamplerParameteriv;
1151 PFNGLGETSAMPLERPARAMETERIIVPROC glGetSamplerParameterIiv;
1152 PFNGLGETSAMPLERPARAMETERFVPROC glGetSamplerParameterfv;
1153 PFNGLGETSAMPLERPARAMETERIUIVPROC glGetSamplerParameterIuiv;
1155 public: //! @name GL_ARB_timer_query (added to OpenGL 3.3 core)
1157 PFNGLQUERYCOUNTERPROC glQueryCounter;
1158 PFNGLGETQUERYOBJECTI64VPROC glGetQueryObjecti64v;
1159 PFNGLGETQUERYOBJECTUI64VPROC glGetQueryObjectui64v;
1161 public: //! @name GL_ARB_vertex_type_2_10_10_10_rev (added to OpenGL 3.3 core)
1163 PFNGLVERTEXP2UIPROC glVertexP2ui;
1164 PFNGLVERTEXP2UIVPROC glVertexP2uiv;
1165 PFNGLVERTEXP3UIPROC glVertexP3ui;
1166 PFNGLVERTEXP3UIVPROC glVertexP3uiv;
1167 PFNGLVERTEXP4UIPROC glVertexP4ui;
1168 PFNGLVERTEXP4UIVPROC glVertexP4uiv;
1169 PFNGLTEXCOORDP1UIPROC glTexCoordP1ui;
1170 PFNGLTEXCOORDP1UIVPROC glTexCoordP1uiv;
1171 PFNGLTEXCOORDP2UIPROC glTexCoordP2ui;
1172 PFNGLTEXCOORDP2UIVPROC glTexCoordP2uiv;
1173 PFNGLTEXCOORDP3UIPROC glTexCoordP3ui;
1174 PFNGLTEXCOORDP3UIVPROC glTexCoordP3uiv;
1175 PFNGLTEXCOORDP4UIPROC glTexCoordP4ui;
1176 PFNGLTEXCOORDP4UIVPROC glTexCoordP4uiv;
1177 PFNGLMULTITEXCOORDP1UIPROC glMultiTexCoordP1ui;
1178 PFNGLMULTITEXCOORDP1UIVPROC glMultiTexCoordP1uiv;
1179 PFNGLMULTITEXCOORDP2UIPROC glMultiTexCoordP2ui;
1180 PFNGLMULTITEXCOORDP2UIVPROC glMultiTexCoordP2uiv;
1181 PFNGLMULTITEXCOORDP3UIPROC glMultiTexCoordP3ui;
1182 PFNGLMULTITEXCOORDP3UIVPROC glMultiTexCoordP3uiv;
1183 PFNGLMULTITEXCOORDP4UIPROC glMultiTexCoordP4ui;
1184 PFNGLMULTITEXCOORDP4UIVPROC glMultiTexCoordP4uiv;
1185 PFNGLNORMALP3UIPROC glNormalP3ui;
1186 PFNGLNORMALP3UIVPROC glNormalP3uiv;
1187 PFNGLCOLORP3UIPROC glColorP3ui;
1188 PFNGLCOLORP3UIVPROC glColorP3uiv;
1189 PFNGLCOLORP4UIPROC glColorP4ui;
1190 PFNGLCOLORP4UIVPROC glColorP4uiv;
1191 PFNGLSECONDARYCOLORP3UIPROC glSecondaryColorP3ui;
1192 PFNGLSECONDARYCOLORP3UIVPROC glSecondaryColorP3uiv;
1193 PFNGLVERTEXATTRIBP1UIPROC glVertexAttribP1ui;
1194 PFNGLVERTEXATTRIBP1UIVPROC glVertexAttribP1uiv;
1195 PFNGLVERTEXATTRIBP2UIPROC glVertexAttribP2ui;
1196 PFNGLVERTEXATTRIBP2UIVPROC glVertexAttribP2uiv;
1197 PFNGLVERTEXATTRIBP3UIPROC glVertexAttribP3ui;
1198 PFNGLVERTEXATTRIBP3UIVPROC glVertexAttribP3uiv;
1199 PFNGLVERTEXATTRIBP4UIPROC glVertexAttribP4ui;
1200 PFNGLVERTEXATTRIBP4UIVPROC glVertexAttribP4uiv;
1202 public: //! @name OpenGL 3.3
1204 PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor;
1206 public: //! @name GL_ARB_draw_indirect (added to OpenGL 4.0 core)
1208 PFNGLDRAWARRAYSINDIRECTPROC glDrawArraysIndirect;
1209 PFNGLDRAWELEMENTSINDIRECTPROC glDrawElementsIndirect;
1211 public: //! @name GL_ARB_gpu_shader_fp64 (added to OpenGL 4.0 core)
1213 PFNGLUNIFORM1DPROC glUniform1d;
1214 PFNGLUNIFORM2DPROC glUniform2d;
1215 PFNGLUNIFORM3DPROC glUniform3d;
1216 PFNGLUNIFORM4DPROC glUniform4d;
1217 PFNGLUNIFORM1DVPROC glUniform1dv;
1218 PFNGLUNIFORM2DVPROC glUniform2dv;
1219 PFNGLUNIFORM3DVPROC glUniform3dv;
1220 PFNGLUNIFORM4DVPROC glUniform4dv;
1221 PFNGLUNIFORMMATRIX2DVPROC glUniformMatrix2dv;
1222 PFNGLUNIFORMMATRIX3DVPROC glUniformMatrix3dv;
1223 PFNGLUNIFORMMATRIX4DVPROC glUniformMatrix4dv;
1224 PFNGLUNIFORMMATRIX2X3DVPROC glUniformMatrix2x3dv;
1225 PFNGLUNIFORMMATRIX2X4DVPROC glUniformMatrix2x4dv;
1226 PFNGLUNIFORMMATRIX3X2DVPROC glUniformMatrix3x2dv;
1227 PFNGLUNIFORMMATRIX3X4DVPROC glUniformMatrix3x4dv;
1228 PFNGLUNIFORMMATRIX4X2DVPROC glUniformMatrix4x2dv;
1229 PFNGLUNIFORMMATRIX4X3DVPROC glUniformMatrix4x3dv;
1230 PFNGLGETUNIFORMDVPROC glGetUniformdv;
1232 public: //! @name GL_ARB_shader_subroutine (added to OpenGL 4.0 core)
1234 PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glGetSubroutineUniformLocation;
1235 PFNGLGETSUBROUTINEINDEXPROC glGetSubroutineIndex;
1236 PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glGetActiveSubroutineUniformiv;
1237 PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glGetActiveSubroutineUniformName;
1238 PFNGLGETACTIVESUBROUTINENAMEPROC glGetActiveSubroutineName;
1239 PFNGLUNIFORMSUBROUTINESUIVPROC glUniformSubroutinesuiv;
1240 PFNGLGETUNIFORMSUBROUTINEUIVPROC glGetUniformSubroutineuiv;
1241 PFNGLGETPROGRAMSTAGEIVPROC glGetProgramStageiv;
1243 public: //! @name GL_ARB_tessellation_shader (added to OpenGL 4.0 core)
1245 PFNGLPATCHPARAMETERIPROC glPatchParameteri;
1246 PFNGLPATCHPARAMETERFVPROC glPatchParameterfv;
1248 public: //! @name GL_ARB_transform_feedback2 (added to OpenGL 4.0 core)
1250 PFNGLBINDTRANSFORMFEEDBACKPROC glBindTransformFeedback;
1251 PFNGLDELETETRANSFORMFEEDBACKSPROC glDeleteTransformFeedbacks;
1252 PFNGLGENTRANSFORMFEEDBACKSPROC glGenTransformFeedbacks;
1253 PFNGLISTRANSFORMFEEDBACKPROC glIsTransformFeedback;
1254 PFNGLPAUSETRANSFORMFEEDBACKPROC glPauseTransformFeedback;
1255 PFNGLRESUMETRANSFORMFEEDBACKPROC glResumeTransformFeedback;
1256 PFNGLDRAWTRANSFORMFEEDBACKPROC glDrawTransformFeedback;
1258 public: //! @name GL_ARB_transform_feedback3 (added to OpenGL 4.0 core)
1260 PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glDrawTransformFeedbackStream;
1261 PFNGLBEGINQUERYINDEXEDPROC glBeginQueryIndexed;
1262 PFNGLENDQUERYINDEXEDPROC glEndQueryIndexed;
1263 PFNGLGETQUERYINDEXEDIVPROC glGetQueryIndexediv;
1265 public: //! @name OpenGL 4.0
1267 PFNGLMINSAMPLESHADINGPROC glMinSampleShading;
1268 PFNGLBLENDEQUATIONIPROC glBlendEquationi;
1269 PFNGLBLENDEQUATIONSEPARATEIPROC glBlendEquationSeparatei;
1270 PFNGLBLENDFUNCIPROC glBlendFunci;
1271 PFNGLBLENDFUNCSEPARATEIPROC glBlendFuncSeparatei;
1273 public: //! @name GL_ARB_ES2_compatibility (added to OpenGL 4.1 core)
1275 PFNGLRELEASESHADERCOMPILERPROC glReleaseShaderCompiler;
1276 PFNGLSHADERBINARYPROC glShaderBinary;
1277 PFNGLGETSHADERPRECISIONFORMATPROC glGetShaderPrecisionFormat;
1278 PFNGLDEPTHRANGEFPROC glDepthRangef;
1279 PFNGLCLEARDEPTHFPROC glClearDepthf;
1281 public: //! @name GL_ARB_get_program_binary (added to OpenGL 4.1 core)
1283 PFNGLGETPROGRAMBINARYPROC glGetProgramBinary;
1284 PFNGLPROGRAMBINARYPROC glProgramBinary;
1285 PFNGLPROGRAMPARAMETERIPROC glProgramParameteri;
1287 public: //! @name GL_ARB_separate_shader_objects (added to OpenGL 4.1 core)
1289 PFNGLUSEPROGRAMSTAGESPROC glUseProgramStages;
1290 PFNGLACTIVESHADERPROGRAMPROC glActiveShaderProgram;
1291 PFNGLCREATESHADERPROGRAMVPROC glCreateShaderProgramv;
1292 PFNGLBINDPROGRAMPIPELINEPROC glBindProgramPipeline;
1293 PFNGLDELETEPROGRAMPIPELINESPROC glDeleteProgramPipelines;
1294 PFNGLGENPROGRAMPIPELINESPROC glGenProgramPipelines;
1295 PFNGLISPROGRAMPIPELINEPROC glIsProgramPipeline;
1296 PFNGLGETPROGRAMPIPELINEIVPROC glGetProgramPipelineiv;
1297 PFNGLPROGRAMUNIFORM1IPROC glProgramUniform1i;
1298 PFNGLPROGRAMUNIFORM1IVPROC glProgramUniform1iv;
1299 PFNGLPROGRAMUNIFORM1FPROC glProgramUniform1f;
1300 PFNGLPROGRAMUNIFORM1FVPROC glProgramUniform1fv;
1301 PFNGLPROGRAMUNIFORM1DPROC glProgramUniform1d;
1302 PFNGLPROGRAMUNIFORM1DVPROC glProgramUniform1dv;
1303 PFNGLPROGRAMUNIFORM1UIPROC glProgramUniform1ui;
1304 PFNGLPROGRAMUNIFORM1UIVPROC glProgramUniform1uiv;
1305 PFNGLPROGRAMUNIFORM2IPROC glProgramUniform2i;
1306 PFNGLPROGRAMUNIFORM2IVPROC glProgramUniform2iv;
1307 PFNGLPROGRAMUNIFORM2FPROC glProgramUniform2f;
1308 PFNGLPROGRAMUNIFORM2FVPROC glProgramUniform2fv;
1309 PFNGLPROGRAMUNIFORM2DPROC glProgramUniform2d;
1310 PFNGLPROGRAMUNIFORM2DVPROC glProgramUniform2dv;
1311 PFNGLPROGRAMUNIFORM2UIPROC glProgramUniform2ui;
1312 PFNGLPROGRAMUNIFORM2UIVPROC glProgramUniform2uiv;
1313 PFNGLPROGRAMUNIFORM3IPROC glProgramUniform3i;
1314 PFNGLPROGRAMUNIFORM3IVPROC glProgramUniform3iv;
1315 PFNGLPROGRAMUNIFORM3FPROC glProgramUniform3f;
1316 PFNGLPROGRAMUNIFORM3FVPROC glProgramUniform3fv;
1317 PFNGLPROGRAMUNIFORM3DPROC glProgramUniform3d;
1318 PFNGLPROGRAMUNIFORM3DVPROC glProgramUniform3dv;
1319 PFNGLPROGRAMUNIFORM3UIPROC glProgramUniform3ui;
1320 PFNGLPROGRAMUNIFORM3UIVPROC glProgramUniform3uiv;
1321 PFNGLPROGRAMUNIFORM4IPROC glProgramUniform4i;
1322 PFNGLPROGRAMUNIFORM4IVPROC glProgramUniform4iv;
1323 PFNGLPROGRAMUNIFORM4FPROC glProgramUniform4f;
1324 PFNGLPROGRAMUNIFORM4FVPROC glProgramUniform4fv;
1325 PFNGLPROGRAMUNIFORM4DPROC glProgramUniform4d;
1326 PFNGLPROGRAMUNIFORM4DVPROC glProgramUniform4dv;
1327 PFNGLPROGRAMUNIFORM4UIPROC glProgramUniform4ui;
1328 PFNGLPROGRAMUNIFORM4UIVPROC glProgramUniform4uiv;
1329 PFNGLPROGRAMUNIFORMMATRIX2FVPROC glProgramUniformMatrix2fv;
1330 PFNGLPROGRAMUNIFORMMATRIX3FVPROC glProgramUniformMatrix3fv;
1331 PFNGLPROGRAMUNIFORMMATRIX4FVPROC glProgramUniformMatrix4fv;
1332 PFNGLPROGRAMUNIFORMMATRIX2DVPROC glProgramUniformMatrix2dv;
1333 PFNGLPROGRAMUNIFORMMATRIX3DVPROC glProgramUniformMatrix3dv;
1334 PFNGLPROGRAMUNIFORMMATRIX4DVPROC glProgramUniformMatrix4dv;
1335 PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glProgramUniformMatrix2x3fv;
1336 PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glProgramUniformMatrix3x2fv;
1337 PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glProgramUniformMatrix2x4fv;
1338 PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glProgramUniformMatrix4x2fv;
1339 PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glProgramUniformMatrix3x4fv;
1340 PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glProgramUniformMatrix4x3fv;
1341 PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glProgramUniformMatrix2x3dv;
1342 PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glProgramUniformMatrix3x2dv;
1343 PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glProgramUniformMatrix2x4dv;
1344 PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glProgramUniformMatrix4x2dv;
1345 PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glProgramUniformMatrix3x4dv;
1346 PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glProgramUniformMatrix4x3dv;
1347 PFNGLVALIDATEPROGRAMPIPELINEPROC glValidateProgramPipeline;
1348 PFNGLGETPROGRAMPIPELINEINFOLOGPROC glGetProgramPipelineInfoLog;
1350 public: //! @name GL_ARB_vertex_attrib_64bit (added to OpenGL 4.1 core)
1352 PFNGLVERTEXATTRIBL1DPROC glVertexAttribL1d;
1353 PFNGLVERTEXATTRIBL2DPROC glVertexAttribL2d;
1354 PFNGLVERTEXATTRIBL3DPROC glVertexAttribL3d;
1355 PFNGLVERTEXATTRIBL4DPROC glVertexAttribL4d;
1356 PFNGLVERTEXATTRIBL1DVPROC glVertexAttribL1dv;
1357 PFNGLVERTEXATTRIBL2DVPROC glVertexAttribL2dv;
1358 PFNGLVERTEXATTRIBL3DVPROC glVertexAttribL3dv;
1359 PFNGLVERTEXATTRIBL4DVPROC glVertexAttribL4dv;
1360 PFNGLVERTEXATTRIBLPOINTERPROC glVertexAttribLPointer;
1361 PFNGLGETVERTEXATTRIBLDVPROC glGetVertexAttribLdv;
1363 public: //! @name GL_ARB_viewport_array (added to OpenGL 4.1 core)
1365 PFNGLVIEWPORTARRAYVPROC glViewportArrayv;
1366 PFNGLVIEWPORTINDEXEDFPROC glViewportIndexedf;
1367 PFNGLVIEWPORTINDEXEDFVPROC glViewportIndexedfv;
1368 PFNGLSCISSORARRAYVPROC glScissorArrayv;
1369 PFNGLSCISSORINDEXEDPROC glScissorIndexed;
1370 PFNGLSCISSORINDEXEDVPROC glScissorIndexedv;
1371 PFNGLDEPTHRANGEARRAYVPROC glDepthRangeArrayv;
1372 PFNGLDEPTHRANGEINDEXEDPROC glDepthRangeIndexed;
1373 PFNGLGETFLOATI_VPROC glGetFloati_v;
1374 PFNGLGETDOUBLEI_VPROC glGetDoublei_v;
1376 public: //! @name OpenGL 4.1
1380 public: //! @name GL_ARB_base_instance (added to OpenGL 4.2 core)
1382 PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glDrawArraysInstancedBaseInstance;
1383 PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glDrawElementsInstancedBaseInstance;
1384 PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glDrawElementsInstancedBaseVertexBaseInstance;
1386 public: //! @name GL_ARB_transform_feedback_instanced (added to OpenGL 4.2 core)
1388 PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glDrawTransformFeedbackInstanced;
1389 PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glDrawTransformFeedbackStreamInstanced;
1391 public: //! @name GL_ARB_internalformat_query (added to OpenGL 4.2 core)
1393 PFNGLGETINTERNALFORMATIVPROC glGetInternalformativ;
1395 public: //! @name GL_ARB_shader_atomic_counters (added to OpenGL 4.2 core)
1397 PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glGetActiveAtomicCounterBufferiv;
1399 public: //! @name GL_ARB_shader_image_load_store (added to OpenGL 4.2 core)
1401 PFNGLBINDIMAGETEXTUREPROC glBindImageTexture;
1402 PFNGLMEMORYBARRIERPROC glMemoryBarrier;
1404 public: //! @name GL_ARB_texture_storage (added to OpenGL 4.2 core)
1406 PFNGLTEXSTORAGE1DPROC glTexStorage1D;
1407 PFNGLTEXSTORAGE2DPROC glTexStorage2D;
1408 PFNGLTEXSTORAGE3DPROC glTexStorage3D;
1410 public: //! @name OpenGL 4.2
1412 public: //! @name OpenGL 4.3
1414 PFNGLCLEARBUFFERDATAPROC glClearBufferData;
1415 PFNGLCLEARBUFFERSUBDATAPROC glClearBufferSubData;
1416 PFNGLDISPATCHCOMPUTEPROC glDispatchCompute;
1417 PFNGLDISPATCHCOMPUTEINDIRECTPROC glDispatchComputeIndirect;
1418 PFNGLCOPYIMAGESUBDATAPROC glCopyImageSubData;
1419 PFNGLFRAMEBUFFERPARAMETERIPROC glFramebufferParameteri;
1420 PFNGLGETFRAMEBUFFERPARAMETERIVPROC glGetFramebufferParameteriv;
1421 PFNGLGETINTERNALFORMATI64VPROC glGetInternalformati64v;
1422 PFNGLINVALIDATETEXSUBIMAGEPROC glInvalidateTexSubImage;
1423 PFNGLINVALIDATETEXIMAGEPROC glInvalidateTexImage;
1424 PFNGLINVALIDATEBUFFERSUBDATAPROC glInvalidateBufferSubData;
1425 PFNGLINVALIDATEBUFFERDATAPROC glInvalidateBufferData;
1426 PFNGLINVALIDATEFRAMEBUFFERPROC glInvalidateFramebuffer;
1427 PFNGLINVALIDATESUBFRAMEBUFFERPROC glInvalidateSubFramebuffer;
1428 PFNGLMULTIDRAWARRAYSINDIRECTPROC glMultiDrawArraysIndirect;
1429 PFNGLMULTIDRAWELEMENTSINDIRECTPROC glMultiDrawElementsIndirect;
1430 PFNGLGETPROGRAMINTERFACEIVPROC glGetProgramInterfaceiv;
1431 PFNGLGETPROGRAMRESOURCEINDEXPROC glGetProgramResourceIndex;
1432 PFNGLGETPROGRAMRESOURCENAMEPROC glGetProgramResourceName;
1433 PFNGLGETPROGRAMRESOURCEIVPROC glGetProgramResourceiv;
1434 PFNGLGETPROGRAMRESOURCELOCATIONPROC glGetProgramResourceLocation;
1435 PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glGetProgramResourceLocationIndex;
1436 PFNGLSHADERSTORAGEBLOCKBINDINGPROC glShaderStorageBlockBinding;
1437 PFNGLTEXBUFFERRANGEPROC glTexBufferRange;
1438 PFNGLTEXSTORAGE2DMULTISAMPLEPROC glTexStorage2DMultisample;
1439 PFNGLTEXSTORAGE3DMULTISAMPLEPROC glTexStorage3DMultisample;
1440 PFNGLTEXTUREVIEWPROC glTextureView;
1441 PFNGLBINDVERTEXBUFFERPROC glBindVertexBuffer;
1442 PFNGLVERTEXATTRIBFORMATPROC glVertexAttribFormat;
1443 PFNGLVERTEXATTRIBIFORMATPROC glVertexAttribIFormat;
1444 PFNGLVERTEXATTRIBLFORMATPROC glVertexAttribLFormat;
1445 PFNGLVERTEXATTRIBBINDINGPROC glVertexAttribBinding;
1446 PFNGLVERTEXBINDINGDIVISORPROC glVertexBindingDivisor;
1447 PFNGLDEBUGMESSAGECONTROLPROC glDebugMessageControl;
1448 PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert;
1449 PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback;
1450 PFNGLGETDEBUGMESSAGELOGPROC glGetDebugMessageLog;
1451 PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup;
1452 PFNGLPOPDEBUGGROUPPROC glPopDebugGroup;
1453 PFNGLOBJECTLABELPROC glObjectLabel;
1454 PFNGLGETOBJECTLABELPROC glGetObjectLabel;
1455 PFNGLOBJECTPTRLABELPROC glObjectPtrLabel;
1456 PFNGLGETOBJECTPTRLABELPROC glGetObjectPtrLabel;
1458 public: //! @name OpenGL 4.4
1460 PFNGLBUFFERSTORAGEPROC glBufferStorage;
1461 PFNGLCLEARTEXIMAGEPROC glClearTexImage;
1462 PFNGLCLEARTEXSUBIMAGEPROC glClearTexSubImage;
1463 PFNGLBINDBUFFERSBASEPROC glBindBuffersBase;
1464 PFNGLBINDBUFFERSRANGEPROC glBindBuffersRange;
1465 PFNGLBINDTEXTURESPROC glBindTextures;
1466 PFNGLBINDSAMPLERSPROC glBindSamplers;
1467 PFNGLBINDIMAGETEXTURESPROC glBindImageTextures;
1468 PFNGLBINDVERTEXBUFFERSPROC glBindVertexBuffers;
1470 public: //! @name GL_EXT_geometry_shader4
1472 PFNGLPROGRAMPARAMETERIEXTPROC glProgramParameteriEXT;
1474 public: //! @name GL_ARB_bindless_texture
1476 PFNGLGETTEXTUREHANDLEARBPROC glGetTextureHandleARB;
1477 PFNGLGETTEXTURESAMPLERHANDLEARBPROC glGetTextureSamplerHandleARB;
1478 PFNGLMAKETEXTUREHANDLERESIDENTARBPROC glMakeTextureHandleResidentARB;
1479 PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC glMakeTextureHandleNonResidentARB;
1480 PFNGLGETIMAGEHANDLEARBPROC glGetImageHandleARB;
1481 PFNGLMAKEIMAGEHANDLERESIDENTARBPROC glMakeImageHandleResidentARB;
1482 PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC glMakeImageHandleNonResidentARB;
1483 PFNGLUNIFORMHANDLEUI64ARBPROC glUniformHandleui64ARB;
1484 PFNGLUNIFORMHANDLEUI64VARBPROC glUniformHandleui64vARB;
1485 PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC glProgramUniformHandleui64ARB;
1486 PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC glProgramUniformHandleui64vARB;
1487 PFNGLISTEXTUREHANDLERESIDENTARBPROC glIsTextureHandleResidentARB;
1488 PFNGLISIMAGEHANDLERESIDENTARBPROC glIsImageHandleResidentARB;
1489 PFNGLVERTEXATTRIBL1UI64ARBPROC glVertexAttribL1ui64ARB;
1490 PFNGLVERTEXATTRIBL1UI64VARBPROC glVertexAttribL1ui64vARB;
1491 PFNGLGETVERTEXATTRIBLUI64VARBPROC glGetVertexAttribLui64vARB;
1494 public: //! @name wgl extensions
1496 typedef const char* (WINAPI *wglGetExtensionsStringARB_t)(HDC theDeviceContext);
1497 wglGetExtensionsStringARB_t wglGetExtensionsStringARB;
1499 typedef BOOL (WINAPI *wglSwapIntervalEXT_t)(int theInterval);
1500 wglSwapIntervalEXT_t wglSwapIntervalEXT;
1502 // WGL_ARB_pixel_format
1504 #ifndef WGL_NUMBER_PIXEL_FORMATS_ARB
1505 #define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000
1506 #define WGL_DRAW_TO_WINDOW_ARB 0x2001
1507 #define WGL_DRAW_TO_BITMAP_ARB 0x2002
1508 #define WGL_ACCELERATION_ARB 0x2003
1509 #define WGL_NEED_PALETTE_ARB 0x2004
1510 #define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005
1511 #define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006
1512 #define WGL_SWAP_METHOD_ARB 0x2007
1513 #define WGL_NUMBER_OVERLAYS_ARB 0x2008
1514 #define WGL_NUMBER_UNDERLAYS_ARB 0x2009
1515 #define WGL_TRANSPARENT_ARB 0x200A
1516 #define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037
1517 #define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038
1518 #define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039
1519 #define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A
1520 #define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B
1521 #define WGL_SHARE_DEPTH_ARB 0x200C
1522 #define WGL_SHARE_STENCIL_ARB 0x200D
1523 #define WGL_SHARE_ACCUM_ARB 0x200E
1524 #define WGL_SUPPORT_GDI_ARB 0x200F
1525 #define WGL_SUPPORT_OPENGL_ARB 0x2010
1526 #define WGL_DOUBLE_BUFFER_ARB 0x2011
1527 #define WGL_STEREO_ARB 0x2012
1528 #define WGL_PIXEL_TYPE_ARB 0x2013
1529 #define WGL_COLOR_BITS_ARB 0x2014
1530 #define WGL_RED_BITS_ARB 0x2015
1531 #define WGL_RED_SHIFT_ARB 0x2016
1532 #define WGL_GREEN_BITS_ARB 0x2017
1533 #define WGL_GREEN_SHIFT_ARB 0x2018
1534 #define WGL_BLUE_BITS_ARB 0x2019
1535 #define WGL_BLUE_SHIFT_ARB 0x201A
1536 #define WGL_ALPHA_BITS_ARB 0x201B
1537 #define WGL_ALPHA_SHIFT_ARB 0x201C
1538 #define WGL_ACCUM_BITS_ARB 0x201D
1539 #define WGL_ACCUM_RED_BITS_ARB 0x201E
1540 #define WGL_ACCUM_GREEN_BITS_ARB 0x201F
1541 #define WGL_ACCUM_BLUE_BITS_ARB 0x2020
1542 #define WGL_ACCUM_ALPHA_BITS_ARB 0x2021
1543 #define WGL_DEPTH_BITS_ARB 0x2022
1544 #define WGL_STENCIL_BITS_ARB 0x2023
1545 #define WGL_AUX_BUFFERS_ARB 0x2024
1547 #define WGL_NO_ACCELERATION_ARB 0x2025
1548 #define WGL_GENERIC_ACCELERATION_ARB 0x2026
1549 #define WGL_FULL_ACCELERATION_ARB 0x2027
1551 #define WGL_SWAP_EXCHANGE_ARB 0x2028
1552 #define WGL_SWAP_COPY_ARB 0x2029
1553 #define WGL_SWAP_UNDEFINED_ARB 0x202A
1555 #define WGL_TYPE_RGBA_ARB 0x202B
1556 #define WGL_TYPE_COLORINDEX_ARB 0x202C
1558 #endif // WGL_NUMBER_PIXEL_FORMATS_ARB
1560 // WGL_ARB_multisample
1561 #ifndef WGL_SAMPLE_BUFFERS_ARB
1562 #define WGL_SAMPLE_BUFFERS_ARB 0x2041
1563 #define WGL_SAMPLES_ARB 0x2042
1566 // WGL_ARB_create_context_robustness
1567 #ifndef WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB
1568 #define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
1569 #define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
1570 #define WGL_NO_RESET_NOTIFICATION_ARB 0x8261
1571 #define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252
1574 typedef BOOL (WINAPI *wglChoosePixelFormatARB_t)
1576 const int* theIntAttribs,
1577 const float* theFloatAttribs,
1578 unsigned int theMaxFormats,
1580 unsigned int* theNumFormatsOut);
1581 wglChoosePixelFormatARB_t wglChoosePixelFormatARB;
1583 // WGL_ARB_create_context_profile
1585 #ifndef WGL_CONTEXT_MAJOR_VERSION_ARB
1586 #define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091
1587 #define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092
1588 #define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093
1589 #define WGL_CONTEXT_FLAGS_ARB 0x2094
1590 #define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126
1592 // WGL_CONTEXT_FLAGS bits
1593 #define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001
1594 #define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002
1596 // WGL_CONTEXT_PROFILE_MASK_ARB bits
1597 #define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
1598 #define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
1599 #endif // WGL_CONTEXT_MAJOR_VERSION_ARB
1601 typedef HGLRC (WINAPI *wglCreateContextAttribsARB_t)(HDC theDevCtx,
1602 HGLRC theShareContext,
1603 const int* theAttribs);
1604 wglCreateContextAttribsARB_t wglCreateContextAttribsARB;
1606 // WGL_NV_DX_interop
1608 typedef BOOL (WINAPI *wglDXSetResourceShareHandleNV_t)(void* theObjectD3d, HANDLE theShareHandle);
1609 typedef HANDLE (WINAPI *wglDXOpenDeviceNV_t )(void* theDeviceD3d);
1610 typedef BOOL (WINAPI *wglDXCloseDeviceNV_t )(HANDLE theDeviceIOP);
1611 typedef HANDLE (WINAPI *wglDXRegisterObjectNV_t )(HANDLE theDeviceIOP,
1616 typedef BOOL (WINAPI *wglDXUnregisterObjectNV_t)(HANDLE theDeviceIOP,
1618 typedef BOOL (WINAPI *wglDXObjectAccessNV_t )(HANDLE theObject,
1620 typedef BOOL (WINAPI *wglDXLockObjectsNV_t )(HANDLE theDeviceIOP,
1622 HANDLE* theObjects);
1623 typedef BOOL (WINAPI *wglDXUnlockObjectsNV_t )(HANDLE theDeviceIOP,
1625 HANDLE* theObjects);
1627 wglDXSetResourceShareHandleNV_t wglDXSetResourceShareHandleNV;
1628 wglDXOpenDeviceNV_t wglDXOpenDeviceNV;
1629 wglDXCloseDeviceNV_t wglDXCloseDeviceNV;
1630 wglDXRegisterObjectNV_t wglDXRegisterObjectNV;
1631 wglDXUnregisterObjectNV_t wglDXUnregisterObjectNV;
1632 wglDXObjectAccessNV_t wglDXObjectAccessNV;
1633 wglDXLockObjectsNV_t wglDXLockObjectsNV;
1634 wglDXUnlockObjectsNV_t wglDXUnlockObjectsNV;
1636 #ifndef WGL_ACCESS_READ_WRITE_NV
1637 #define WGL_ACCESS_READ_ONLY_NV 0x0000
1638 #define WGL_ACCESS_READ_WRITE_NV 0x0001
1639 #define WGL_ACCESS_WRITE_DISCARD_NV 0x0002
1642 #elif defined(__APPLE__)
1643 public: //! @name CGL extensions
1646 public: //! @name glX extensions
1648 // GLX_EXT_swap_control
1649 //typedef int (*glXSwapIntervalEXT_t)(Display* theDisplay, GLXDrawable theDrawable, int theInterval);
1650 typedef int (*glXSwapIntervalEXT_t)();
1651 glXSwapIntervalEXT_t glXSwapIntervalEXT;
1653 typedef int (*glXSwapIntervalSGI_t)(int theInterval);
1654 glXSwapIntervalSGI_t glXSwapIntervalSGI;
1656 // GLX_MESA_query_renderer
1657 #ifndef GLX_RENDERER_VENDOR_ID_MESA
1658 // for glXQueryRendererIntegerMESA() and glXQueryCurrentRendererIntegerMESA()
1659 #define GLX_RENDERER_VENDOR_ID_MESA 0x8183
1660 #define GLX_RENDERER_DEVICE_ID_MESA 0x8184
1661 #define GLX_RENDERER_VERSION_MESA 0x8185
1662 #define GLX_RENDERER_ACCELERATED_MESA 0x8186
1663 #define GLX_RENDERER_VIDEO_MEMORY_MESA 0x8187
1664 #define GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA 0x8188
1665 #define GLX_RENDERER_PREFERRED_PROFILE_MESA 0x8189
1666 #define GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA 0x818A
1667 #define GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA 0x818B
1668 #define GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA 0x818C
1669 #define GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA 0x818D
1671 #define GLX_RENDERER_ID_MESA 0x818E
1672 #endif // GLX_RENDERER_VENDOR_ID_MESA
1674 typedef Bool (*glXQueryRendererIntegerMESA_t)(Display* theDisplay, int theScreen,
1675 int theRenderer, int theAttribute,
1676 unsigned int* theValue);
1677 typedef Bool (*glXQueryCurrentRendererIntegerMESA_t)(int theAttribute, unsigned int* theValue);
1678 typedef const char* (*glXQueryRendererStringMESA_t)(Display* theDisplay, int theScreen,
1679 int theRenderer, int theAttribute);
1680 typedef const char* (*glXQueryCurrentRendererStringMESA_t)(int theAttribute);
1682 glXQueryRendererIntegerMESA_t glXQueryRendererIntegerMESA;
1683 glXQueryCurrentRendererIntegerMESA_t glXQueryCurrentRendererIntegerMESA;
1684 glXQueryRendererStringMESA_t glXQueryRendererStringMESA;
1685 glXQueryCurrentRendererStringMESA_t glXQueryCurrentRendererStringMESA;
1688 #endif // OpenGL ES vs. desktop
1692 #endif // _OpenGl_GlFunctions_Header