summaryrefslogtreecommitdiff
path: root/packages/opengl/src
diff options
context:
space:
mode:
authormarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-06-17 12:34:05 +0000
committermarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-06-17 12:34:05 +0000
commitaa27aa8a5aed495528a4d1ab9e5842512812c2b8 (patch)
tree5964f81bb438085b4c92bdfeda2a48f6e105d22b /packages/opengl/src
parentd56e5c188392359d71d008894ef59b66bb7aa6f4 (diff)
downloadfpc-aa27aa8a5aed495528a4d1ab9e5842512812c2b8.tar.gz
* patch from Dmitry for bug 16135. Some newer opengl functions and symbols.
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@15445 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/opengl/src')
-rw-r--r--packages/opengl/src/glext.pp1590
1 files changed, 1590 insertions, 0 deletions
diff --git a/packages/opengl/src/glext.pp b/packages/opengl/src/glext.pp
index cdd661c03d..27a15ae78f 100644
--- a/packages/opengl/src/glext.pp
+++ b/packages/opengl/src/glext.pp
@@ -52,6 +52,7 @@ type
GLcharARB = Char;
TGLcharARB = GLcharARB;
PGLcharARB = ^GLcharARB;
+ PPGLchar = ^PGLchar;
GLhandleARB = Cardinal;
TGLhandleARB = GLhandleARB;
@@ -69,6 +70,15 @@ type
TGLchar = GLchar;
PGLchar = Pchar;
+ GLint64 = Int64;
+ TGLint64 = GLint64;
+ PGLint64 = ^GLint64;
+
+ GLuint64 = QWord;
+ TGLuint64 = GLuint64;
+ PGLuint64 = ^GLuint64;
+
+
//***** GL_version_1_2 *****//
const
GL_UNSIGNED_BYTE_3_3_2 = $8032;
@@ -3891,6 +3901,527 @@ var
function Load_GL_EXT_framebuffer_object: Boolean;
+//**** GL_ARB_framebuffer_object *****//
+const
+ GL_INVALID_FRAMEBUFFER_OPERATION = $0506;
+ GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = $8210;
+ GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = $8211;
+ GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE = $8212;
+ GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = $8213;
+ GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = $8214;
+ GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = $8215;
+ GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = $8216;
+ GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = $8217;
+ GL_FRAMEBUFFER_DEFAULT = $8218;
+ GL_FRAMEBUFFER_UNDEFINED = $8219;
+ GL_DEPTH_STENCIL_ATTACHMENT = $821A;
+ GL_MAX_RENDERBUFFER_SIZE = $84E8;
+ GL_DEPTH_STENCIL = $84F9;
+ GL_UNSIGNED_INT_24_8 = $84FA;
+ GL_DEPTH24_STENCIL8 = $88F0;
+ GL_TEXTURE_STENCIL_SIZE = $88F1;
+ GL_TEXTURE_RED_TYPE = $8C10;
+ GL_TEXTURE_GREEN_TYPE = $8C11;
+ GL_TEXTURE_BLUE_TYPE = $8C12;
+ GL_TEXTURE_ALPHA_TYPE = $8C13;
+ GL_TEXTURE_DEPTH_TYPE = $8C16;
+ GL_UNSIGNED_NORMALIZED = $8C17;
+ GL_FRAMEBUFFER_BINDING = $8CA6;
+ GL_DRAW_FRAMEBUFFER_BINDING = GL_FRAMEBUFFER_BINDING;
+ GL_RENDERBUFFER_BINDING = $8CA7;
+ GL_READ_FRAMEBUFFER = $8CA8;
+ GL_DRAW_FRAMEBUFFER = $8CA9;
+ GL_READ_FRAMEBUFFER_BINDING = $8CAA;
+ GL_RENDERBUFFER_SAMPLES = $8CAB;
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = $8CD0;
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = $8CD1;
+ GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = $8CD2;
+ GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = $8CD3;
+ GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = $8CD4;
+ GL_FRAMEBUFFER_COMPLETE = $8CD5;
+ GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = $8CD6;
+ GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = $8CD7;
+ GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = $8CDB;
+ GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER = $8CDC;
+ GL_FRAMEBUFFER_UNSUPPORTED = $8CDD;
+ GL_MAX_COLOR_ATTACHMENTS = $8CDF;
+ GL_COLOR_ATTACHMENT0 = $8CE0;
+ GL_COLOR_ATTACHMENT1 = $8CE1;
+ GL_COLOR_ATTACHMENT2 = $8CE2;
+ GL_COLOR_ATTACHMENT3 = $8CE3;
+ GL_COLOR_ATTACHMENT4 = $8CE4;
+ GL_COLOR_ATTACHMENT5 = $8CE5;
+ GL_COLOR_ATTACHMENT6 = $8CE6;
+ GL_COLOR_ATTACHMENT7 = $8CE7;
+ GL_COLOR_ATTACHMENT8 = $8CE8;
+ GL_COLOR_ATTACHMENT9 = $8CE9;
+ GL_COLOR_ATTACHMENT10 = $8CEA;
+ GL_COLOR_ATTACHMENT11 = $8CEB;
+ GL_COLOR_ATTACHMENT12 = $8CEC;
+ GL_COLOR_ATTACHMENT13 = $8CED;
+ GL_COLOR_ATTACHMENT14 = $8CEE;
+ GL_COLOR_ATTACHMENT15 = $8CEF;
+ GL_DEPTH_ATTACHMENT = $8D00;
+ GL_STENCIL_ATTACHMENT = $8D20;
+ GL_FRAMEBUFFER = $8D40;
+ GL_RENDERBUFFER = $8D41;
+ GL_RENDERBUFFER_WIDTH = $8D42;
+ GL_RENDERBUFFER_HEIGHT = $8D43;
+ GL_RENDERBUFFER_INTERNAL_FORMAT = $8D44;
+ GL_STENCIL_INDEX1 = $8D46;
+ GL_STENCIL_INDEX4 = $8D47;
+ GL_STENCIL_INDEX8 = $8D48;
+ GL_STENCIL_INDEX16 = $8D49;
+ GL_RENDERBUFFER_RED_SIZE = $8D50;
+ GL_RENDERBUFFER_GREEN_SIZE = $8D51;
+ GL_RENDERBUFFER_BLUE_SIZE = $8D52;
+ GL_RENDERBUFFER_ALPHA_SIZE = $8D53;
+ GL_RENDERBUFFER_DEPTH_SIZE = $8D54;
+ GL_RENDERBUFFER_STENCIL_SIZE = $8D55;
+ GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = $8D56;
+ GL_MAX_SAMPLES = $8D57;
+var
+ glIsRenderbuffer: function(renderbuffer: GLuint): GLboolean; extdecl;
+ glBindRenderbuffer: procedure(target: GLenum; renderbuffer: GLuint); extdecl;
+ glDeleteRenderbuffers: procedure(n: GLsizei; const renderbuffers: PGLuint); extdecl;
+ glGenRenderbuffers: procedure(n: GLsizei; renderbuffers: PGLuint); extdecl;
+ glRenderbufferStorage: procedure(target: GLenum; internalformat: GLenum; width: GLsizei; height: GLsizei); extdecl;
+ glGetRenderbufferParameteriv: procedure(target: GLenum; pname: GLenum; params: PGLint); extdecl;
+ glIsFramebuffer: function(framebuffer: GLuint): GLboolean; extdecl;
+ glBindFramebuffer: procedure(target: GLenum; framebuffer: GLuint); extdecl;
+ glDeleteFramebuffers: procedure(n: GLsizei; const framebuffers: PGLuint); extdecl;
+ glGenFramebuffers: procedure(n: GLsizei; framebuffers: PGLuint); extdecl;
+ glCheckFramebufferStatus: function(target: GLenum): GLenum; extdecl;
+ glFramebufferTexture1D: procedure(target: GLenum; attachment: GLenum; textarget: GLenum; texture: GLuint; level: GLint); extdecl;
+ glFramebufferTexture2D: procedure(target: GLenum; attachment: GLenum; textarget: GLenum; texture: GLuint; level: GLint); extdecl;
+ glFramebufferTexture3D: procedure(target: GLenum; attachment: GLenum; textarget: GLenum; texture: GLuint; level: GLint; zoffset: GLint); extdecl;
+ glFramebufferRenderbuffer: procedure(target: GLenum; attachment: GLenum; renderbuffertarget: GLenum; renderbuffer: GLuint); extdecl;
+ glGetFramebufferAttachmentParameteriv: procedure(target: GLenum; attachment: GLenum; pname: GLenum; params: PGLint); extdecl;
+ glGenerateMipmap: procedure(target: GLenum); extdecl;
+ glBlitFramebuffer: procedure(srcX0: GLint; srcY0: GLint; srcX1: GLint; srcY1: GLint; dstX0: GLint; dstY0: GLint; dstX1: GLint; dstY1: GLint; mask: GLbitfield; filter: GLenum); extdecl;
+ glRenderbufferStorageMultisample: procedure(target: GLenum; samples: GLsizei; internalformat: GLenum; width: GLsizei; height: GLsizei); extdecl;
+ glFramebufferTextureLayer: procedure(target: GLenum; attachment: GLenum; texture: GLuint; level: GLint; layer: GLint); extdecl;
+
+function Load_GL_ARB_framebuffer_object(): Boolean;
+
+//**** GL_ARB_framebuffer_object DEPRECATED *****//
+const
+ GL_INDEX = $8222;
+ GL_TEXTURE_LUMINANCE_TYPE = $8C14;
+ GL_TEXTURE_INTENSITY_TYPE = $8C15;
+
+
+//**** GL_ARB_map_buffer_range *****//
+const
+ GL_MAP_READ_BIT = $0001;
+ GL_MAP_WRITE_BIT = $0002;
+ GL_MAP_INVALIDATE_RANGE_BIT = $0004;
+ GL_MAP_INVALIDATE_BUFFER_BIT = $0008;
+ GL_MAP_FLUSH_EXPLICIT_BIT = $0010;
+ GL_MAP_UNSYNCHRONIZED_BIT = $0020;
+var
+ glMapBufferRange: function(target: GLenum; offset: GLintptr; length: GLsizeiptr; access: GLbitfield): PGLvoid; extdecl;
+ glFlushMappedBufferRange: procedure(target: GLenum; offset: GLintptr; length: GLsizeiptr); extdecl;
+
+function Load_GL_ARB_map_buffer_range(): Boolean;
+
+//**** GL_ARB_vertex_array_object *****//
+const
+ GL_VERTEX_ARRAY_BINDING = $85B5;
+var
+ glBindVertexArray: procedure(_array: GLuint); extdecl;
+ glDeleteVertexArrays: procedure(n: GLsizei; const arrays: PGLuint); extdecl;
+ glGenVertexArrays: procedure(n: GLsizei; arrays: PGLuint); extdecl;
+ glIsVertexArray: function(_array: GLuint): GLboolean; extdecl;
+
+function Load_GL_ARB_vertex_array_object(): Boolean;
+
+//**** GL_ARB_copy_buffer *****//
+const
+ GL_COPY_READ_BUFFER = $8F36;
+ GL_COPY_WRITE_BUFFER = $8F37;
+var
+ glCopyBufferSubData: procedure(readTarget: GLenum; writeTarget: GLenum; readOffset: GLintptr; writeOffset: GLintptr; size: GLsizeiptr); extdecl;
+
+function Load_GL_ARB_copy_buffer(): Boolean;
+
+//**** GL_ARB_uniform_buffer_object *****//
+const
+ GL_UNIFORM_BUFFER = $8A11;
+ GL_UNIFORM_BUFFER_BINDING = $8A28;
+ GL_UNIFORM_BUFFER_START = $8A29;
+ GL_UNIFORM_BUFFER_SIZE = $8A2A;
+ GL_MAX_VERTEX_UNIFORM_BLOCKS = $8A2B;
+ GL_MAX_GEOMETRY_UNIFORM_BLOCKS = $8A2C;
+ GL_MAX_FRAGMENT_UNIFORM_BLOCKS = $8A2D;
+ GL_MAX_COMBINED_UNIFORM_BLOCKS = $8A2E;
+ GL_MAX_UNIFORM_BUFFER_BINDINGS = $8A2F;
+ GL_MAX_UNIFORM_BLOCK_SIZE = $8A30;
+ GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = $8A31;
+ GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = $8A32;
+ GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = $8A33;
+ GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT = $8A34;
+ GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = $8A35;
+ GL_ACTIVE_UNIFORM_BLOCKS = $8A36;
+ GL_UNIFORM_TYPE = $8A37;
+ GL_UNIFORM_SIZE = $8A38;
+ GL_UNIFORM_NAME_LENGTH = $8A39;
+ GL_UNIFORM_BLOCK_INDEX = $8A3A;
+ GL_UNIFORM_OFFSET = $8A3B;
+ GL_UNIFORM_ARRAY_STRIDE = $8A3C;
+ GL_UNIFORM_MATRIX_STRIDE = $8A3D;
+ GL_UNIFORM_IS_ROW_MAJOR = $8A3E;
+ GL_UNIFORM_BLOCK_BINDING = $8A3F;
+ GL_UNIFORM_BLOCK_DATA_SIZE = $8A40;
+ GL_UNIFORM_BLOCK_NAME_LENGTH = $8A41;
+ GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS = $8A42;
+ GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = $8A43;
+ GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = $8A44;
+ GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = $8A45;
+ GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = $8A46;
+ GL_INVALID_INDEX = DWord($FFFFFFFF);
+var
+ glGetUniformIndices: procedure(_program: GLuint; uniformCount: GLsizei; const uniformNames: PPGLchar; uniformIndices: PGLuint); extdecl;
+ glGetActiveUniformsiv: procedure(_program: GLuint; uniformCount: GLsizei; const uniformIndices: PGLuint; pname: GLenum; params: PGLint); extdecl;
+ glGetActiveUniformName: procedure(_program: GLuint; uniformIndex: GLuint; bufSize: GLsizei; length: PGLsizei; uniformName: PGLchar); extdecl;
+ glGetUniformBlockIndex: function(_program: GLuint; const uniformBlockName: PGLchar): GLuint; extdecl;
+ glGetActiveUniformBlockiv: procedure(_program: GLuint; uniformBlockIndex: GLuint; pname: GLenum; params: PGLint); extdecl;
+ glGetActiveUniformBlockName: procedure(_program: GLuint; uniformBlockIndex: GLuint; bufSize: GLsizei; length: PGLsizei; uniformBlockName: PGLchar); extdecl;
+ glUniformBlockBinding: procedure(_program: GLuint; uniformBlockIndex: GLuint; uniformBlockBinding: GLuint); extdecl;
+
+function Load_GL_ARB_uniform_buffer_object(): Boolean;
+
+//**** GL_ARB_draw_elements_base_vertex *****//
+var
+ glDrawElementsBaseVertex: procedure(mode: GLenum; count: GLsizei; _type: GLenum; const indices: PGLvoid; basevertex: GLint); extdecl;
+ glDrawRangeElementsBaseVertex: procedure(mode: GLenum; start: GLuint; _end: GLuint; count: GLsizei; _type: GLenum; const indices: PGLvoid; basevertex: GLint); extdecl;
+ glDrawElementsInstancedBaseVertex: procedure(mode: GLenum; count: GLsizei; _type: GLenum; const indices: PGLvoid; primcount: GLsizei; basevertex: GLint); extdecl;
+ glMultiDrawElementsBaseVertex: procedure(mode: GLenum; const count: PGLsizei; _type: GLenum; const indices: PPGLvoid; primcount: GLsizei; const basevertex: PGLint); extdecl;
+
+function Load_GL_ARB_draw_elements_base_vertex(): Boolean;
+
+//**** GL_ARB_provoking_vertex *****//
+const
+ GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = $8E4C;
+ GL_FIRST_VERTEX_CONVENTION = $8E4D;
+ GL_LAST_VERTEX_CONVENTION = $8E4E;
+ GL_PROVOKING_VERTEX = $8E4F;
+var
+ glProvokingVertex: procedure(mode: GLenum); extdecl;
+
+function Load_GL_ARB_provoking_vertex(): Boolean;
+
+//**** GL_ARB_sync *****//
+type
+ GLsync = Pointer;
+ TGLsync = GLSync;
+ PGLsync = ^GLSync;
+
+const
+ GL_MAX_SERVER_WAIT_TIMEOUT = $9111;
+ GL_OBJECT_TYPE = $9112;
+ GL_SYNC_CONDITION = $9113;
+ GL_SYNC_STATUS = $9114;
+ GL_SYNC_FLAGS = $9115;
+ GL_SYNC_FENCE = $9116;
+ GL_SYNC_GPU_COMMANDS_COMPLETE = $9117;
+ GL_UNSIGNALED = $9118;
+ GL_SIGNALED = $9119;
+ GL_ALREADY_SIGNALED = $911A;
+ GL_TIMEOUT_EXPIRED = $911B;
+ GL_CONDITION_SATISFIED = $911C;
+ GL_WAIT_FAILED = $911D;
+ GL_SYNC_FLUSH_COMMANDS_BIT = $00000001;
+ GL_TIMEOUT_IGNORED = QWord($FFFFFFFFFFFFFFFF);
+var
+ glFenceSync: function(condition: GLenum; flags: GLbitfield): GLsync; extdecl;
+ glIsSync: function(sync: GLsync): GLboolean; extdecl;
+ glDeleteSync: procedure(sync: GLsync); extdecl;
+ glClientWaitSync: function(sync: GLsync; flags: GLbitfield; timeout: GLuint64): GLenum; extdecl;
+ glWaitSync: procedure(sync: GLsync; flags: GLbitfield; timeout: GLuint64); extdecl;
+ glGetInteger64v: procedure(pname: GLenum; params: PGLint64); extdecl;
+ glGetSynciv: procedure(sync: GLsync; pname: GLenum; bufSize: GLsizei; length: PGLsizei; values: PGLint); extdecl;
+
+function Load_GL_ARB_sync(): Boolean;
+
+//**** GL_ARB_texture_multisample *****//
+const
+ GL_SAMPLE_POSITION = $8E50;
+ GL_SAMPLE_MASK = $8E51;
+ GL_SAMPLE_MASK_VALUE = $8E52;
+ GL_MAX_SAMPLE_MASK_WORDS = $8E59;
+ GL_TEXTURE_2D_MULTISAMPLE = $9100;
+ GL_PROXY_TEXTURE_2D_MULTISAMPLE = $9101;
+ GL_TEXTURE_2D_MULTISAMPLE_ARRAY = $9102;
+ GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = $9103;
+ GL_TEXTURE_BINDING_2D_MULTISAMPLE = $9104;
+ GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = $9105;
+ GL_TEXTURE_SAMPLES = $9106;
+ GL_TEXTURE_FIXED_SAMPLE_LOCATIONS = $9107;
+ GL_SAMPLER_2D_MULTISAMPLE = $9108;
+ GL_INT_SAMPLER_2D_MULTISAMPLE = $9109;
+ GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = $910A;
+ GL_SAMPLER_2D_MULTISAMPLE_ARRAY = $910B;
+ GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = $910C;
+ GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = $910D;
+ GL_MAX_COLOR_TEXTURE_SAMPLES = $910E;
+ GL_MAX_DEPTH_TEXTURE_SAMPLES = $910F;
+ GL_MAX_INTEGER_SAMPLES = $9110;
+var
+ glTexImage2DMultisample: procedure(target: GLenum; samples: GLsizei; internalformat: GLint; width: GLsizei; height: GLsizei; fixedsamplelocations: GLboolean); extdecl;
+ glTexImage3DMultisample: procedure(target: GLenum; samples: GLsizei; internalformat: GLint; width: GLsizei; height: GLsizei; depth: GLsizei; fixedsamplelocations: GLboolean); extdecl;
+ glGetMultisamplefv: procedure(pname: GLenum; index: GLuint; val: PGLfloat); extdecl;
+ glSampleMaski: procedure(index: GLuint; mask: GLbitfield); extdecl;
+
+function Load_GL_ARB_texture_multisample(): Boolean;
+
+//**** GL_ARB_blend_func_extended *****//
+const
+ GL_SRC1_COLOR = $88F9;
+// reuse GL_SRC1_ALPHA
+const
+ GL_ONE_MINUS_SRC1_COLOR = $88FA;
+ GL_ONE_MINUS_SRC1_ALPHA = $88FB;
+ GL_MAX_DUAL_SOURCE_DRAW_BUFFERS = $88FC;
+var
+ glBindFragDataLocationIndexed: procedure(_program: GLuint; colorNumber: GLuint; index: GLuint; const name: PGLchar); extdecl;
+ glGetFragDataIndex: function(_program: GLuint; const name: PGLchar): GLint; extdecl;
+
+function Load_GL_ARB_blend_func_extended(): Boolean;
+
+//**** GL_ARB_sampler_objects *****//
+const
+ GL_SAMPLER_BINDING = $8919;
+var
+ glGenSamplers: procedure(count: GLsizei; samplers: PGLuint); extdecl;
+ glDeleteSamplers: procedure(count: GLsizei; const samplers: PGLuint); extdecl;
+ glIsSampler: function(sampler: GLuint): GLboolean; extdecl;
+ glBindSampler: procedure(_unit: GLenum; sampler: GLuint); extdecl;
+ glSamplerParameteri: procedure(sampler: GLuint; pname: GLenum; param: GLint); extdecl;
+ glSamplerParameteriv: procedure(sampler: GLuint; pname: GLenum; const param: PGLint); extdecl;
+ glSamplerParameterf: procedure(sampler: GLuint; pname: GLenum; param: GLfloat); extdecl;
+ glSamplerParameterfv: procedure(sampler: GLuint; pname: GLenum; const param: PGLfloat); extdecl;
+ glSamplerParameterIiv: procedure(sampler: GLuint; pname: GLenum; const param: PGLint); extdecl;
+ glSamplerParameterIuiv: procedure(sampler: GLuint; pname: GLenum; const param: PGLuint); extdecl;
+ glGetSamplerParameteriv: procedure(sampler: GLuint; pname: GLenum; params: PGLint); extdecl;
+ glGetSamplerParameterIiv: procedure(sampler: GLuint; pname: GLenum; params: PGLint); extdecl;
+ glGetSamplerParameterfv: procedure(sampler: GLuint; pname: GLenum; params: PGLfloat); extdecl;
+ glGetSamplerParameterIfv: procedure(sampler: GLuint; pname: GLenum; params: PGLfloat); extdecl;
+
+function Load_GL_ARB_sampler_objects(): Boolean;
+
+//**** GL_ARB_timer_query *****//
+const
+ GL_TIME_ELAPSED = $88BF;
+ GL_TIMESTAMP = $8E28;
+var
+ glQueryCounter: procedure(id: GLuint; target: GLenum); extdecl;
+ glGetQueryObjecti64v: procedure(id: GLuint; pname: GLenum; params: PGLint64); extdecl;
+ glGetQueryObjectui64v: procedure(id: GLuint; pname: GLenum; params: PGLuint64); extdecl;
+
+function Load_GL_ARB_timer_query(): Boolean;
+
+//**** GL_ARB_vertex_type_2_10_10_10_rev *****//
+
+const
+ GL_INT_2_10_10_10_REV = $8D9F;
+var
+ glVertexP2ui: procedure(_type: GLenum; value: GLuint); extdecl;
+ glVertexP2uiv: procedure(_type: GLenum; const value: PGLuint); extdecl;
+ glVertexP3ui: procedure(_type: GLenum; value: GLuint); extdecl;
+ glVertexP3uiv: procedure(_type: GLenum; const value: PGLuint); extdecl;
+ glVertexP4ui: procedure(_type: GLenum; value: GLuint); extdecl;
+ glVertexP4uiv: procedure(_type: GLenum; const value: PGLuint); extdecl;
+ glTexCoordP1ui: procedure(_type: GLenum; coords: GLuint); extdecl;
+ glTexCoordP1uiv: procedure(_type: GLenum; const coords: PGLuint); extdecl;
+ glTexCoordP2ui: procedure(_type: GLenum; coords: GLuint); extdecl;
+ glTexCoordP2uiv: procedure(_type: GLenum; const coords: PGLuint); extdecl;
+ glTexCoordP3ui: procedure(_type: GLenum; coords: GLuint); extdecl;
+ glTexCoordP3uiv: procedure(_type: GLenum; const coords: PGLuint); extdecl;
+ glTexCoordP4ui: procedure(_type: GLenum; coords: GLuint); extdecl;
+ glTexCoordP4uiv: procedure(_type: GLenum; const coords: PGLuint); extdecl;
+ glMultiTexCoordP1ui: procedure(texture: GLenum; _type: GLenum; coords: GLuint); extdecl;
+ glMultiTexCoordP1uiv: procedure(texture: GLenum; _type: GLenum; const coords: PGLuint); extdecl;
+ glMultiTexCoordP2ui: procedure(texture: GLenum; _type: GLenum; coords: GLuint); extdecl;
+ glMultiTexCoordP2uiv: procedure(texture: GLenum; _type: GLenum; const coords: PGLuint); extdecl;
+ glMultiTexCoordP3ui: procedure(texture: GLenum; _type: GLenum; coords: GLuint); extdecl;
+ glMultiTexCoordP3uiv: procedure(texture: GLenum; _type: GLenum; const coords: PGLuint); extdecl;
+ glMultiTexCoordP4ui: procedure(texture: GLenum; _type: GLenum; coords: GLuint); extdecl;
+ glMultiTexCoordP4uiv: procedure(texture: GLenum; _type: GLenum; const coords: PGLuint); extdecl;
+ glNormalP3ui: procedure(_type: GLenum; coords: GLuint); extdecl;
+ glNormalP3uiv: procedure(_type: GLenum; const coords: PGLuint); extdecl;
+ glColorP3ui: procedure(_type: GLenum; color: GLuint); extdecl;
+ glColorP3uiv: procedure(_type: GLenum; const color: PGLuint); extdecl;
+ glColorP4ui: procedure(_type: GLenum; color: GLuint); extdecl;
+ glColorP4uiv: procedure(_type: GLenum; const color: PGLuint); extdecl;
+ glSecondaryColorP3ui: procedure(_type: GLenum; color: GLuint); extdecl;
+ glSecondaryColorP3uiv: procedure(_type: GLenum; const color: PGLuint); extdecl;
+ glVertexAttribP1ui: procedure(index: GLuint; _type: GLenum; normalized: GLboolean; value: GLuint); extdecl;
+ glVertexAttribP1uiv: procedure(index: GLuint; _type: GLenum; normalized: GLboolean; const value: PGLuint); extdecl;
+ glVertexAttribP2ui: procedure(index: GLuint; _type: GLenum; normalized: GLboolean; value: GLuint); extdecl;
+ glVertexAttribP2uiv: procedure(index: GLuint; _type: GLenum; normalized: GLboolean; const value: PGLuint); extdecl;
+ glVertexAttribP3ui: procedure(index: GLuint; _type: GLenum; normalized: GLboolean; value: GLuint); extdecl;
+ glVertexAttribP3uiv: procedure(index: GLuint; _type: GLenum; normalized: GLboolean; const value: PGLuint); extdecl;
+ glVertexAttribP4ui: procedure(index: GLuint; _type: GLenum; normalized: GLboolean; value: GLuint); extdecl;
+ glVertexAttribP4uiv: procedure(index: GLuint; _type: GLenum; normalized: GLboolean; const value: PGLuint); extdecl;
+
+function Load_GL_ARB_vertex_type_2_10_10_10_rev(): Boolean;
+
+//**** GL_ARB_gpu_shader_fp64 *****//
+// reuse GL_DOUBLE
+const
+ GL_DOUBLE_VEC2 = $8FFC;
+ GL_DOUBLE_VEC3 = $8FFD;
+ GL_DOUBLE_VEC4 = $8FFE;
+ GL_DOUBLE_MAT2 = $8F46;
+ GL_DOUBLE_MAT3 = $8F47;
+ GL_DOUBLE_MAT4 = $8F48;
+ GL_DOUBLE_MAT2x3 = $8F49;
+ GL_DOUBLE_MAT2x4 = $8F4A;
+ GL_DOUBLE_MAT3x2 = $8F4B;
+ GL_DOUBLE_MAT3x4 = $8F4C;
+ GL_DOUBLE_MAT4x2 = $8F4D;
+ GL_DOUBLE_MAT4x3 = $8F4E;
+var
+ glUniform1d: procedure(location: GLint; x: GLdouble); extdecl;
+ glUniform2d: procedure(location: GLint; x: GLdouble; y: GLdouble); extdecl;
+ glUniform3d: procedure(location: GLint; x: GLdouble; y: GLdouble; z: GLdouble); extdecl;
+ glUniform4d: procedure(location: GLint; x: GLdouble; y: GLdouble; z: GLdouble; w: GLdouble); extdecl;
+ glUniform1dv: procedure(location: GLint; count: GLsizei; const value: PGLdouble); extdecl;
+ glUniform2dv: procedure(location: GLint; count: GLsizei; const value: PGLdouble); extdecl;
+ glUniform3dv: procedure(location: GLint; count: GLsizei; const value: PGLdouble); extdecl;
+ glUniform4dv: procedure(location: GLint; count: GLsizei; const value: PGLdouble); extdecl;
+ glUniformMatrix2dv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glUniformMatrix3dv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glUniformMatrix4dv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glUniformMatrix2x3dv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glUniformMatrix2x4dv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glUniformMatrix3x2dv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glUniformMatrix3x4dv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glUniformMatrix4x2dv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glUniformMatrix4x3dv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glGetUniformdv: procedure(_program: GLuint; location: GLint; params: PGLdouble); extdecl;
+ glProgramUniform1dEXT: procedure(_program: GLuint; location: GLint; x: GLdouble); extdecl;
+ glProgramUniform2dEXT: procedure(_program: GLuint; location: GLint; x: GLdouble; y: GLdouble); extdecl;
+ glProgramUniform3dEXT: procedure(_program: GLuint; location: GLint; x: GLdouble; y: GLdouble; z: GLdouble); extdecl;
+ glProgramUniform4dEXT: procedure(_program: GLuint; location: GLint; x: GLdouble; y: GLdouble; z: GLdouble; w: GLdouble); extdecl;
+ glProgramUniform1dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; const value: PGLdouble); extdecl;
+ glProgramUniform2dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; const value: PGLdouble); extdecl;
+ glProgramUniform3dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; const value: PGLdouble); extdecl;
+ glProgramUniform4dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; const value: PGLdouble); extdecl;
+ glProgramUniformMatrix2dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glProgramUniformMatrix3dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glProgramUniformMatrix4dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glProgramUniformMatrix2x3dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glProgramUniformMatrix2x4dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glProgramUniformMatrix3x2dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glProgramUniformMatrix3x4dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glProgramUniformMatrix4x2dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+ glProgramUniformMatrix4x3dvEXT: procedure(_program: GLuint; location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLdouble); extdecl;
+
+function Load_GL_ARB_gpu_shader_fp64(): Boolean;
+
+//**** GL_ARB_shader_subroutine *****//
+const
+ GL_ACTIVE_SUBROUTINES = $8DE5;
+ GL_ACTIVE_SUBROUTINE_UNIFORMS = $8DE6;
+ GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = $8E47;
+ GL_ACTIVE_SUBROUTINE_MAX_LENGTH = $8E48;
+ GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = $8E49;
+ GL_MAX_SUBROUTINES = $8DE7;
+ GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS = $8DE8;
+ GL_NUM_COMPATIBLE_SUBROUTINES = $8E4A;
+ GL_COMPATIBLE_SUBROUTINES = $8E4B;
+
+var
+ glGetSubroutineUniformLocation: function(_program: GLuint; shadertype: GLenum; const name: PGLchar): GLint; extdecl;
+ glGetSubroutineIndex: function(_program: GLuint; shadertype: GLenum; const name: PGLchar): GLuint; extdecl;
+ glGetActiveSubroutineUniformiv: procedure(_program: GLuint; shadertype: GLenum; index: GLuint; pname: GLenum; values: PGLint); extdecl;
+ glGetActiveSubroutineUniformName: procedure(_program: GLuint; shadertype: GLenum; index: GLuint; bufsize: GLsizei; length: PGLsizei; name: PGLchar); extdecl;
+ glGetActiveSubroutineName: procedure(_program: GLuint; shadertype: GLenum; index: GLuint; bufsize: GLsizei; length: PGLsizei; name: PGLchar); extdecl;
+ glUniformSubroutinesuiv: procedure(shadertype: GLenum; count: GLsizei; const indices: PGLuint); extdecl;
+ glGetUniformSubroutineuiv: procedure(shadertype: GLenum; location: GLint; params: PGLuint); extdecl;
+ glGetProgramStageiv: procedure(_program: GLuint; shadertype: GLenum; pname: GLenum; values: PGLint); extdecl;
+
+function Load_GL_ARB_shader_subroutine(): Boolean;
+
+//**** GL_ARB_tessellation_shader *****//
+const
+ GL_PATCHES = $000E;
+ GL_PATCH_VERTICES = $8E72;
+ GL_PATCH_DEFAULT_INNER_LEVEL = $8E73;
+ GL_PATCH_DEFAULT_OUTER_LEVEL = $8E74;
+ GL_TESS_CONTROL_OUTPUT_VERTICES = $8E75;
+ GL_TESS_GEN_MODE = $8E76;
+ GL_TESS_GEN_SPACING = $8E77;
+ GL_TESS_GEN_VERTEX_ORDER = $8E78;
+ GL_TESS_GEN_POINT_MODE = $8E79;
+// reuse GL_TRIANGLES
+// reuse GL_QUADS
+const
+ GL_ISOLINES = $8E7A;
+// reuse GL_EQUAL
+const
+ GL_FRACTIONAL_ODD = $8E7B;
+ GL_FRACTIONAL_EVEN = $8E7C;
+// reuse GL_CCW
+// reuse GL_CW
+const
+ GL_MAX_PATCH_VERTICES = $8E7D;
+ GL_MAX_TESS_GEN_LEVEL = $8E7E;
+ GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS = $8E7F;
+ GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = $8E80;
+ GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = $8E81;
+ GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = $8E82;
+ GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS = $8E83;
+ GL_MAX_TESS_PATCH_COMPONENTS = $8E84;
+ GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = $8E85;
+ GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = $8E86;
+ GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS = $8E89;
+ GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS = $8E8A;
+ GL_MAX_TESS_CONTROL_INPUT_COMPONENTS = $886C;
+ GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS = $886D;
+ GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = $8E1E;
+ GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = $8E1F;
+ GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = $84F0;
+ GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = $84F1;
+ GL_TESS_EVALUATION_SHADER = $8E87;
+ GL_TESS_CONTROL_SHADER = $8E88;
+var
+ glPatchParameteri: procedure(pname: GLenum; value: GLint); extdecl;
+ glPatchParameterfv: procedure(pname: GLenum; const values: PGLfloat); extdecl;
+
+function Load_GL_ARB_tessellation_shader(): Boolean;
+
+//**** GL_ARB_transform_feedback2 *****//
+const
+ GL_TRANSFORM_FEEDBACK = $8E22;
+ GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED = $8E23;
+ GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE = $8E24;
+ GL_TRANSFORM_FEEDBACK_BINDING = $8E25;
+var
+ glBindTransformFeedback: procedure(target: GLenum; id: GLuint); extdecl;
+ glDeleteTransformFeedbacks: procedure(n: GLsizei; const ids: PGLuint); extdecl;
+ glGenTransformFeedbacks: procedure(n: GLsizei; ids: PGLuint); extdecl;
+ glIsTransformFeedback: function(id: GLuint): GLboolean; extdecl;
+ glPauseTransformFeedback: procedure(); extdecl;
+ glResumeTransformFeedback: procedure(); extdecl;
+ glDrawTransformFeedback: procedure(mode: GLenum; id: GLuint); extdecl;
+
+function Load_GL_ARB_transform_feedback2(): Boolean;
+
+//**** GL_ARB_transform_feedback3 *****//
+const
+ GL_MAX_TRANSFORM_FEEDBACK_BUFFERS = $8E70;
+var
+ glDrawTransformFeedbackStream: procedure(mode: GLenum; id: GLuint; stream: GLuint); extdecl;
+ glBeginQueryIndexed: procedure(target: GLenum; index: GLuint; id: GLuint); extdecl;
+ glEndQueryIndexed: procedure(target: GLenum; index: GLuint); extdecl;
+ glGetQueryIndexediv: procedure(target: GLenum; index: GLuint; pname: GLenum; params: PGLint); extdecl;
+
+function Load_GL_ARB_transform_feedback3(): Boolean;
+
+
//***** GL_version_1_4 *****//
const
GL_BLEND_DST_RGB = $80C8;
@@ -4239,6 +4770,300 @@ var
function Load_GL_version_2_0: Boolean;
+//**** GL_VERSION_2_1 *****//
+const
+ GL_PIXEL_PACK_BUFFER = $88EB;
+ GL_PIXEL_UNPACK_BUFFER = $88EC;
+ GL_PIXEL_PACK_BUFFER_BINDING = $88ED;
+ GL_PIXEL_UNPACK_BUFFER_BINDING = $88EF;
+ GL_FLOAT_MAT2x3 = $8B65;
+ GL_FLOAT_MAT2x4 = $8B66;
+ GL_FLOAT_MAT3x2 = $8B67;
+ GL_FLOAT_MAT3x4 = $8B68;
+ GL_FLOAT_MAT4x2 = $8B69;
+ GL_FLOAT_MAT4x3 = $8B6A;
+ GL_SRGB = $8C40;
+ GL_SRGB8 = $8C41;
+ GL_SRGB_ALPHA = $8C42;
+ GL_SRGB8_ALPHA8 = $8C43;
+ GL_COMPRESSED_SRGB = $8C48;
+ GL_COMPRESSED_SRGB_ALPHA = $8C49;
+var
+ glUniformMatrix2x3fv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLfloat); extdecl;
+ glUniformMatrix3x2fv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLfloat); extdecl;
+ glUniformMatrix2x4fv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLfloat); extdecl;
+ glUniformMatrix4x2fv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLfloat); extdecl;
+ glUniformMatrix3x4fv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLfloat); extdecl;
+ glUniformMatrix4x3fv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLfloat); extdecl;
+
+function Load_GL_VERSION_2_1(): Boolean;
+
+//**** GL_VERSION_2_1 DEPRECATED *****//
+const
+ GL_CURRENT_RASTER_SECONDARY_COLOR = $845F;
+ GL_SLUMINANCE_ALPHA = $8C44;
+ GL_SLUMINANCE8_ALPHA8 = $8C45;
+ GL_SLUMINANCE = $8C46;
+ GL_SLUMINANCE8 = $8C47;
+ GL_COMPRESSED_SLUMINANCE = $8C4A;
+ GL_COMPRESSED_SLUMINANCE_ALPHA = $8C4B;
+
+//**** GL_VERSION_3_0 *****//
+
+const
+ GL_COMPARE_REF_TO_TEXTURE = $884E;
+ GL_CLIP_DISTANCE0 = $3000;
+ GL_CLIP_DISTANCE1 = $3001;
+ GL_CLIP_DISTANCE2 = $3002;
+ GL_CLIP_DISTANCE3 = $3003;
+ GL_CLIP_DISTANCE4 = $3004;
+ GL_CLIP_DISTANCE5 = $3005;
+ GL_CLIP_DISTANCE6 = $3006;
+ GL_CLIP_DISTANCE7 = $3007;
+ GL_MAX_CLIP_DISTANCES = $0D32;
+ GL_MAJOR_VERSION = $821B;
+ GL_MINOR_VERSION = $821C;
+ GL_NUM_EXTENSIONS = $821D;
+ GL_CONTEXT_FLAGS = $821E;
+ GL_DEPTH_BUFFER = $8223;
+ GL_STENCIL_BUFFER = $8224;
+ GL_COMPRESSED_RED = $8225;
+ GL_COMPRESSED_RG = $8226;
+ GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = $0001;
+ GL_RGBA32F = $8814;
+ GL_RGB32F = $8815;
+ GL_RGBA16F = $881A;
+ GL_RGB16F = $881B;
+ GL_VERTEX_ATTRIB_ARRAY_INTEGER = $88FD;
+ GL_MAX_ARRAY_TEXTURE_LAYERS = $88FF;
+ GL_MIN_PROGRAM_TEXEL_OFFSET = $8904;
+ GL_MAX_PROGRAM_TEXEL_OFFSET = $8905;
+ GL_CLAMP_READ_COLOR = $891C;
+ GL_FIXED_ONLY = $891D;
+ GL_MAX_VARYING_COMPONENTS = $8B4B;
+ GL_TEXTURE_1D_ARRAY = $8C18;
+ GL_PROXY_TEXTURE_1D_ARRAY = $8C19;
+ GL_TEXTURE_2D_ARRAY = $8C1A;
+ GL_PROXY_TEXTURE_2D_ARRAY = $8C1B;
+ GL_TEXTURE_BINDING_1D_ARRAY = $8C1C;
+ GL_TEXTURE_BINDING_2D_ARRAY = $8C1D;
+ GL_R11F_G11F_B10F = $8C3A;
+ GL_UNSIGNED_INT_10F_11F_11F_REV = $8C3B;
+ GL_RGB9_E5 = $8C3D;
+ GL_UNSIGNED_INT_5_9_9_9_REV = $8C3E;
+ GL_TEXTURE_SHARED_SIZE = $8C3F;
+ GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = $8C76;
+ GL_TRANSFORM_FEEDBACK_BUFFER_MODE = $8C7F;
+ GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = $8C80;
+ GL_TRANSFORM_FEEDBACK_VARYINGS = $8C83;
+ GL_TRANSFORM_FEEDBACK_BUFFER_START = $8C84;
+ GL_TRANSFORM_FEEDBACK_BUFFER_SIZE = $8C85;
+ GL_PRIMITIVES_GENERATED = $8C87;
+ GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = $8C88;
+ GL_RASTERIZER_DISCARD = $8C89;
+ GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = $8C8A;
+ GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = $8C8B;
+ GL_INTERLEAVED_ATTRIBS = $8C8C;
+ GL_SEPARATE_ATTRIBS = $8C8D;
+ GL_TRANSFORM_FEEDBACK_BUFFER = $8C8E;
+ GL_TRANSFORM_FEEDBACK_BUFFER_BINDING = $8C8F;
+ GL_RGBA32UI = $8D70;
+ GL_RGB32UI = $8D71;
+ GL_RGBA16UI = $8D76;
+ GL_RGB16UI = $8D77;
+ GL_RGBA8UI = $8D7C;
+ GL_RGB8UI = $8D7D;
+ GL_RGBA32I = $8D82;
+ GL_RGB32I = $8D83;
+ GL_RGBA16I = $8D88;
+ GL_RGB16I = $8D89;
+ GL_RGBA8I = $8D8E;
+ GL_RGB8I = $8D8F;
+ GL_RED_INTEGER = $8D94;
+ GL_GREEN_INTEGER = $8D95;
+ GL_BLUE_INTEGER = $8D96;
+ GL_RGB_INTEGER = $8D98;
+ GL_RGBA_INTEGER = $8D99;
+ GL_BGR_INTEGER = $8D9A;
+ GL_BGRA_INTEGER = $8D9B;
+ GL_SAMPLER_1D_ARRAY = $8DC0;
+ GL_SAMPLER_2D_ARRAY = $8DC1;
+ GL_SAMPLER_1D_ARRAY_SHADOW = $8DC3;
+ GL_SAMPLER_2D_ARRAY_SHADOW = $8DC4;
+ GL_SAMPLER_CUBE_SHADOW = $8DC5;
+ GL_UNSIGNED_INT_VEC2 = $8DC6;
+ GL_UNSIGNED_INT_VEC3 = $8DC7;
+ GL_UNSIGNED_INT_VEC4 = $8DC8;
+ GL_INT_SAMPLER_1D = $8DC9;
+ GL_INT_SAMPLER_2D = $8DCA;
+ GL_INT_SAMPLER_3D = $8DCB;
+ GL_INT_SAMPLER_CUBE = $8DCC;
+ GL_INT_SAMPLER_1D_ARRAY = $8DCE;
+ GL_INT_SAMPLER_2D_ARRAY = $8DCF;
+ GL_UNSIGNED_INT_SAMPLER_1D = $8DD1;
+ GL_UNSIGNED_INT_SAMPLER_2D = $8DD2;
+ GL_UNSIGNED_INT_SAMPLER_3D = $8DD3;
+ GL_UNSIGNED_INT_SAMPLER_CUBE = $8DD4;
+ GL_UNSIGNED_INT_SAMPLER_1D_ARRAY = $8DD6;
+ GL_UNSIGNED_INT_SAMPLER_2D_ARRAY = $8DD7;
+ GL_QUERY_WAIT = $8E13;
+ GL_QUERY_NO_WAIT = $8E14;
+ GL_QUERY_BY_REGION_WAIT = $8E15;
+ GL_QUERY_BY_REGION_NO_WAIT = $8E16;
+ GL_BUFFER_ACCESS_FLAGS = $911F;
+ GL_BUFFER_MAP_LENGTH = $9120;
+ GL_BUFFER_MAP_OFFSET = $9121;
+
+var
+ glColorMaski: procedure(index: GLuint; r: GLboolean; g: GLboolean; b: GLboolean; a: GLboolean); extdecl;
+ glGetBooleani_v: procedure(target: GLenum; index: GLuint; data: PGLboolean); extdecl;
+ glGetIntegeri_v: procedure(target: GLenum; index: GLuint; data: PGLint); extdecl; (* Also used in GL_ARB_uniform_buffer_object *)
+ glEnablei: procedure(target: GLenum; index: GLuint); extdecl;
+ glDisablei: procedure(target: GLenum; index: GLuint); extdecl;
+ glIsEnabledi: function(target: GLenum; index: GLuint): GLboolean; extdecl;
+ glBeginTransformFeedback: procedure(primitiveMode: GLenum); extdecl;
+ glEndTransformFeedback: procedure(); extdecl;
+ glBindBufferRange: procedure(target: GLenum; index: GLuint; buffer: GLuint; offset: GLintptr; size: GLsizeiptr); extdecl; (* Also used in GL_ARB_uniform_buffer_object *)
+ glBindBufferBase: procedure(target: GLenum; index: GLuint; buffer: GLuint); extdecl; (* Also used in GL_ARB_uniform_buffer_object *)
+ glTransformFeedbackVaryings: procedure(_program: GLuint; count: GLsizei; const varyings: PPGLchar; bufferMode: GLenum); extdecl;
+ glGetTransformFeedbackVarying: procedure(_program: GLuint; index: GLuint; bufSize: GLsizei; length: PGLsizei; size: PGLsizei; _type: PGLenum; name: PGLchar); extdecl;
+ glClampColor: procedure(target: GLenum; clamp: GLenum); extdecl;
+ glBeginConditionalRender: procedure(id: GLuint; mode: GLenum); extdecl;
+ glEndConditionalRender: procedure(); extdecl;
+ glVertexAttribIPointer: procedure(index: GLuint; size: GLint; _type: GLenum; stride: GLsizei; const _pointer: PGLvoid); extdecl;
+ glGetVertexAttribIiv: procedure(index: GLuint; pname: GLenum; params: PGLint); extdecl;
+ glGetVertexAttribIuiv: procedure(index: GLuint; pname: GLenum; params: PGLuint); extdecl;
+ glVertexAttribI1i: procedure(index: GLuint; x: GLint); extdecl;
+ glVertexAttribI2i: procedure(index: GLuint; x: GLint; y: GLint); extdecl;
+ glVertexAttribI3i: procedure(index: GLuint; x: GLint; y: GLint; z: GLint); extdecl;
+ glVertexAttribI4i: procedure(index: GLuint; x: GLint; y: GLint; z: GLint; w: GLint); extdecl;
+ glVertexAttribI1ui: procedure(index: GLuint; x: GLuint); extdecl;
+ glVertexAttribI2ui: procedure(index: GLuint; x: GLuint; y: GLuint); extdecl;
+ glVertexAttribI3ui: procedure(index: GLuint; x: GLuint; y: GLuint; z: GLuint); extdecl;
+ glVertexAttribI4ui: procedure(index: GLuint; x: GLuint; y: GLuint; z: GLuint; w: GLuint); extdecl;
+ glVertexAttribI1iv: procedure(index: GLuint; const v: PGLint); extdecl;
+ glVertexAttribI2iv: procedure(index: GLuint; const v: PGLint); extdecl;
+ glVertexAttribI3iv: procedure(index: GLuint; const v: PGLint); extdecl;
+ glVertexAttribI4iv: procedure(index: GLuint; const v: PGLint); extdecl;
+ glVertexAttribI1uiv: procedure(index: GLuint; const v: PGLuint); extdecl;
+ glVertexAttribI2uiv: procedure(index: GLuint; const v: PGLuint); extdecl;
+ glVertexAttribI3uiv: procedure(index: GLuint; const v: PGLuint); extdecl;
+ glVertexAttribI4uiv: procedure(index: GLuint; const v: PGLuint); extdecl;
+ glVertexAttribI4bv: procedure(index: GLuint; const v: PGLbyte); extdecl;
+ glVertexAttribI4sv: procedure(index: GLuint; const v: PGLshort); extdecl;
+ glVertexAttribI4ubv: procedure(index: GLuint; const v: PGLubyte); extdecl;
+ glVertexAttribI4usv: procedure(index: GLuint; const v: PGLushort); extdecl;
+ glGetUniformuiv: procedure(_program: GLuint; location: GLint; params: PGLuint); extdecl;
+ glBindFragDataLocation: procedure(_program: GLuint; color: GLuint; const name: PGLchar); extdecl;
+ glGetFragDataLocation: function(_program: GLuint; const name: PGLchar): GLint; extdecl;
+ glUniform1ui: procedure(location: GLint; v0: GLuint); extdecl;
+ glUniform2ui: procedure(location: GLint; v0: GLuint; v1: GLuint); extdecl;
+ glUniform3ui: procedure(location: GLint; v0: GLuint; v1: GLuint; v2: GLuint); extdecl;
+ glUniform4ui: procedure(location: GLint; v0: GLuint; v1: GLuint; v2: GLuint; v3: GLuint); extdecl;
+ glUniform1uiv: procedure(location: GLint; count: GLsizei; const value: PGLuint); extdecl;
+ glUniform2uiv: procedure(location: GLint; count: GLsizei; const value: PGLuint); extdecl;
+ glUniform3uiv: procedure(location: GLint; count: GLsizei; const value: PGLuint); extdecl;
+ glUniform4uiv: procedure(location: GLint; count: GLsizei; const value: PGLuint); extdecl;
+ glTexParameterIiv: procedure(target: GLenum; pname: GLenum; const params: PGLint); extdecl;
+ glTexParameterIuiv: procedure(target: GLenum; pname: GLenum; const params: PGLuint); extdecl;
+ glGetTexParameterIiv: procedure(target: GLenum; pname: GLenum; params: PGLint); extdecl;
+ glGetTexParameterIuiv: procedure(target: GLenum; pname: GLenum; params: PGLuint); extdecl;
+ glClearBufferiv: procedure(buffer: GLenum; drawbuffer: GLint; const value: PGLint); extdecl;
+ glClearBufferuiv: procedure(buffer: GLenum; drawbuffer: GLint; const value: PGLuint); extdecl;
+ glClearBufferfv: procedure(buffer: GLenum; drawbuffer: GLint; const value: PGLfloat); extdecl;
+ glClearBufferfi: procedure(buffer: GLenum; drawbuffer: GLint; depth: GLfloat; stencil: GLint); extdecl;
+ glGetStringi: function(name: GLenum; index: GLuint): PGLubyte; extdecl;
+
+function Load_GL_VERSION_3_0(): Boolean;
+
+//**** GL_VERSION_3_0 DEPRECATED *****//
+const
+ GL_CLAMP_VERTEX_COLOR = $891A;
+ GL_CLAMP_FRAGMENT_COLOR = $891B;
+ GL_ALPHA_INTEGER = $8D97;
+
+//**** GL_VERSION_3_1 *****//
+const
+ GL_SAMPLER_2D_RECT = $8B63;
+ GL_SAMPLER_2D_RECT_SHADOW = $8B64;
+ GL_SAMPLER_BUFFER = $8DC2;
+ GL_INT_SAMPLER_2D_RECT = $8DCD;
+ GL_INT_SAMPLER_BUFFER = $8DD0;
+ GL_UNSIGNED_INT_SAMPLER_2D_RECT = $8DD5;
+ GL_UNSIGNED_INT_SAMPLER_BUFFER = $8DD8;
+ GL_TEXTURE_BUFFER = $8C2A;
+ GL_MAX_TEXTURE_BUFFER_SIZE = $8C2B;
+ GL_TEXTURE_BINDING_BUFFER = $8C2C;
+ GL_TEXTURE_BUFFER_DATA_STORE_BINDING = $8C2D;
+ GL_TEXTURE_BUFFER_FORMAT = $8C2E;
+ GL_TEXTURE_RECTANGLE = $84F5;
+ GL_TEXTURE_BINDING_RECTANGLE = $84F6;
+ GL_PROXY_TEXTURE_RECTANGLE = $84F7;
+ GL_MAX_RECTANGLE_TEXTURE_SIZE = $84F8;
+ GL_RED_SNORM = $8F90;
+ GL_RG_SNORM = $8F91;
+ GL_RGB_SNORM = $8F92;
+ GL_RGBA_SNORM = $8F93;
+ GL_R8_SNORM = $8F94;
+ GL_RG8_SNORM = $8F95;
+ GL_RGB8_SNORM = $8F96;
+ GL_RGBA8_SNORM = $8F97;
+ GL_R16_SNORM = $8F98;
+ GL_RG16_SNORM = $8F99;
+ GL_RGB16_SNORM = $8F9A;
+ GL_RGBA16_SNORM = $8F9B;
+ GL_SIGNED_NORMALIZED = $8F9C;
+ GL_PRIMITIVE_RESTART = $8F9D;
+ GL_PRIMITIVE_RESTART_INDEX = $8F9E;
+
+var
+ glDrawArraysInstanced: procedure(mode: GLenum; first: GLint; count: GLsizei; primcount: GLsizei); extdecl;
+ glDrawElementsInstanced: procedure(mode: GLenum; count: GLsizei; _type: GLenum; const indices: PGLvoid; primcount: GLsizei); extdecl;
+ glTexBuffer: procedure(target: GLenum; internalformat: GLenum; buffer: GLuint); extdecl;
+ glPrimitiveRestartIndex: procedure(index: GLuint); extdecl;
+
+function Load_GL_VERSION_3_1(): Boolean;
+
+//**** GL_VERSION_3_2 *****//
+const
+ GL_CONTEXT_CORE_PROFILE_BIT = $00000001;
+ GL_CONTEXT_COMPATIBILITY_PROFILE_BIT = $00000002;
+ GL_LINES_ADJACENCY = $000A;
+ GL_LINE_STRIP_ADJACENCY = $000B;
+ GL_TRIANGLES_ADJACENCY = $000C;
+ GL_TRIANGLE_STRIP_ADJACENCY = $000D;
+ GL_PROGRAM_POINT_SIZE = $8642;
+ GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = $8C29;
+ GL_FRAMEBUFFER_ATTACHMENT_LAYERED = $8DA7;
+ GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = $8DA8;
+ GL_GEOMETRY_SHADER = $8DD9;
+ GL_GEOMETRY_VERTICES_OUT = $8916;
+ GL_GEOMETRY_INPUT_TYPE = $8917;
+ GL_GEOMETRY_OUTPUT_TYPE = $8918;
+ GL_MAX_GEOMETRY_UNIFORM_COMPONENTS = $8DDF;
+ GL_MAX_GEOMETRY_OUTPUT_VERTICES = $8DE0;
+ GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = $8DE1;
+ GL_MAX_VERTEX_OUTPUT_COMPONENTS = $9122;
+ GL_MAX_GEOMETRY_INPUT_COMPONENTS = $9123;
+ GL_MAX_GEOMETRY_OUTPUT_COMPONENTS = $9124;
+ GL_MAX_FRAGMENT_INPUT_COMPONENTS = $9125;
+ GL_CONTEXT_PROFILE_MASK = $9126;
+
+var
+ glGetInteger64i_v: procedure(target: GLenum; index: GLuint; data: PGLint64); extdecl;
+ glGetBufferParameteri64v: procedure(target: GLenum; pname: GLenum; params: PGLint64); extdecl;
+ glProgramParameteri: procedure(_program: GLuint; pname: GLenum; value: GLint); extdecl;
+ glFramebufferTexture: procedure(target: GLenum; attachment: GLenum; texture: GLuint; level: GLint); extdecl;
+
+function Load_GL_VERSION_3_2(): Boolean;
+
+//**** GL_VERSION_3_3 *****//
+
+function Load_GL_VERSION_3_3(): Boolean;
+
+//**** GL_VERSION_4_0 *****//
+
+function Load_GL_VERSION_4_0(): Boolean;
implementation
@@ -8983,6 +9808,573 @@ begin
end;
+function Load_GL_ARB_framebuffer_object(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_framebuffer_object', extstring) then
+ begin
+ glIsRenderbuffer := wglGetProcAddress('glIsRenderbuffer');
+ if not Assigned(glIsRenderbuffer) then Exit;
+ glBindRenderbuffer := wglGetProcAddress('glBindRenderbuffer');
+ if not Assigned(glBindRenderbuffer) then Exit;
+ glDeleteRenderbuffers := wglGetProcAddress('glDeleteRenderbuffers');
+ if not Assigned(glDeleteRenderbuffers) then Exit;
+ glGenRenderbuffers := wglGetProcAddress('glGenRenderbuffers');
+ if not Assigned(glGenRenderbuffers) then Exit;
+ glRenderbufferStorage := wglGetProcAddress('glRenderbufferStorage');
+ if not Assigned(glRenderbufferStorage) then Exit;
+ glGetRenderbufferParameteriv := wglGetProcAddress('glGetRenderbufferParameteriv');
+ if not Assigned(glGetRenderbufferParameteriv) then Exit;
+ glIsFramebuffer := wglGetProcAddress('glIsFramebuffer');
+ if not Assigned(glIsFramebuffer) then Exit;
+ glBindFramebuffer := wglGetProcAddress('glBindFramebuffer');
+ if not Assigned(glBindFramebuffer) then Exit;
+ glDeleteFramebuffers := wglGetProcAddress('glDeleteFramebuffers');
+ if not Assigned(glDeleteFramebuffers) then Exit;
+ glGenFramebuffers := wglGetProcAddress('glGenFramebuffers');
+ if not Assigned(glGenFramebuffers) then Exit;
+ glCheckFramebufferStatus := wglGetProcAddress('glCheckFramebufferStatus');
+ if not Assigned(glCheckFramebufferStatus) then Exit;
+ glFramebufferTexture1D := wglGetProcAddress('glFramebufferTexture1D');
+ if not Assigned(glFramebufferTexture1D) then Exit;
+ glFramebufferTexture2D := wglGetProcAddress('glFramebufferTexture2D');
+ if not Assigned(glFramebufferTexture2D) then Exit;
+ glFramebufferTexture3D := wglGetProcAddress('glFramebufferTexture3D');
+ if not Assigned(glFramebufferTexture3D) then Exit;
+ glFramebufferRenderbuffer := wglGetProcAddress('glFramebufferRenderbuffer');
+ if not Assigned(glFramebufferRenderbuffer) then Exit;
+ glGetFramebufferAttachmentParameteriv := wglGetProcAddress('glGetFramebufferAttachmentParameteriv');
+ if not Assigned(glGetFramebufferAttachmentParameteriv) then Exit;
+ glGenerateMipmap := wglGetProcAddress('glGenerateMipmap');
+ if not Assigned(glGenerateMipmap) then Exit;
+ glBlitFramebuffer := wglGetProcAddress('glBlitFramebuffer');
+ if not Assigned(glBlitFramebuffer) then Exit;
+ glRenderbufferStorageMultisample := wglGetProcAddress('glRenderbufferStorageMultisample');
+ if not Assigned(glRenderbufferStorageMultisample) then Exit;
+ glFramebufferTextureLayer := wglGetProcAddress('glFramebufferTextureLayer');
+ if not Assigned(glFramebufferTextureLayer) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_map_buffer_range(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_map_buffer_range', extstring) then
+ begin
+ glMapBufferRange := wglGetProcAddress('glMapBufferRange');
+ if not Assigned(glMapBufferRange) then Exit;
+ glFlushMappedBufferRange := wglGetProcAddress('glFlushMappedBufferRange');
+ if not Assigned(glFlushMappedBufferRange) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_vertex_array_object(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_vertex_array_object', extstring) then
+ begin
+ glBindVertexArray := wglGetProcAddress('glBindVertexArray');
+ if not Assigned(glBindVertexArray) then Exit;
+ glDeleteVertexArrays := wglGetProcAddress('glDeleteVertexArrays');
+ if not Assigned(glDeleteVertexArrays) then Exit;
+ glGenVertexArrays := wglGetProcAddress('glGenVertexArrays');
+ if not Assigned(glGenVertexArrays) then Exit;
+ glIsVertexArray := wglGetProcAddress('glIsVertexArray');
+ if not Assigned(glIsVertexArray) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_copy_buffer(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_copy_buffer', extstring) then
+ begin
+ glCopyBufferSubData := wglGetProcAddress('glCopyBufferSubData');
+ if not Assigned(glCopyBufferSubData) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_uniform_buffer_object(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_uniform_buffer_object', extstring) then
+ begin
+ glGetUniformIndices := wglGetProcAddress('glGetUniformIndices');
+ if not Assigned(glGetUniformIndices) then Exit;
+ glGetActiveUniformsiv := wglGetProcAddress('glGetActiveUniformsiv');
+ if not Assigned(glGetActiveUniformsiv) then Exit;
+ glGetActiveUniformName := wglGetProcAddress('glGetActiveUniformName');
+ if not Assigned(glGetActiveUniformName) then Exit;
+ glGetUniformBlockIndex := wglGetProcAddress('glGetUniformBlockIndex');
+ if not Assigned(glGetUniformBlockIndex) then Exit;
+ glGetActiveUniformBlockiv := wglGetProcAddress('glGetActiveUniformBlockiv');
+ if not Assigned(glGetActiveUniformBlockiv) then Exit;
+ glGetActiveUniformBlockName := wglGetProcAddress('glGetActiveUniformBlockName');
+ if not Assigned(glGetActiveUniformBlockName) then Exit;
+ glUniformBlockBinding := wglGetProcAddress('glUniformBlockBinding');
+ if not Assigned(glUniformBlockBinding) then Exit;
+ (* Shared entry points *)
+ glBindBufferRange := wglGetProcAddress('glBindBufferRange');
+ if not Assigned(glBindBufferRange) then Exit;
+ glBindBufferBase := wglGetProcAddress('glBindBufferBase');
+ if not Assigned(glBindBufferBase) then Exit;
+ glGetIntegeri_v := wglGetProcAddress('glGetIntegeri_v');
+ if not Assigned(glGetIntegeri_v) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_draw_elements_base_vertex(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_draw_elements_base_vertex', extstring) then
+ begin
+ glDrawElementsBaseVertex := wglGetProcAddress('glDrawElementsBaseVertex');
+ if not Assigned(glDrawElementsBaseVertex) then Exit;
+ glDrawRangeElementsBaseVertex := wglGetProcAddress('glDrawRangeElementsBaseVertex');
+ if not Assigned(glDrawRangeElementsBaseVertex) then Exit;
+ glDrawElementsInstancedBaseVertex := wglGetProcAddress('glDrawElementsInstancedBaseVertex');
+ if not Assigned(glDrawElementsInstancedBaseVertex) then Exit;
+ glMultiDrawElementsBaseVertex := wglGetProcAddress('glMultiDrawElementsBaseVertex');
+ if not Assigned(glMultiDrawElementsBaseVertex) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_provoking_vertex(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_provoking_vertex', extstring) then
+ begin
+ glProvokingVertex := wglGetProcAddress('glProvokingVertex');
+ if not Assigned(glProvokingVertex) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_sync(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_sync', extstring) then
+ begin
+ glFenceSync := wglGetProcAddress('glFenceSync');
+ if not Assigned(glFenceSync) then Exit;
+ glIsSync := wglGetProcAddress('glIsSync');
+ if not Assigned(glIsSync) then Exit;
+ glDeleteSync := wglGetProcAddress('glDeleteSync');
+ if not Assigned(glDeleteSync) then Exit;
+ glClientWaitSync := wglGetProcAddress('glClientWaitSync');
+ if not Assigned(glClientWaitSync) then Exit;
+ glWaitSync := wglGetProcAddress('glWaitSync');
+ if not Assigned(glWaitSync) then Exit;
+ glGetInteger64v := wglGetProcAddress('glGetInteger64v');
+ if not Assigned(glGetInteger64v) then Exit;
+ glGetSynciv := wglGetProcAddress('glGetSynciv');
+ if not Assigned(glGetSynciv) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_texture_multisample(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_texture_multisample', extstring) then
+ begin
+ glTexImage2DMultisample := wglGetProcAddress('glTexImage2DMultisample');
+ if not Assigned(glTexImage2DMultisample) then Exit;
+ glTexImage3DMultisample := wglGetProcAddress('glTexImage3DMultisample');
+ if not Assigned(glTexImage3DMultisample) then Exit;
+ glGetMultisamplefv := wglGetProcAddress('glGetMultisamplefv');
+ if not Assigned(glGetMultisamplefv) then Exit;
+ glSampleMaski := wglGetProcAddress('glSampleMaski');
+ if not Assigned(glSampleMaski) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_sampler_objects(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_sampler_objects', extstring) then
+ begin
+ glGenSamplers := wglGetProcAddress('glGenSamplers');
+ if not Assigned(glGenSamplers) then Exit;
+ glDeleteSamplers := wglGetProcAddress('glDeleteSamplers');
+ if not Assigned(glDeleteSamplers) then Exit;
+ glIsSampler := wglGetProcAddress('glIsSampler');
+ if not Assigned(glIsSampler) then Exit;
+ glBindSampler := wglGetProcAddress('glBindSampler');
+ if not Assigned(glBindSampler) then Exit;
+ glSamplerParameteri := wglGetProcAddress('glSamplerParameteri');
+ if not Assigned(glSamplerParameteri) then Exit;
+ glSamplerParameteriv := wglGetProcAddress('glSamplerParameteriv');
+ if not Assigned(glSamplerParameteriv) then Exit;
+ glSamplerParameterf := wglGetProcAddress('glSamplerParameterf');
+ if not Assigned(glSamplerParameterf) then Exit;
+ glSamplerParameterfv := wglGetProcAddress('glSamplerParameterfv');
+ if not Assigned(glSamplerParameterfv) then Exit;
+ glSamplerParameterIiv := wglGetProcAddress('glSamplerParameterIiv');
+ if not Assigned(glSamplerParameterIiv) then Exit;
+ glSamplerParameterIuiv := wglGetProcAddress('glSamplerParameterIuiv');
+ if not Assigned(glSamplerParameterIuiv) then Exit;
+ glGetSamplerParameteriv := wglGetProcAddress('glGetSamplerParameteriv');
+ if not Assigned(glGetSamplerParameteriv) then Exit;
+ glGetSamplerParameterIiv := wglGetProcAddress('glGetSamplerParameterIiv');
+ if not Assigned(glGetSamplerParameterIiv) then Exit;
+ glGetSamplerParameterfv := wglGetProcAddress('glGetSamplerParameterfv');
+ if not Assigned(glGetSamplerParameterfv) then Exit;
+ glGetSamplerParameterIfv := wglGetProcAddress('glGetSamplerParameterIfv');
+ if not Assigned(glGetSamplerParameterIfv) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_blend_func_extended(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_blend_func_extended', extstring) then
+ begin
+ glBindFragDataLocationIndexed := wglGetProcAddress('glBindFragDataLocationIndexed');
+ if not Assigned(glBindFragDataLocationIndexed) then Exit;
+ glGetFragDataIndex := wglGetProcAddress('glGetFragDataIndex');
+ if not Assigned(glGetFragDataIndex) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_timer_query(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_timer_query', extstring) then
+ begin
+ glQueryCounter := wglGetProcAddress('glQueryCounter');
+ if not Assigned(glQueryCounter) then Exit;
+ glGetQueryObjecti64v := wglGetProcAddress('glGetQueryObjecti64v');
+ if not Assigned(glGetQueryObjecti64v) then Exit;
+ glGetQueryObjectui64v := wglGetProcAddress('glGetQueryObjectui64v');
+ if not Assigned(glGetQueryObjectui64v) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_vertex_type_2_10_10_10_rev(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_vertex_type_2_10_10_10_rev', extstring) then
+ begin
+ glVertexP2ui := wglGetProcAddress('glVertexP2ui');
+ if not Assigned(glVertexP2ui) then Exit;
+ glVertexP2uiv := wglGetProcAddress('glVertexP2uiv');
+ if not Assigned(glVertexP2uiv) then Exit;
+ glVertexP3ui := wglGetProcAddress('glVertexP3ui');
+ if not Assigned(glVertexP3ui) then Exit;
+ glVertexP3uiv := wglGetProcAddress('glVertexP3uiv');
+ if not Assigned(glVertexP3uiv) then Exit;
+ glVertexP4ui := wglGetProcAddress('glVertexP4ui');
+ if not Assigned(glVertexP4ui) then Exit;
+ glVertexP4uiv := wglGetProcAddress('glVertexP4uiv');
+ if not Assigned(glVertexP4uiv) then Exit;
+ glTexCoordP1ui := wglGetProcAddress('glTexCoordP1ui');
+ if not Assigned(glTexCoordP1ui) then Exit;
+ glTexCoordP1uiv := wglGetProcAddress('glTexCoordP1uiv');
+ if not Assigned(glTexCoordP1uiv) then Exit;
+ glTexCoordP2ui := wglGetProcAddress('glTexCoordP2ui');
+ if not Assigned(glTexCoordP2ui) then Exit;
+ glTexCoordP2uiv := wglGetProcAddress('glTexCoordP2uiv');
+ if not Assigned(glTexCoordP2uiv) then Exit;
+ glTexCoordP3ui := wglGetProcAddress('glTexCoordP3ui');
+ if not Assigned(glTexCoordP3ui) then Exit;
+ glTexCoordP3uiv := wglGetProcAddress('glTexCoordP3uiv');
+ if not Assigned(glTexCoordP3uiv) then Exit;
+ glTexCoordP4ui := wglGetProcAddress('glTexCoordP4ui');
+ if not Assigned(glTexCoordP4ui) then Exit;
+ glTexCoordP4uiv := wglGetProcAddress('glTexCoordP4uiv');
+ if not Assigned(glTexCoordP4uiv) then Exit;
+ glMultiTexCoordP1ui := wglGetProcAddress('glMultiTexCoordP1ui');
+ if not Assigned(glMultiTexCoordP1ui) then Exit;
+ glMultiTexCoordP1uiv := wglGetProcAddress('glMultiTexCoordP1uiv');
+ if not Assigned(glMultiTexCoordP1uiv) then Exit;
+ glMultiTexCoordP2ui := wglGetProcAddress('glMultiTexCoordP2ui');
+ if not Assigned(glMultiTexCoordP2ui) then Exit;
+ glMultiTexCoordP2uiv := wglGetProcAddress('glMultiTexCoordP2uiv');
+ if not Assigned(glMultiTexCoordP2uiv) then Exit;
+ glMultiTexCoordP3ui := wglGetProcAddress('glMultiTexCoordP3ui');
+ if not Assigned(glMultiTexCoordP3ui) then Exit;
+ glMultiTexCoordP3uiv := wglGetProcAddress('glMultiTexCoordP3uiv');
+ if not Assigned(glMultiTexCoordP3uiv) then Exit;
+ glMultiTexCoordP4ui := wglGetProcAddress('glMultiTexCoordP4ui');
+ if not Assigned(glMultiTexCoordP4ui) then Exit;
+ glMultiTexCoordP4uiv := wglGetProcAddress('glMultiTexCoordP4uiv');
+ if not Assigned(glMultiTexCoordP4uiv) then Exit;
+ glNormalP3ui := wglGetProcAddress('glNormalP3ui');
+ if not Assigned(glNormalP3ui) then Exit;
+ glNormalP3uiv := wglGetProcAddress('glNormalP3uiv');
+ if not Assigned(glNormalP3uiv) then Exit;
+ glColorP3ui := wglGetProcAddress('glColorP3ui');
+ if not Assigned(glColorP3ui) then Exit;
+ glColorP3uiv := wglGetProcAddress('glColorP3uiv');
+ if not Assigned(glColorP3uiv) then Exit;
+ glColorP4ui := wglGetProcAddress('glColorP4ui');
+ if not Assigned(glColorP4ui) then Exit;
+ glColorP4uiv := wglGetProcAddress('glColorP4uiv');
+ if not Assigned(glColorP4uiv) then Exit;
+ glSecondaryColorP3ui := wglGetProcAddress('glSecondaryColorP3ui');
+ if not Assigned(glSecondaryColorP3ui) then Exit;
+ glSecondaryColorP3uiv := wglGetProcAddress('glSecondaryColorP3uiv');
+ if not Assigned(glSecondaryColorP3uiv) then Exit;
+ glVertexAttribP1ui := wglGetProcAddress('glVertexAttribP1ui');
+ if not Assigned(glVertexAttribP1ui) then Exit;
+ glVertexAttribP1uiv := wglGetProcAddress('glVertexAttribP1uiv');
+ if not Assigned(glVertexAttribP1uiv) then Exit;
+ glVertexAttribP2ui := wglGetProcAddress('glVertexAttribP2ui');
+ if not Assigned(glVertexAttribP2ui) then Exit;
+ glVertexAttribP2uiv := wglGetProcAddress('glVertexAttribP2uiv');
+ if not Assigned(glVertexAttribP2uiv) then Exit;
+ glVertexAttribP3ui := wglGetProcAddress('glVertexAttribP3ui');
+ if not Assigned(glVertexAttribP3ui) then Exit;
+ glVertexAttribP3uiv := wglGetProcAddress('glVertexAttribP3uiv');
+ if not Assigned(glVertexAttribP3uiv) then Exit;
+ glVertexAttribP4ui := wglGetProcAddress('glVertexAttribP4ui');
+ if not Assigned(glVertexAttribP4ui) then Exit;
+ glVertexAttribP4uiv := wglGetProcAddress('glVertexAttribP4uiv');
+ if not Assigned(glVertexAttribP4uiv) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_gpu_shader_fp64(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_gpu_shader_fp64', extstring) then
+ begin
+ glUniform1d := wglGetProcAddress('glUniform1d');
+ if not Assigned(glUniform1d) then Exit;
+ glUniform2d := wglGetProcAddress('glUniform2d');
+ if not Assigned(glUniform2d) then Exit;
+ glUniform3d := wglGetProcAddress('glUniform3d');
+ if not Assigned(glUniform3d) then Exit;
+ glUniform4d := wglGetProcAddress('glUniform4d');
+ if not Assigned(glUniform4d) then Exit;
+ glUniform1dv := wglGetProcAddress('glUniform1dv');
+ if not Assigned(glUniform1dv) then Exit;
+ glUniform2dv := wglGetProcAddress('glUniform2dv');
+ if not Assigned(glUniform2dv) then Exit;
+ glUniform3dv := wglGetProcAddress('glUniform3dv');
+ if not Assigned(glUniform3dv) then Exit;
+ glUniform4dv := wglGetProcAddress('glUniform4dv');
+ if not Assigned(glUniform4dv) then Exit;
+ glUniformMatrix2dv := wglGetProcAddress('glUniformMatrix2dv');
+ if not Assigned(glUniformMatrix2dv) then Exit;
+ glUniformMatrix3dv := wglGetProcAddress('glUniformMatrix3dv');
+ if not Assigned(glUniformMatrix3dv) then Exit;
+ glUniformMatrix4dv := wglGetProcAddress('glUniformMatrix4dv');
+ if not Assigned(glUniformMatrix4dv) then Exit;
+ glUniformMatrix2x3dv := wglGetProcAddress('glUniformMatrix2x3dv');
+ if not Assigned(glUniformMatrix2x3dv) then Exit;
+ glUniformMatrix2x4dv := wglGetProcAddress('glUniformMatrix2x4dv');
+ if not Assigned(glUniformMatrix2x4dv) then Exit;
+ glUniformMatrix3x2dv := wglGetProcAddress('glUniformMatrix3x2dv');
+ if not Assigned(glUniformMatrix3x2dv) then Exit;
+ glUniformMatrix3x4dv := wglGetProcAddress('glUniformMatrix3x4dv');
+ if not Assigned(glUniformMatrix3x4dv) then Exit;
+ glUniformMatrix4x2dv := wglGetProcAddress('glUniformMatrix4x2dv');
+ if not Assigned(glUniformMatrix4x2dv) then Exit;
+ glUniformMatrix4x3dv := wglGetProcAddress('glUniformMatrix4x3dv');
+ if not Assigned(glUniformMatrix4x3dv) then Exit;
+ glGetUniformdv := wglGetProcAddress('glGetUniformdv');
+ if not Assigned(glGetUniformdv) then Exit;
+ glProgramUniform1dEXT := wglGetProcAddress('glProgramUniform1dEXT');
+ if not Assigned(glProgramUniform1dEXT) then Exit;
+ glProgramUniform2dEXT := wglGetProcAddress('glProgramUniform2dEXT');
+ if not Assigned(glProgramUniform2dEXT) then Exit;
+ glProgramUniform3dEXT := wglGetProcAddress('glProgramUniform3dEXT');
+ if not Assigned(glProgramUniform3dEXT) then Exit;
+ glProgramUniform4dEXT := wglGetProcAddress('glProgramUniform4dEXT');
+ if not Assigned(glProgramUniform4dEXT) then Exit;
+ glProgramUniform1dvEXT := wglGetProcAddress('glProgramUniform1dvEXT');
+ if not Assigned(glProgramUniform1dvEXT) then Exit;
+ glProgramUniform2dvEXT := wglGetProcAddress('glProgramUniform2dvEXT');
+ if not Assigned(glProgramUniform2dvEXT) then Exit;
+ glProgramUniform3dvEXT := wglGetProcAddress('glProgramUniform3dvEXT');
+ if not Assigned(glProgramUniform3dvEXT) then Exit;
+ glProgramUniform4dvEXT := wglGetProcAddress('glProgramUniform4dvEXT');
+ if not Assigned(glProgramUniform4dvEXT) then Exit;
+ glProgramUniformMatrix2dvEXT := wglGetProcAddress('glProgramUniformMatrix2dvEXT');
+ if not Assigned(glProgramUniformMatrix2dvEXT) then Exit;
+ glProgramUniformMatrix3dvEXT := wglGetProcAddress('glProgramUniformMatrix3dvEXT');
+ if not Assigned(glProgramUniformMatrix3dvEXT) then Exit;
+ glProgramUniformMatrix4dvEXT := wglGetProcAddress('glProgramUniformMatrix4dvEXT');
+ if not Assigned(glProgramUniformMatrix4dvEXT) then Exit;
+ glProgramUniformMatrix2x3dvEXT := wglGetProcAddress('glProgramUniformMatrix2x3dvEXT');
+ if not Assigned(glProgramUniformMatrix2x3dvEXT) then Exit;
+ glProgramUniformMatrix2x4dvEXT := wglGetProcAddress('glProgramUniformMatrix2x4dvEXT');
+ if not Assigned(glProgramUniformMatrix2x4dvEXT) then Exit;
+ glProgramUniformMatrix3x2dvEXT := wglGetProcAddress('glProgramUniformMatrix3x2dvEXT');
+ if not Assigned(glProgramUniformMatrix3x2dvEXT) then Exit;
+ glProgramUniformMatrix3x4dvEXT := wglGetProcAddress('glProgramUniformMatrix3x4dvEXT');
+ if not Assigned(glProgramUniformMatrix3x4dvEXT) then Exit;
+ glProgramUniformMatrix4x2dvEXT := wglGetProcAddress('glProgramUniformMatrix4x2dvEXT');
+ if not Assigned(glProgramUniformMatrix4x2dvEXT) then Exit;
+ glProgramUniformMatrix4x3dvEXT := wglGetProcAddress('glProgramUniformMatrix4x3dvEXT');
+ if not Assigned(glProgramUniformMatrix4x3dvEXT) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_shader_subroutine(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_shader_subroutine', extstring) then
+ begin
+ glGetSubroutineUniformLocation := wglGetProcAddress('glGetSubroutineUniformLocation');
+ if not Assigned(glGetSubroutineUniformLocation) then Exit;
+ glGetSubroutineIndex := wglGetProcAddress('glGetSubroutineIndex');
+ if not Assigned(glGetSubroutineIndex) then Exit;
+ glGetActiveSubroutineUniformiv := wglGetProcAddress('glGetActiveSubroutineUniformiv');
+ if not Assigned(glGetActiveSubroutineUniformiv) then Exit;
+ glGetActiveSubroutineUniformName := wglGetProcAddress('glGetActiveSubroutineUniformName');
+ if not Assigned(glGetActiveSubroutineUniformName) then Exit;
+ glGetActiveSubroutineName := wglGetProcAddress('glGetActiveSubroutineName');
+ if not Assigned(glGetActiveSubroutineName) then Exit;
+ glUniformSubroutinesuiv := wglGetProcAddress('glUniformSubroutinesuiv');
+ if not Assigned(glUniformSubroutinesuiv) then Exit;
+ glGetUniformSubroutineuiv := wglGetProcAddress('glGetUniformSubroutineuiv');
+ if not Assigned(glGetUniformSubroutineuiv) then Exit;
+ glGetProgramStageiv := wglGetProcAddress('glGetProgramStageiv');
+ if not Assigned(glGetProgramStageiv) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_tessellation_shader(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_tessellation_shader', extstring) then
+ begin
+ glPatchParameteri := wglGetProcAddress('glPatchParameteri');
+ if not Assigned(glPatchParameteri) then Exit;
+ glPatchParameterfv := wglGetProcAddress('glPatchParameterfv');
+ if not Assigned(glPatchParameterfv) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_transform_feedback2(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_transform_feedback2', extstring) then
+ begin
+ glBindTransformFeedback := wglGetProcAddress('glBindTransformFeedback');
+ if not Assigned(glBindTransformFeedback) then Exit;
+ glDeleteTransformFeedbacks := wglGetProcAddress('glDeleteTransformFeedbacks');
+ if not Assigned(glDeleteTransformFeedbacks) then Exit;
+ glGenTransformFeedbacks := wglGetProcAddress('glGenTransformFeedbacks');
+ if not Assigned(glGenTransformFeedbacks) then Exit;
+ glIsTransformFeedback := wglGetProcAddress('glIsTransformFeedback');
+ if not Assigned(glIsTransformFeedback) then Exit;
+ glPauseTransformFeedback := wglGetProcAddress('glPauseTransformFeedback');
+ if not Assigned(glPauseTransformFeedback) then Exit;
+ glResumeTransformFeedback := wglGetProcAddress('glResumeTransformFeedback');
+ if not Assigned(glResumeTransformFeedback) then Exit;
+ glDrawTransformFeedback := wglGetProcAddress('glDrawTransformFeedback');
+ if not Assigned(glDrawTransformFeedback) then Exit;
+ Result := True;
+ end;
+end;
+
+function Load_GL_ARB_transform_feedback3(): Boolean;
+var
+ extstring: String;
+begin
+ Result := False;
+ extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+ if glext_ExtensionSupported('GL_ARB_transform_feedback3', extstring) then
+ begin
+ glDrawTransformFeedbackStream := wglGetProcAddress('glDrawTransformFeedbackStream');
+ if not Assigned(glDrawTransformFeedbackStream) then Exit;
+ glBeginQueryIndexed := wglGetProcAddress('glBeginQueryIndexed');
+ if not Assigned(glBeginQueryIndexed) then Exit;
+ glEndQueryIndexed := wglGetProcAddress('glEndQueryIndexed');
+ if not Assigned(glEndQueryIndexed) then Exit;
+ glGetQueryIndexediv := wglGetProcAddress('glGetQueryIndexediv');
+ if not Assigned(glGetQueryIndexediv) then Exit;
+ Result := True;
+ end;
+end;
+
function Load_GL_version_1_4: Boolean;
var
extstring: String;
@@ -9541,4 +10933,202 @@ begin
end;
+function Load_GL_VERSION_2_1(): Boolean;
+begin
+ Result := False;
+ glUniformMatrix2x3fv := wglGetProcAddress('glUniformMatrix2x3fv');
+ if not Assigned(glUniformMatrix2x3fv) then Exit;
+ glUniformMatrix3x2fv := wglGetProcAddress('glUniformMatrix3x2fv');
+ if not Assigned(glUniformMatrix3x2fv) then Exit;
+ glUniformMatrix2x4fv := wglGetProcAddress('glUniformMatrix2x4fv');
+ if not Assigned(glUniformMatrix2x4fv) then Exit;
+ glUniformMatrix4x2fv := wglGetProcAddress('glUniformMatrix4x2fv');
+ if not Assigned(glUniformMatrix4x2fv) then Exit;
+ glUniformMatrix3x4fv := wglGetProcAddress('glUniformMatrix3x4fv');
+ if not Assigned(glUniformMatrix3x4fv) then Exit;
+ glUniformMatrix4x3fv := wglGetProcAddress('glUniformMatrix4x3fv');
+ if not Assigned(glUniformMatrix4x3fv) then Exit;
+ Result := Load_GL_VERSION_2_0();
+end;
+
+function Load_GL_VERSION_3_0(): Boolean;
+begin
+ Result := False;
+ glColorMaski := wglGetProcAddress('glColorMaski');
+ if not Assigned(glColorMaski) then Exit;
+ glGetBooleani_v := wglGetProcAddress('glGetBooleani_v');
+ if not Assigned(glGetBooleani_v) then Exit;
+ glGetIntegeri_v := wglGetProcAddress('glGetIntegeri_v');
+ if not Assigned(glGetIntegeri_v) then Exit;
+ glEnablei := wglGetProcAddress('glEnablei');
+ if not Assigned(glEnablei) then Exit;
+ glDisablei := wglGetProcAddress('glDisablei');
+ if not Assigned(glDisablei) then Exit;
+ glIsEnabledi := wglGetProcAddress('glIsEnabledi');
+ if not Assigned(glIsEnabledi) then Exit;
+ glBeginTransformFeedback := wglGetProcAddress('glBeginTransformFeedback');
+ if not Assigned(glBeginTransformFeedback) then Exit;
+ glEndTransformFeedback := wglGetProcAddress('glEndTransformFeedback');
+ if not Assigned(glEndTransformFeedback) then Exit;
+ glBindBufferRange := wglGetProcAddress('glBindBufferRange');
+ if not Assigned(glBindBufferRange) then Exit;
+ glBindBufferBase := wglGetProcAddress('glBindBufferBase');
+ if not Assigned(glBindBufferBase) then Exit;
+ glTransformFeedbackVaryings := wglGetProcAddress('glTransformFeedbackVaryings');
+ if not Assigned(glTransformFeedbackVaryings) then Exit;
+ glGetTransformFeedbackVarying := wglGetProcAddress('glGetTransformFeedbackVarying');
+ if not Assigned(glGetTransformFeedbackVarying) then Exit;
+ glClampColor := wglGetProcAddress('glClampColor');
+ if not Assigned(glClampColor) then Exit;
+ glBeginConditionalRender := wglGetProcAddress('glBeginConditionalRender');
+ if not Assigned(glBeginConditionalRender) then Exit;
+ glEndConditionalRender := wglGetProcAddress('glEndConditionalRender');
+ if not Assigned(glEndConditionalRender) then Exit;
+ glVertexAttribIPointer := wglGetProcAddress('glVertexAttribIPointer');
+ if not Assigned(glVertexAttribIPointer) then Exit;
+ glGetVertexAttribIiv := wglGetProcAddress('glGetVertexAttribIiv');
+ if not Assigned(glGetVertexAttribIiv) then Exit;
+ glGetVertexAttribIuiv := wglGetProcAddress('glGetVertexAttribIuiv');
+ if not Assigned(glGetVertexAttribIuiv) then Exit;
+ glVertexAttribI1i := wglGetProcAddress('glVertexAttribI1i');
+ if not Assigned(glVertexAttribI1i) then Exit;
+ glVertexAttribI2i := wglGetProcAddress('glVertexAttribI2i');
+ if not Assigned(glVertexAttribI2i) then Exit;
+ glVertexAttribI3i := wglGetProcAddress('glVertexAttribI3i');
+ if not Assigned(glVertexAttribI3i) then Exit;
+ glVertexAttribI4i := wglGetProcAddress('glVertexAttribI4i');
+ if not Assigned(glVertexAttribI4i) then Exit;
+ glVertexAttribI1ui := wglGetProcAddress('glVertexAttribI1ui');
+ if not Assigned(glVertexAttribI1ui) then Exit;
+ glVertexAttribI2ui := wglGetProcAddress('glVertexAttribI2ui');
+ if not Assigned(glVertexAttribI2ui) then Exit;
+ glVertexAttribI3ui := wglGetProcAddress('glVertexAttribI3ui');
+ if not Assigned(glVertexAttribI3ui) then Exit;
+ glVertexAttribI4ui := wglGetProcAddress('glVertexAttribI4ui');
+ if not Assigned(glVertexAttribI4ui) then Exit;
+ glVertexAttribI1iv := wglGetProcAddress('glVertexAttribI1iv');
+ if not Assigned(glVertexAttribI1iv) then Exit;
+ glVertexAttribI2iv := wglGetProcAddress('glVertexAttribI2iv');
+ if not Assigned(glVertexAttribI2iv) then Exit;
+ glVertexAttribI3iv := wglGetProcAddress('glVertexAttribI3iv');
+ if not Assigned(glVertexAttribI3iv) then Exit;
+ glVertexAttribI4iv := wglGetProcAddress('glVertexAttribI4iv');
+ if not Assigned(glVertexAttribI4iv) then Exit;
+ glVertexAttribI1uiv := wglGetProcAddress('glVertexAttribI1uiv');
+ if not Assigned(glVertexAttribI1uiv) then Exit;
+ glVertexAttribI2uiv := wglGetProcAddress('glVertexAttribI2uiv');
+ if not Assigned(glVertexAttribI2uiv) then Exit;
+ glVertexAttribI3uiv := wglGetProcAddress('glVertexAttribI3uiv');
+ if not Assigned(glVertexAttribI3uiv) then Exit;
+ glVertexAttribI4uiv := wglGetProcAddress('glVertexAttribI4uiv');
+ if not Assigned(glVertexAttribI4uiv) then Exit;
+ glVertexAttribI4bv := wglGetProcAddress('glVertexAttribI4bv');
+ if not Assigned(glVertexAttribI4bv) then Exit;
+ glVertexAttribI4sv := wglGetProcAddress('glVertexAttribI4sv');
+ if not Assigned(glVertexAttribI4sv) then Exit;
+ glVertexAttribI4ubv := wglGetProcAddress('glVertexAttribI4ubv');
+ if not Assigned(glVertexAttribI4ubv) then Exit;
+ glVertexAttribI4usv := wglGetProcAddress('glVertexAttribI4usv');
+ if not Assigned(glVertexAttribI4usv) then Exit;
+ glGetUniformuiv := wglGetProcAddress('glGetUniformuiv');
+ if not Assigned(glGetUniformuiv) then Exit;
+ glBindFragDataLocation := wglGetProcAddress('glBindFragDataLocation');
+ if not Assigned(glBindFragDataLocation) then Exit;
+ glGetFragDataLocation := wglGetProcAddress('glGetFragDataLocation');
+ if not Assigned(glGetFragDataLocation) then Exit;
+ glUniform1ui := wglGetProcAddress('glUniform1ui');
+ if not Assigned(glUniform1ui) then Exit;
+ glUniform2ui := wglGetProcAddress('glUniform2ui');
+ if not Assigned(glUniform2ui) then Exit;
+ glUniform3ui := wglGetProcAddress('glUniform3ui');
+ if not Assigned(glUniform3ui) then Exit;
+ glUniform4ui := wglGetProcAddress('glUniform4ui');
+ if not Assigned(glUniform4ui) then Exit;
+ glUniform1uiv := wglGetProcAddress('glUniform1uiv');
+ if not Assigned(glUniform1uiv) then Exit;
+ glUniform2uiv := wglGetProcAddress('glUniform2uiv');
+ if not Assigned(glUniform2uiv) then Exit;
+ glUniform3uiv := wglGetProcAddress('glUniform3uiv');
+ if not Assigned(glUniform3uiv) then Exit;
+ glUniform4uiv := wglGetProcAddress('glUniform4uiv');
+ if not Assigned(glUniform4uiv) then Exit;
+ glTexParameterIiv := wglGetProcAddress('glTexParameterIiv');
+ if not Assigned(glTexParameterIiv) then Exit;
+ glTexParameterIuiv := wglGetProcAddress('glTexParameterIuiv');
+ if not Assigned(glTexParameterIuiv) then Exit;
+ glGetTexParameterIiv := wglGetProcAddress('glGetTexParameterIiv');
+ if not Assigned(glGetTexParameterIiv) then Exit;
+ glGetTexParameterIuiv := wglGetProcAddress('glGetTexParameterIuiv');
+ if not Assigned(glGetTexParameterIuiv) then Exit;
+ glClearBufferiv := wglGetProcAddress('glClearBufferiv');
+ if not Assigned(glClearBufferiv) then Exit;
+ glClearBufferuiv := wglGetProcAddress('glClearBufferuiv');
+ if not Assigned(glClearBufferuiv) then Exit;
+ glClearBufferfv := wglGetProcAddress('glClearBufferfv');
+ if not Assigned(glClearBufferfv) then Exit;
+ glClearBufferfi := wglGetProcAddress('glClearBufferfi');
+ if not Assigned(glClearBufferfi) then Exit;
+ glGetStringi := wglGetProcAddress('glGetStringi');
+ if not Assigned(glGetStringi) then Exit;
+ if not Load_GL_ARB_framebuffer_object() then Exit;
+ if not Load_GL_ARB_map_buffer_range() then Exit;
+ if not Load_GL_ARB_vertex_array_object() then Exit;
+ Result := Load_GL_VERSION_2_1();
+end;
+
+function Load_GL_VERSION_3_1(): Boolean;
+begin
+ Result := False;
+ glDrawArraysInstanced := wglGetProcAddress('glDrawArraysInstanced');
+ if not Assigned(glDrawArraysInstanced) then Exit;
+ glDrawElementsInstanced := wglGetProcAddress('glDrawElementsInstanced');
+ if not Assigned(glDrawElementsInstanced) then Exit;
+ glTexBuffer := wglGetProcAddress('glTexBuffer');
+ if not Assigned(glTexBuffer) then Exit;
+ glPrimitiveRestartIndex := wglGetProcAddress('glPrimitiveRestartIndex');
+ if not Assigned(glPrimitiveRestartIndex) then Exit;
+ if not Load_GL_ARB_copy_buffer() then Exit;
+ if not Load_GL_ARB_uniform_buffer_object() then Exit;
+ Result := Load_GL_VERSION_3_0();
+end;
+
+function Load_GL_VERSION_3_2(): Boolean;
+begin
+ Result := False;
+ glGetInteger64i_v := wglGetProcAddress('glGetInteger64i_v');
+ if not Assigned(glGetInteger64i_v) then Exit;
+ glGetBufferParameteri64v := wglGetProcAddress('glGetBufferParameteri64v');
+ if not Assigned(glGetBufferParameteri64v) then Exit;
+ glProgramParameteri := wglGetProcAddress('glProgramParameteri');
+ if not Assigned(glProgramParameteri) then Exit;
+ glFramebufferTexture := wglGetProcAddress('glFramebufferTexture');
+ if not Assigned(glFramebufferTexture) then Exit;
+ if not Load_GL_ARB_draw_elements_base_vertex() then Exit;
+ if not Load_GL_ARB_provoking_vertex() then Exit;
+ if not Load_GL_ARB_sync() then Exit;
+ if not Load_GL_ARB_texture_multisample() then Exit;
+ Result := Load_GL_VERSION_3_1();
+end;
+
+function Load_GL_VERSION_3_3(): Boolean;
+begin
+ Result := False;
+ if not Load_GL_ARB_blend_func_extended() then Exit;
+ if not Load_GL_ARB_sampler_objects() then Exit;
+ if not Load_GL_ARB_timer_query() then Exit;
+ if not Load_GL_ARB_vertex_type_2_10_10_10_rev() then Exit;
+ Result := Load_GL_VERSION_3_2();
+end;
+
+function Load_GL_VERSION_4_0(): Boolean;
+begin
+ Result := False;
+ if not Load_GL_ARB_gpu_shader_fp64() then Exit;
+ if not Load_GL_ARB_shader_subroutine() then Exit;
+ if not Load_GL_ARB_tessellation_shader() then Exit;
+ if not Load_GL_ARB_transform_feedback2() then Exit;
+ if not Load_GL_ARB_transform_feedback3() then Exit;
+ Result := Load_GL_VERSION_3_3();
+end;
+
end.