diff options
author | David Srbecky <dsrbecky@google.com> | 2015-08-03 17:25:22 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2015-08-03 17:25:22 +0000 |
commit | 9978fc4edc0e9741cd15648bb52a4dcf3fff2ba5 (patch) | |
tree | 031a973717c5cd45373126d65981e90d2728dd14 | |
parent | c3468d83b12a4ed36408fdd99c73f1e5950f581c (diff) | |
parent | 58a74e6b0e80f33a4b2b3200a3ecab295196a95a (diff) | |
download | gpu-9978fc4edc0e9741cd15648bb52a4dcf3fff2ba5.tar.gz |
Add generated GLES api code.
automerge: 58a74e6
* commit '58a74e6b0e80f33a4b2b3200a3ecab295196a95a':
Add generated GLES api code.
24 files changed, 16751 insertions, 0 deletions
diff --git a/gfxapi/gles/api/android_extension_pack.api b/gfxapi/gles/api/android_extension_pack.api new file mode 100644 index 000000000..c6b8b6b3b --- /dev/null +++ b/gfxapi/gles/api/android_extension_pack.api @@ -0,0 +1,291 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/blend_equation_advanced.txt","GL_KHR_blend_equation_advanced") +cmd void glBlendBarrierKHR() { + requiresExtension(GL_KHR_blend_equation_advanced) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_draw_buffers_indexed.txt","GL_EXT_draw_buffers_indexed") +cmd void glBlendEquationSeparateiEXT(GLuint buf, GLenum modeRGB, GLenum modeAlpha) { + requiresExtension(GL_EXT_draw_buffers_indexed) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_draw_buffers_indexed.txt","GL_EXT_draw_buffers_indexed") +cmd void glBlendEquationiEXT(GLuint buf, GLenum mode) { + requiresExtension(GL_EXT_draw_buffers_indexed) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_draw_buffers_indexed.txt","GL_EXT_draw_buffers_indexed") +cmd void glBlendFuncSeparateiEXT(GLuint buf, + GLenum srcRGB, + GLenum dstRGB, + GLenum srcAlpha, + GLenum dstAlpha) { + requiresExtension(GL_EXT_draw_buffers_indexed) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_draw_buffers_indexed.txt","GL_EXT_draw_buffers_indexed") +cmd void glBlendFunciEXT(GLuint buf, GLenum src, GLenum dst) { + requiresExtension(GL_EXT_draw_buffers_indexed) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_draw_buffers_indexed.txt","GL_EXT_draw_buffers_indexed") +cmd void glColorMaskiEXT(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) { + requiresExtension(GL_EXT_draw_buffers_indexed) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_copy_image.txt","GL_EXT_copy_image") +cmd void glCopyImageSubDataEXT(GLuint srcName, + GLenum srcTarget, + GLint srcLevel, + GLint srcX, + GLint srcY, + GLint srcZ, + GLuint dstName, + GLenum dstTarget, + GLint dstLevel, + GLint dstX, + GLint dstY, + GLint dstZ, + GLsizei srcWidth, + GLsizei srcHeight, + GLsizei srcDepth) { + requiresExtension(GL_EXT_copy_image) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/debug.txt","GL_KHR_debug") +cmd void glDebugMessageCallbackKHR(GLDEBUGPROCKHR callback, const void* userParam) { + requiresExtension(GL_KHR_debug) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/debug.txt","GL_KHR_debug") +cmd void glDebugMessageControlKHR(GLenum source, + GLenum type, + GLenum severity, + GLsizei count, + const GLuint* ids, + GLboolean enabled) { + requiresExtension(GL_KHR_debug) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/debug.txt","GL_KHR_debug") +cmd void glDebugMessageInsertKHR(GLenum source, + GLenum type, + GLuint id, + GLenum severity, + GLsizei length, + const GLchar* buf) { + requiresExtension(GL_KHR_debug) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_draw_buffers_indexed.txt","GL_EXT_draw_buffers_indexed") +cmd void glDisableiEXT(GLenum target, GLuint index) { + requiresExtension(GL_EXT_draw_buffers_indexed) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_draw_buffers_indexed.txt","GL_EXT_draw_buffers_indexed") +cmd void glEnableiEXT(GLenum target, GLuint index) { + requiresExtension(GL_EXT_draw_buffers_indexed) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_geometry_shader.txt","GL_EXT_geometry_shader") +cmd void glFramebufferTextureEXT(GLenum target, GLenum attachment, TextureId texture, GLint level) { + requiresExtension(GL_EXT_geometry_shader) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/debug.txt","GL_KHR_debug") +cmd GLuint glGetDebugMessageLogKHR(GLuint count, + GLsizei bufSize, + GLenum* sources, + GLenum* types, + GLuint* ids, + GLenum* severities, + GLsizei* lengths, + GLchar* messageLog) { + requiresExtension(GL_KHR_debug) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/debug.txt","GL_KHR_debug") +cmd void glGetObjectLabelKHR(GLenum identifier, + GLuint name, + GLsizei bufSize, + GLsizei* length, + GLchar* label) { + requiresExtension(GL_KHR_debug) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/debug.txt","GL_KHR_debug") +cmd void glGetObjectPtrLabelKHR(const void* ptr, + GLsizei bufSize, + GLsizei* length, + GLchar* label) { + requiresExtension(GL_KHR_debug) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/debug.txt","GL_KHR_debug") +cmd void glGetPointervKHR(GLenum pname, void** params) { + requiresExtension(GL_KHR_debug) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_border_clamp.txt","GL_EXT_texture_border_clamp") +cmd void glGetSamplerParameterIivEXT(SamplerId sampler, GLenum pname, GLint* params) { + requiresExtension(GL_EXT_texture_border_clamp) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_border_clamp.txt","GL_EXT_texture_border_clamp") +cmd void glGetSamplerParameterIuivEXT(SamplerId sampler, GLenum pname, GLuint* params) { + requiresExtension(GL_EXT_texture_border_clamp) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_border_clamp.txt","GL_EXT_texture_border_clamp") +cmd void glGetTexParameterIivEXT(GLenum target, GLenum pname, GLint* params) { + requiresExtension(GL_EXT_texture_border_clamp) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_border_clamp.txt","GL_EXT_texture_border_clamp") +cmd void glGetTexParameterIuivEXT(GLenum target, GLenum pname, GLuint* params) { + requiresExtension(GL_EXT_texture_border_clamp) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_draw_buffers_indexed.txt","GL_EXT_draw_buffers_indexed") +cmd bool glIsEnablediEXT(GLenum target, GLuint index) { + requiresExtension(GL_EXT_draw_buffers_indexed) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_sample_shading.txt","GL_OES_sample_shading") +cmd void glMinSampleShadingOES(GLfloat value) { + requiresExtension(GL_OES_sample_shading) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/debug.txt","GL_KHR_debug") +cmd void glObjectLabelKHR(GLenum identifier, GLuint name, GLsizei length, const GLchar* label) { + requiresExtension(GL_KHR_debug) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/debug.txt","GL_KHR_debug") +cmd void glObjectPtrLabelKHR(const void* ptr, GLsizei length, const GLchar* label) { + requiresExtension(GL_KHR_debug) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_tessellation_shader.txt","GL_EXT_tessellation_shader") +cmd void glPatchParameteriEXT(GLenum pname, GLint value) { + requiresExtension(GL_EXT_tessellation_shader) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/debug.txt","GL_KHR_debug") +cmd void glPopDebugGroupKHR() { + requiresExtension(GL_KHR_debug) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_primitive_bounding_box.txt","GL_EXT_primitive_bounding_box") +cmd void glPrimitiveBoundingBoxEXT(GLfloat minX, + GLfloat minY, + GLfloat minZ, + GLfloat minW, + GLfloat maxX, + GLfloat maxY, + GLfloat maxZ, + GLfloat maxW) { + requiresExtension(GL_EXT_primitive_bounding_box) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/debug.txt","GL_KHR_debug") +cmd void glPushDebugGroupKHR(GLenum source, GLuint id, GLsizei length, const GLchar* message) { + requiresExtension(GL_KHR_debug) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_border_clamp.txt","GL_EXT_texture_border_clamp") +cmd void glSamplerParameterIivEXT(SamplerId sampler, GLenum pname, const GLint* param) { + requiresExtension(GL_EXT_texture_border_clamp) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_border_clamp.txt","GL_EXT_texture_border_clamp") +cmd void glSamplerParameterIuivEXT(SamplerId sampler, GLenum pname, const GLuint* param) { + requiresExtension(GL_EXT_texture_border_clamp) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_buffer.txt","GL_EXT_texture_buffer") +cmd void glTexBufferEXT(GLenum target, GLenum internalformat, BufferId buffer) { + requiresExtension(GL_EXT_texture_buffer) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_buffer.txt","GL_EXT_texture_buffer") +cmd void glTexBufferRangeEXT(GLenum target, + GLenum internalformat, + BufferId buffer, + GLintptr offset, + GLsizeiptr size) { + requiresExtension(GL_EXT_texture_buffer) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_border_clamp.txt","GL_EXT_texture_border_clamp") +cmd void glTexParameterIivEXT(GLenum target, GLenum pname, const GLint* params) { + requiresExtension(GL_EXT_texture_border_clamp) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_border_clamp.txt","GL_EXT_texture_border_clamp") +cmd void glTexParameterIuivEXT(GLenum target, GLenum pname, const GLuint* params) { + requiresExtension(GL_EXT_texture_border_clamp) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_storage_multisample_2d_array.txt","GL_OES_texture_storage_multisample_2d_array") +cmd void glTexStorage3DMultisampleOES(GLenum target, + GLsizei samples, + GLenum internalformat, + GLsizei width, + GLsizei height, + GLsizei depth, + GLboolean fixedsamplelocations) { + requiresExtension(GL_OES_texture_storage_multisample_2d_array) + // TODO +} + diff --git a/gfxapi/gles/api/asynchronous_queries.api b/gfxapi/gles/api/asynchronous_queries.api new file mode 100644 index 000000000..41ad05dc4 --- /dev/null +++ b/gfxapi/gles/api/asynchronous_queries.api @@ -0,0 +1,122 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBeginQuery.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBeginQuery.xhtml","OpenGL ES 3.1") +cmd void glBeginQuery(GLenum target, QueryId query) { + minRequiredVersion(3, 0) + switch (target) { + case GL_ANY_SAMPLES_PASSED, GL_ANY_SAMPLES_PASSED_CONSERVATIVE, + GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteQueries.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDeleteQueries.xhtml","OpenGL ES 3.1") +cmd void glDeleteQueries(GLsizei count, const QueryId* queries) { + minRequiredVersion(3, 0) + + q := queries[0:count] + ctx := GetContext() + for i in (0 .. count) { + ctx.Instances.Queries[q[i]] = null + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBeginQuery.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBeginQuery.xhtml","OpenGL ES 3.1") +cmd void glEndQuery(GLenum target) { + minRequiredVersion(3, 0) + switch (target) { + case GL_ANY_SAMPLES_PASSED, GL_ANY_SAMPLES_PASSED_CONSERVATIVE, + GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGenQueries.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGenQueries.xhtml","OpenGL ES 3.1") +cmd void glGenQueries(GLsizei count, QueryId* queries) { + minRequiredVersion(3, 0) + + q := queries[0:count] + ctx := GetContext() + for i in (0 .. count) { + id := as!QueryId(?) + ctx.Instances.Queries[id] = new!Query() + q[i] = id + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetQueryObjectuiv.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetQueryObjectuiv.xhtml","OpenGL ES 3.1") +cmd void glGetQueryObjectuiv(QueryId query, GLenum parameter, GLuint* value) { + minRequiredVersion(3, 0) + switch (parameter) { + case GL_QUERY_RESULT, GL_QUERY_RESULT_AVAILABLE: { + // version 3.0 + } + default: { + glErrorInvalidEnum(parameter) + } + } + + value[0] = ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetQueryiv.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetQueryiv.xhtml","OpenGL ES 3.1") +cmd void glGetQueryiv(GLenum target, GLenum parameter, GLint* value) { + minRequiredVersion(3, 0) + switch (target) { + case GL_ANY_SAMPLES_PASSED, GL_ANY_SAMPLES_PASSED_CONSERVATIVE, + GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (parameter) { + case GL_CURRENT_QUERY: { + // version 3.0 + } + default: { + glErrorInvalidEnum(parameter) + } + } + + value[0] = ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glIsQuery.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glIsQuery.xhtml","OpenGL ES 3.1") +cmd bool glIsQuery(QueryId query) { + minRequiredVersion(3, 0) + + ctx := GetContext() + return query in ctx.Instances.Queries +} + diff --git a/gfxapi/gles/api/buffer_objects.api b/gfxapi/gles/api/buffer_objects.api new file mode 100644 index 000000000..594fa4443 --- /dev/null +++ b/gfxapi/gles/api/buffer_objects.api @@ -0,0 +1,388 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBindBuffer.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBindBuffer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindBuffer.xhtml","OpenGL ES 3.1") +cmd void glBindBuffer(GLenum target, BufferId buffer) { + minRequiredVersion(2, 0) + switch (target) { + case GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER: { + // version 2.0 + } + case GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, GL_PIXEL_PACK_BUFFER, GL_PIXEL_UNPACK_BUFFER, + GL_TRANSFORM_FEEDBACK_BUFFER, GL_UNIFORM_BUFFER: { + minRequiredVersion(3, 0) + } + case GL_ATOMIC_COUNTER_BUFFER, GL_DISPATCH_INDIRECT_BUFFER, GL_DRAW_INDIRECT_BUFFER, + GL_SHADER_STORAGE_BUFFER: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + + ctx := GetContext() + if !(buffer in ctx.Instances.Buffers) { + ctx.Instances.Buffers[buffer] = new!Buffer() + } + ctx.BoundBuffers[target] = buffer +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBindBufferBase.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindBufferBase.xhtml","OpenGL ES 3.1") +cmd void glBindBufferBase(GLenum target, GLuint index, BufferId buffer) { + minRequiredVersion(3, 0) + switch (target) { + case GL_TRANSFORM_FEEDBACK_BUFFER, GL_UNIFORM_BUFFER: { + // version 3.0 + } + case GL_ATOMIC_COUNTER_BUFFER, GL_SHADER_STORAGE_BUFFER: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBindBufferRange.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindBufferRange.xhtml","OpenGL ES 3.1") +cmd void glBindBufferRange(GLenum target, + GLuint index, + BufferId buffer, + GLintptr offset, + GLsizeiptr size) { + minRequiredVersion(3, 0) + switch (target) { + case GL_TRANSFORM_FEEDBACK_BUFFER, GL_UNIFORM_BUFFER: { + // version 3.0 + } + case GL_ATOMIC_COUNTER_BUFFER, GL_SHADER_STORAGE_BUFFER: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBufferData.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBufferData.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBufferData.xhtml","OpenGL ES 3.1") +cmd void glBufferData(GLenum target, GLsizeiptr size, BufferDataPointer data, GLenum usage) { + minRequiredVersion(2, 0) + switch (target) { + case GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER: { + // version 2.0 + } + case GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, GL_PIXEL_PACK_BUFFER, GL_PIXEL_UNPACK_BUFFER, + GL_TRANSFORM_FEEDBACK_BUFFER, GL_UNIFORM_BUFFER: { + minRequiredVersion(3, 0) + } + case GL_ATOMIC_COUNTER_BUFFER, GL_DISPATCH_INDIRECT_BUFFER, GL_DRAW_INDIRECT_BUFFER, + GL_SHADER_STORAGE_BUFFER: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + switch (usage) { + case GL_DYNAMIC_DRAW, GL_STATIC_DRAW, GL_STREAM_DRAW: { + // version 2.0 + } + case GL_DYNAMIC_COPY, GL_DYNAMIC_READ, GL_STATIC_COPY, GL_STATIC_READ, GL_STREAM_COPY, + GL_STREAM_READ: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(usage) + } + } + + ctx := GetContext() + id := ctx.BoundBuffers[target] + b := ctx.Instances.Buffers[id] + b.Data = switch (data != null) { + case true: clone(as!u8*(data)[0:size]) + case false: make!u8(size) + } + b.Size = size + b.Usage = usage +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBufferSubData.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBufferSubData.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBufferSubData.xhtml","OpenGL ES 3.1") +cmd void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, BufferDataPointer data) { + minRequiredVersion(2, 0) + switch (target) { + case GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER: { + // version 2.0 + } + case GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, GL_PIXEL_PACK_BUFFER, GL_PIXEL_UNPACK_BUFFER, + GL_TRANSFORM_FEEDBACK_BUFFER, GL_UNIFORM_BUFFER: { + minRequiredVersion(3, 0) + } + case GL_ATOMIC_COUNTER_BUFFER, GL_DISPATCH_INDIRECT_BUFFER, GL_DRAW_INDIRECT_BUFFER, + GL_SHADER_STORAGE_BUFFER: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + + read(data[0:size]) + // TODO: Assignment to subset +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCopyBufferSubData.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCopyBufferSubData.xhtml","OpenGL ES 3.1") +cmd void glCopyBufferSubData(GLenum readTarget, + GLenum writeTarget, + GLintptr readOffset, + GLintptr writeOffset, + GLsizeiptr size) { + minRequiredVersion(3, 0) + switch (readTarget) { + case GL_ARRAY_BUFFER, GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, GL_ELEMENT_ARRAY_BUFFER, + GL_PIXEL_PACK_BUFFER, GL_PIXEL_UNPACK_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER, + GL_UNIFORM_BUFFER: { + // version 3.0 + } + default: { + glErrorInvalidEnum(readTarget) + } + } + switch (writeTarget) { + case GL_ARRAY_BUFFER, GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, GL_ELEMENT_ARRAY_BUFFER, + GL_PIXEL_PACK_BUFFER, GL_PIXEL_UNPACK_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER, + GL_UNIFORM_BUFFER: { + // version 3.0 + } + default: { + glErrorInvalidEnum(writeTarget) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glDeleteBuffers.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteBuffers.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDeleteBuffers.xhtml","OpenGL ES 3.1") +cmd void glDeleteBuffers(GLsizei count, const BufferId* buffers) { + minRequiredVersion(2, 0) + + b := buffers[0:count] + ctx := GetContext() + for i in (0 .. count) { + ctx.Instances.Buffers[b[i]] = null + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGenBuffers.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGenBuffers.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGenBuffers.xhtml","OpenGL ES 3.1") +cmd void glGenBuffers(GLsizei count, BufferId* buffers) { + minRequiredVersion(2, 0) + + b := buffers[0:count] + ctx := GetContext() + for i in (0 .. count) { + id := as!BufferId(?) + ctx.Instances.Buffers[id] = new!Buffer() + b[i] = id + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetBufferParameter.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetBufferParameter.xhtml","OpenGL ES 3.1") +cmd void glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params) { + minRequiredVersion(3, 0) + switch (target) { + case GL_ARRAY_BUFFER, GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, GL_ELEMENT_ARRAY_BUFFER, + GL_PIXEL_PACK_BUFFER, GL_PIXEL_UNPACK_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER, + GL_UNIFORM_BUFFER: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (pname) { + case GL_BUFFER_ACCESS_FLAGS, GL_BUFFER_MAPPED, GL_BUFFER_MAP_LENGTH, GL_BUFFER_MAP_OFFSET, + GL_BUFFER_SIZE, GL_BUFFER_USAGE: { + // version 3.0 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetBufferParameteriv.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetBufferParameter.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetBufferParameter.xhtml","OpenGL ES 3.1") +cmd void glGetBufferParameteriv(GLenum target, GLenum parameter, GLint* value) { + minRequiredVersion(2, 0) + switch (target) { + case GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER: { + // version 2.0 + } + case GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, GL_PIXEL_PACK_BUFFER, GL_PIXEL_UNPACK_BUFFER, + GL_TRANSFORM_FEEDBACK_BUFFER, GL_UNIFORM_BUFFER: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(target) + } + } + switch (parameter) { + case GL_BUFFER_SIZE, GL_BUFFER_USAGE: { + // version 2.0 + } + case GL_BUFFER_ACCESS_FLAGS, GL_BUFFER_MAPPED, GL_BUFFER_MAP_LENGTH, GL_BUFFER_MAP_OFFSET: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(parameter) + } + } + + ctx := GetContext() + id := ctx.BoundBuffers[target] + b := ctx.Instances.Buffers[id] + value[0] = switch (parameter) { + case GL_BUFFER_SIZE: as!s32(b.Size) + case GL_BUFFER_USAGE: as!s32(b.Usage) + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetBufferPointerv.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetBufferPointerv.xhtml","OpenGL ES 3.1") +cmd void glGetBufferPointerv(GLenum target, GLenum pname, void** params) { + minRequiredVersion(3, 0) + switch (target) { + case GL_ARRAY_BUFFER, GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, GL_ELEMENT_ARRAY_BUFFER, + GL_PIXEL_PACK_BUFFER, GL_PIXEL_UNPACK_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER, + GL_UNIFORM_BUFFER: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (pname) { + case GL_BUFFER_MAP_POINTER: { + // version 3.0 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glIsBuffer.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glIsBuffer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glIsBuffer.xhtml","OpenGL ES 3.1") +cmd bool glIsBuffer(BufferId buffer) { + minRequiredVersion(2, 0) + + ctx := GetContext() + return buffer in ctx.Instances.Buffers +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glMapBufferRange.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glMapBufferRange.xhtml","OpenGL ES 3.1") +cmd void* glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) { + minRequiredVersion(3, 0) + switch (target) { + case GL_ARRAY_BUFFER, GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, GL_ELEMENT_ARRAY_BUFFER, + GL_PIXEL_PACK_BUFFER, GL_PIXEL_UNPACK_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER, + GL_UNIFORM_BUFFER: { + // version 3.0 + } + case GL_ATOMIC_COUNTER_BUFFER, GL_DISPATCH_INDIRECT_BUFFER, GL_DRAW_INDIRECT_BUFFER, + GL_SHADER_STORAGE_BUFFER: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + supportsBits(access, GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_INVALIDATE_RANGE_BIT | GL_MAP_READ_BIT | GL_MAP_UNSYNCHRONIZED_BIT | GL_MAP_WRITE_BIT) + if (GL_MAP_FLUSH_EXPLICIT_BIT in access) { + } + if (GL_MAP_INVALIDATE_BUFFER_BIT in access) { + } + if (GL_MAP_INVALIDATE_RANGE_BIT in access) { + } + if (GL_MAP_READ_BIT in access) { + } + if (GL_MAP_UNSYNCHRONIZED_BIT in access) { + } + if (GL_MAP_WRITE_BIT in access) { + } + + ctx := GetContext() + b := ctx.Instances.Buffers[ctx.BoundBuffers[target]] + + ptr := as!u8*(?) + + b.MappingAccess = access + b.MappingData = ptr[0:length] + if GL_MAP_READ_BIT in access { + src := b.Data[offset:offset + length] + dst := b.MappingData + // copy(dst, src) // TEMP HACK: copy cannot be used here as this is a copy after a fence (ptr := ?) + write(dst) + } + + return as!void*(ptr) +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glMapBufferRange.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glMapBufferRange.xhtml","OpenGL ES 3.1") +cmd GLboolean glUnmapBuffer(GLenum target) { + minRequiredVersion(3, 0) + switch (target) { + case GL_ARRAY_BUFFER, GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, GL_ELEMENT_ARRAY_BUFFER, + GL_PIXEL_PACK_BUFFER, GL_PIXEL_UNPACK_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER, + GL_UNIFORM_BUFFER: { + // version 3.0 + } + case GL_ATOMIC_COUNTER_BUFFER, GL_DISPATCH_INDIRECT_BUFFER, GL_DRAW_INDIRECT_BUFFER, + GL_SHADER_STORAGE_BUFFER: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + + ctx := GetContext() + b := ctx.Instances.Buffers[ctx.BoundBuffers[target]] + // if GL_MAP_WRITE_BIT in b.MappingAccess { // TEMP HACK: Commented as 'fence not allowed in *semantic.Branch' + copy(b.Data[b.MappingOffset:b.MappingOffset + len(b.MappingData)], b.MappingData) + // } +} + diff --git a/gfxapi/gles/api/draw_commands.api b/gfxapi/gles/api/draw_commands.api new file mode 100644 index 000000000..866848548 --- /dev/null +++ b/gfxapi/gles/api/draw_commands.api @@ -0,0 +1,209 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glDrawArrays.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDrawArrays.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDrawArrays.xhtml","OpenGL ES 3.1") +cmd void glDrawArrays(GLenum draw_mode, GLint first_index, GLsizei index_count) { + minRequiredVersion(2, 0) + switch (draw_mode) { + case GL_LINES, GL_LINE_LOOP, GL_LINE_STRIP, GL_POINTS, GL_TRIANGLES, GL_TRIANGLE_FAN, + GL_TRIANGLE_STRIP: { + // version 2.0 + } + default: { + glErrorInvalidEnum(draw_mode) + } + } + + ctx := GetContext() + last_index := first_index + index_count - 1 + ReadVertexArrays(ctx, as!u32(first_index), as!u32(last_index)) +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDrawArraysIndirect.xhtml","OpenGL ES 3.1") +cmd void glDrawArraysIndirect(GLenum mode, const void* indirect) { + minRequiredVersion(3, 1) + switch (mode) { + case GL_LINES, GL_LINE_LOOP, GL_LINE_STRIP, GL_POINTS, GL_TRIANGLES, GL_TRIANGLE_FAN, + GL_TRIANGLE_STRIP: { + // version 3.1 + } + default: { + glErrorInvalidEnum(mode) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDrawArraysInstanced.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDrawArraysInstanced.xhtml","OpenGL ES 3.1") +cmd void glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount) { + minRequiredVersion(3, 0) + switch (mode) { + case GL_LINES, GL_LINE_LOOP, GL_LINE_STRIP, GL_POINTS, GL_TRIANGLES, GL_TRIANGLE_FAN, + GL_TRIANGLE_STRIP: { + // version 3.0 + } + default: { + glErrorInvalidEnum(mode) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDrawBuffers.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDrawBuffers.xhtml","OpenGL ES 3.1") +cmd void glDrawBuffers(GLsizei n, const GLenum* bufs) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glDrawElements.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDrawElements.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDrawElements.xhtml","OpenGL ES 3.1") +cmd void glDrawElements(GLenum draw_mode, + GLsizei element_count, + GLenum indices_type, + IndicesPointer indices) { + minRequiredVersion(2, 0) + switch (draw_mode) { + case GL_LINES, GL_LINE_LOOP, GL_LINE_STRIP, GL_POINTS, GL_TRIANGLES, GL_TRIANGLE_FAN, + GL_TRIANGLE_STRIP: { + // version 2.0 + } + default: { + glErrorInvalidEnum(draw_mode) + } + } + switch (indices_type) { + case GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT: { + // version 2.0 + } + case GL_UNSIGNED_INT: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(indices_type) + } + } + + ctx := GetContext() + count := as!u32(element_count) + id := ctx.BoundBuffers[GL_ELEMENT_ARRAY_BUFFER] + if (id != 0) { + // Element array buffer bound - indices is an offset on the buffer. + index_data := ctx.Instances.Buffers[id].Data + offset := as!u32(as!u64(indices)) + + // Read the vertices + first := minIndex(as!u8*(index_data), indices_type, offset, count) + last := maxIndex(as!u8*(index_data), indices_type, offset, count) + ReadVertexArrays(ctx, first, last) + + // No need to read the indices - they're already in a GPU-side buffer. + } else { + // No element array buffer bound - indices is a pointer. + index_data := as!u8*(indices) + + // Read the vertices + first := minIndex(index_data, indices_type, 0, count) + last := maxIndex(index_data, indices_type, 0, count) + ReadVertexArrays(ctx, first, last) + + // Read the indices + read(index_data[0:(as!u32(element_count)) * IndexSize(indices_type)]) + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDrawElementsIndirect.xhtml","OpenGL ES 3.1") +cmd void glDrawElementsIndirect(GLenum mode, GLenum type, const void* indirect) { + minRequiredVersion(3, 1) + switch (mode) { + case GL_LINES, GL_LINE_LOOP, GL_LINE_STRIP, GL_POINTS, GL_TRIANGLES, GL_TRIANGLE_FAN, + GL_TRIANGLE_STRIP: { + // version 3.1 + } + default: { + glErrorInvalidEnum(mode) + } + } + switch (type) { + case GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, GL_UNSIGNED_SHORT: { + // version 3.1 + } + default: { + glErrorInvalidEnum(type) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDrawElementsInstanced.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDrawElementsInstanced.xhtml","OpenGL ES 3.1") +cmd void glDrawElementsInstanced(GLenum mode, + GLsizei count, + GLenum type, + const void* indices, + GLsizei instancecount) { + minRequiredVersion(3, 0) + switch (mode) { + case GL_LINES, GL_LINE_LOOP, GL_LINE_STRIP, GL_POINTS, GL_TRIANGLES, GL_TRIANGLE_FAN, + GL_TRIANGLE_STRIP: { + // version 3.0 + } + default: { + glErrorInvalidEnum(mode) + } + } + switch (type) { + case GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, GL_UNSIGNED_SHORT: { + // version 3.0 + } + default: { + glErrorInvalidEnum(type) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDrawRangeElements.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDrawRangeElements.xhtml","OpenGL ES 3.1") +cmd void glDrawRangeElements(GLenum mode, + GLuint start, + GLuint end, + GLsizei count, + GLenum type, + const void* indices) { + minRequiredVersion(3, 0) + switch (mode) { + case GL_LINES, GL_LINE_LOOP, GL_LINE_STRIP, GL_POINTS, GL_TRIANGLES, GL_TRIANGLE_FAN, + GL_TRIANGLE_STRIP: { + // version 3.0 + } + default: { + glErrorInvalidEnum(mode) + } + } + switch (type) { + case GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, GL_UNSIGNED_SHORT: { + // version 3.0 + } + default: { + glErrorInvalidEnum(type) + } + } + // TODO +} + diff --git a/gfxapi/gles/api/extensions.api b/gfxapi/gles/api/extensions.api new file mode 100644 index 000000000..3e59541f4 --- /dev/null +++ b/gfxapi/gles/api/extensions.api @@ -0,0 +1,2736 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glActiveShaderProgramEXT(PipelineId pipeline, ProgramId program) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_alpha_test.txt","GL_QCOM_alpha_test") +cmd void glAlphaFuncQCOM(GLenum func, GLclampf ref) { + requiresExtension(GL_QCOM_alpha_test) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/conditional_render.txt","GL_NV_conditional_render") +cmd void glBeginConditionalRenderNV(GLuint id, GLenum mode) { + requiresExtension(GL_NV_conditional_render) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/AMD/performance_monitor.txt","GL_AMD_performance_monitor") +cmd void glBeginPerfMonitorAMD(GLuint monitor) { + requiresExtension(GL_AMD_performance_monitor) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/INTEL/performance_query.txt","GL_INTEL_performance_query") +cmd void glBeginPerfQueryINTEL(GLuint queryHandle) { + requiresExtension(GL_INTEL_performance_query) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_disjoint_timer_query.txt","GL_EXT_disjoint_timer_query") +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_occlusion_query_boolean.txt","GL_EXT_occlusion_query_boolean") +cmd void glBeginQueryEXT(GLenum target, QueryId query) { + requiresExtension(GL_EXT_disjoint_timer_query) + requiresExtension(GL_EXT_occlusion_query_boolean) + // TODO: Multiple extensions + +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glBindProgramPipelineEXT(PipelineId pipeline) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_vertex_array_object.txt","GL_OES_vertex_array_object") +cmd void glBindVertexArrayOES(VertexArrayId array) { + requiresExtension(GL_OES_vertex_array_object) + + ctx := GetContext() + if !(array in ctx.Instances.VertexArrays) { + ctx.Instances.VertexArrays[array] = new!VertexArray() + } + ctx.BoundVertexArray = array +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/blend_equation_advanced.txt","GL_NV_blend_equation_advanced") +cmd void glBlendBarrierNV() { + requiresExtension(GL_NV_blend_equation_advanced) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_draw_buffers_indexed.txt","GL_OES_draw_buffers_indexed") +cmd void glBlendEquationSeparateiOES(GLuint buf, GLenum modeRGB, GLenum modeAlpha) { + requiresExtension(GL_OES_draw_buffers_indexed) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_draw_buffers_indexed.txt","GL_OES_draw_buffers_indexed") +cmd void glBlendEquationiOES(GLuint buf, GLenum mode) { + requiresExtension(GL_OES_draw_buffers_indexed) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_draw_buffers_indexed.txt","GL_OES_draw_buffers_indexed") +cmd void glBlendFuncSeparateiOES(GLuint buf, + GLenum srcRGB, + GLenum dstRGB, + GLenum srcAlpha, + GLenum dstAlpha) { + requiresExtension(GL_OES_draw_buffers_indexed) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_draw_buffers_indexed.txt","GL_OES_draw_buffers_indexed") +cmd void glBlendFunciOES(GLuint buf, GLenum src, GLenum dst) { + requiresExtension(GL_OES_draw_buffers_indexed) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/blend_equation_advanced.txt","GL_NV_blend_equation_advanced") +cmd void glBlendParameteriNV(GLenum pname, GLint value) { + requiresExtension(GL_NV_blend_equation_advanced) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/ANGLE/ANGLE_framebuffer_blit.txt","GL_ANGLE_framebuffer_blit") +cmd void glBlitFramebufferANGLE(GLint srcX0, + GLint srcY0, + GLint srcX1, + GLint srcY1, + GLint dstX0, + GLint dstY0, + GLint dstX1, + GLint dstY1, + GLbitfield mask, + GLenum filter) { + requiresExtension(GL_ANGLE_framebuffer_blit) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_framebuffer_blit.txt","GL_NV_framebuffer_blit") +cmd void glBlitFramebufferNV(GLint srcX0, + GLint srcY0, + GLint srcX1, + GLint srcY1, + GLint dstX0, + GLint dstY0, + GLint dstX1, + GLint dstY1, + GLbitfield mask, + GLenum filter) { + requiresExtension(GL_NV_framebuffer_blit) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_buffer_storage.txt","GL_EXT_buffer_storage") +cmd void glBufferStorageEXT(GLenum target, GLsizeiptr size, const void* data, GLbitfield flags) { + requiresExtension(GL_EXT_buffer_storage) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/APPLE/APPLE_sync.txt","GL_APPLE_sync") +cmd GLenum glClientWaitSyncAPPLE(GLsync sync, GLbitfield flags, GLuint64 timeout) { + requiresExtension(GL_APPLE_sync) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_draw_buffers_indexed.txt","GL_OES_draw_buffers_indexed") +cmd void glColorMaskiOES(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) { + requiresExtension(GL_OES_draw_buffers_indexed) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_3D.txt","GL_OES_texture_3D") +cmd void glCompressedTexImage3DOES(GLenum target, + GLint level, + GLenum internalformat, + GLsizei width, + GLsizei height, + GLsizei depth, + GLint border, + GLsizei imageSize, + const void* data) { + requiresExtension(GL_OES_texture_3D) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_3D.txt","GL_OES_texture_3D") +cmd void glCompressedTexSubImage3DOES(GLenum target, + GLint level, + GLint xoffset, + GLint yoffset, + GLint zoffset, + GLsizei width, + GLsizei height, + GLsizei depth, + GLenum format, + GLsizei imageSize, + const void* data) { + requiresExtension(GL_OES_texture_3D) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_copy_buffer.txt","GL_NV_copy_buffer") +cmd void glCopyBufferSubDataNV(GLenum readTarget, + GLenum writeTarget, + GLintptr readOffset, + GLintptr writeOffset, + GLsizeiptr size) { + requiresExtension(GL_NV_copy_buffer) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_copy_image.txt","GL_OES_copy_image") +cmd void glCopyImageSubDataOES(GLuint srcName, + GLenum srcTarget, + GLint srcLevel, + GLint srcX, + GLint srcY, + GLint srcZ, + GLuint dstName, + GLenum dstTarget, + GLint dstLevel, + GLint dstX, + GLint dstY, + GLint dstZ, + GLsizei srcWidth, + GLsizei srcHeight, + GLsizei srcDepth) { + requiresExtension(GL_OES_copy_image) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glCopyPathNV(GLuint resultPath, GLuint srcPath) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_3D.txt","GL_OES_texture_3D") +cmd void glCopyTexSubImage3DOES(GLenum target, + GLint level, + GLint xoffset, + GLint yoffset, + GLint zoffset, + GLint x, + GLint y, + GLsizei width, + GLsizei height) { + requiresExtension(GL_OES_texture_3D) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/APPLE/APPLE_copy_texture_levels.txt","GL_APPLE_copy_texture_levels") +cmd void glCopyTextureLevelsAPPLE(GLuint destinationTexture, + GLuint sourceTexture, + GLint sourceBaseLevel, + GLsizei sourceLevelCount) { + requiresExtension(GL_APPLE_copy_texture_levels) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glCoverFillPathInstancedNV(GLsizei numPaths, + GLenum pathNameType, + const void* paths, + GLuint pathBase, + GLenum coverMode, + GLenum transformType, + const GLfloat* transformValues) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glCoverFillPathNV(GLuint path, GLenum coverMode) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glCoverStrokePathInstancedNV(GLsizei numPaths, + GLenum pathNameType, + const void* paths, + GLuint pathBase, + GLenum coverMode, + GLenum transformType, + const GLfloat* transformValues) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glCoverStrokePathNV(GLuint path, GLenum coverMode) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/EGL_NV_coverage_sample.txt","GL_NV_coverage_sample") +cmd void glCoverageMaskNV(GLboolean mask) { + requiresExtension(GL_NV_coverage_sample) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/EGL_NV_coverage_sample.txt","GL_NV_coverage_sample") +cmd void glCoverageOperationNV(GLenum operation) { + requiresExtension(GL_NV_coverage_sample) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/INTEL/performance_query.txt","GL_INTEL_performance_query") +cmd void glCreatePerfQueryINTEL(GLuint queryId, GLuint* queryHandle) { + requiresExtension(GL_INTEL_performance_query) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd GLuint glCreateShaderProgramvEXT(GLenum type, GLsizei count, const GLchar** strings) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/fence.txt","GL_NV_fence") +cmd void glDeleteFencesNV(GLsizei n, const GLuint* fences) { + requiresExtension(GL_NV_fence) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glDeletePathsNV(GLuint path, GLsizei range) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/AMD/performance_monitor.txt","GL_AMD_performance_monitor") +cmd void glDeletePerfMonitorsAMD(GLsizei n, GLuint* monitors) { + requiresExtension(GL_AMD_performance_monitor) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/INTEL/performance_query.txt","GL_INTEL_performance_query") +cmd void glDeletePerfQueryINTEL(GLuint queryHandle) { + requiresExtension(GL_INTEL_performance_query) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glDeleteProgramPipelinesEXT(GLsizei n, const PipelineId* pipelines) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_disjoint_timer_query.txt","GL_EXT_disjoint_timer_query") +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_occlusion_query_boolean.txt","GL_EXT_occlusion_query_boolean") +cmd void glDeleteQueriesEXT(GLsizei count, const QueryId* queries) { + requiresExtension(GL_EXT_disjoint_timer_query) + requiresExtension(GL_EXT_occlusion_query_boolean) + // TODO: Multiple extensions + + q := queries[0:count] + ctx := GetContext() + for i in (0 .. count) { + ctx.Instances.Queries[q[i]] = null + } +} + +@Doc("https://www.khronos.org/registry/gles/extensions/APPLE/APPLE_sync.txt","GL_APPLE_sync") +cmd void glDeleteSyncAPPLE(GLsync sync) { + requiresExtension(GL_APPLE_sync) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_vertex_array_object.txt","GL_OES_vertex_array_object") +cmd void glDeleteVertexArraysOES(GLsizei count, const VertexArrayId* arrays) { + requiresExtension(GL_OES_vertex_array_object) + + ctx := GetContext() + a := arrays[0:count] + for i in (0 .. count) { + ctx.Instances.VertexArrays[a[i]] = null + } +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_viewport_array.txt","GL_NV_viewport_array") +cmd void glDepthRangeArrayfvNV(GLuint first, GLsizei count, const GLfloat* v) { + requiresExtension(GL_NV_viewport_array) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_viewport_array.txt","GL_NV_viewport_array") +cmd void glDepthRangeIndexedfNV(GLuint index, GLfloat n, GLfloat f) { + requiresExtension(GL_NV_viewport_array) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_driver_control.txt","GL_QCOM_driver_control") +cmd void glDisableDriverControlQCOM(GLuint driverControl) { + requiresExtension(GL_QCOM_driver_control) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_viewport_array.txt","GL_NV_viewport_array") +cmd void glDisableiNV(GLenum target, GLuint index) { + requiresExtension(GL_NV_viewport_array) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_draw_buffers_indexed.txt","GL_OES_draw_buffers_indexed") +cmd void glDisableiOES(GLenum target, GLuint index) { + requiresExtension(GL_OES_draw_buffers_indexed) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_discard_framebuffer.txt","GL_EXT_discard_framebuffer") +cmd void glDiscardFramebufferEXT(GLenum target, + GLsizei numAttachments, + const GLenum* attachments) { + requiresExtension(GL_EXT_discard_framebuffer) + +} + +@Doc("https://www.khronos.org/registry/gles/extensions/ANGLE/ANGLE_instanced_arrays.txt","GL_ANGLE_instanced_arrays") +cmd void glDrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count, GLsizei primcount) { + requiresExtension(GL_ANGLE_instanced_arrays) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_base_instance.txt","GL_EXT_base_instance") +cmd void glDrawArraysInstancedBaseInstanceEXT(GLenum mode, + GLint first, + GLsizei count, + GLsizei instancecount, + GLuint baseinstance) { + requiresExtension(GL_EXT_base_instance) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/draw_instanced.txt","GL_EXT_draw_instanced") +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_instanced_arrays.txt","GL_EXT_instanced_arrays") +cmd void glDrawArraysInstancedEXT(GLenum mode, GLint start, GLsizei count, GLsizei primcount) { + requiresExtension(GL_EXT_draw_instanced) + requiresExtension(GL_EXT_instanced_arrays) + // TODO: Multiple extensions + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_draw_instanced.txt","GL_NV_draw_instanced") +cmd void glDrawArraysInstancedNV(GLenum mode, GLint first, GLsizei count, GLsizei primcount) { + requiresExtension(GL_NV_draw_instanced) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_draw_buffers.txt","GL_EXT_draw_buffers") +cmd void glDrawBuffersEXT(GLsizei n, const GLenum* bufs) { + requiresExtension(GL_EXT_draw_buffers) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_multiview_draw_buffers.txt","GL_EXT_multiview_draw_buffers") +cmd void glDrawBuffersIndexedEXT(GLint n, const GLenum* location, const GLint* indices) { + requiresExtension(GL_EXT_multiview_draw_buffers) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_draw_buffers.txt","GL_NV_draw_buffers") +cmd void glDrawBuffersNV(GLsizei n, const GLenum* bufs) { + requiresExtension(GL_NV_draw_buffers) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_draw_elements_base_vertex.txt","GL_EXT_draw_elements_base_vertex") +cmd void glDrawElementsBaseVertexEXT(GLenum mode, + GLsizei count, + GLenum type, + const void* indices, + GLint basevertex) { + requiresExtension(GL_EXT_draw_elements_base_vertex) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_draw_elements_base_vertex.txt","GL_OES_draw_elements_base_vertex") +cmd void glDrawElementsBaseVertexOES(GLenum mode, + GLsizei count, + GLenum type, + const void* indices, + GLint basevertex) { + requiresExtension(GL_OES_draw_elements_base_vertex) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/ANGLE/ANGLE_instanced_arrays.txt","GL_ANGLE_instanced_arrays") +cmd void glDrawElementsInstancedANGLE(GLenum mode, + GLsizei count, + GLenum type, + const void* indices, + GLsizei primcount) { + requiresExtension(GL_ANGLE_instanced_arrays) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_base_instance.txt","GL_EXT_base_instance") +cmd void glDrawElementsInstancedBaseInstanceEXT(GLenum mode, + GLsizei count, + GLenum type, + const void* indices, + GLsizei instancecount, + GLuint baseinstance) { + requiresExtension(GL_EXT_base_instance) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_draw_elements_base_vertex.txt","GL_EXT_draw_elements_base_vertex") +cmd void glDrawElementsInstancedBaseVertexEXT(GLenum mode, + GLsizei count, + GLenum type, + const void* indices, + GLsizei instancecount, + GLint basevertex) { + requiresExtension(GL_EXT_draw_elements_base_vertex) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_draw_elements_base_vertex.txt","GL_OES_draw_elements_base_vertex") +cmd void glDrawElementsInstancedBaseVertexOES(GLenum mode, + GLsizei count, + GLenum type, + const void* indices, + GLsizei instancecount, + GLint basevertex) { + requiresExtension(GL_OES_draw_elements_base_vertex) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_base_instance.txt","GL_EXT_base_instance") +cmd void glDrawElementsInstancedBaseVertexBaseInstanceEXT(GLenum mode, + GLsizei count, + GLenum type, + const void* indices, + GLsizei instancecount, + GLint basevertex, + GLuint baseinstance) { + requiresExtension(GL_EXT_base_instance) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/draw_instanced.txt","GL_EXT_draw_instanced") +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_instanced_arrays.txt","GL_EXT_instanced_arrays") +cmd void glDrawElementsInstancedEXT(GLenum mode, + GLsizei count, + GLenum type, + const void* indices, + GLsizei primcount) { + requiresExtension(GL_EXT_draw_instanced) + requiresExtension(GL_EXT_instanced_arrays) + // TODO: Multiple extensions + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_draw_instanced.txt","GL_NV_draw_instanced") +cmd void glDrawElementsInstancedNV(GLenum mode, + GLsizei count, + GLenum type, + const void* indices, + GLsizei primcount) { + requiresExtension(GL_NV_draw_instanced) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_draw_elements_base_vertex.txt","GL_EXT_draw_elements_base_vertex") +cmd void glDrawRangeElementsBaseVertexEXT(GLenum mode, + GLuint start, + GLuint end, + GLsizei count, + GLenum type, + const void* indices, + GLint basevertex) { + requiresExtension(GL_EXT_draw_elements_base_vertex) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_draw_elements_base_vertex.txt","GL_OES_draw_elements_base_vertex") +cmd void glDrawRangeElementsBaseVertexOES(GLenum mode, + GLuint start, + GLuint end, + GLsizei count, + GLenum type, + const void* indices, + GLint basevertex) { + requiresExtension(GL_OES_draw_elements_base_vertex) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_EGL_image.txt","GL_OES_EGL_image") +cmd void glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image) { + requiresExtension(GL_OES_EGL_image) + +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_EGL_image.txt","GL_OES_EGL_image") +cmd void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image) { + requiresExtension(GL_OES_EGL_image) + +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_driver_control.txt","GL_QCOM_driver_control") +cmd void glEnableDriverControlQCOM(GLuint driverControl) { + requiresExtension(GL_QCOM_driver_control) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_viewport_array.txt","GL_NV_viewport_array") +cmd void glEnableiNV(GLenum target, GLuint index) { + requiresExtension(GL_NV_viewport_array) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_draw_buffers_indexed.txt","GL_OES_draw_buffers_indexed") +cmd void glEnableiOES(GLenum target, GLuint index) { + requiresExtension(GL_OES_draw_buffers_indexed) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/conditional_render.txt","GL_NV_conditional_render") +cmd void glEndConditionalRenderNV() { + requiresExtension(GL_NV_conditional_render) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/AMD/performance_monitor.txt","GL_AMD_performance_monitor") +cmd void glEndPerfMonitorAMD(GLuint monitor) { + requiresExtension(GL_AMD_performance_monitor) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/INTEL/performance_query.txt","GL_INTEL_performance_query") +cmd void glEndPerfQueryINTEL(GLuint queryHandle) { + requiresExtension(GL_INTEL_performance_query) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_disjoint_timer_query.txt","GL_EXT_disjoint_timer_query") +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_occlusion_query_boolean.txt","GL_EXT_occlusion_query_boolean") +cmd void glEndQueryEXT(GLenum target) { + requiresExtension(GL_EXT_disjoint_timer_query) + requiresExtension(GL_EXT_occlusion_query_boolean) + // TODO: Multiple extensions + +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_tiled_rendering.txt","GL_QCOM_tiled_rendering") +cmd void glEndTilingQCOM(GLbitfield preserve_mask) { + requiresExtension(GL_QCOM_tiled_rendering) + +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_extended_get.txt","GL_QCOM_extended_get") +cmd void glExtGetBufferPointervQCOM(GLenum target, void** params) { + requiresExtension(GL_QCOM_extended_get) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_extended_get.txt","GL_QCOM_extended_get") +cmd void glExtGetBuffersQCOM(BufferId* buffers, GLint maxBuffers, GLint* numBuffers) { + requiresExtension(GL_QCOM_extended_get) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_extended_get.txt","GL_QCOM_extended_get") +cmd void glExtGetFramebuffersQCOM(FramebufferId* framebuffers, + GLint maxFramebuffers, + GLint* numFramebuffers) { + requiresExtension(GL_QCOM_extended_get) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_extended_get2.txt","GL_QCOM_extended_get2") +cmd void glExtGetProgramBinarySourceQCOM(ProgramId program, + GLenum shadertype, + GLchar* source, + GLint* length) { + requiresExtension(GL_QCOM_extended_get2) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_extended_get2.txt","GL_QCOM_extended_get2") +cmd void glExtGetProgramsQCOM(ProgramId* programs, GLint maxPrograms, GLint* numPrograms) { + requiresExtension(GL_QCOM_extended_get2) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_extended_get.txt","GL_QCOM_extended_get") +cmd void glExtGetRenderbuffersQCOM(RenderbufferId* renderbuffers, + GLint maxRenderbuffers, + GLint* numRenderbuffers) { + requiresExtension(GL_QCOM_extended_get) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_extended_get2.txt","GL_QCOM_extended_get2") +cmd void glExtGetShadersQCOM(ShaderId* shaders, GLint maxShaders, GLint* numShaders) { + requiresExtension(GL_QCOM_extended_get2) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_extended_get.txt","GL_QCOM_extended_get") +cmd void glExtGetTexLevelParameterivQCOM(TextureId texture, + GLenum face, + GLint level, + GLenum pname, + GLint* params) { + requiresExtension(GL_QCOM_extended_get) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_extended_get.txt","GL_QCOM_extended_get") +cmd void glExtGetTexSubImageQCOM(GLenum target, + GLint level, + GLint xoffset, + GLint yoffset, + GLint zoffset, + GLsizei width, + GLsizei height, + GLsizei depth, + GLenum format, + GLenum type, + void* texels) { + requiresExtension(GL_QCOM_extended_get) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_extended_get.txt","GL_QCOM_extended_get") +cmd void glExtGetTexturesQCOM(TextureId* textures, GLint maxTextures, GLint* numTextures) { + requiresExtension(GL_QCOM_extended_get) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_extended_get2.txt","GL_QCOM_extended_get2") +cmd GLboolean glExtIsProgramBinaryQCOM(ProgramId program) { + requiresExtension(GL_QCOM_extended_get2) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_extended_get.txt","GL_QCOM_extended_get") +cmd void glExtTexObjectStateOverrideiQCOM(GLenum target, GLenum pname, GLint param) { + requiresExtension(GL_QCOM_extended_get) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/APPLE/APPLE_sync.txt","GL_APPLE_sync") +cmd GLsync glFenceSyncAPPLE(GLenum condition, GLbitfield flags) { + requiresExtension(GL_APPLE_sync) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/fence.txt","GL_NV_fence") +cmd void glFinishFenceNV(GLuint fence) { + requiresExtension(GL_NV_fence) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_map_buffer_range.txt","GL_EXT_map_buffer_range") +cmd void glFlushMappedBufferRangeEXT(GLenum target, GLintptr offset, GLsizeiptr length) { + requiresExtension(GL_EXT_map_buffer_range) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_multisampled_render_to_texture.txt","GL_EXT_multisampled_render_to_texture") +cmd void glFramebufferTexture2DMultisampleEXT(GLenum target, + GLenum attachment, + GLenum textarget, + TextureId texture, + GLint level, + GLsizei samples) { + requiresExtension(GL_EXT_multisampled_render_to_texture) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/IMG/IMG_multisampled_render_to_texture.txt","GL_IMG_multisampled_render_to_texture") +cmd void glFramebufferTexture2DMultisampleIMG(GLenum target, + GLenum attachment, + GLenum textarget, + TextureId texture, + GLint level, + GLsizei samples) { + requiresExtension(GL_IMG_multisampled_render_to_texture) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_3D.txt","GL_OES_texture_3D") +cmd void glFramebufferTexture3DOES(GLenum target, + GLenum attachment, + GLenum textarget, + TextureId texture, + GLint level, + GLint zoffset) { + requiresExtension(GL_OES_texture_3D) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_geometry_shader.txt","GL_OES_geometry_shader") +cmd void glFramebufferTextureOES(GLenum target, GLenum attachment, TextureId texture, GLint level) { + requiresExtension(GL_OES_geometry_shader) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OVR/multiview.txt","GL_OVR_multiview") +cmd void glFramebufferTextureMultiviewOVR(GLenum target, + GLenum attachment, + TextureId texture, + GLint level, + GLint baseViewIndex, + GLsizei numViews) { + requiresExtension(GL_OVR_multiview) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/fence.txt","GL_NV_fence") +cmd void glGenFencesNV(GLsizei n, GLuint* fences) { + requiresExtension(GL_NV_fence) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd GLuint glGenPathsNV(GLsizei range) { + requiresExtension(GL_NV_path_rendering) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/AMD/performance_monitor.txt","GL_AMD_performance_monitor") +cmd void glGenPerfMonitorsAMD(GLsizei n, GLuint* monitors) { + requiresExtension(GL_AMD_performance_monitor) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glGenProgramPipelinesEXT(GLsizei n, PipelineId* pipelines) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_disjoint_timer_query.txt","GL_EXT_disjoint_timer_query") +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_occlusion_query_boolean.txt","GL_EXT_occlusion_query_boolean") +cmd void glGenQueriesEXT(GLsizei count, QueryId* queries) { + requiresExtension(GL_EXT_disjoint_timer_query) + requiresExtension(GL_EXT_occlusion_query_boolean) + // TODO: Multiple extensions + + q := queries[0:count] + ctx := GetContext() + for i in (0 .. count) { + id := as!QueryId(?) + ctx.Instances.Queries[id] = new!Query() + q[i] = id + } +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_vertex_array_object.txt","GL_OES_vertex_array_object") +cmd void glGenVertexArraysOES(GLsizei count, VertexArrayId* arrays) { + requiresExtension(GL_OES_vertex_array_object) + + a := arrays[0:count] + ctx := GetContext() + for i in (0 .. count) { + id := as!VertexArrayId(?) + ctx.Instances.VertexArrays[id] = new!VertexArray() + a[i] = id + } +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_mapbuffer.txt","GL_OES_mapbuffer") +cmd void glGetBufferPointervOES(GLenum target, GLenum pname, void** params) { + requiresExtension(GL_OES_mapbuffer) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_driver_control.txt","GL_QCOM_driver_control") +cmd void glGetDriverControlStringQCOM(GLuint driverControl, + GLsizei bufSize, + GLsizei* length, + GLchar* driverControlString) { + requiresExtension(GL_QCOM_driver_control) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_driver_control.txt","GL_QCOM_driver_control") +cmd void glGetDriverControlsQCOM(GLint* num, GLsizei size, GLuint* driverControls) { + requiresExtension(GL_QCOM_driver_control) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/fence.txt","GL_NV_fence") +cmd void glGetFenceivNV(GLuint fence, GLenum pname, GLint* params) { + requiresExtension(GL_NV_fence) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/INTEL/performance_query.txt","GL_INTEL_performance_query") +cmd void glGetFirstPerfQueryIdINTEL(GLuint* queryId) { + requiresExtension(GL_INTEL_performance_query) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_viewport_array.txt","GL_NV_viewport_array") +cmd void glGetFloati_vNV(GLenum target, GLuint index, GLfloat* data) { + requiresExtension(GL_NV_viewport_array) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_robustness.txt","GL_EXT_robustness") +cmd GLenum glGetGraphicsResetStatusEXT() { + requiresExtension(GL_EXT_robustness) + + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/robustness.txt","GL_KHR_robustness") +cmd GLenum glGetGraphicsResetStatusKHR() { + requiresExtension(GL_KHR_robustness) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/bindless_texture.txt","GL_NV_bindless_texture") +cmd GLuint64 glGetImageHandleNV(TextureId texture, + GLint level, + GLboolean layered, + GLint layer, + GLenum format) { + requiresExtension(GL_NV_bindless_texture) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/APPLE/APPLE_sync.txt","GL_APPLE_sync") +cmd void glGetInteger64vAPPLE(GLenum pname, GLint64* params) { + requiresExtension(GL_APPLE_sync) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_multiview_draw_buffers.txt","GL_EXT_multiview_draw_buffers") +cmd void glGetIntegeri_vEXT(GLenum target, GLuint index, GLint* data) { + requiresExtension(GL_EXT_multiview_draw_buffers) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/internalformat_sample_query.txt","GL_NV_internalformat_sample_query") +cmd void glGetInternalformatSampleivNV(GLenum target, + GLenum internalformat, + GLsizei samples, + GLenum pname, + GLsizei bufSize, + GLint* params) { + requiresExtension(GL_NV_internalformat_sample_query) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/INTEL/performance_query.txt","GL_INTEL_performance_query") +cmd void glGetNextPerfQueryIdINTEL(GLuint queryId, GLuint* nextQueryId) { + requiresExtension(GL_INTEL_performance_query) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_debug_label.txt","GL_EXT_debug_label") +cmd void glGetObjectLabelEXT(GLenum type, + GLuint object, + GLsizei bufSize, + GLsizei* length, + GLchar* label) { + requiresExtension(GL_EXT_debug_label) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glGetPathCommandsNV(GLuint path, GLubyte* commands) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glGetPathCoordsNV(GLuint path, GLfloat* coords) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glGetPathDashArrayNV(GLuint path, GLfloat* dashArray) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd GLfloat glGetPathLengthNV(GLuint path, GLsizei startSegment, GLsizei numSegments) { + requiresExtension(GL_NV_path_rendering) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glGetPathMetricRangeNV(GLbitfield metricQueryMask, + GLuint firstPathName, + GLsizei numPaths, + GLsizei stride, + GLfloat* metrics) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glGetPathMetricsNV(GLbitfield metricQueryMask, + GLsizei numPaths, + GLenum pathNameType, + const void* paths, + GLuint pathBase, + GLsizei stride, + GLfloat* metrics) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glGetPathParameterfvNV(GLuint path, GLenum pname, GLfloat* value) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glGetPathParameterivNV(GLuint path, GLenum pname, GLint* value) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glGetPathSpacingNV(GLenum pathListMode, + GLsizei numPaths, + GLenum pathNameType, + const void* paths, + GLuint pathBase, + GLfloat advanceScale, + GLfloat kerningScale, + GLenum transformType, + GLfloat* returnedSpacing) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/INTEL/performance_query.txt","GL_INTEL_performance_query") +cmd void glGetPerfCounterInfoINTEL(GLuint queryId, + GLuint counterId, + GLuint counterNameLength, + GLchar* counterName, + GLuint counterDescLength, + GLchar* counterDesc, + GLuint* counterOffset, + GLuint* counterDataSize, + GLuint* counterTypeEnum, + GLuint* counterDataTypeEnum, + GLuint64* rawCounterMaxValue) { + requiresExtension(GL_INTEL_performance_query) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/AMD/performance_monitor.txt","GL_AMD_performance_monitor") +cmd void glGetPerfMonitorCounterDataAMD(GLuint monitor, + GLenum pname, + GLsizei dataSize, + GLuint* data, + GLint* bytesWritten) { + requiresExtension(GL_AMD_performance_monitor) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/AMD/performance_monitor.txt","GL_AMD_performance_monitor") +cmd void glGetPerfMonitorCounterInfoAMD(GLuint group, GLuint counter, GLenum pname, void* data) { + requiresExtension(GL_AMD_performance_monitor) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/AMD/performance_monitor.txt","GL_AMD_performance_monitor") +cmd void glGetPerfMonitorCounterStringAMD(GLuint group, + GLuint counter, + GLsizei bufSize, + GLsizei* length, + GLchar* counterString) { + requiresExtension(GL_AMD_performance_monitor) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/AMD/performance_monitor.txt","GL_AMD_performance_monitor") +cmd void glGetPerfMonitorCountersAMD(GLuint group, + GLint* numCounters, + GLint* maxActiveCounters, + GLsizei counterSize, + GLuint* counters) { + requiresExtension(GL_AMD_performance_monitor) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/AMD/performance_monitor.txt","GL_AMD_performance_monitor") +cmd void glGetPerfMonitorGroupStringAMD(GLuint group, + GLsizei bufSize, + GLsizei* length, + GLchar* groupString) { + requiresExtension(GL_AMD_performance_monitor) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/AMD/performance_monitor.txt","GL_AMD_performance_monitor") +cmd void glGetPerfMonitorGroupsAMD(GLint* numGroups, GLsizei groupsSize, GLuint* groups) { + requiresExtension(GL_AMD_performance_monitor) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/INTEL/performance_query.txt","GL_INTEL_performance_query") +cmd void glGetPerfQueryDataINTEL(GLuint queryHandle, + GLuint flags, + GLsizei dataSize, + GLvoid* data, + GLuint* bytesWritten) { + requiresExtension(GL_INTEL_performance_query) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/INTEL/performance_query.txt","GL_INTEL_performance_query") +cmd void glGetPerfQueryIdByNameINTEL(GLchar* queryName, GLuint* queryId) { + requiresExtension(GL_INTEL_performance_query) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/INTEL/performance_query.txt","GL_INTEL_performance_query") +cmd void glGetPerfQueryInfoINTEL(GLuint queryId, + GLuint queryNameLength, + GLchar* queryName, + GLuint* dataSize, + GLuint* noCounters, + GLuint* noInstances, + GLuint* capsMask) { + requiresExtension(GL_INTEL_performance_query) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_get_program_binary.txt","GL_OES_get_program_binary") +cmd void glGetProgramBinaryOES(ProgramId program, + GLsizei buffer_size, + GLsizei* bytes_written, + GLenum* binary_format, + void* binary) { + requiresExtension(GL_OES_get_program_binary) + + l := as!s32(?) + bytes_written[0] = l + binary_format[0] = ? + write(binary[0:l]) +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glGetProgramPipelineInfoLogEXT(PipelineId pipeline, + GLsizei bufSize, + GLsizei* length, + GLchar* infoLog) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glGetProgramPipelineivEXT(PipelineId pipeline, GLenum pname, GLint* params) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glGetProgramResourcefvNV(ProgramId program, + GLenum programInterface, + GLuint index, + GLsizei propCount, + const GLenum* props, + GLsizei bufSize, + GLsizei* length, + GLfloat* params) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_disjoint_timer_query.txt","GL_EXT_disjoint_timer_query") +cmd void glGetQueryObjecti64vEXT(QueryId query, GLenum parameter, GLint64* value) { + requiresExtension(GL_EXT_disjoint_timer_query) + + value[0] = ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_disjoint_timer_query.txt","GL_EXT_disjoint_timer_query") +cmd void glGetQueryObjectivEXT(QueryId query, GLenum parameter, GLint* value) { + requiresExtension(GL_EXT_disjoint_timer_query) + + value[0] = ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_disjoint_timer_query.txt","GL_EXT_disjoint_timer_query") +cmd void glGetQueryObjectui64vEXT(QueryId query, GLenum parameter, GLuint64* value) { + requiresExtension(GL_EXT_disjoint_timer_query) + + value[0] = ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_disjoint_timer_query.txt","GL_EXT_disjoint_timer_query") +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_occlusion_query_boolean.txt","GL_EXT_occlusion_query_boolean") +cmd void glGetQueryObjectuivEXT(QueryId query, GLenum parameter, GLuint* value) { + requiresExtension(GL_EXT_disjoint_timer_query) + requiresExtension(GL_EXT_occlusion_query_boolean) + // TODO: Multiple extensions + + value[0] = ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_disjoint_timer_query.txt","GL_EXT_disjoint_timer_query") +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_occlusion_query_boolean.txt","GL_EXT_occlusion_query_boolean") +cmd void glGetQueryivEXT(GLenum target, GLenum parameter, GLint* value) { + requiresExtension(GL_EXT_disjoint_timer_query) + requiresExtension(GL_EXT_occlusion_query_boolean) + // TODO: Multiple extensions + + value[0] = ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_border_clamp.txt","GL_OES_texture_border_clamp") +cmd void glGetSamplerParameterIivOES(SamplerId sampler, GLenum pname, GLint* params) { + requiresExtension(GL_OES_texture_border_clamp) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_border_clamp.txt","GL_OES_texture_border_clamp") +cmd void glGetSamplerParameterIuivOES(SamplerId sampler, GLenum pname, GLuint* params) { + requiresExtension(GL_OES_texture_border_clamp) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/APPLE/APPLE_sync.txt","GL_APPLE_sync") +cmd void glGetSyncivAPPLE(GLsync sync, + GLenum pname, + GLsizei bufSize, + GLsizei* length, + GLint* values) { + requiresExtension(GL_APPLE_sync) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_border_clamp.txt","GL_OES_texture_border_clamp") +cmd void glGetTexParameterIivOES(GLenum target, GLenum pname, GLint* params) { + requiresExtension(GL_OES_texture_border_clamp) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_border_clamp.txt","GL_OES_texture_border_clamp") +cmd void glGetTexParameterIuivOES(GLenum target, GLenum pname, GLuint* params) { + requiresExtension(GL_OES_texture_border_clamp) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/bindless_texture.txt","GL_NV_bindless_texture") +cmd GLuint64 glGetTextureHandleNV(TextureId texture) { + requiresExtension(GL_NV_bindless_texture) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/bindless_texture.txt","GL_NV_bindless_texture") +cmd GLuint64 glGetTextureSamplerHandleNV(TextureId texture, SamplerId sampler) { + requiresExtension(GL_NV_bindless_texture) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/ANGLE/ANGLE_translated_shader_source.txt","GL_ANGLE_translated_shader_source") +cmd void glGetTranslatedShaderSourceANGLE(ShaderId shader, + GLsizei bufsize, + GLsizei* length, + GLchar* source) { + requiresExtension(GL_ANGLE_translated_shader_source) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_robustness.txt","GL_EXT_robustness") +cmd void glGetnUniformfvEXT(ProgramId program, + UniformLocation location, + GLsizei bufSize, + GLfloat* params) { + requiresExtension(GL_EXT_robustness) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/robustness.txt","GL_KHR_robustness") +cmd void glGetnUniformfvKHR(ProgramId program, + UniformLocation location, + GLsizei bufSize, + GLfloat* params) { + requiresExtension(GL_KHR_robustness) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_robustness.txt","GL_EXT_robustness") +cmd void glGetnUniformivEXT(ProgramId program, + UniformLocation location, + GLsizei bufSize, + GLint* params) { + requiresExtension(GL_EXT_robustness) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/robustness.txt","GL_KHR_robustness") +cmd void glGetnUniformivKHR(ProgramId program, + UniformLocation location, + GLsizei bufSize, + GLint* params) { + requiresExtension(GL_KHR_robustness) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/robustness.txt","GL_KHR_robustness") +cmd void glGetnUniformuivKHR(ProgramId program, + UniformLocation location, + GLsizei bufSize, + GLuint* params) { + requiresExtension(GL_KHR_robustness) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_debug_marker.txt","GL_EXT_debug_marker") +cmd void glInsertEventMarkerEXT(GLsizei length, const GLchar* marker) { + requiresExtension(GL_EXT_debug_marker) + + if length > 0 { + read(marker[0:length]) + } else { + _ = as!string(marker) + } +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glInterpolatePathsNV(GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_draw_buffers_indexed.txt","GL_OES_draw_buffers_indexed") +cmd bool glIsEnablediOES(GLenum target, GLuint index) { + requiresExtension(GL_OES_draw_buffers_indexed) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_viewport_array.txt","GL_NV_viewport_array") +cmd bool glIsEnablediNV(GLenum target, GLuint index) { + requiresExtension(GL_NV_viewport_array) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/fence.txt","GL_NV_fence") +cmd bool glIsFenceNV(GLuint fence) { + requiresExtension(GL_NV_fence) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/bindless_texture.txt","GL_NV_bindless_texture") +cmd bool glIsImageHandleResidentNV(GLuint64 handle) { + requiresExtension(GL_NV_bindless_texture) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd bool glIsPathNV(GLuint path) { + requiresExtension(GL_NV_path_rendering) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd bool glIsPointInFillPathNV(GLuint path, GLuint mask, GLfloat x, GLfloat y) { + requiresExtension(GL_NV_path_rendering) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd bool glIsPointInStrokePathNV(GLuint path, GLfloat x, GLfloat y) { + requiresExtension(GL_NV_path_rendering) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd bool glIsProgramPipelineEXT(PipelineId pipeline) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_disjoint_timer_query.txt","GL_EXT_disjoint_timer_query") +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_occlusion_query_boolean.txt","GL_EXT_occlusion_query_boolean") +cmd bool glIsQueryEXT(QueryId query) { + requiresExtension(GL_EXT_disjoint_timer_query) + requiresExtension(GL_EXT_occlusion_query_boolean) + // TODO: Multiple extensions + + ctx := GetContext() + return query in ctx.Instances.Queries +} + +@Doc("https://www.khronos.org/registry/gles/extensions/APPLE/APPLE_sync.txt","GL_APPLE_sync") +cmd bool glIsSyncAPPLE(GLsync sync) { + requiresExtension(GL_APPLE_sync) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/bindless_texture.txt","GL_NV_bindless_texture") +cmd bool glIsTextureHandleResidentNV(GLuint64 handle) { + requiresExtension(GL_NV_bindless_texture) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_vertex_array_object.txt","GL_OES_vertex_array_object") +cmd bool glIsVertexArrayOES(VertexArrayId array) { + requiresExtension(GL_OES_vertex_array_object) + + ctx := GetContext() + return array in ctx.Instances.VertexArrays +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_debug_label.txt","GL_EXT_debug_label") +cmd void glLabelObjectEXT(GLenum type, GLuint object, GLsizei length, const GLchar* label) { + requiresExtension(GL_EXT_debug_label) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/bindless_texture.txt","GL_NV_bindless_texture") +cmd void glMakeImageHandleNonResidentNV(GLuint64 handle) { + requiresExtension(GL_NV_bindless_texture) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/bindless_texture.txt","GL_NV_bindless_texture") +cmd void glMakeImageHandleResidentNV(GLuint64 handle, GLenum access) { + requiresExtension(GL_NV_bindless_texture) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/bindless_texture.txt","GL_NV_bindless_texture") +cmd void glMakeTextureHandleNonResidentNV(GLuint64 handle) { + requiresExtension(GL_NV_bindless_texture) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/bindless_texture.txt","GL_NV_bindless_texture") +cmd void glMakeTextureHandleResidentNV(GLuint64 handle) { + requiresExtension(GL_NV_bindless_texture) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_mapbuffer.txt","GL_OES_mapbuffer") +cmd void* glMapBufferOES(GLenum target, GLenum access) { + requiresExtension(GL_OES_mapbuffer) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_map_buffer_range.txt","GL_EXT_map_buffer_range") +cmd void* glMapBufferRangeEXT(GLenum target, + GLintptr offset, + GLsizeiptr length, + GLbitfield access) { + requiresExtension(GL_EXT_map_buffer_range) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glMatrixLoad3x2fNV(GLenum matrixMode, const GLfloat* m) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glMatrixLoad3x3fNV(GLenum matrixMode, const GLfloat* m) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glMatrixLoadTranspose3x3fNV(GLenum matrixMode, const GLfloat* m) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glMatrixMult3x2fNV(GLenum matrixMode, const GLfloat* m) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glMatrixMult3x3fNV(GLenum matrixMode, const GLfloat* m) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glMatrixMultTranspose3x3fNV(GLenum matrixMode, const GLfloat* m) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/multi_draw_arrays.txt","GL_EXT_multi_draw_arrays") +cmd void glMultiDrawArraysEXT(GLenum mode, + const GLint* first, + const GLsizei* count, + GLsizei primcount) { + requiresExtension(GL_EXT_multi_draw_arrays) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_multi_draw_indirect.txt","GL_EXT_multi_draw_indirect") +cmd void glMultiDrawArraysIndirectEXT(GLenum mode, + const void* indirect, + GLsizei drawcount, + GLsizei stride) { + requiresExtension(GL_EXT_multi_draw_indirect) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_draw_elements_base_vertex.txt","GL_EXT_draw_elements_base_vertex") +cmd void glMultiDrawElementsBaseVertexEXT(GLenum mode, + const GLsizei* count, + GLenum type, + const void* const* indices, + GLsizei primcount, + const GLint* basevertex) { + requiresExtension(GL_EXT_draw_elements_base_vertex) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_draw_elements_base_vertex.txt","GL_OES_draw_elements_base_vertex") +cmd void glMultiDrawElementsBaseVertexOES(GLenum mode, + const GLsizei* count, + GLenum type, + const void* const* indices, + GLsizei primcount, + const GLint* basevertex) { + requiresExtension(GL_OES_draw_elements_base_vertex) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/multi_draw_arrays.txt","GL_EXT_multi_draw_arrays") +cmd void glMultiDrawElementsEXT(GLenum mode, + const GLsizei* count, + GLenum type, + const void* const* indices, + GLsizei primcount) { + requiresExtension(GL_EXT_multi_draw_arrays) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_multi_draw_indirect.txt","GL_EXT_multi_draw_indirect") +cmd void glMultiDrawElementsIndirectEXT(GLenum mode, + GLenum type, + const void* indirect, + GLsizei drawcount, + GLsizei stride) { + requiresExtension(GL_EXT_multi_draw_indirect) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_tessellation_shader.txt","GL_OES_tessellation_shader") +cmd void glPatchParameteriOES(GLenum pname, GLint value) { + requiresExtension(GL_OES_tessellation_shader) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glPathCommandsNV(GLuint path, + GLsizei numCommands, + const GLubyte* commands, + GLsizei numCoords, + GLenum coordType, + const void* coords) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glPathCoordsNV(GLuint path, GLsizei numCoords, GLenum coordType, const void* coords) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glPathCoverDepthFuncNV(GLenum func) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glPathDashArrayNV(GLuint path, GLsizei dashCount, const GLfloat* dashArray) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd GLenum glPathGlyphIndexArrayNV(GLuint firstPathName, + GLenum fontTarget, + const void* fontName, + GLbitfield fontStyle, + GLuint firstGlyphIndex, + GLsizei numGlyphs, + GLuint pathParameterTemplate, + GLfloat emScale) { + requiresExtension(GL_NV_path_rendering) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd GLenum glPathGlyphIndexRangeNV(GLenum fontTarget, + const void* fontName, + GLbitfield fontStyle, + GLuint pathParameterTemplate, + GLfloat emScale, + GLuint baseAndCount) { + requiresExtension(GL_NV_path_rendering) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glPathGlyphRangeNV(GLuint firstPathName, + GLenum fontTarget, + const void* fontName, + GLbitfield fontStyle, + GLuint firstGlyph, + GLsizei numGlyphs, + GLenum handleMissingGlyphs, + GLuint pathParameterTemplate, + GLfloat emScale) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glPathGlyphsNV(GLuint firstPathName, + GLenum fontTarget, + const void* fontName, + GLbitfield fontStyle, + GLsizei numGlyphs, + GLenum type, + const void* charcodes, + GLenum handleMissingGlyphs, + GLuint pathParameterTemplate, + GLfloat emScale) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd GLenum glPathMemoryGlyphIndexArrayNV(GLuint firstPathName, + GLenum fontTarget, + GLsizeiptr fontSize, + const void* fontData, + GLsizei faceIndex, + GLuint firstGlyphIndex, + GLsizei numGlyphs, + GLuint pathParameterTemplate, + GLfloat emScale) { + requiresExtension(GL_NV_path_rendering) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glPathParameterfNV(GLuint path, GLenum pname, GLfloat value) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glPathParameterfvNV(GLuint path, GLenum pname, const GLfloat* value) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glPathParameteriNV(GLuint path, GLenum pname, GLint value) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glPathParameterivNV(GLuint path, GLenum pname, const GLint* value) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glPathStencilDepthOffsetNV(GLfloat factor, GLfloat units) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glPathStencilFuncNV(GLenum func, GLint ref, GLuint mask) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glPathStringNV(GLuint path, GLenum format, GLsizei length, const void* pathString) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glPathSubCommandsNV(GLuint path, + GLsizei commandStart, + GLsizei commandsToDelete, + GLsizei numCommands, + const GLubyte* commands, + GLsizei numCoords, + GLenum coordType, + const void* coords) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glPathSubCoordsNV(GLuint path, + GLsizei coordStart, + GLsizei numCoords, + GLenum coordType, + const void* coords) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd GLboolean glPointAlongPathNV(GLuint path, + GLsizei startSegment, + GLsizei numSegments, + GLfloat distance, + GLfloat* x, + GLfloat* y, + GLfloat* tangentX, + GLfloat* tangentY) { + requiresExtension(GL_NV_path_rendering) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_polygon_mode.txt","GL_NV_polygon_mode") +cmd void glPolygonModeNV(GLenum face, GLenum mode) { + requiresExtension(GL_NV_polygon_mode) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_debug_marker.txt","GL_EXT_debug_marker") +cmd void glPopGroupMarkerEXT() { + requiresExtension(GL_EXT_debug_marker) +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_primitive_bounding_box.txt","GL_OES_primitive_bounding_box") +cmd void glPrimitiveBoundingBoxOES(GLfloat minX, + GLfloat minY, + GLfloat minZ, + GLfloat minW, + GLfloat maxX, + GLfloat maxY, + GLfloat maxZ, + GLfloat maxW) { + requiresExtension(GL_OES_primitive_bounding_box) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_get_program_binary.txt","GL_OES_get_program_binary") +cmd void glProgramBinaryOES(ProgramId program, + GLenum binary_format, + const void* binary, + GLint binary_size) { + requiresExtension(GL_OES_get_program_binary) + +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramParameteriEXT(ProgramId program, GLenum pname, GLint value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glProgramPathFragmentInputGenNV(ProgramId program, + GLint location, + GLenum genMode, + GLint components, + const GLfloat* coeffs) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform1fEXT(ProgramId program, UniformLocation location, GLfloat v0) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform1fvEXT(ProgramId program, + UniformLocation location, + GLsizei count, + const GLfloat* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform1iEXT(ProgramId program, UniformLocation location, GLint v0) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform1ivEXT(ProgramId program, + UniformLocation location, + GLsizei count, + const GLint* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform1uiEXT(ProgramId program, UniformLocation location, GLuint v0) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform1uivEXT(ProgramId program, + UniformLocation location, + GLsizei count, + const GLuint* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform2fEXT(ProgramId program, + UniformLocation location, + GLfloat v0, + GLfloat v1) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform2fvEXT(ProgramId program, + UniformLocation location, + GLsizei count, + const GLfloat* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform2iEXT(ProgramId program, UniformLocation location, GLint v0, GLint v1) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform2ivEXT(ProgramId program, + UniformLocation location, + GLsizei count, + const GLint* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform2uiEXT(ProgramId program, UniformLocation location, GLuint v0, GLuint v1) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform2uivEXT(ProgramId program, + UniformLocation location, + GLsizei count, + const GLuint* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform3fEXT(ProgramId program, + UniformLocation location, + GLfloat v0, + GLfloat v1, + GLfloat v2) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform3fvEXT(ProgramId program, + UniformLocation location, + GLsizei count, + const GLfloat* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform3iEXT(ProgramId program, + UniformLocation location, + GLint v0, + GLint v1, + GLint v2) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform3ivEXT(ProgramId program, + UniformLocation location, + GLsizei count, + const GLint* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform3uiEXT(ProgramId program, + UniformLocation location, + GLuint v0, + GLuint v1, + GLuint v2) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform3uivEXT(ProgramId program, + UniformLocation location, + GLsizei count, + const GLuint* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform4fEXT(ProgramId program, + UniformLocation location, + GLfloat v0, + GLfloat v1, + GLfloat v2, + GLfloat v3) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform4fvEXT(ProgramId program, + UniformLocation location, + GLsizei count, + const GLfloat* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform4iEXT(ProgramId program, + UniformLocation location, + GLint v0, + GLint v1, + GLint v2, + GLint v3) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform4ivEXT(ProgramId program, + UniformLocation location, + GLsizei count, + const GLint* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform4uiEXT(ProgramId program, + UniformLocation location, + GLuint v0, + GLuint v1, + GLuint v2, + GLuint v3) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniform4uivEXT(ProgramId program, + UniformLocation location, + GLsizei count, + const GLuint* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/bindless_texture.txt","GL_NV_bindless_texture") +cmd void glProgramUniformHandleui64NV(ProgramId program, UniformLocation location, GLuint64 value) { + requiresExtension(GL_NV_bindless_texture) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/bindless_texture.txt","GL_NV_bindless_texture") +cmd void glProgramUniformHandleui64vNV(ProgramId program, + UniformLocation location, + GLsizei count, + const GLuint64* values) { + requiresExtension(GL_NV_bindless_texture) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniformMatrix2fvEXT(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniformMatrix2x3fvEXT(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniformMatrix2x4fvEXT(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniformMatrix3fvEXT(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniformMatrix3x2fvEXT(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniformMatrix3x4fvEXT(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniformMatrix4fvEXT(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniformMatrix4x2fvEXT(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glProgramUniformMatrix4x3fvEXT(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_debug_marker.txt","GL_EXT_debug_marker") +cmd void glPushGroupMarkerEXT(GLsizei length, const GLchar* marker) { + requiresExtension(GL_EXT_debug_marker) + + if length > 0 { + read(marker[0:length]) + } else { + _ = as!string(marker) + } +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_disjoint_timer_query.txt","GL_EXT_disjoint_timer_query") +cmd void glQueryCounterEXT(QueryId query, GLenum target) { + requiresExtension(GL_EXT_disjoint_timer_query) + +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_multiview_draw_buffers.txt","GL_EXT_multiview_draw_buffers") +cmd void glReadBufferIndexedEXT(GLenum src, GLint index) { + requiresExtension(GL_EXT_multiview_draw_buffers) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_read_buffer.txt","GL_NV_read_buffer") +cmd void glReadBufferNV(GLenum mode) { + requiresExtension(GL_NV_read_buffer) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_robustness.txt","GL_EXT_robustness") +cmd void glReadnPixelsEXT(GLint x, + GLint y, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + GLsizei bufSize, + void* data) { + requiresExtension(GL_EXT_robustness) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/KHR/robustness.txt","GL_KHR_robustness") +cmd void glReadnPixelsKHR(GLint x, + GLint y, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + GLsizei bufSize, + void* data) { + requiresExtension(GL_KHR_robustness) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/ANGLE/ANGLE_framebuffer_multisample.txt","GL_ANGLE_framebuffer_multisample") +cmd void glRenderbufferStorageMultisampleANGLE(GLenum target, + GLsizei samples, + GLenum internalformat, + GLsizei width, + GLsizei height) { + requiresExtension(GL_ANGLE_framebuffer_multisample) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/APPLE/APPLE_framebuffer_multisample.txt","GL_APPLE_framebuffer_multisample") +cmd void glRenderbufferStorageMultisampleAPPLE(GLenum target, + GLsizei samples, + GLenum internalformat, + GLsizei width, + GLsizei height) { + requiresExtension(GL_APPLE_framebuffer_multisample) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_multisampled_render_to_texture.txt","GL_EXT_multisampled_render_to_texture") +cmd void glRenderbufferStorageMultisampleEXT(GLenum target, + GLsizei samples, + GLenum internalformat, + GLsizei width, + GLsizei height) { + requiresExtension(GL_EXT_multisampled_render_to_texture) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/IMG/IMG_multisampled_render_to_texture.txt","GL_IMG_multisampled_render_to_texture") +cmd void glRenderbufferStorageMultisampleIMG(GLenum target, + GLsizei samples, + GLenum internalformat, + GLsizei width, + GLsizei height) { + requiresExtension(GL_IMG_multisampled_render_to_texture) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_framebuffer_multisample.txt","GL_NV_framebuffer_multisample") +cmd void glRenderbufferStorageMultisampleNV(GLenum target, + GLsizei samples, + GLenum internalformat, + GLsizei width, + GLsizei height) { + requiresExtension(GL_NV_framebuffer_multisample) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/APPLE/APPLE_framebuffer_multisample.txt","GL_APPLE_framebuffer_multisample") +cmd void glResolveMultisampleFramebufferAPPLE() { + requiresExtension(GL_APPLE_framebuffer_multisample) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_border_clamp.txt","GL_OES_texture_border_clamp") +cmd void glSamplerParameterIivOES(SamplerId sampler, GLenum pname, const GLint* param) { + requiresExtension(GL_OES_texture_border_clamp) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_border_clamp.txt","GL_OES_texture_border_clamp") +cmd void glSamplerParameterIuivOES(SamplerId sampler, GLenum pname, const GLuint* param) { + requiresExtension(GL_OES_texture_border_clamp) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_viewport_array.txt","GL_NV_viewport_array") +cmd void glScissorArrayvNV(GLuint first, GLsizei count, const GLint* v) { + requiresExtension(GL_NV_viewport_array) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_viewport_array.txt","GL_NV_viewport_array") +cmd void glScissorIndexedNV(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) { + requiresExtension(GL_NV_viewport_array) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_viewport_array.txt","GL_NV_viewport_array") +cmd void glScissorIndexedvNV(GLuint index, const GLint* v) { + requiresExtension(GL_NV_viewport_array) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/AMD/performance_monitor.txt","GL_AMD_performance_monitor") +cmd void glSelectPerfMonitorCountersAMD(GLuint monitor, + GLboolean enable, + GLuint group, + GLint numCounters, + GLuint* counterList) { + requiresExtension(GL_AMD_performance_monitor) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/fence.txt","GL_NV_fence") +cmd void glSetFenceNV(GLuint fence, GLenum condition) { + requiresExtension(GL_NV_fence) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/QCOM/QCOM_tiled_rendering.txt","GL_QCOM_tiled_rendering") +cmd void glStartTilingQCOM(GLuint x, + GLuint y, + GLuint width, + GLuint height, + GLbitfield preserveMask) { + requiresExtension(GL_QCOM_tiled_rendering) + +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glStencilFillPathInstancedNV(GLsizei numPaths, + GLenum pathNameType, + const void* paths, + GLuint pathBase, + GLenum fillMode, + GLuint mask, + GLenum transformType, + const GLfloat* transformValues) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glStencilFillPathNV(GLuint path, GLenum fillMode, GLuint mask) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glStencilStrokePathInstancedNV(GLsizei numPaths, + GLenum pathNameType, + const void* paths, + GLuint pathBase, + GLint reference, + GLuint mask, + GLenum transformType, + const GLfloat* transformValues) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glStencilStrokePathNV(GLuint path, GLint reference, GLuint mask) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glStencilThenCoverFillPathInstancedNV(GLsizei numPaths, + GLenum pathNameType, + const void* paths, + GLuint pathBase, + GLenum fillMode, + GLuint mask, + GLenum coverMode, + GLenum transformType, + const GLfloat* transformValues) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glStencilThenCoverFillPathNV(GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glStencilThenCoverStrokePathInstancedNV(GLsizei numPaths, + GLenum pathNameType, + const void* paths, + GLuint pathBase, + GLint reference, + GLuint mask, + GLenum coverMode, + GLenum transformType, + const GLfloat* transformValues) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glStencilThenCoverStrokePathNV(GLuint path, + GLint reference, + GLuint mask, + GLenum coverMode) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/fence.txt","GL_NV_fence") +cmd GLboolean glTestFenceNV(GLuint fence) { + requiresExtension(GL_NV_fence) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_buffer.txt","GL_OES_texture_buffer") +cmd void glTexBufferOES(GLenum target, GLenum internalformat, BufferId buffer) { + requiresExtension(GL_OES_texture_buffer) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_buffer.txt","GL_OES_texture_buffer") +cmd void glTexBufferRangeOES(GLenum target, + GLenum internalformat, + BufferId buffer, + GLintptr offset, + GLsizeiptr size) { + requiresExtension(GL_OES_texture_buffer) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_3D.txt","GL_OES_texture_3D") +cmd void glTexImage3DOES(GLenum target, + GLint level, + GLenum internalformat, + GLsizei width, + GLsizei height, + GLsizei depth, + GLint border, + GLenum format, + GLenum type, + const void* pixels) { + requiresExtension(GL_OES_texture_3D) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_sparse_texture.txt","GL_EXT_sparse_texture") +cmd void glTexPageCommitmentARB(GLenum target, + GLint level, + GLint xoffset, + GLint yoffset, + GLint zoffset, + GLsizei width, + GLsizei height, + GLsizei depth, + GLboolean commit) { + requiresExtension(GL_EXT_sparse_texture) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_border_clamp.txt","GL_OES_texture_border_clamp") +cmd void glTexParameterIivOES(GLenum target, GLenum pname, const GLint* params) { + requiresExtension(GL_OES_texture_border_clamp) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_border_clamp.txt","GL_OES_texture_border_clamp") +cmd void glTexParameterIuivOES(GLenum target, GLenum pname, const GLuint* params) { + requiresExtension(GL_OES_texture_border_clamp) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_storage.txt","GL_EXT_texture_storage") +cmd void glTexStorage1DEXT(GLenum target, GLsizei levels, GLenum format, GLsizei width) { + requiresExtension(GL_EXT_texture_storage) + +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_storage.txt","GL_EXT_texture_storage") +cmd void glTexStorage2DEXT(GLenum target, + GLsizei levels, + GLenum format, + GLsizei width, + GLsizei height) { + requiresExtension(GL_EXT_texture_storage) + +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_storage.txt","GL_EXT_texture_storage") +cmd void glTexStorage3DEXT(GLenum target, + GLsizei levels, + GLenum format, + GLsizei width, + GLsizei height, + GLsizei depth) { + requiresExtension(GL_EXT_texture_storage) + +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_3D.txt","GL_OES_texture_3D") +cmd void glTexSubImage3DOES(GLenum target, + GLint level, + GLint xoffset, + GLint yoffset, + GLint zoffset, + GLsizei width, + GLsizei height, + GLsizei depth, + GLenum format, + GLenum type, + const void* pixels) { + requiresExtension(GL_OES_texture_3D) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_storage.txt","GL_EXT_texture_storage") +cmd void glTextureStorage1DEXT(TextureId texture, + GLenum target, + GLsizei levels, + GLenum format, + GLsizei width) { + requiresExtension(GL_EXT_texture_storage) + +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_storage.txt","GL_EXT_texture_storage") +cmd void glTextureStorage2DEXT(TextureId texture, + GLenum target, + GLsizei levels, + GLenum format, + GLsizei width, + GLsizei height) { + requiresExtension(GL_EXT_texture_storage) + +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_storage.txt","GL_EXT_texture_storage") +cmd void glTextureStorage3DEXT(TextureId texture, + GLenum target, + GLsizei levels, + GLenum format, + GLsizei width, + GLsizei height, + GLsizei depth) { + requiresExtension(GL_EXT_texture_storage) + +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_texture_view.txt","GL_EXT_texture_view") +cmd void glTextureViewEXT(TextureId texture, + GLenum target, + GLuint origtexture, + GLenum internalformat, + GLuint minlevel, + GLuint numlevels, + GLuint minlayer, + GLuint numlayers) { + requiresExtension(GL_EXT_texture_view) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_texture_view.txt","GL_OES_texture_view") +cmd void glTextureViewOES(TextureId texture, + GLenum target, + GLuint origtexture, + GLenum internalformat, + GLuint minlevel, + GLuint numlevels, + GLuint minlayer, + GLuint numlayers) { + requiresExtension(GL_OES_texture_view) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glTransformPathNV(GLuint resultPath, + GLuint srcPath, + GLenum transformType, + const GLfloat* transformValues) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/bindless_texture.txt","GL_NV_bindless_texture") +cmd void glUniformHandleui64NV(UniformLocation location, GLuint64 value) { + requiresExtension(GL_NV_bindless_texture) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/bindless_texture.txt","GL_NV_bindless_texture") +cmd void glUniformHandleui64vNV(UniformLocation location, GLsizei count, const GLuint64* value) { + requiresExtension(GL_NV_bindless_texture) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_non_square_matrices.txt","GL_NV_non_square_matrices") +cmd void glUniformMatrix2x3fvNV(UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + requiresExtension(GL_NV_non_square_matrices) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_non_square_matrices.txt","GL_NV_non_square_matrices") +cmd void glUniformMatrix2x4fvNV(UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + requiresExtension(GL_NV_non_square_matrices) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_non_square_matrices.txt","GL_NV_non_square_matrices") +cmd void glUniformMatrix3x2fvNV(UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + requiresExtension(GL_NV_non_square_matrices) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_non_square_matrices.txt","GL_NV_non_square_matrices") +cmd void glUniformMatrix3x4fvNV(UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + requiresExtension(GL_NV_non_square_matrices) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_non_square_matrices.txt","GL_NV_non_square_matrices") +cmd void glUniformMatrix4x2fvNV(UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + requiresExtension(GL_NV_non_square_matrices) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_non_square_matrices.txt","GL_NV_non_square_matrices") +cmd void glUniformMatrix4x3fvNV(UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + requiresExtension(GL_NV_non_square_matrices) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/OES/OES_mapbuffer.txt","GL_OES_mapbuffer") +cmd GLboolean glUnmapBufferOES(GLenum target) { + requiresExtension(GL_OES_mapbuffer) + // TODO + return ? +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glUseProgramStagesEXT(PipelineId pipeline, GLbitfield stages, ProgramId program) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt","GL_EXT_separate_shader_objects") +cmd void glValidateProgramPipelineEXT(PipelineId pipeline) { + requiresExtension(GL_EXT_separate_shader_objects) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/ANGLE/ANGLE_instanced_arrays.txt","GL_ANGLE_instanced_arrays") +cmd void glVertexAttribDivisorANGLE(AttributeLocation index, GLuint divisor) { + requiresExtension(GL_ANGLE_instanced_arrays) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/EXT_instanced_arrays.txt","GL_EXT_instanced_arrays") +cmd void glVertexAttribDivisorEXT(AttributeLocation index, GLuint divisor) { + requiresExtension(GL_EXT_instanced_arrays) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_instanced_arrays.txt","GL_NV_instanced_arrays") +cmd void glVertexAttribDivisorNV(AttributeLocation index, GLuint divisor) { + requiresExtension(GL_NV_instanced_arrays) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_viewport_array.txt","GL_NV_viewport_array") +cmd void glViewportArrayvNV(GLuint first, GLsizei count, const GLfloat* v) { + requiresExtension(GL_NV_viewport_array) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_viewport_array.txt","GL_NV_viewport_array") +cmd void glViewportIndexedfNV(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) { + requiresExtension(GL_NV_viewport_array) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/NV_viewport_array.txt","GL_NV_viewport_array") +cmd void glViewportIndexedfvNV(GLuint index, const GLfloat* v) { + requiresExtension(GL_NV_viewport_array) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/APPLE/APPLE_sync.txt","GL_APPLE_sync") +cmd void glWaitSyncAPPLE(GLsync sync, GLbitfield flags, GLuint64 timeout) { + requiresExtension(GL_APPLE_sync) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/path_rendering.txt","GL_NV_path_rendering") +cmd void glWeightPathsNV(GLuint resultPath, + GLsizei numPaths, + const GLuint* paths, + const GLfloat* weights) { + requiresExtension(GL_NV_path_rendering) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/framebuffer_mixed_samples.txt","GL_NV_framebuffer_mixed_samples") +cmd void glCoverageModulationNV(GLenum components) { + requiresExtension(GL_NV_framebuffer_mixed_samples) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/framebuffer_mixed_samples.txt","GL_NV_framebuffer_mixed_samples") +cmd void glCoverageModulationTableNV(GLsizei n, const GLfloat* v) { + requiresExtension(GL_NV_framebuffer_mixed_samples) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/fragment_coverage_to_color.txt","GL_NV_fragment_coverage_to_color") +cmd void glFragmentCoverageColorNV(GLuint color) { + requiresExtension(GL_NV_fragment_coverage_to_color) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/sample_locations.txt","GL_NV_sample_locations") +cmd void glFramebufferSampleLocationsfvNV(GLenum target, + GLuint start, + GLsizei count, + const GLfloat* v) { + requiresExtension(GL_NV_sample_locations) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/framebuffer_mixed_samples.txt","GL_NV_framebuffer_mixed_samples") +cmd void glGetCoverageModulationTableNV(GLsizei bufsize, GLfloat* v) { + requiresExtension(GL_NV_framebuffer_mixed_samples) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/sample_locations.txt","GL_NV_sample_locations") +cmd void glNamedFramebufferSampleLocationsfvNV(FramebufferId framebuffer, + GLuint start, + GLsizei count, + const GLfloat* v) { + requiresExtension(GL_NV_sample_locations) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/raster_multisample.txt","GL_EXT_raster_multisample") +@Doc("https://www.khronos.org/registry/gles/extensions/EXT/texture_filter_minmax.txt","GL_EXT_texture_filter_minmax") +@Doc("https://www.khronos.org/registry/gles/extensions/NV/framebuffer_mixed_samples.txt","GL_NV_framebuffer_mixed_samples") +cmd void glRasterSamplesEXT(GLuint samples, GLboolean fixedsamplelocations) { + requiresExtension(GL_EXT_raster_multisample) + requiresExtension(GL_EXT_texture_filter_minmax) + requiresExtension(GL_NV_framebuffer_mixed_samples) + // TODO: Multiple extensions + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/sample_locations.txt","GL_NV_sample_locations") +cmd void glResolveDepthValuesNV() { + requiresExtension(GL_NV_sample_locations) + // TODO +} + +@Doc("https://www.khronos.org/registry/gles/extensions/NV/conservative_raster.txt","GL_NV_conservative_raster") +cmd void glSubpixelPrecisionBiasNV(GLuint xbits, GLuint ybits) { + requiresExtension(GL_NV_conservative_raster) + // TODO +} + diff --git a/gfxapi/gles/api/fragment_operations.api b/gfxapi/gles/api/fragment_operations.api new file mode 100644 index 000000000..ce1f329ae --- /dev/null +++ b/gfxapi/gles/api/fragment_operations.api @@ -0,0 +1,339 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBlendColor.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBlendColor.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBlendColor.xhtml","OpenGL ES 3.1") +cmd void glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.Blending.BlendColor = Color( + Red: red, + Green: green, + Blue: blue, + Alpha: alpha, + ) +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBlendEquation.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBlendEquation.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBlendEquation.xhtml","OpenGL ES 3.1") +cmd void glBlendEquation(GLenum equation) { + minRequiredVersion(2, 0) + switch (equation) { + case GL_FUNC_ADD, GL_FUNC_REVERSE_SUBTRACT, GL_FUNC_SUBTRACT: { + // version 2.0 + } + case GL_MAX, GL_MIN: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(equation) + } + } + + ctx := GetContext() + ctx.Blending.BlendEquationRgb = equation + ctx.Blending.BlendEquationAlpha = equation +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBlendEquationSeparate.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBlendEquationSeparate.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBlendEquationSeparate.xhtml","OpenGL ES 3.1") +cmd void glBlendEquationSeparate(GLenum rgb, GLenum alpha) { + minRequiredVersion(2, 0) + switch (rgb) { + case GL_FUNC_ADD, GL_FUNC_REVERSE_SUBTRACT, GL_FUNC_SUBTRACT: { + // version 2.0 + } + case GL_MAX, GL_MIN: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(rgb) + } + } + switch (alpha) { + case GL_FUNC_ADD, GL_FUNC_REVERSE_SUBTRACT, GL_FUNC_SUBTRACT: { + // version 2.0 + } + case GL_MAX, GL_MIN: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(alpha) + } + } + + ctx := GetContext() + ctx.Blending.BlendEquationRgb = rgb + ctx.Blending.BlendEquationAlpha = alpha +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBlendFunc.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBlendFunc.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBlendFunc.xhtml","OpenGL ES 3.1") +cmd void glBlendFunc(GLenum src_factor, GLenum dst_factor) { + minRequiredVersion(2, 0) + switch (src_factor) { + case GL_CONSTANT_ALPHA, GL_CONSTANT_COLOR, GL_DST_ALPHA, GL_DST_COLOR, GL_ONE, + GL_ONE_MINUS_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_COLOR, GL_ONE_MINUS_DST_ALPHA, + GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA, + GL_SRC_ALPHA_SATURATE, GL_SRC_COLOR, GL_ZERO: { + // version 2.0 + } + default: { + glErrorInvalidEnum(src_factor) + } + } + switch (dst_factor) { + case GL_CONSTANT_ALPHA, GL_CONSTANT_COLOR, GL_DST_ALPHA, GL_DST_COLOR, GL_ONE, + GL_ONE_MINUS_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_COLOR, GL_ONE_MINUS_DST_ALPHA, + GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA, + GL_SRC_COLOR, GL_ZERO: { + // version 2.0 + } + default: { + glErrorInvalidEnum(dst_factor) + } + } + + ctx := GetContext() + ctx.Blending.SrcRgbBlendFactor = src_factor + ctx.Blending.SrcAlphaBlendFactor = src_factor + ctx.Blending.DstRgbBlendFactor = dst_factor + ctx.Blending.DstAlphaBlendFactor = dst_factor +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBlendFuncSeparate.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBlendFuncSeparate.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBlendFuncSeparate.xhtml","OpenGL ES 3.1") +cmd void glBlendFuncSeparate(GLenum src_factor_rgb, + GLenum dst_factor_rgb, + GLenum src_factor_alpha, + GLenum dst_factor_alpha) { + minRequiredVersion(2, 0) + switch (src_factor_rgb) { + case GL_CONSTANT_ALPHA, GL_CONSTANT_COLOR, GL_DST_ALPHA, GL_DST_COLOR, GL_ONE, + GL_ONE_MINUS_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_COLOR, GL_ONE_MINUS_DST_ALPHA, + GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA, + GL_SRC_ALPHA_SATURATE, GL_SRC_COLOR, GL_ZERO: { + // version 2.0 + } + default: { + glErrorInvalidEnum(src_factor_rgb) + } + } + switch (dst_factor_rgb) { + case GL_CONSTANT_ALPHA, GL_CONSTANT_COLOR, GL_DST_ALPHA, GL_DST_COLOR, GL_ONE, + GL_ONE_MINUS_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_COLOR, GL_ONE_MINUS_DST_ALPHA, + GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA, + GL_SRC_COLOR, GL_ZERO: { + // version 2.0 + } + default: { + glErrorInvalidEnum(dst_factor_rgb) + } + } + switch (src_factor_alpha) { + case GL_CONSTANT_ALPHA, GL_CONSTANT_COLOR, GL_DST_ALPHA, GL_DST_COLOR, GL_ONE, + GL_ONE_MINUS_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_COLOR, GL_ONE_MINUS_DST_ALPHA, + GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA, + GL_SRC_ALPHA_SATURATE, GL_SRC_COLOR, GL_ZERO: { + // version 2.0 + } + default: { + glErrorInvalidEnum(src_factor_alpha) + } + } + switch (dst_factor_alpha) { + case GL_CONSTANT_ALPHA, GL_CONSTANT_COLOR, GL_DST_ALPHA, GL_DST_COLOR, GL_ONE, + GL_ONE_MINUS_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_COLOR, GL_ONE_MINUS_DST_ALPHA, + GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA, + GL_SRC_COLOR, GL_ZERO: { + // version 2.0 + } + default: { + glErrorInvalidEnum(dst_factor_alpha) + } + } + + ctx := GetContext() + ctx.Blending.SrcRgbBlendFactor = src_factor_rgb + ctx.Blending.DstRgbBlendFactor = dst_factor_rgb + ctx.Blending.SrcAlphaBlendFactor = src_factor_alpha + ctx.Blending.DstAlphaBlendFactor = dst_factor_alpha +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glDepthFunc.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDepthFunc.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDepthFunc.xhtml","OpenGL ES 3.1") +cmd void glDepthFunc(GLenum function) { + minRequiredVersion(2, 0) + switch (function) { + case GL_ALWAYS, GL_EQUAL, GL_GEQUAL, GL_GREATER, GL_LEQUAL, GL_LESS, GL_NEVER, GL_NOTEQUAL: { + // version 2.0 + } + default: { + glErrorInvalidEnum(function) + } + } + + ctx := GetContext() + ctx.Rasterizing.DepthTestFunction = function +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glSampleCoverage.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glSampleCoverage.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glSampleCoverage.xhtml","OpenGL ES 3.1") +cmd void glSampleCoverage(GLfloat value, GLboolean invert) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.Rasterizing.SampleCoverageValue = value + ctx.Rasterizing.SampleCoverageInvert = invert +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glSampleMaski.xhtml","OpenGL ES 3.1") +cmd void glSampleMaski(GLuint maskNumber, GLbitfield mask) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glScissor.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glScissor.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glScissor.xhtml","OpenGL ES 3.1") +cmd void glScissor(GLint x, GLint y, GLsizei width, GLsizei height) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.Rasterizing.Scissor = Rect(x, y, width, height) +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glStencilFunc.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glStencilFunc.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glStencilFunc.xhtml","OpenGL ES 3.1") +cmd void glStencilFunc(GLenum func, GLint ref, GLuint mask) { + minRequiredVersion(2, 0) + switch (func) { + case GL_ALWAYS, GL_EQUAL, GL_GEQUAL, GL_GREATER, GL_LEQUAL, GL_LESS, GL_NEVER, GL_NOTEQUAL: { + // version 2.0 + } + default: { + glErrorInvalidEnum(func) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glStencilFuncSeparate.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glStencilFuncSeparate.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glStencilFuncSeparate.xhtml","OpenGL ES 3.1") +cmd void glStencilFuncSeparate(GLenum face, GLenum function, GLint reference_value, GLuint mask) { + minRequiredVersion(2, 0) + switch (face) { + case GL_BACK, GL_FRONT, GL_FRONT_AND_BACK: { + // version 2.0 + } + default: { + glErrorInvalidEnum(face) + } + } + switch (function) { + case GL_ALWAYS, GL_EQUAL, GL_GEQUAL, GL_GREATER, GL_LEQUAL, GL_LESS, GL_NEVER, GL_NOTEQUAL: { + // version 2.0 + } + default: { + glErrorInvalidEnum(function) + } + } + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glStencilOp.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glStencilOp.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glStencilOp.xhtml","OpenGL ES 3.1") +cmd void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass) { + minRequiredVersion(2, 0) + switch (fail) { + case GL_DECR, GL_DECR_WRAP, GL_INCR, GL_INCR_WRAP, GL_INVERT, GL_KEEP, GL_REPLACE, GL_ZERO: { + // version 2.0 + } + default: { + glErrorInvalidEnum(fail) + } + } + switch (zfail) { + case GL_DECR, GL_DECR_WRAP, GL_INCR, GL_INCR_WRAP, GL_INVERT, GL_KEEP, GL_REPLACE, GL_ZERO: { + // version 2.0 + } + default: { + glErrorInvalidEnum(zfail) + } + } + switch (zpass) { + case GL_DECR, GL_DECR_WRAP, GL_INCR, GL_INCR_WRAP, GL_INVERT, GL_KEEP, GL_REPLACE, GL_ZERO: { + // version 2.0 + } + default: { + glErrorInvalidEnum(zpass) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glStencilOpSeparate.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glStencilOpSeparate.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glStencilOpSeparate.xhtml","OpenGL ES 3.1") +cmd void glStencilOpSeparate(GLenum face, + GLenum stencil_fail, + GLenum stencil_pass_depth_fail, + GLenum stencil_pass_depth_pass) { + minRequiredVersion(2, 0) + switch (face) { + case GL_BACK, GL_FRONT, GL_FRONT_AND_BACK: { + // version 2.0 + } + default: { + glErrorInvalidEnum(face) + } + } + switch (stencil_fail) { + case GL_DECR, GL_DECR_WRAP, GL_INCR, GL_INCR_WRAP, GL_INVERT, GL_KEEP, GL_REPLACE, GL_ZERO: { + // version 2.0 + } + default: { + glErrorInvalidEnum(stencil_fail) + } + } + switch (stencil_pass_depth_fail) { + case GL_DECR, GL_DECR_WRAP, GL_INCR, GL_INCR_WRAP, GL_INVERT, GL_KEEP, GL_REPLACE, GL_ZERO: { + // version 2.0 + } + default: { + glErrorInvalidEnum(stencil_pass_depth_fail) + } + } + switch (stencil_pass_depth_pass) { + case GL_DECR, GL_DECR_WRAP, GL_INCR, GL_INCR_WRAP, GL_INVERT, GL_KEEP, GL_REPLACE, GL_ZERO: { + // version 2.0 + } + default: { + glErrorInvalidEnum(stencil_pass_depth_pass) + } + } + +} + diff --git a/gfxapi/gles/api/framebuffer.api b/gfxapi/gles/api/framebuffer.api new file mode 100644 index 000000000..3e7e90032 --- /dev/null +++ b/gfxapi/gles/api/framebuffer.api @@ -0,0 +1,858 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBindFramebuffer.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBindFramebuffer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindFramebuffer.xhtml","OpenGL ES 3.1") +cmd void glBindFramebuffer(GLenum target, FramebufferId framebuffer) { + minRequiredVersion(2, 0) + switch (target) { + case GL_FRAMEBUFFER: { + // version 2.0 + } + case GL_DRAW_FRAMEBUFFER, GL_READ_FRAMEBUFFER: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(target) + } + } + + ctx := GetContext() + if !(framebuffer in ctx.Instances.Framebuffers) { + ctx.Instances.Framebuffers[framebuffer] = new!Framebuffer() + } + if target == GL_FRAMEBUFFER { + ctx.BoundFramebuffers[GL_READ_FRAMEBUFFER] = framebuffer + ctx.BoundFramebuffers[GL_DRAW_FRAMEBUFFER] = framebuffer + } else { + ctx.BoundFramebuffers[target] = framebuffer + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBindRenderbuffer.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBindRenderbuffer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindRenderbuffer.xhtml","OpenGL ES 3.1") +cmd void glBindRenderbuffer(GLenum target, RenderbufferId renderbuffer) { + minRequiredVersion(2, 0) + switch (target) { + case GL_RENDERBUFFER: { + // version 2.0 + } + default: { + glErrorInvalidEnum(target) + } + } + + ctx := GetContext() + if !(renderbuffer in ctx.Instances.Renderbuffers) { + ctx.Instances.Renderbuffers[renderbuffer] = new!Renderbuffer() + } + ctx.BoundRenderbuffers[target] = renderbuffer +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBlitFramebuffer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBlitFramebuffer.xhtml","OpenGL ES 3.1") +cmd void glBlitFramebuffer(GLint srcX0, + GLint srcY0, + GLint srcX1, + GLint srcY1, + GLint dstX0, + GLint dstY0, + GLint dstX1, + GLint dstY1, + GLbitfield mask, + GLenum filter) { + minRequiredVersion(3, 0) + supportsBits(mask, GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT) + if (GL_COLOR_BUFFER_BIT in mask) { + } + if (GL_DEPTH_BUFFER_BIT in mask) { + } + if (GL_STENCIL_BUFFER_BIT in mask) { + } + switch (filter) { + case GL_LINEAR, GL_NEAREST: { + // version 3.0 + } + default: { + glErrorInvalidEnum(filter) + } + } + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glCheckFramebufferStatus.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCheckFramebufferStatus.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCheckFramebufferStatus.xhtml","OpenGL ES 3.1") +cmd GLenum glCheckFramebufferStatus(GLenum target) { + minRequiredVersion(2, 0) + switch (target) { + case GL_FRAMEBUFFER: { + // version 2.0 + } + case GL_DRAW_FRAMEBUFFER, GL_READ_FRAMEBUFFER: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(target) + } + } + + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glClear.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glClear.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glClear.xhtml","OpenGL ES 3.1") +cmd void glClear(GLbitfield mask) { + minRequiredVersion(2, 0) + supportsBits(mask, GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT) + if (GL_COLOR_BUFFER_BIT in mask) { + } + if (GL_DEPTH_BUFFER_BIT in mask) { + } + if (GL_STENCIL_BUFFER_BIT in mask) { + } + + // TODO: use(Clearing.ClearColor) when mask[GL_COLOR_BUFFER_BIT] == true + if (GL_COLOR_BUFFER_BIT in mask) { + // color := BoundFramebuffers[GL_FRAMEBUFFER].Attachments[GL_COLOR_ATTACHMENT0] + // error("Attempting to clear missing color buffer") if !exists(color) + // modifies(color.Levels[0].Data) // COMPILATION ERROR + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glClearBuffer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glClearBuffer.xhtml","OpenGL ES 3.1") +cmd void glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) { + minRequiredVersion(3, 0) + switch (buffer) { + case GL_DEPTH_STENCIL: { + // version 3.0 + } + default: { + glErrorInvalidEnum(buffer) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glClearBuffer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glClearBuffer.xhtml","OpenGL ES 3.1") +cmd void glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value) { + minRequiredVersion(3, 0) + switch (buffer) { + case GL_COLOR, GL_DEPTH: { + // version 3.0 + } + default: { + glErrorInvalidEnum(buffer) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glClearBuffer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glClearBuffer.xhtml","OpenGL ES 3.1") +cmd void glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value) { + minRequiredVersion(3, 0) + switch (buffer) { + case GL_COLOR, GL_STENCIL: { + // version 3.0 + } + default: { + glErrorInvalidEnum(buffer) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glClearBuffer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glClearBuffer.xhtml","OpenGL ES 3.1") +cmd void glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value) { + minRequiredVersion(3, 0) + switch (buffer) { + case GL_COLOR: { + // version 3.0 + } + default: { + glErrorInvalidEnum(buffer) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glClearColor.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glClearColor.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glClearColor.xhtml","OpenGL ES 3.1") +cmd void glClearColor(GLfloat r, GLfloat g, GLfloat b, GLfloat a) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.Clearing.ClearColor = Color(r, g, b, a) +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glClearDepthf.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glClearDepthf.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glClearDepthf.xhtml","OpenGL ES 3.1") +cmd void glClearDepthf(GLfloat depth) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.Clearing.ClearDepth = depth +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glClearStencil.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glClearStencil.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glClearStencil.xhtml","OpenGL ES 3.1") +cmd void glClearStencil(GLint stencil) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.Clearing.ClearStencil = stencil +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glColorMask.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glColorMask.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glColorMask.xhtml","OpenGL ES 3.1") +cmd void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.Rasterizing.ColorMaskRed = red + ctx.Rasterizing.ColorMaskGreen = green + ctx.Rasterizing.ColorMaskBlue = blue + ctx.Rasterizing.ColorMaskAlpha = alpha +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glDeleteFramebuffers.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteFramebuffers.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDeleteFramebuffers.xhtml","OpenGL ES 3.1") +cmd void glDeleteFramebuffers(GLsizei count, const FramebufferId* framebuffers) { + minRequiredVersion(2, 0) + + f := framebuffers[0:count] + ctx := GetContext() + for i in (0 .. count) { + ctx.Instances.Framebuffers[f[i]] = null + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glDeleteRenderbuffers.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteRenderbuffers.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDeleteRenderbuffers.xhtml","OpenGL ES 3.1") +cmd void glDeleteRenderbuffers(GLsizei count, const RenderbufferId* renderbuffers) { + minRequiredVersion(2, 0) + + r := renderbuffers[0:count] + ctx := GetContext() + for i in (0 .. count) { + ctx.Instances.Renderbuffers[r[i]] = null + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glDepthMask.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDepthMask.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDepthMask.xhtml","OpenGL ES 3.1") +cmd void glDepthMask(GLboolean enabled) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.Rasterizing.DepthMask = enabled +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glFramebufferParameteri.xhtml","OpenGL ES 3.1") +cmd void glFramebufferParameteri(GLenum target, GLenum pname, GLint param) { + minRequiredVersion(3, 1) + switch (target) { + case GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER, GL_READ_FRAMEBUFFER: { + // version 3.1 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (pname) { + case GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, GL_FRAMEBUFFER_DEFAULT_HEIGHT, + GL_FRAMEBUFFER_DEFAULT_SAMPLES, GL_FRAMEBUFFER_DEFAULT_WIDTH: { + // version 3.1 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glFramebufferRenderbuffer.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glFramebufferRenderbuffer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glFramebufferRenderbuffer.xhtml","OpenGL ES 3.1") +cmd void glFramebufferRenderbuffer(GLenum framebuffer_target, + GLenum framebuffer_attachment, + GLenum renderbuffer_target, + RenderbufferId renderbuffer) { + minRequiredVersion(2, 0) + switch (framebuffer_target) { + case GL_FRAMEBUFFER: { + // version 2.0 + } + case GL_DRAW_FRAMEBUFFER, GL_READ_FRAMEBUFFER: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(framebuffer_target) + } + } + switch (framebuffer_attachment) { + case GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT, GL_STENCIL_ATTACHMENT: { + // version 2.0 + } + case GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT10, GL_COLOR_ATTACHMENT11, GL_COLOR_ATTACHMENT12, + GL_COLOR_ATTACHMENT13, GL_COLOR_ATTACHMENT14, GL_COLOR_ATTACHMENT15, GL_COLOR_ATTACHMENT2, + GL_COLOR_ATTACHMENT3, GL_COLOR_ATTACHMENT4, GL_COLOR_ATTACHMENT5, GL_COLOR_ATTACHMENT6, + GL_COLOR_ATTACHMENT7, GL_COLOR_ATTACHMENT8, GL_COLOR_ATTACHMENT9, + GL_DEPTH_STENCIL_ATTACHMENT: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(framebuffer_attachment) + } + } + switch (renderbuffer_target) { + case GL_RENDERBUFFER: { + // version 2.0 + } + default: { + glErrorInvalidEnum(renderbuffer_target) + } + } + + ctx := GetContext() + target := switch (framebuffer_target) { + case GL_FRAMEBUFFER: as!GLenum(GL_DRAW_FRAMEBUFFER) + case GL_DRAW_FRAMEBUFFER: as!GLenum(GL_DRAW_FRAMEBUFFER) + case GL_READ_FRAMEBUFFER: as!GLenum(GL_READ_FRAMEBUFFER) + } + framebufferId := ctx.BoundFramebuffers[target] + framebuffer := ctx.Instances.Framebuffers[framebufferId] + attachment := framebuffer.Attachments[framebuffer_attachment] + if (renderbuffer == 0) { + attachment.Type = GL_NONE + } else { + attachment.Type = GL_RENDERBUFFER + } + attachment.Object = as!u32(renderbuffer) + attachment.TextureLevel = 0 + attachment.CubeMapFace = GL_TEXTURE_CUBE_MAP_POSITIVE_X + framebuffer.Attachments[framebuffer_attachment] = attachment +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glFramebufferTexture2D.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glFramebufferTexture2D.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glFramebufferTexture2D.xhtml","OpenGL ES 3.1") +cmd void glFramebufferTexture2D(GLenum framebuffer_target, + GLenum framebuffer_attachment, + GLenum texture_target, + TextureId texture, + GLint level) { + minRequiredVersion(2, 0) + switch (framebuffer_target) { + case GL_FRAMEBUFFER: { + // version 2.0 + } + case GL_DRAW_FRAMEBUFFER, GL_READ_FRAMEBUFFER: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(framebuffer_target) + } + } + switch (framebuffer_attachment) { + case GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT, GL_STENCIL_ATTACHMENT: { + // version 2.0 + } + case GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT10, GL_COLOR_ATTACHMENT11, GL_COLOR_ATTACHMENT12, + GL_COLOR_ATTACHMENT13, GL_COLOR_ATTACHMENT14, GL_COLOR_ATTACHMENT15, GL_COLOR_ATTACHMENT2, + GL_COLOR_ATTACHMENT3, GL_COLOR_ATTACHMENT4, GL_COLOR_ATTACHMENT5, GL_COLOR_ATTACHMENT6, + GL_COLOR_ATTACHMENT7, GL_COLOR_ATTACHMENT8, GL_COLOR_ATTACHMENT9, + GL_DEPTH_STENCIL_ATTACHMENT: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(framebuffer_attachment) + } + } + switch (texture_target) { + case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { + // version 2.0 + } + case GL_TEXTURE_2D_MULTISAMPLE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(texture_target) + } + } + + ctx := GetContext() + target := switch (framebuffer_target) { + case GL_FRAMEBUFFER: as!GLenum(GL_DRAW_FRAMEBUFFER) + case GL_DRAW_FRAMEBUFFER: as!GLenum(GL_DRAW_FRAMEBUFFER) + case GL_READ_FRAMEBUFFER: as!GLenum(GL_READ_FRAMEBUFFER) + } + framebufferId := ctx.BoundFramebuffers[target] + framebuffer := ctx.Instances.Framebuffers[framebufferId] + attachment := framebuffer.Attachments[framebuffer_attachment] + if (texture == 0) { + attachment.Type = GL_NONE + attachment.Object = 0 + attachment.TextureLevel = 0 + attachment.CubeMapFace = GL_TEXTURE_CUBE_MAP_POSITIVE_X + } else { + attachment.Type = GL_TEXTURE + attachment.Object = as!u32(texture) + attachment.TextureLevel = level + attachment.CubeMapFace = switch (texture_target) { + case GL_TEXTURE_2D: GL_TEXTURE_CUBE_MAP_POSITIVE_X + case GL_TEXTURE_CUBE_MAP_POSITIVE_X: GL_TEXTURE_CUBE_MAP_POSITIVE_X + case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: GL_TEXTURE_CUBE_MAP_POSITIVE_Y + case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: GL_TEXTURE_CUBE_MAP_POSITIVE_Z + case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: GL_TEXTURE_CUBE_MAP_NEGATIVE_X + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: GL_TEXTURE_CUBE_MAP_NEGATIVE_Y + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: GL_TEXTURE_CUBE_MAP_NEGATIVE_Z + } + } + framebuffer.Attachments[framebuffer_attachment] = attachment +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glFramebufferTextureLayer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glFramebufferTextureLayer.xhtml","OpenGL ES 3.1") +cmd void glFramebufferTextureLayer(GLenum target, + GLenum attachment, + TextureId texture, + GLint level, + GLint layer) { + minRequiredVersion(3, 0) + switch (target) { + case GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER, GL_READ_FRAMEBUFFER: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (attachment) { + case GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT10, GL_COLOR_ATTACHMENT11, + GL_COLOR_ATTACHMENT12, GL_COLOR_ATTACHMENT13, GL_COLOR_ATTACHMENT14, GL_COLOR_ATTACHMENT15, + GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3, GL_COLOR_ATTACHMENT4, GL_COLOR_ATTACHMENT5, + GL_COLOR_ATTACHMENT6, GL_COLOR_ATTACHMENT7, GL_COLOR_ATTACHMENT8, GL_COLOR_ATTACHMENT9, + GL_DEPTH_ATTACHMENT, GL_DEPTH_STENCIL_ATTACHMENT, GL_STENCIL_ATTACHMENT: { + // version 3.0 + } + default: { + glErrorInvalidEnum(attachment) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGenFramebuffers.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGenFramebuffers.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGenFramebuffers.xhtml","OpenGL ES 3.1") +cmd void glGenFramebuffers(GLsizei count, FramebufferId* framebuffers) { + minRequiredVersion(2, 0) + + f := framebuffers[0:count] + ctx := GetContext() + for i in (0 .. count) { + id := as!FramebufferId(?) + ctx.Instances.Framebuffers[id] = new!Framebuffer() + f[i] = id + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGenRenderbuffers.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGenRenderbuffers.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGenRenderbuffers.xhtml","OpenGL ES 3.1") +cmd void glGenRenderbuffers(GLsizei count, RenderbufferId* renderbuffers) { + minRequiredVersion(2, 0) + + r := renderbuffers[0:count] + ctx := GetContext() + for i in (0 .. count) { + id := as!RenderbufferId(?) + ctx.Instances.Renderbuffers[id] = new!Renderbuffer() + r[i] = id + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetFramebufferAttachmentParameteriv.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetFramebufferAttachmentParameteriv.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetFramebufferAttachmentParameteriv.xhtml","OpenGL ES 3.1") +cmd void glGetFramebufferAttachmentParameteriv(GLenum framebuffer_target, + GLenum attachment, + GLenum parameter, + GLint* value) { + minRequiredVersion(2, 0) + switch (framebuffer_target) { + case GL_FRAMEBUFFER: { + // version 2.0 + } + case GL_DRAW_FRAMEBUFFER, GL_READ_FRAMEBUFFER: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(framebuffer_target) + } + } + switch (attachment) { + case GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT, GL_STENCIL_ATTACHMENT: { + // version 2.0 + } + case GL_BACK, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT10, GL_COLOR_ATTACHMENT11, + GL_COLOR_ATTACHMENT12, GL_COLOR_ATTACHMENT13, GL_COLOR_ATTACHMENT14, GL_COLOR_ATTACHMENT15, + GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3, GL_COLOR_ATTACHMENT4, GL_COLOR_ATTACHMENT5, + GL_COLOR_ATTACHMENT6, GL_COLOR_ATTACHMENT7, GL_COLOR_ATTACHMENT8, GL_COLOR_ATTACHMENT9, + GL_DEPTH, GL_DEPTH_STENCIL_ATTACHMENT, GL_STENCIL: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(attachment) + } + } + switch (parameter) { + case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: { + // version 2.0 + } + case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, + GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE, + GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, + GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE, GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(parameter) + } + } + + ctx := GetContext() + target := switch (framebuffer_target) { + case GL_FRAMEBUFFER: as!GLenum(GL_DRAW_FRAMEBUFFER) + case GL_DRAW_FRAMEBUFFER: as!GLenum(GL_DRAW_FRAMEBUFFER) + case GL_READ_FRAMEBUFFER: as!GLenum(GL_READ_FRAMEBUFFER) + } + framebufferId := ctx.BoundFramebuffers[target] + framebuffer := ctx.Instances.Framebuffers[framebufferId] + a := framebuffer.Attachments[attachment] + value[0] = switch (parameter) { + case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: as!s32(a.Type) + case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: as!s32(a.Object) + case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: as!s32(a.TextureLevel) + case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: as!s32(a.CubeMapFace) + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetFramebufferParameteriv.xhtml","OpenGL ES 3.1") +cmd void glGetFramebufferParameteriv(GLenum target, GLenum pname, GLint* params) { + minRequiredVersion(3, 1) + switch (target) { + case GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER, GL_READ_FRAMEBUFFER: { + // version 3.1 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (pname) { + case GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, GL_FRAMEBUFFER_DEFAULT_HEIGHT, + GL_FRAMEBUFFER_DEFAULT_SAMPLES, GL_FRAMEBUFFER_DEFAULT_WIDTH: { + // version 3.1 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetRenderbufferParameteriv.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetRenderbufferParameteriv.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetRenderbufferParameteriv.xhtml","OpenGL ES 3.1") +cmd void glGetRenderbufferParameteriv(GLenum target, GLenum parameter, GLint* values) { + minRequiredVersion(2, 0) + switch (target) { + case GL_RENDERBUFFER: { + // version 2.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (parameter) { + case GL_RENDERBUFFER_ALPHA_SIZE, GL_RENDERBUFFER_BLUE_SIZE, GL_RENDERBUFFER_DEPTH_SIZE, + GL_RENDERBUFFER_GREEN_SIZE, GL_RENDERBUFFER_HEIGHT, GL_RENDERBUFFER_INTERNAL_FORMAT, + GL_RENDERBUFFER_RED_SIZE, GL_RENDERBUFFER_STENCIL_SIZE, GL_RENDERBUFFER_WIDTH: { + // version 2.0 + } + case GL_RENDERBUFFER_SAMPLES: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(parameter) + } + } + + ctx := GetContext() + id := ctx.BoundRenderbuffers[target] + rb := ctx.Instances.Renderbuffers[id] + values[0] = switch (parameter) { + case GL_RENDERBUFFER_WIDTH: rb.Width + case GL_RENDERBUFFER_HEIGHT: rb.Height + case GL_RENDERBUFFER_INTERNAL_FORMAT: as!s32(rb.Format) + // TODO: + // case GL_RENDERBUFFER_RED_SIZE: ? + // case GL_RENDERBUFFER_GREEN_SIZE: ? + // case GL_RENDERBUFFER_BLUE_SIZE: ? + // case GL_RENDERBUFFER_ALPHA_SIZE: ? + // case GL_RENDERBUFFER_DEPTH_SIZE: ? + // case GL_RENDERBUFFER_STENCIL_SIZE: ? + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glInvalidateFramebuffer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glInvalidateFramebuffer.xhtml","OpenGL ES 3.1") +cmd void glInvalidateFramebuffer(GLenum target, GLsizei count, const GLenum* attachments) { + minRequiredVersion(3, 0) + switch (target) { + case GL_FRAMEBUFFER: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glInvalidateSubFramebuffer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glInvalidateSubFramebuffer.xhtml","OpenGL ES 3.1") +cmd void glInvalidateSubFramebuffer(GLenum target, + GLsizei numAttachments, + const GLenum* attachments, + GLint x, + GLint y, + GLsizei width, + GLsizei height) { + minRequiredVersion(3, 0) + switch (target) { + case GL_FRAMEBUFFER: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glIsFramebuffer.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glIsFramebuffer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glIsFramebuffer.xhtml","OpenGL ES 3.1") +cmd bool glIsFramebuffer(FramebufferId framebuffer) { + minRequiredVersion(2, 0) + + ctx := GetContext() + return framebuffer in ctx.Instances.Framebuffers +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glIsRenderbuffer.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glIsRenderbuffer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glIsRenderbuffer.xhtml","OpenGL ES 3.1") +cmd bool glIsRenderbuffer(RenderbufferId renderbuffer) { + minRequiredVersion(2, 0) + + ctx := GetContext() + return renderbuffer in ctx.Instances.Renderbuffers +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glReadBuffer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glReadBuffer.xhtml","OpenGL ES 3.1") +cmd void glReadBuffer(GLenum src) { + minRequiredVersion(3, 0) + switch (src) { + case GL_BACK, GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT10, + GL_COLOR_ATTACHMENT11, GL_COLOR_ATTACHMENT12, GL_COLOR_ATTACHMENT13, GL_COLOR_ATTACHMENT14, + GL_COLOR_ATTACHMENT15, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3, GL_COLOR_ATTACHMENT4, + GL_COLOR_ATTACHMENT5, GL_COLOR_ATTACHMENT6, GL_COLOR_ATTACHMENT7, GL_COLOR_ATTACHMENT8, + GL_COLOR_ATTACHMENT9, GL_NONE: { + // version 3.0 + } + default: { + glErrorInvalidEnum(src) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glReadPixels.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glReadPixels.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glReadPixels.xhtml","OpenGL ES 3.1") +cmd void glReadPixels(GLint x, + GLint y, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + void* data) { + minRequiredVersion(2, 0) + switch (format) { + case GL_ALPHA, GL_RGB, GL_RGBA: { + // version 2.0 + } + case GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RED, GL_RED_INTEGER, GL_RG, GL_RGBA_INTEGER, + GL_RGB_INTEGER, GL_RG_INTEGER: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(format) + } + } + switch (type) { + case GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_5_5_5_1, + GL_UNSIGNED_SHORT_5_6_5: { + // version 2.0 + } + case GL_BYTE, GL_FLOAT, GL_HALF_FLOAT, GL_INT, GL_UNSIGNED_INT, + GL_UNSIGNED_INT_10F_11F_11F_REV, GL_UNSIGNED_INT_2_10_10_10_REV, + GL_UNSIGNED_INT_5_9_9_9_REV: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(type) + } + } + + write(data[0:imageSize(as!u32(width), as!u32(height), as!GLenum(format), type)]) +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glRenderbufferStorage.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glRenderbufferStorage.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glRenderbufferStorage.xhtml","OpenGL ES 3.1") +cmd void glRenderbufferStorage(GLenum target, GLenum format, GLsizei width, GLsizei height) { + minRequiredVersion(2, 0) + switch (target) { + case GL_RENDERBUFFER: { + // version 2.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (format) { + case GL_DEPTH_COMPONENT16, GL_RGB565, GL_RGB5_A1, GL_RGBA4, GL_STENCIL_INDEX8: { + // version 2.0 + } + case GL_DEPTH24_STENCIL8, GL_DEPTH32F_STENCIL8, GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT32F, + GL_R16I, GL_R16UI, GL_R32I, GL_R32UI, GL_R8, GL_R8I, GL_R8UI, GL_RG16I, GL_RG16UI, + GL_RG32I, GL_RG32UI, GL_RG8, GL_RG8I, GL_RG8UI, GL_RGB10_A2, GL_RGB10_A2UI, GL_RGB8, + GL_RGBA16I, GL_RGBA16UI, GL_RGBA32I, GL_RGBA32UI, GL_RGBA8, GL_RGBA8I, GL_RGBA8UI, + GL_SRGB8_ALPHA8: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(format) + } + } + + ctx := GetContext() + id := ctx.BoundRenderbuffers[target] + rb := ctx.Instances.Renderbuffers[id] + rb.Format = format + rb.Width = width + rb.Height = height +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glRenderbufferStorageMultisample.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glRenderbufferStorageMultisample.xhtml","OpenGL ES 3.1") +cmd void glRenderbufferStorageMultisample(GLenum target, + GLsizei samples, + GLenum format, + GLsizei width, + GLsizei height) { + minRequiredVersion(3, 0) + switch (target) { + case GL_RENDERBUFFER: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (format) { + case GL_DEPTH24_STENCIL8, GL_DEPTH32F_STENCIL8, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24, + GL_DEPTH_COMPONENT32F, GL_R16I, GL_R16UI, GL_R32I, GL_R32UI, GL_R8, GL_R8I, GL_R8UI, + GL_RG16I, GL_RG16UI, GL_RG32I, GL_RG32UI, GL_RG8, GL_RG8I, GL_RG8UI, GL_RGB10_A2, + GL_RGB10_A2UI, GL_RGB565, GL_RGB5_A1, GL_RGB8, GL_RGBA16I, GL_RGBA16UI, GL_RGBA32I, + GL_RGBA32UI, GL_RGBA4, GL_RGBA8, GL_RGBA8I, GL_RGBA8UI, GL_SRGB8_ALPHA8, GL_STENCIL_INDEX8: + { + // version 3.0 + } + default: { + glErrorInvalidEnum(format) + } + } + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glStencilMask.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glStencilMask.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glStencilMask.xhtml","OpenGL ES 3.1") +cmd void glStencilMask(GLuint mask) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.Rasterizing.StencilMask[GL_FRONT] = mask + ctx.Rasterizing.StencilMask[GL_BACK] = mask +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glStencilMaskSeparate.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glStencilMaskSeparate.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glStencilMaskSeparate.xhtml","OpenGL ES 3.1") +cmd void glStencilMaskSeparate(GLenum face, GLuint mask) { + minRequiredVersion(2, 0) + switch (face) { + case GL_BACK, GL_FRONT, GL_FRONT_AND_BACK: { + // version 2.0 + } + default: { + glErrorInvalidEnum(face) + } + } + + ctx := GetContext() + switch (face) { + case GL_FRONT: ctx.Rasterizing.StencilMask[GL_FRONT] = mask + case GL_BACK: ctx.Rasterizing.StencilMask[GL_BACK] = mask + case GL_FRONT_AND_BACK: { + ctx.Rasterizing.StencilMask[GL_FRONT] = mask + ctx.Rasterizing.StencilMask[GL_BACK] = mask + } + } +} + diff --git a/gfxapi/gles/api/glbitfield.api b/gfxapi/gles/api/glbitfield.api new file mode 100644 index 000000000..3e57ce9a6 --- /dev/null +++ b/gfxapi/gles/api/glbitfield.api @@ -0,0 +1,224 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +bitfield GLbitfield { + GL_CURRENT_BIT = 0x00000001, + GL_POINT_BIT = 0x00000002, + GL_LINE_BIT = 0x00000004, + GL_POLYGON_BIT = 0x00000008, + GL_POLYGON_STIPPLE_BIT = 0x00000010, + GL_PIXEL_MODE_BIT = 0x00000020, + GL_LIGHTING_BIT = 0x00000040, + GL_FOG_BIT = 0x00000080, + GL_DEPTH_BUFFER_BIT = 0x00000100, + GL_ACCUM_BUFFER_BIT = 0x00000200, + GL_STENCIL_BUFFER_BIT = 0x00000400, + GL_VIEWPORT_BIT = 0x00000800, + GL_TRANSFORM_BIT = 0x00001000, + GL_ENABLE_BIT = 0x00002000, + GL_COLOR_BUFFER_BIT = 0x00004000, + GL_HINT_BIT = 0x00008000, + GL_EVAL_BIT = 0x00010000, + GL_LIST_BIT = 0x00020000, + GL_TEXTURE_BIT = 0x00040000, + GL_SCISSOR_BIT = 0x00080000, + GL_MULTISAMPLE_BIT = 0x20000000, + GL_MULTISAMPLE_BIT_ARB = 0x20000000, + GL_MULTISAMPLE_BIT_EXT = 0x20000000, + GL_MULTISAMPLE_BIT_3DFX = 0x20000000, + GL_ALL_ATTRIB_BITS = 0xFFFFFFFF, + GL_COVERAGE_BUFFER_BIT_NV = 0x00008000, + GL_CLIENT_PIXEL_STORE_BIT = 0x00000001, + GL_CLIENT_VERTEX_ARRAY_BIT = 0x00000002, + GL_CLIENT_ALL_ATTRIB_BITS = 0xFFFFFFFF, + GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x00000001, + GL_CONTEXT_FLAG_DEBUG_BIT = 0x00000002, + GL_CONTEXT_FLAG_DEBUG_BIT_KHR = 0x00000002, + GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB = 0x00000004, + GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT = 0x00000004, + GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR = 0x00000008, + GL_CONTEXT_CORE_PROFILE_BIT = 0x00000001, + GL_CONTEXT_COMPATIBILITY_PROFILE_BIT = 0x00000002, + GL_MAP_READ_BIT = 0x00000001, + GL_MAP_READ_BIT_EXT = 0x00000001, + GL_MAP_WRITE_BIT = 0x00000002, + GL_MAP_WRITE_BIT_EXT = 0x00000002, + GL_MAP_INVALIDATE_RANGE_BIT = 0x00000004, + GL_MAP_INVALIDATE_RANGE_BIT_EXT = 0x00000004, + GL_MAP_INVALIDATE_BUFFER_BIT = 0x00000008, + GL_MAP_INVALIDATE_BUFFER_BIT_EXT = 0x00000008, + GL_MAP_FLUSH_EXPLICIT_BIT = 0x00000010, + GL_MAP_FLUSH_EXPLICIT_BIT_EXT = 0x00000010, + GL_MAP_UNSYNCHRONIZED_BIT = 0x00000020, + GL_MAP_UNSYNCHRONIZED_BIT_EXT = 0x00000020, + GL_MAP_PERSISTENT_BIT = 0x00000040, + GL_MAP_PERSISTENT_BIT_EXT = 0x00000040, + GL_MAP_COHERENT_BIT = 0x00000080, + GL_MAP_COHERENT_BIT_EXT = 0x00000080, + GL_DYNAMIC_STORAGE_BIT = 0x00000100, + GL_DYNAMIC_STORAGE_BIT_EXT = 0x00000100, + GL_CLIENT_STORAGE_BIT = 0x00000200, + GL_CLIENT_STORAGE_BIT_EXT = 0x00000200, + GL_SPARSE_STORAGE_BIT_ARB = 0x00000400, + GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT = 0x00000001, + GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT = 0x00000001, + GL_ELEMENT_ARRAY_BARRIER_BIT = 0x00000002, + GL_ELEMENT_ARRAY_BARRIER_BIT_EXT = 0x00000002, + GL_UNIFORM_BARRIER_BIT = 0x00000004, + GL_UNIFORM_BARRIER_BIT_EXT = 0x00000004, + GL_TEXTURE_FETCH_BARRIER_BIT = 0x00000008, + GL_TEXTURE_FETCH_BARRIER_BIT_EXT = 0x00000008, + GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV = 0x00000010, + GL_SHADER_IMAGE_ACCESS_BARRIER_BIT = 0x00000020, + GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT = 0x00000020, + GL_COMMAND_BARRIER_BIT = 0x00000040, + GL_COMMAND_BARRIER_BIT_EXT = 0x00000040, + GL_PIXEL_BUFFER_BARRIER_BIT = 0x00000080, + GL_PIXEL_BUFFER_BARRIER_BIT_EXT = 0x00000080, + GL_TEXTURE_UPDATE_BARRIER_BIT = 0x00000100, + GL_TEXTURE_UPDATE_BARRIER_BIT_EXT = 0x00000100, + GL_BUFFER_UPDATE_BARRIER_BIT = 0x00000200, + GL_BUFFER_UPDATE_BARRIER_BIT_EXT = 0x00000200, + GL_FRAMEBUFFER_BARRIER_BIT = 0x00000400, + GL_FRAMEBUFFER_BARRIER_BIT_EXT = 0x00000400, + GL_TRANSFORM_FEEDBACK_BARRIER_BIT = 0x00000800, + GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT = 0x00000800, + GL_ATOMIC_COUNTER_BARRIER_BIT = 0x00001000, + GL_ATOMIC_COUNTER_BARRIER_BIT_EXT = 0x00001000, + GL_SHADER_STORAGE_BARRIER_BIT = 0x00002000, + GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT = 0x00004000, + GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT_EXT = 0x00004000, + GL_QUERY_BUFFER_BARRIER_BIT = 0x00008000, + GL_ALL_BARRIER_BITS = 0xFFFFFFFF, + GL_ALL_BARRIER_BITS_EXT = 0xFFFFFFFF, + GL_SYNC_FLUSH_COMMANDS_BIT = 0x00000001, + GL_SYNC_FLUSH_COMMANDS_BIT_APPLE = 0x00000001, + GL_VERTEX_SHADER_BIT = 0x00000001, + GL_VERTEX_SHADER_BIT_EXT = 0x00000001, + GL_FRAGMENT_SHADER_BIT = 0x00000002, + GL_FRAGMENT_SHADER_BIT_EXT = 0x00000002, + GL_GEOMETRY_SHADER_BIT = 0x00000004, + GL_GEOMETRY_SHADER_BIT_EXT = 0x00000004, + GL_GEOMETRY_SHADER_BIT_OES = 0x00000004, + GL_TESS_CONTROL_SHADER_BIT = 0x00000008, + GL_TESS_CONTROL_SHADER_BIT_EXT = 0x00000008, + GL_TESS_CONTROL_SHADER_BIT_OES = 0x00000008, + GL_TESS_EVALUATION_SHADER_BIT = 0x00000010, + GL_TESS_EVALUATION_SHADER_BIT_EXT = 0x00000010, + GL_TESS_EVALUATION_SHADER_BIT_OES = 0x00000010, + GL_COMPUTE_SHADER_BIT = 0x00000020, + GL_ALL_SHADER_BITS = 0xFFFFFFFF, + GL_ALL_SHADER_BITS_EXT = 0xFFFFFFFF, + GL_TEXTURE_STORAGE_SPARSE_BIT_AMD = 0x00000001, + GL_RED_BIT_ATI = 0x00000001, + GL_GREEN_BIT_ATI = 0x00000002, + GL_BLUE_BIT_ATI = 0x00000004, + GL_2X_BIT_ATI = 0x00000001, + GL_4X_BIT_ATI = 0x00000002, + GL_8X_BIT_ATI = 0x00000004, + GL_HALF_BIT_ATI = 0x00000008, + GL_QUARTER_BIT_ATI = 0x00000010, + GL_EIGHTH_BIT_ATI = 0x00000020, + GL_SATURATE_BIT_ATI = 0x00000040, + GL_COMP_BIT_ATI = 0x00000002, + GL_NEGATE_BIT_ATI = 0x00000004, + GL_BIAS_BIT_ATI = 0x00000008, + GL_TRACE_OPERATIONS_BIT_MESA = 0x00000001, + GL_TRACE_PRIMITIVES_BIT_MESA = 0x00000002, + GL_TRACE_ARRAYS_BIT_MESA = 0x00000004, + GL_TRACE_TEXTURES_BIT_MESA = 0x00000008, + GL_TRACE_PIXELS_BIT_MESA = 0x00000010, + GL_TRACE_ERRORS_BIT_MESA = 0x00000020, + GL_TRACE_ALL_BITS_MESA = 0x0000FFFF, + GL_BOLD_BIT_NV = 0x00000001, + GL_ITALIC_BIT_NV = 0x00000002, + GL_GLYPH_WIDTH_BIT_NV = 0x00000001, + GL_GLYPH_HEIGHT_BIT_NV = 0x00000002, + GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV = 0x00000004, + GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV = 0x00000008, + GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV = 0x00000010, + GL_GLYPH_VERTICAL_BEARING_X_BIT_NV = 0x00000020, + GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV = 0x00000040, + GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV = 0x00000080, + GL_GLYPH_HAS_KERNING_BIT_NV = 0x00000100, + GL_FONT_X_MIN_BOUNDS_BIT_NV = 0x00010000, + GL_FONT_Y_MIN_BOUNDS_BIT_NV = 0x00020000, + GL_FONT_X_MAX_BOUNDS_BIT_NV = 0x00040000, + GL_FONT_Y_MAX_BOUNDS_BIT_NV = 0x00080000, + GL_FONT_UNITS_PER_EM_BIT_NV = 0x00100000, + GL_FONT_ASCENDER_BIT_NV = 0x00200000, + GL_FONT_DESCENDER_BIT_NV = 0x00400000, + GL_FONT_HEIGHT_BIT_NV = 0x00800000, + GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV = 0x01000000, + GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV = 0x02000000, + GL_FONT_UNDERLINE_POSITION_BIT_NV = 0x04000000, + GL_FONT_UNDERLINE_THICKNESS_BIT_NV = 0x08000000, + GL_FONT_HAS_KERNING_BIT_NV = 0x10000000, + GL_FONT_NUM_GLYPH_INDICES_BIT_NV = 0x20000000, + GL_PERFQUERY_SINGLE_CONTEXT_INTEL = 0x00000000, + GL_PERFQUERY_GLOBAL_CONTEXT_INTEL = 0x00000001, + GL_VERTEX23_BIT_PGI = 0x00000004, + GL_VERTEX4_BIT_PGI = 0x00000008, + GL_COLOR3_BIT_PGI = 0x00010000, + GL_COLOR4_BIT_PGI = 0x00020000, + GL_EDGEFLAG_BIT_PGI = 0x00040000, + GL_INDEX_BIT_PGI = 0x00080000, + GL_MAT_AMBIENT_BIT_PGI = 0x00100000, + GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI = 0x00200000, + GL_MAT_DIFFUSE_BIT_PGI = 0x00400000, + GL_MAT_EMISSION_BIT_PGI = 0x00800000, + GL_MAT_COLOR_INDEXES_BIT_PGI = 0x01000000, + GL_MAT_SHININESS_BIT_PGI = 0x02000000, + GL_MAT_SPECULAR_BIT_PGI = 0x04000000, + GL_NORMAL_BIT_PGI = 0x08000000, + GL_TEXCOORD1_BIT_PGI = 0x10000000, + GL_TEXCOORD2_BIT_PGI = 0x20000000, + GL_TEXCOORD3_BIT_PGI = 0x40000000, + GL_TEXCOORD4_BIT_PGI = 0x80000000, + GL_COLOR_BUFFER_BIT0_QCOM = 0x00000001, + GL_COLOR_BUFFER_BIT1_QCOM = 0x00000002, + GL_COLOR_BUFFER_BIT2_QCOM = 0x00000004, + GL_COLOR_BUFFER_BIT3_QCOM = 0x00000008, + GL_COLOR_BUFFER_BIT4_QCOM = 0x00000010, + GL_COLOR_BUFFER_BIT5_QCOM = 0x00000020, + GL_COLOR_BUFFER_BIT6_QCOM = 0x00000040, + GL_COLOR_BUFFER_BIT7_QCOM = 0x00000080, + GL_DEPTH_BUFFER_BIT0_QCOM = 0x00000100, + GL_DEPTH_BUFFER_BIT1_QCOM = 0x00000200, + GL_DEPTH_BUFFER_BIT2_QCOM = 0x00000400, + GL_DEPTH_BUFFER_BIT3_QCOM = 0x00000800, + GL_DEPTH_BUFFER_BIT4_QCOM = 0x00001000, + GL_DEPTH_BUFFER_BIT5_QCOM = 0x00002000, + GL_DEPTH_BUFFER_BIT6_QCOM = 0x00004000, + GL_DEPTH_BUFFER_BIT7_QCOM = 0x00008000, + GL_STENCIL_BUFFER_BIT0_QCOM = 0x00010000, + GL_STENCIL_BUFFER_BIT1_QCOM = 0x00020000, + GL_STENCIL_BUFFER_BIT2_QCOM = 0x00040000, + GL_STENCIL_BUFFER_BIT3_QCOM = 0x00080000, + GL_STENCIL_BUFFER_BIT4_QCOM = 0x00100000, + GL_STENCIL_BUFFER_BIT5_QCOM = 0x00200000, + GL_STENCIL_BUFFER_BIT6_QCOM = 0x00400000, + GL_STENCIL_BUFFER_BIT7_QCOM = 0x00800000, + GL_MULTISAMPLE_BUFFER_BIT0_QCOM = 0x01000000, + GL_MULTISAMPLE_BUFFER_BIT1_QCOM = 0x02000000, + GL_MULTISAMPLE_BUFFER_BIT2_QCOM = 0x04000000, + GL_MULTISAMPLE_BUFFER_BIT3_QCOM = 0x08000000, + GL_MULTISAMPLE_BUFFER_BIT4_QCOM = 0x10000000, + GL_MULTISAMPLE_BUFFER_BIT5_QCOM = 0x20000000, + GL_MULTISAMPLE_BUFFER_BIT6_QCOM = 0x40000000, + GL_MULTISAMPLE_BUFFER_BIT7_QCOM = 0x80000000, + GL_TEXTURE_DEFORMATION_BIT_SGIX = 0x00000001, + GL_GEOMETRY_DEFORMATION_BIT_SGIX = 0x00000002, +} + diff --git a/gfxapi/gles/api/glenum.api b/gfxapi/gles/api/glenum.api new file mode 100644 index 000000000..75f4bc1d3 --- /dev/null +++ b/gfxapi/gles/api/glenum.api @@ -0,0 +1,5329 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +enum GLenum { + GL_TERMINATE_SEQUENCE_COMMAND_NV = 0x00000000, + GL_NOP_COMMAND_NV = 0x00000001, + GL_DRAW_ELEMENTS_COMMAND_NV = 0x00000002, + GL_DRAW_ARRAYS_COMMAND_NV = 0x00000003, + GL_DRAW_ELEMENTS_STRIP_COMMAND_NV = 0x00000004, + GL_DRAW_ARRAYS_STRIP_COMMAND_NV = 0x00000005, + GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV = 0x00000006, + GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV = 0x00000007, + GL_ELEMENT_ADDRESS_COMMAND_NV = 0x00000008, + GL_ATTRIBUTE_ADDRESS_COMMAND_NV = 0x00000009, + GL_UNIFORM_ADDRESS_COMMAND_NV = 0x0000000A, + GL_BLEND_COLOR_COMMAND_NV = 0x0000000B, + GL_STENCIL_REF_COMMAND_NV = 0x0000000C, + GL_LINE_WIDTH_COMMAND_NV = 0x0000000D, + GL_POLYGON_OFFSET_COMMAND_NV = 0x0000000E, + GL_ALPHA_REF_COMMAND_NV = 0x0000000F, + GL_VIEWPORT_COMMAND_NV = 0x00000010, + GL_SCISSOR_COMMAND_NV = 0x00000011, + GL_FRONT_FACE_COMMAND_NV = 0x00000012, + GL_LAYOUT_DEFAULT_INTEL = 0x00000000, + GL_LAYOUT_LINEAR_INTEL = 0x00000001, + GL_LAYOUT_LINEAR_CPU_CACHED_INTEL = 0x00000002, + GL_CLOSE_PATH_NV = 0x00000000, + GL_MOVE_TO_NV = 0x00000002, + GL_RELATIVE_MOVE_TO_NV = 0x00000003, + GL_LINE_TO_NV = 0x00000004, + GL_RELATIVE_LINE_TO_NV = 0x00000005, + GL_HORIZONTAL_LINE_TO_NV = 0x00000006, + GL_RELATIVE_HORIZONTAL_LINE_TO_NV = 0x00000007, + GL_VERTICAL_LINE_TO_NV = 0x00000008, + GL_RELATIVE_VERTICAL_LINE_TO_NV = 0x00000009, + GL_QUADRATIC_CURVE_TO_NV = 0x0000000A, + GL_RELATIVE_QUADRATIC_CURVE_TO_NV = 0x0000000B, + GL_CUBIC_CURVE_TO_NV = 0x0000000C, + GL_RELATIVE_CUBIC_CURVE_TO_NV = 0x0000000D, + GL_SMOOTH_QUADRATIC_CURVE_TO_NV = 0x0000000E, + GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV = 0x0000000F, + GL_SMOOTH_CUBIC_CURVE_TO_NV = 0x00000010, + GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV = 0x00000011, + GL_SMALL_CCW_ARC_TO_NV = 0x00000012, + GL_RELATIVE_SMALL_CCW_ARC_TO_NV = 0x00000013, + GL_SMALL_CW_ARC_TO_NV = 0x00000014, + GL_RELATIVE_SMALL_CW_ARC_TO_NV = 0x00000015, + GL_LARGE_CCW_ARC_TO_NV = 0x00000016, + GL_RELATIVE_LARGE_CCW_ARC_TO_NV = 0x00000017, + GL_LARGE_CW_ARC_TO_NV = 0x00000018, + GL_RELATIVE_LARGE_CW_ARC_TO_NV = 0x00000019, + GL_CONIC_CURVE_TO_NV = 0x0000001A, + GL_RELATIVE_CONIC_CURVE_TO_NV = 0x0000001B, + GL_SHARED_EDGE_NV = 0x000000C0, + GL_ROUNDED_RECT_NV = 0x000000E8, + GL_RELATIVE_ROUNDED_RECT_NV = 0x000000E9, + GL_ROUNDED_RECT2_NV = 0x000000EA, + GL_RELATIVE_ROUNDED_RECT2_NV = 0x000000EB, + GL_ROUNDED_RECT4_NV = 0x000000EC, + GL_RELATIVE_ROUNDED_RECT4_NV = 0x000000ED, + GL_ROUNDED_RECT8_NV = 0x000000EE, + GL_RELATIVE_ROUNDED_RECT8_NV = 0x000000EF, + GL_RESTART_PATH_NV = 0x000000F0, + GL_DUP_FIRST_CUBIC_CURVE_TO_NV = 0x000000F2, + GL_DUP_LAST_CUBIC_CURVE_TO_NV = 0x000000F4, + GL_RECT_NV = 0x000000F6, + GL_RELATIVE_RECT_NV = 0x000000F7, + GL_CIRCULAR_CCW_ARC_TO_NV = 0x000000F8, + GL_CIRCULAR_CW_ARC_TO_NV = 0x000000FA, + GL_CIRCULAR_TANGENT_ARC_TO_NV = 0x000000FC, + GL_ARC_TO_NV = 0x000000FE, + GL_RELATIVE_ARC_TO_NV = 0x000000FF, + GL_NEXT_BUFFER_NV = 0xFFFFFFFE, + GL_SKIP_COMPONENTS4_NV = 0xFFFFFFFD, + GL_SKIP_COMPONENTS3_NV = 0xFFFFFFFC, + GL_SKIP_COMPONENTS2_NV = 0xFFFFFFFB, + GL_SKIP_COMPONENTS1_NV = 0xFFFFFFFA, + GL_RESTART_SUN = 0x00000001, + GL_REPLACE_MIDDLE_SUN = 0x00000002, + GL_REPLACE_OLDEST_SUN = 0x00000003, + GL_FALSE = 0x00000000, + GL_NO_ERROR = 0x00000000, + GL_ZERO = 0x00000000, + GL_NONE = 0x00000000, + GL_NONE_OES = 0x00000000, + GL_TRUE = 0x00000001, + GL_ONE = 0x00000001, + GL_INVALID_INDEX = 0xFFFFFFFF, + GL_VERSION_ES_CL_1_0 = 0x00000001, + GL_VERSION_ES_CM_1_1 = 0x00000001, + GL_VERSION_ES_CL_1_1 = 0x00000001, + GL_POINTS = 0x00000000, + GL_LINES = 0x00000001, + GL_LINE_LOOP = 0x00000002, + GL_LINE_STRIP = 0x00000003, + GL_TRIANGLES = 0x00000004, + GL_TRIANGLE_STRIP = 0x00000005, + GL_TRIANGLE_FAN = 0x00000006, + GL_QUADS = 0x00000007, + GL_QUADS_EXT = 0x00000007, + GL_QUADS_OES = 0x00000007, + GL_QUAD_STRIP = 0x00000008, + GL_POLYGON = 0x00000009, + GL_LINES_ADJACENCY = 0x0000000A, + GL_LINES_ADJACENCY_ARB = 0x0000000A, + GL_LINES_ADJACENCY_EXT = 0x0000000A, + GL_LINES_ADJACENCY_OES = 0x0000000A, + GL_LINE_STRIP_ADJACENCY = 0x0000000B, + GL_LINE_STRIP_ADJACENCY_ARB = 0x0000000B, + GL_LINE_STRIP_ADJACENCY_EXT = 0x0000000B, + GL_LINE_STRIP_ADJACENCY_OES = 0x0000000B, + GL_TRIANGLES_ADJACENCY = 0x0000000C, + GL_TRIANGLES_ADJACENCY_ARB = 0x0000000C, + GL_TRIANGLES_ADJACENCY_EXT = 0x0000000C, + GL_TRIANGLES_ADJACENCY_OES = 0x0000000C, + GL_TRIANGLE_STRIP_ADJACENCY = 0x0000000D, + GL_TRIANGLE_STRIP_ADJACENCY_ARB = 0x0000000D, + GL_TRIANGLE_STRIP_ADJACENCY_EXT = 0x0000000D, + GL_TRIANGLE_STRIP_ADJACENCY_OES = 0x0000000D, + GL_PATCHES = 0x0000000E, + GL_PATCHES_EXT = 0x0000000E, + GL_PATCHES_OES = 0x0000000E, + GL_ACCUM = 0x00000100, + GL_LOAD = 0x00000101, + GL_RETURN = 0x00000102, + GL_MULT = 0x00000103, + GL_ADD = 0x00000104, + GL_NEVER = 0x00000200, + GL_LESS = 0x00000201, + GL_EQUAL = 0x00000202, + GL_LEQUAL = 0x00000203, + GL_GREATER = 0x00000204, + GL_NOTEQUAL = 0x00000205, + GL_GEQUAL = 0x00000206, + GL_ALWAYS = 0x00000207, + GL_SRC_COLOR = 0x00000300, + GL_ONE_MINUS_SRC_COLOR = 0x00000301, + GL_SRC_ALPHA = 0x00000302, + GL_ONE_MINUS_SRC_ALPHA = 0x00000303, + GL_DST_ALPHA = 0x00000304, + GL_ONE_MINUS_DST_ALPHA = 0x00000305, + GL_DST_COLOR = 0x00000306, + GL_ONE_MINUS_DST_COLOR = 0x00000307, + GL_SRC_ALPHA_SATURATE = 0x00000308, + GL_FRONT_LEFT = 0x00000400, + GL_FRONT_RIGHT = 0x00000401, + GL_BACK_LEFT = 0x00000402, + GL_BACK_RIGHT = 0x00000403, + GL_FRONT = 0x00000404, + GL_BACK = 0x00000405, + GL_LEFT = 0x00000406, + GL_RIGHT = 0x00000407, + GL_FRONT_AND_BACK = 0x00000408, + GL_AUX0 = 0x00000409, + GL_AUX1 = 0x0000040A, + GL_AUX2 = 0x0000040B, + GL_AUX3 = 0x0000040C, + GL_INVALID_ENUM = 0x00000500, + GL_INVALID_VALUE = 0x00000501, + GL_INVALID_OPERATION = 0x00000502, + GL_STACK_OVERFLOW = 0x00000503, + GL_STACK_OVERFLOW_KHR = 0x00000503, + GL_STACK_UNDERFLOW = 0x00000504, + GL_STACK_UNDERFLOW_KHR = 0x00000504, + GL_OUT_OF_MEMORY = 0x00000505, + GL_INVALID_FRAMEBUFFER_OPERATION = 0x00000506, + GL_INVALID_FRAMEBUFFER_OPERATION_EXT = 0x00000506, + GL_INVALID_FRAMEBUFFER_OPERATION_OES = 0x00000506, + GL_CONTEXT_LOST = 0x00000507, + GL_CONTEXT_LOST_KHR = 0x00000507, + GL_2D = 0x00000600, + GL_3D = 0x00000601, + GL_3D_COLOR = 0x00000602, + GL_3D_COLOR_TEXTURE = 0x00000603, + GL_4D_COLOR_TEXTURE = 0x00000604, + GL_PASS_THROUGH_TOKEN = 0x00000700, + GL_POINT_TOKEN = 0x00000701, + GL_LINE_TOKEN = 0x00000702, + GL_POLYGON_TOKEN = 0x00000703, + GL_BITMAP_TOKEN = 0x00000704, + GL_DRAW_PIXEL_TOKEN = 0x00000705, + GL_COPY_PIXEL_TOKEN = 0x00000706, + GL_LINE_RESET_TOKEN = 0x00000707, + GL_EXP = 0x00000800, + GL_EXP2 = 0x00000801, + GL_CW = 0x00000900, + GL_CCW = 0x00000901, + GL_COEFF = 0x00000A00, + GL_ORDER = 0x00000A01, + GL_DOMAIN = 0x00000A02, + GL_CURRENT_COLOR = 0x00000B00, + GL_CURRENT_INDEX = 0x00000B01, + GL_CURRENT_NORMAL = 0x00000B02, + GL_CURRENT_TEXTURE_COORDS = 0x00000B03, + GL_CURRENT_RASTER_COLOR = 0x00000B04, + GL_CURRENT_RASTER_INDEX = 0x00000B05, + GL_CURRENT_RASTER_TEXTURE_COORDS = 0x00000B06, + GL_CURRENT_RASTER_POSITION = 0x00000B07, + GL_CURRENT_RASTER_POSITION_VALID = 0x00000B08, + GL_CURRENT_RASTER_DISTANCE = 0x00000B09, + GL_POINT_SMOOTH = 0x00000B10, + GL_POINT_SIZE = 0x00000B11, + GL_POINT_SIZE_RANGE = 0x00000B12, + GL_SMOOTH_POINT_SIZE_RANGE = 0x00000B12, + GL_POINT_SIZE_GRANULARITY = 0x00000B13, + GL_SMOOTH_POINT_SIZE_GRANULARITY = 0x00000B13, + GL_LINE_SMOOTH = 0x00000B20, + GL_LINE_WIDTH = 0x00000B21, + GL_LINE_WIDTH_RANGE = 0x00000B22, + GL_SMOOTH_LINE_WIDTH_RANGE = 0x00000B22, + GL_LINE_WIDTH_GRANULARITY = 0x00000B23, + GL_SMOOTH_LINE_WIDTH_GRANULARITY = 0x00000B23, + GL_LINE_STIPPLE = 0x00000B24, + GL_LINE_STIPPLE_PATTERN = 0x00000B25, + GL_LINE_STIPPLE_REPEAT = 0x00000B26, + GL_LIST_MODE = 0x00000B30, + GL_MAX_LIST_NESTING = 0x00000B31, + GL_LIST_BASE = 0x00000B32, + GL_LIST_INDEX = 0x00000B33, + GL_POLYGON_MODE = 0x00000B40, + GL_POLYGON_MODE_NV = 0x00000B40, + GL_POLYGON_SMOOTH = 0x00000B41, + GL_POLYGON_STIPPLE = 0x00000B42, + GL_EDGE_FLAG = 0x00000B43, + GL_CULL_FACE = 0x00000B44, + GL_CULL_FACE_MODE = 0x00000B45, + GL_FRONT_FACE = 0x00000B46, + GL_LIGHTING = 0x00000B50, + GL_LIGHT_MODEL_LOCAL_VIEWER = 0x00000B51, + GL_LIGHT_MODEL_TWO_SIDE = 0x00000B52, + GL_LIGHT_MODEL_AMBIENT = 0x00000B53, + GL_SHADE_MODEL = 0x00000B54, + GL_COLOR_MATERIAL_FACE = 0x00000B55, + GL_COLOR_MATERIAL_PARAMETER = 0x00000B56, + GL_COLOR_MATERIAL = 0x00000B57, + GL_FOG = 0x00000B60, + GL_FOG_INDEX = 0x00000B61, + GL_FOG_DENSITY = 0x00000B62, + GL_FOG_START = 0x00000B63, + GL_FOG_END = 0x00000B64, + GL_FOG_MODE = 0x00000B65, + GL_FOG_COLOR = 0x00000B66, + GL_DEPTH_RANGE = 0x00000B70, + GL_DEPTH_TEST = 0x00000B71, + GL_DEPTH_WRITEMASK = 0x00000B72, + GL_DEPTH_CLEAR_VALUE = 0x00000B73, + GL_DEPTH_FUNC = 0x00000B74, + GL_ACCUM_CLEAR_VALUE = 0x00000B80, + GL_STENCIL_TEST = 0x00000B90, + GL_STENCIL_CLEAR_VALUE = 0x00000B91, + GL_STENCIL_FUNC = 0x00000B92, + GL_STENCIL_VALUE_MASK = 0x00000B93, + GL_STENCIL_FAIL = 0x00000B94, + GL_STENCIL_PASS_DEPTH_FAIL = 0x00000B95, + GL_STENCIL_PASS_DEPTH_PASS = 0x00000B96, + GL_STENCIL_REF = 0x00000B97, + GL_STENCIL_WRITEMASK = 0x00000B98, + GL_MATRIX_MODE = 0x00000BA0, + GL_NORMALIZE = 0x00000BA1, + GL_VIEWPORT = 0x00000BA2, + GL_MODELVIEW_STACK_DEPTH = 0x00000BA3, + GL_MODELVIEW0_STACK_DEPTH_EXT = 0x00000BA3, + GL_PATH_MODELVIEW_STACK_DEPTH_NV = 0x00000BA3, + GL_PROJECTION_STACK_DEPTH = 0x00000BA4, + GL_PATH_PROJECTION_STACK_DEPTH_NV = 0x00000BA4, + GL_TEXTURE_STACK_DEPTH = 0x00000BA5, + GL_MODELVIEW_MATRIX = 0x00000BA6, + GL_MODELVIEW0_MATRIX_EXT = 0x00000BA6, + GL_PATH_MODELVIEW_MATRIX_NV = 0x00000BA6, + GL_PROJECTION_MATRIX = 0x00000BA7, + GL_PATH_PROJECTION_MATRIX_NV = 0x00000BA7, + GL_TEXTURE_MATRIX = 0x00000BA8, + GL_ATTRIB_STACK_DEPTH = 0x00000BB0, + GL_CLIENT_ATTRIB_STACK_DEPTH = 0x00000BB1, + GL_ALPHA_TEST = 0x00000BC0, + GL_ALPHA_TEST_QCOM = 0x00000BC0, + GL_ALPHA_TEST_FUNC = 0x00000BC1, + GL_ALPHA_TEST_FUNC_QCOM = 0x00000BC1, + GL_ALPHA_TEST_REF = 0x00000BC2, + GL_ALPHA_TEST_REF_QCOM = 0x00000BC2, + GL_DITHER = 0x00000BD0, + GL_BLEND_DST = 0x00000BE0, + GL_BLEND_SRC = 0x00000BE1, + GL_BLEND = 0x00000BE2, + GL_LOGIC_OP_MODE = 0x00000BF0, + GL_INDEX_LOGIC_OP = 0x00000BF1, + GL_LOGIC_OP = 0x00000BF1, + GL_COLOR_LOGIC_OP = 0x00000BF2, + GL_AUX_BUFFERS = 0x00000C00, + GL_DRAW_BUFFER = 0x00000C01, + GL_DRAW_BUFFER_EXT = 0x00000C01, + GL_READ_BUFFER = 0x00000C02, + GL_READ_BUFFER_EXT = 0x00000C02, + GL_READ_BUFFER_NV = 0x00000C02, + GL_SCISSOR_BOX = 0x00000C10, + GL_SCISSOR_TEST = 0x00000C11, + GL_INDEX_CLEAR_VALUE = 0x00000C20, + GL_INDEX_WRITEMASK = 0x00000C21, + GL_COLOR_CLEAR_VALUE = 0x00000C22, + GL_COLOR_WRITEMASK = 0x00000C23, + GL_INDEX_MODE = 0x00000C30, + GL_RGBA_MODE = 0x00000C31, + GL_DOUBLEBUFFER = 0x00000C32, + GL_STEREO = 0x00000C33, + GL_RENDER_MODE = 0x00000C40, + GL_PERSPECTIVE_CORRECTION_HINT = 0x00000C50, + GL_POINT_SMOOTH_HINT = 0x00000C51, + GL_LINE_SMOOTH_HINT = 0x00000C52, + GL_POLYGON_SMOOTH_HINT = 0x00000C53, + GL_FOG_HINT = 0x00000C54, + GL_TEXTURE_GEN_S = 0x00000C60, + GL_TEXTURE_GEN_T = 0x00000C61, + GL_TEXTURE_GEN_R = 0x00000C62, + GL_TEXTURE_GEN_Q = 0x00000C63, + GL_PIXEL_MAP_I_TO_I = 0x00000C70, + GL_PIXEL_MAP_S_TO_S = 0x00000C71, + GL_PIXEL_MAP_I_TO_R = 0x00000C72, + GL_PIXEL_MAP_I_TO_G = 0x00000C73, + GL_PIXEL_MAP_I_TO_B = 0x00000C74, + GL_PIXEL_MAP_I_TO_A = 0x00000C75, + GL_PIXEL_MAP_R_TO_R = 0x00000C76, + GL_PIXEL_MAP_G_TO_G = 0x00000C77, + GL_PIXEL_MAP_B_TO_B = 0x00000C78, + GL_PIXEL_MAP_A_TO_A = 0x00000C79, + GL_PIXEL_MAP_I_TO_I_SIZE = 0x00000CB0, + GL_PIXEL_MAP_S_TO_S_SIZE = 0x00000CB1, + GL_PIXEL_MAP_I_TO_R_SIZE = 0x00000CB2, + GL_PIXEL_MAP_I_TO_G_SIZE = 0x00000CB3, + GL_PIXEL_MAP_I_TO_B_SIZE = 0x00000CB4, + GL_PIXEL_MAP_I_TO_A_SIZE = 0x00000CB5, + GL_PIXEL_MAP_R_TO_R_SIZE = 0x00000CB6, + GL_PIXEL_MAP_G_TO_G_SIZE = 0x00000CB7, + GL_PIXEL_MAP_B_TO_B_SIZE = 0x00000CB8, + GL_PIXEL_MAP_A_TO_A_SIZE = 0x00000CB9, + GL_UNPACK_SWAP_BYTES = 0x00000CF0, + GL_UNPACK_LSB_FIRST = 0x00000CF1, + GL_UNPACK_ROW_LENGTH = 0x00000CF2, + GL_UNPACK_ROW_LENGTH_EXT = 0x00000CF2, + GL_UNPACK_SKIP_ROWS = 0x00000CF3, + GL_UNPACK_SKIP_ROWS_EXT = 0x00000CF3, + GL_UNPACK_SKIP_PIXELS = 0x00000CF4, + GL_UNPACK_SKIP_PIXELS_EXT = 0x00000CF4, + GL_UNPACK_ALIGNMENT = 0x00000CF5, + GL_PACK_SWAP_BYTES = 0x00000D00, + GL_PACK_LSB_FIRST = 0x00000D01, + GL_PACK_ROW_LENGTH = 0x00000D02, + GL_PACK_SKIP_ROWS = 0x00000D03, + GL_PACK_SKIP_PIXELS = 0x00000D04, + GL_PACK_ALIGNMENT = 0x00000D05, + GL_MAP_COLOR = 0x00000D10, + GL_MAP_STENCIL = 0x00000D11, + GL_INDEX_SHIFT = 0x00000D12, + GL_INDEX_OFFSET = 0x00000D13, + GL_RED_SCALE = 0x00000D14, + GL_RED_BIAS = 0x00000D15, + GL_ZOOM_X = 0x00000D16, + GL_ZOOM_Y = 0x00000D17, + GL_GREEN_SCALE = 0x00000D18, + GL_GREEN_BIAS = 0x00000D19, + GL_BLUE_SCALE = 0x00000D1A, + GL_BLUE_BIAS = 0x00000D1B, + GL_ALPHA_SCALE = 0x00000D1C, + GL_ALPHA_BIAS = 0x00000D1D, + GL_DEPTH_SCALE = 0x00000D1E, + GL_DEPTH_BIAS = 0x00000D1F, + GL_MAX_EVAL_ORDER = 0x00000D30, + GL_MAX_LIGHTS = 0x00000D31, + GL_MAX_CLIP_PLANES = 0x00000D32, + GL_MAX_CLIP_PLANES_IMG = 0x00000D32, + GL_MAX_CLIP_DISTANCES = 0x00000D32, + GL_MAX_CLIP_DISTANCES_APPLE = 0x00000D32, + GL_MAX_TEXTURE_SIZE = 0x00000D33, + GL_MAX_PIXEL_MAP_TABLE = 0x00000D34, + GL_MAX_ATTRIB_STACK_DEPTH = 0x00000D35, + GL_MAX_MODELVIEW_STACK_DEPTH = 0x00000D36, + GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV = 0x00000D36, + GL_MAX_NAME_STACK_DEPTH = 0x00000D37, + GL_MAX_PROJECTION_STACK_DEPTH = 0x00000D38, + GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV = 0x00000D38, + GL_MAX_TEXTURE_STACK_DEPTH = 0x00000D39, + GL_MAX_VIEWPORT_DIMS = 0x00000D3A, + GL_MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x00000D3B, + GL_SUBPIXEL_BITS = 0x00000D50, + GL_INDEX_BITS = 0x00000D51, + GL_RED_BITS = 0x00000D52, + GL_GREEN_BITS = 0x00000D53, + GL_BLUE_BITS = 0x00000D54, + GL_ALPHA_BITS = 0x00000D55, + GL_DEPTH_BITS = 0x00000D56, + GL_STENCIL_BITS = 0x00000D57, + GL_ACCUM_RED_BITS = 0x00000D58, + GL_ACCUM_GREEN_BITS = 0x00000D59, + GL_ACCUM_BLUE_BITS = 0x00000D5A, + GL_ACCUM_ALPHA_BITS = 0x00000D5B, + GL_NAME_STACK_DEPTH = 0x00000D70, + GL_AUTO_NORMAL = 0x00000D80, + GL_MAP1_COLOR_4 = 0x00000D90, + GL_MAP1_INDEX = 0x00000D91, + GL_MAP1_NORMAL = 0x00000D92, + GL_MAP1_TEXTURE_COORD_1 = 0x00000D93, + GL_MAP1_TEXTURE_COORD_2 = 0x00000D94, + GL_MAP1_TEXTURE_COORD_3 = 0x00000D95, + GL_MAP1_TEXTURE_COORD_4 = 0x00000D96, + GL_MAP1_VERTEX_3 = 0x00000D97, + GL_MAP1_VERTEX_4 = 0x00000D98, + GL_MAP2_COLOR_4 = 0x00000DB0, + GL_MAP2_INDEX = 0x00000DB1, + GL_MAP2_NORMAL = 0x00000DB2, + GL_MAP2_TEXTURE_COORD_1 = 0x00000DB3, + GL_MAP2_TEXTURE_COORD_2 = 0x00000DB4, + GL_MAP2_TEXTURE_COORD_3 = 0x00000DB5, + GL_MAP2_TEXTURE_COORD_4 = 0x00000DB6, + GL_MAP2_VERTEX_3 = 0x00000DB7, + GL_MAP2_VERTEX_4 = 0x00000DB8, + GL_MAP1_GRID_DOMAIN = 0x00000DD0, + GL_MAP1_GRID_SEGMENTS = 0x00000DD1, + GL_MAP2_GRID_DOMAIN = 0x00000DD2, + GL_MAP2_GRID_SEGMENTS = 0x00000DD3, + GL_TEXTURE_1D = 0x00000DE0, + GL_TEXTURE_2D = 0x00000DE1, + GL_FEEDBACK_BUFFER_POINTER = 0x00000DF0, + GL_FEEDBACK_BUFFER_SIZE = 0x00000DF1, + GL_FEEDBACK_BUFFER_TYPE = 0x00000DF2, + GL_SELECTION_BUFFER_POINTER = 0x00000DF3, + GL_SELECTION_BUFFER_SIZE = 0x00000DF4, + GL_TEXTURE_WIDTH = 0x00001000, + GL_TEXTURE_HEIGHT = 0x00001001, + GL_TEXTURE_INTERNAL_FORMAT = 0x00001003, + GL_TEXTURE_COMPONENTS = 0x00001003, + GL_TEXTURE_BORDER_COLOR = 0x00001004, + GL_TEXTURE_BORDER_COLOR_EXT = 0x00001004, + GL_TEXTURE_BORDER_COLOR_NV = 0x00001004, + GL_TEXTURE_BORDER_COLOR_OES = 0x00001004, + GL_TEXTURE_BORDER = 0x00001005, + GL_TEXTURE_TARGET = 0x00001006, + GL_DONT_CARE = 0x00001100, + GL_FASTEST = 0x00001101, + GL_NICEST = 0x00001102, + GL_AMBIENT = 0x00001200, + GL_DIFFUSE = 0x00001201, + GL_SPECULAR = 0x00001202, + GL_POSITION = 0x00001203, + GL_SPOT_DIRECTION = 0x00001204, + GL_SPOT_EXPONENT = 0x00001205, + GL_SPOT_CUTOFF = 0x00001206, + GL_CONSTANT_ATTENUATION = 0x00001207, + GL_LINEAR_ATTENUATION = 0x00001208, + GL_QUADRATIC_ATTENUATION = 0x00001209, + GL_COMPILE = 0x00001300, + GL_COMPILE_AND_EXECUTE = 0x00001301, + GL_BYTE = 0x00001400, + GL_UNSIGNED_BYTE = 0x00001401, + GL_SHORT = 0x00001402, + GL_UNSIGNED_SHORT = 0x00001403, + GL_INT = 0x00001404, + GL_UNSIGNED_INT = 0x00001405, + GL_FLOAT = 0x00001406, + GL_2_BYTES = 0x00001407, + GL_2_BYTES_NV = 0x00001407, + GL_3_BYTES = 0x00001408, + GL_3_BYTES_NV = 0x00001408, + GL_4_BYTES = 0x00001409, + GL_4_BYTES_NV = 0x00001409, + GL_DOUBLE = 0x0000140A, + GL_DOUBLE_EXT = 0x0000140A, + GL_HALF_FLOAT = 0x0000140B, + GL_HALF_FLOAT_ARB = 0x0000140B, + GL_HALF_FLOAT_NV = 0x0000140B, + GL_HALF_APPLE = 0x0000140B, + GL_FIXED = 0x0000140C, + GL_FIXED_OES = 0x0000140C, + GL_INT64_NV = 0x0000140E, + GL_UNSIGNED_INT64_ARB = 0x0000140F, + GL_UNSIGNED_INT64_NV = 0x0000140F, + GL_CLEAR = 0x00001500, + GL_AND = 0x00001501, + GL_AND_REVERSE = 0x00001502, + GL_COPY = 0x00001503, + GL_AND_INVERTED = 0x00001504, + GL_NOOP = 0x00001505, + GL_XOR = 0x00001506, + GL_XOR_NV = 0x00001506, + GL_OR = 0x00001507, + GL_NOR = 0x00001508, + GL_EQUIV = 0x00001509, + GL_INVERT = 0x0000150A, + GL_OR_REVERSE = 0x0000150B, + GL_COPY_INVERTED = 0x0000150C, + GL_OR_INVERTED = 0x0000150D, + GL_NAND = 0x0000150E, + GL_SET = 0x0000150F, + GL_EMISSION = 0x00001600, + GL_SHININESS = 0x00001601, + GL_AMBIENT_AND_DIFFUSE = 0x00001602, + GL_COLOR_INDEXES = 0x00001603, + GL_MODELVIEW = 0x00001700, + GL_MODELVIEW0_ARB = 0x00001700, + GL_MODELVIEW0_EXT = 0x00001700, + GL_PATH_MODELVIEW_NV = 0x00001700, + GL_PROJECTION = 0x00001701, + GL_PATH_PROJECTION_NV = 0x00001701, + GL_TEXTURE = 0x00001702, + GL_COLOR = 0x00001800, + GL_COLOR_EXT = 0x00001800, + GL_DEPTH = 0x00001801, + GL_DEPTH_EXT = 0x00001801, + GL_STENCIL = 0x00001802, + GL_STENCIL_EXT = 0x00001802, + GL_COLOR_INDEX = 0x00001900, + GL_STENCIL_INDEX = 0x00001901, + GL_STENCIL_INDEX_OES = 0x00001901, + GL_DEPTH_COMPONENT = 0x00001902, + GL_RED = 0x00001903, + GL_RED_EXT = 0x00001903, + GL_RED_NV = 0x00001903, + GL_GREEN = 0x00001904, + GL_GREEN_NV = 0x00001904, + GL_BLUE = 0x00001905, + GL_BLUE_NV = 0x00001905, + GL_ALPHA = 0x00001906, + GL_RGB = 0x00001907, + GL_RGBA = 0x00001908, + GL_LUMINANCE = 0x00001909, + GL_LUMINANCE_ALPHA = 0x0000190A, + GL_BITMAP = 0x00001A00, + GL_POINT = 0x00001B00, + GL_POINT_NV = 0x00001B00, + GL_LINE = 0x00001B01, + GL_LINE_NV = 0x00001B01, + GL_FILL = 0x00001B02, + GL_FILL_NV = 0x00001B02, + GL_RENDER = 0x00001C00, + GL_FEEDBACK = 0x00001C01, + GL_SELECT = 0x00001C02, + GL_FLAT = 0x00001D00, + GL_SMOOTH = 0x00001D01, + GL_KEEP = 0x00001E00, + GL_REPLACE = 0x00001E01, + GL_INCR = 0x00001E02, + GL_DECR = 0x00001E03, + GL_VENDOR = 0x00001F00, + GL_RENDERER = 0x00001F01, + GL_VERSION = 0x00001F02, + GL_EXTENSIONS = 0x00001F03, + GL_S = 0x00002000, + GL_T = 0x00002001, + GL_R = 0x00002002, + GL_Q = 0x00002003, + GL_MODULATE = 0x00002100, + GL_DECAL = 0x00002101, + GL_TEXTURE_ENV_MODE = 0x00002200, + GL_TEXTURE_ENV_COLOR = 0x00002201, + GL_TEXTURE_ENV = 0x00002300, + GL_EYE_LINEAR = 0x00002400, + GL_EYE_LINEAR_NV = 0x00002400, + GL_OBJECT_LINEAR = 0x00002401, + GL_OBJECT_LINEAR_NV = 0x00002401, + GL_SPHERE_MAP = 0x00002402, + GL_TEXTURE_GEN_MODE = 0x00002500, + GL_TEXTURE_GEN_MODE_OES = 0x00002500, + GL_OBJECT_PLANE = 0x00002501, + GL_EYE_PLANE = 0x00002502, + GL_NEAREST = 0x00002600, + GL_LINEAR = 0x00002601, + GL_NEAREST_MIPMAP_NEAREST = 0x00002700, + GL_LINEAR_MIPMAP_NEAREST = 0x00002701, + GL_NEAREST_MIPMAP_LINEAR = 0x00002702, + GL_LINEAR_MIPMAP_LINEAR = 0x00002703, + GL_TEXTURE_MAG_FILTER = 0x00002800, + GL_TEXTURE_MIN_FILTER = 0x00002801, + GL_TEXTURE_WRAP_S = 0x00002802, + GL_TEXTURE_WRAP_T = 0x00002803, + GL_CLAMP = 0x00002900, + GL_REPEAT = 0x00002901, + GL_POLYGON_OFFSET_UNITS = 0x00002A00, + GL_POLYGON_OFFSET_POINT = 0x00002A01, + GL_POLYGON_OFFSET_POINT_NV = 0x00002A01, + GL_POLYGON_OFFSET_LINE = 0x00002A02, + GL_POLYGON_OFFSET_LINE_NV = 0x00002A02, + GL_R3_G3_B2 = 0x00002A10, + GL_V2F = 0x00002A20, + GL_V3F = 0x00002A21, + GL_C4UB_V2F = 0x00002A22, + GL_C4UB_V3F = 0x00002A23, + GL_C3F_V3F = 0x00002A24, + GL_N3F_V3F = 0x00002A25, + GL_C4F_N3F_V3F = 0x00002A26, + GL_T2F_V3F = 0x00002A27, + GL_T4F_V4F = 0x00002A28, + GL_T2F_C4UB_V3F = 0x00002A29, + GL_T2F_C3F_V3F = 0x00002A2A, + GL_T2F_N3F_V3F = 0x00002A2B, + GL_T2F_C4F_N3F_V3F = 0x00002A2C, + GL_T4F_C4F_N3F_V4F = 0x00002A2D, + GL_CLIP_PLANE0 = 0x00003000, + GL_CLIP_PLANE0_IMG = 0x00003000, + GL_CLIP_DISTANCE0 = 0x00003000, + GL_CLIP_DISTANCE0_APPLE = 0x00003000, + GL_CLIP_PLANE1 = 0x00003001, + GL_CLIP_PLANE1_IMG = 0x00003001, + GL_CLIP_DISTANCE1 = 0x00003001, + GL_CLIP_DISTANCE1_APPLE = 0x00003001, + GL_CLIP_PLANE2 = 0x00003002, + GL_CLIP_PLANE2_IMG = 0x00003002, + GL_CLIP_DISTANCE2 = 0x00003002, + GL_CLIP_DISTANCE2_APPLE = 0x00003002, + GL_CLIP_PLANE3 = 0x00003003, + GL_CLIP_PLANE3_IMG = 0x00003003, + GL_CLIP_DISTANCE3 = 0x00003003, + GL_CLIP_DISTANCE3_APPLE = 0x00003003, + GL_CLIP_PLANE4 = 0x00003004, + GL_CLIP_PLANE4_IMG = 0x00003004, + GL_CLIP_DISTANCE4 = 0x00003004, + GL_CLIP_DISTANCE4_APPLE = 0x00003004, + GL_CLIP_PLANE5 = 0x00003005, + GL_CLIP_PLANE5_IMG = 0x00003005, + GL_CLIP_DISTANCE5 = 0x00003005, + GL_CLIP_DISTANCE5_APPLE = 0x00003005, + GL_CLIP_DISTANCE6 = 0x00003006, + GL_CLIP_DISTANCE6_APPLE = 0x00003006, + GL_CLIP_DISTANCE7 = 0x00003007, + GL_CLIP_DISTANCE7_APPLE = 0x00003007, + GL_LIGHT0 = 0x00004000, + GL_LIGHT1 = 0x00004001, + GL_LIGHT2 = 0x00004002, + GL_LIGHT3 = 0x00004003, + GL_LIGHT4 = 0x00004004, + GL_LIGHT5 = 0x00004005, + GL_LIGHT6 = 0x00004006, + GL_LIGHT7 = 0x00004007, + GL_ABGR_EXT = 0x00008000, + GL_CONSTANT_COLOR = 0x00008001, + GL_CONSTANT_COLOR_EXT = 0x00008001, + GL_ONE_MINUS_CONSTANT_COLOR = 0x00008002, + GL_ONE_MINUS_CONSTANT_COLOR_EXT = 0x00008002, + GL_CONSTANT_ALPHA = 0x00008003, + GL_CONSTANT_ALPHA_EXT = 0x00008003, + GL_ONE_MINUS_CONSTANT_ALPHA = 0x00008004, + GL_ONE_MINUS_CONSTANT_ALPHA_EXT = 0x00008004, + GL_BLEND_COLOR = 0x00008005, + GL_BLEND_COLOR_EXT = 0x00008005, + GL_FUNC_ADD = 0x00008006, + GL_FUNC_ADD_EXT = 0x00008006, + GL_FUNC_ADD_OES = 0x00008006, + GL_MIN = 0x00008007, + GL_MIN_EXT = 0x00008007, + GL_MAX = 0x00008008, + GL_MAX_EXT = 0x00008008, + GL_BLEND_EQUATION = 0x00008009, + GL_BLEND_EQUATION_EXT = 0x00008009, + GL_BLEND_EQUATION_OES = 0x00008009, + GL_BLEND_EQUATION_RGB = 0x00008009, + GL_BLEND_EQUATION_RGB_EXT = 0x00008009, + GL_BLEND_EQUATION_RGB_OES = 0x00008009, + GL_FUNC_SUBTRACT = 0x0000800A, + GL_FUNC_SUBTRACT_EXT = 0x0000800A, + GL_FUNC_SUBTRACT_OES = 0x0000800A, + GL_FUNC_REVERSE_SUBTRACT = 0x0000800B, + GL_FUNC_REVERSE_SUBTRACT_EXT = 0x0000800B, + GL_FUNC_REVERSE_SUBTRACT_OES = 0x0000800B, + GL_CMYK_EXT = 0x0000800C, + GL_CMYKA_EXT = 0x0000800D, + GL_PACK_CMYK_HINT_EXT = 0x0000800E, + GL_UNPACK_CMYK_HINT_EXT = 0x0000800F, + GL_CONVOLUTION_1D = 0x00008010, + GL_CONVOLUTION_1D_EXT = 0x00008010, + GL_CONVOLUTION_2D = 0x00008011, + GL_CONVOLUTION_2D_EXT = 0x00008011, + GL_SEPARABLE_2D = 0x00008012, + GL_SEPARABLE_2D_EXT = 0x00008012, + GL_CONVOLUTION_BORDER_MODE = 0x00008013, + GL_CONVOLUTION_BORDER_MODE_EXT = 0x00008013, + GL_CONVOLUTION_FILTER_SCALE = 0x00008014, + GL_CONVOLUTION_FILTER_SCALE_EXT = 0x00008014, + GL_CONVOLUTION_FILTER_BIAS = 0x00008015, + GL_CONVOLUTION_FILTER_BIAS_EXT = 0x00008015, + GL_REDUCE = 0x00008016, + GL_REDUCE_EXT = 0x00008016, + GL_CONVOLUTION_FORMAT = 0x00008017, + GL_CONVOLUTION_FORMAT_EXT = 0x00008017, + GL_CONVOLUTION_WIDTH = 0x00008018, + GL_CONVOLUTION_WIDTH_EXT = 0x00008018, + GL_CONVOLUTION_HEIGHT = 0x00008019, + GL_CONVOLUTION_HEIGHT_EXT = 0x00008019, + GL_MAX_CONVOLUTION_WIDTH = 0x0000801A, + GL_MAX_CONVOLUTION_WIDTH_EXT = 0x0000801A, + GL_MAX_CONVOLUTION_HEIGHT = 0x0000801B, + GL_MAX_CONVOLUTION_HEIGHT_EXT = 0x0000801B, + GL_POST_CONVOLUTION_RED_SCALE = 0x0000801C, + GL_POST_CONVOLUTION_RED_SCALE_EXT = 0x0000801C, + GL_POST_CONVOLUTION_GREEN_SCALE = 0x0000801D, + GL_POST_CONVOLUTION_GREEN_SCALE_EXT = 0x0000801D, + GL_POST_CONVOLUTION_BLUE_SCALE = 0x0000801E, + GL_POST_CONVOLUTION_BLUE_SCALE_EXT = 0x0000801E, + GL_POST_CONVOLUTION_ALPHA_SCALE = 0x0000801F, + GL_POST_CONVOLUTION_ALPHA_SCALE_EXT = 0x0000801F, + GL_POST_CONVOLUTION_RED_BIAS = 0x00008020, + GL_POST_CONVOLUTION_RED_BIAS_EXT = 0x00008020, + GL_POST_CONVOLUTION_GREEN_BIAS = 0x00008021, + GL_POST_CONVOLUTION_GREEN_BIAS_EXT = 0x00008021, + GL_POST_CONVOLUTION_BLUE_BIAS = 0x00008022, + GL_POST_CONVOLUTION_BLUE_BIAS_EXT = 0x00008022, + GL_POST_CONVOLUTION_ALPHA_BIAS = 0x00008023, + GL_POST_CONVOLUTION_ALPHA_BIAS_EXT = 0x00008023, + GL_HISTOGRAM = 0x00008024, + GL_HISTOGRAM_EXT = 0x00008024, + GL_PROXY_HISTOGRAM = 0x00008025, + GL_PROXY_HISTOGRAM_EXT = 0x00008025, + GL_HISTOGRAM_WIDTH = 0x00008026, + GL_HISTOGRAM_WIDTH_EXT = 0x00008026, + GL_HISTOGRAM_FORMAT = 0x00008027, + GL_HISTOGRAM_FORMAT_EXT = 0x00008027, + GL_HISTOGRAM_RED_SIZE = 0x00008028, + GL_HISTOGRAM_RED_SIZE_EXT = 0x00008028, + GL_HISTOGRAM_GREEN_SIZE = 0x00008029, + GL_HISTOGRAM_GREEN_SIZE_EXT = 0x00008029, + GL_HISTOGRAM_BLUE_SIZE = 0x0000802A, + GL_HISTOGRAM_BLUE_SIZE_EXT = 0x0000802A, + GL_HISTOGRAM_ALPHA_SIZE = 0x0000802B, + GL_HISTOGRAM_ALPHA_SIZE_EXT = 0x0000802B, + GL_HISTOGRAM_LUMINANCE_SIZE = 0x0000802C, + GL_HISTOGRAM_LUMINANCE_SIZE_EXT = 0x0000802C, + GL_HISTOGRAM_SINK = 0x0000802D, + GL_HISTOGRAM_SINK_EXT = 0x0000802D, + GL_MINMAX = 0x0000802E, + GL_MINMAX_EXT = 0x0000802E, + GL_MINMAX_FORMAT = 0x0000802F, + GL_MINMAX_FORMAT_EXT = 0x0000802F, + GL_MINMAX_SINK = 0x00008030, + GL_MINMAX_SINK_EXT = 0x00008030, + GL_TABLE_TOO_LARGE_EXT = 0x00008031, + GL_TABLE_TOO_LARGE = 0x00008031, + GL_UNSIGNED_BYTE_3_3_2 = 0x00008032, + GL_UNSIGNED_BYTE_3_3_2_EXT = 0x00008032, + GL_UNSIGNED_SHORT_4_4_4_4 = 0x00008033, + GL_UNSIGNED_SHORT_4_4_4_4_EXT = 0x00008033, + GL_UNSIGNED_SHORT_5_5_5_1 = 0x00008034, + GL_UNSIGNED_SHORT_5_5_5_1_EXT = 0x00008034, + GL_UNSIGNED_INT_8_8_8_8 = 0x00008035, + GL_UNSIGNED_INT_8_8_8_8_EXT = 0x00008035, + GL_UNSIGNED_INT_10_10_10_2 = 0x00008036, + GL_UNSIGNED_INT_10_10_10_2_EXT = 0x00008036, + GL_POLYGON_OFFSET_EXT = 0x00008037, + GL_POLYGON_OFFSET_FILL = 0x00008037, + GL_POLYGON_OFFSET_FACTOR = 0x00008038, + GL_POLYGON_OFFSET_FACTOR_EXT = 0x00008038, + GL_POLYGON_OFFSET_BIAS_EXT = 0x00008039, + GL_RESCALE_NORMAL = 0x0000803A, + GL_RESCALE_NORMAL_EXT = 0x0000803A, + GL_ALPHA4 = 0x0000803B, + GL_ALPHA4_EXT = 0x0000803B, + GL_ALPHA8 = 0x0000803C, + GL_ALPHA8_EXT = 0x0000803C, + GL_ALPHA8_OES = 0x0000803C, + GL_ALPHA12 = 0x0000803D, + GL_ALPHA12_EXT = 0x0000803D, + GL_ALPHA16 = 0x0000803E, + GL_ALPHA16_EXT = 0x0000803E, + GL_LUMINANCE4 = 0x0000803F, + GL_LUMINANCE4_EXT = 0x0000803F, + GL_LUMINANCE8 = 0x00008040, + GL_LUMINANCE8_EXT = 0x00008040, + GL_LUMINANCE8_OES = 0x00008040, + GL_LUMINANCE12 = 0x00008041, + GL_LUMINANCE12_EXT = 0x00008041, + GL_LUMINANCE16 = 0x00008042, + GL_LUMINANCE16_EXT = 0x00008042, + GL_LUMINANCE4_ALPHA4 = 0x00008043, + GL_LUMINANCE4_ALPHA4_EXT = 0x00008043, + GL_LUMINANCE4_ALPHA4_OES = 0x00008043, + GL_LUMINANCE6_ALPHA2 = 0x00008044, + GL_LUMINANCE6_ALPHA2_EXT = 0x00008044, + GL_LUMINANCE8_ALPHA8 = 0x00008045, + GL_LUMINANCE8_ALPHA8_EXT = 0x00008045, + GL_LUMINANCE8_ALPHA8_OES = 0x00008045, + GL_LUMINANCE12_ALPHA4 = 0x00008046, + GL_LUMINANCE12_ALPHA4_EXT = 0x00008046, + GL_LUMINANCE12_ALPHA12 = 0x00008047, + GL_LUMINANCE12_ALPHA12_EXT = 0x00008047, + GL_LUMINANCE16_ALPHA16 = 0x00008048, + GL_LUMINANCE16_ALPHA16_EXT = 0x00008048, + GL_INTENSITY = 0x00008049, + GL_INTENSITY_EXT = 0x00008049, + GL_INTENSITY4 = 0x0000804A, + GL_INTENSITY4_EXT = 0x0000804A, + GL_INTENSITY8 = 0x0000804B, + GL_INTENSITY8_EXT = 0x0000804B, + GL_INTENSITY12 = 0x0000804C, + GL_INTENSITY12_EXT = 0x0000804C, + GL_INTENSITY16 = 0x0000804D, + GL_INTENSITY16_EXT = 0x0000804D, + GL_RGB2_EXT = 0x0000804E, + GL_RGB4 = 0x0000804F, + GL_RGB4_EXT = 0x0000804F, + GL_RGB5 = 0x00008050, + GL_RGB5_EXT = 0x00008050, + GL_RGB8 = 0x00008051, + GL_RGB8_EXT = 0x00008051, + GL_RGB8_OES = 0x00008051, + GL_RGB10 = 0x00008052, + GL_RGB10_EXT = 0x00008052, + GL_RGB12 = 0x00008053, + GL_RGB12_EXT = 0x00008053, + GL_RGB16 = 0x00008054, + GL_RGB16_EXT = 0x00008054, + GL_RGBA2 = 0x00008055, + GL_RGBA2_EXT = 0x00008055, + GL_RGBA4 = 0x00008056, + GL_RGBA4_EXT = 0x00008056, + GL_RGBA4_OES = 0x00008056, + GL_RGB5_A1 = 0x00008057, + GL_RGB5_A1_EXT = 0x00008057, + GL_RGB5_A1_OES = 0x00008057, + GL_RGBA8 = 0x00008058, + GL_RGBA8_EXT = 0x00008058, + GL_RGBA8_OES = 0x00008058, + GL_RGB10_A2 = 0x00008059, + GL_RGB10_A2_EXT = 0x00008059, + GL_RGBA12 = 0x0000805A, + GL_RGBA12_EXT = 0x0000805A, + GL_RGBA16 = 0x0000805B, + GL_RGBA16_EXT = 0x0000805B, + GL_TEXTURE_RED_SIZE = 0x0000805C, + GL_TEXTURE_RED_SIZE_EXT = 0x0000805C, + GL_TEXTURE_GREEN_SIZE = 0x0000805D, + GL_TEXTURE_GREEN_SIZE_EXT = 0x0000805D, + GL_TEXTURE_BLUE_SIZE = 0x0000805E, + GL_TEXTURE_BLUE_SIZE_EXT = 0x0000805E, + GL_TEXTURE_ALPHA_SIZE = 0x0000805F, + GL_TEXTURE_ALPHA_SIZE_EXT = 0x0000805F, + GL_TEXTURE_LUMINANCE_SIZE = 0x00008060, + GL_TEXTURE_LUMINANCE_SIZE_EXT = 0x00008060, + GL_TEXTURE_INTENSITY_SIZE = 0x00008061, + GL_TEXTURE_INTENSITY_SIZE_EXT = 0x00008061, + GL_REPLACE_EXT = 0x00008062, + GL_PROXY_TEXTURE_1D = 0x00008063, + GL_PROXY_TEXTURE_1D_EXT = 0x00008063, + GL_PROXY_TEXTURE_2D = 0x00008064, + GL_PROXY_TEXTURE_2D_EXT = 0x00008064, + GL_TEXTURE_TOO_LARGE_EXT = 0x00008065, + GL_TEXTURE_PRIORITY = 0x00008066, + GL_TEXTURE_PRIORITY_EXT = 0x00008066, + GL_TEXTURE_RESIDENT = 0x00008067, + GL_TEXTURE_RESIDENT_EXT = 0x00008067, + GL_TEXTURE_1D_BINDING_EXT = 0x00008068, + GL_TEXTURE_BINDING_1D = 0x00008068, + GL_TEXTURE_2D_BINDING_EXT = 0x00008069, + GL_TEXTURE_BINDING_2D = 0x00008069, + GL_TEXTURE_3D_BINDING_EXT = 0x0000806A, + GL_TEXTURE_3D_BINDING_OES = 0x0000806A, + GL_TEXTURE_BINDING_3D = 0x0000806A, + GL_TEXTURE_BINDING_3D_OES = 0x0000806A, + GL_PACK_SKIP_IMAGES = 0x0000806B, + GL_PACK_SKIP_IMAGES_EXT = 0x0000806B, + GL_PACK_IMAGE_HEIGHT = 0x0000806C, + GL_PACK_IMAGE_HEIGHT_EXT = 0x0000806C, + GL_UNPACK_SKIP_IMAGES = 0x0000806D, + GL_UNPACK_SKIP_IMAGES_EXT = 0x0000806D, + GL_UNPACK_IMAGE_HEIGHT = 0x0000806E, + GL_UNPACK_IMAGE_HEIGHT_EXT = 0x0000806E, + GL_TEXTURE_3D = 0x0000806F, + GL_TEXTURE_3D_EXT = 0x0000806F, + GL_TEXTURE_3D_OES = 0x0000806F, + GL_PROXY_TEXTURE_3D = 0x00008070, + GL_PROXY_TEXTURE_3D_EXT = 0x00008070, + GL_TEXTURE_DEPTH = 0x00008071, + GL_TEXTURE_DEPTH_EXT = 0x00008071, + GL_TEXTURE_WRAP_R = 0x00008072, + GL_TEXTURE_WRAP_R_EXT = 0x00008072, + GL_TEXTURE_WRAP_R_OES = 0x00008072, + GL_MAX_3D_TEXTURE_SIZE = 0x00008073, + GL_MAX_3D_TEXTURE_SIZE_EXT = 0x00008073, + GL_MAX_3D_TEXTURE_SIZE_OES = 0x00008073, + GL_VERTEX_ARRAY = 0x00008074, + GL_VERTEX_ARRAY_EXT = 0x00008074, + GL_VERTEX_ARRAY_KHR = 0x00008074, + GL_NORMAL_ARRAY = 0x00008075, + GL_NORMAL_ARRAY_EXT = 0x00008075, + GL_COLOR_ARRAY = 0x00008076, + GL_COLOR_ARRAY_EXT = 0x00008076, + GL_INDEX_ARRAY = 0x00008077, + GL_INDEX_ARRAY_EXT = 0x00008077, + GL_TEXTURE_COORD_ARRAY = 0x00008078, + GL_TEXTURE_COORD_ARRAY_EXT = 0x00008078, + GL_EDGE_FLAG_ARRAY = 0x00008079, + GL_EDGE_FLAG_ARRAY_EXT = 0x00008079, + GL_VERTEX_ARRAY_SIZE = 0x0000807A, + GL_VERTEX_ARRAY_SIZE_EXT = 0x0000807A, + GL_VERTEX_ARRAY_TYPE = 0x0000807B, + GL_VERTEX_ARRAY_TYPE_EXT = 0x0000807B, + GL_VERTEX_ARRAY_STRIDE = 0x0000807C, + GL_VERTEX_ARRAY_STRIDE_EXT = 0x0000807C, + GL_VERTEX_ARRAY_COUNT_EXT = 0x0000807D, + GL_NORMAL_ARRAY_TYPE = 0x0000807E, + GL_NORMAL_ARRAY_TYPE_EXT = 0x0000807E, + GL_NORMAL_ARRAY_STRIDE = 0x0000807F, + GL_NORMAL_ARRAY_STRIDE_EXT = 0x0000807F, + GL_NORMAL_ARRAY_COUNT_EXT = 0x00008080, + GL_COLOR_ARRAY_SIZE = 0x00008081, + GL_COLOR_ARRAY_SIZE_EXT = 0x00008081, + GL_COLOR_ARRAY_TYPE = 0x00008082, + GL_COLOR_ARRAY_TYPE_EXT = 0x00008082, + GL_COLOR_ARRAY_STRIDE = 0x00008083, + GL_COLOR_ARRAY_STRIDE_EXT = 0x00008083, + GL_COLOR_ARRAY_COUNT_EXT = 0x00008084, + GL_INDEX_ARRAY_TYPE = 0x00008085, + GL_INDEX_ARRAY_TYPE_EXT = 0x00008085, + GL_INDEX_ARRAY_STRIDE = 0x00008086, + GL_INDEX_ARRAY_STRIDE_EXT = 0x00008086, + GL_INDEX_ARRAY_COUNT_EXT = 0x00008087, + GL_TEXTURE_COORD_ARRAY_SIZE = 0x00008088, + GL_TEXTURE_COORD_ARRAY_SIZE_EXT = 0x00008088, + GL_TEXTURE_COORD_ARRAY_TYPE = 0x00008089, + GL_TEXTURE_COORD_ARRAY_TYPE_EXT = 0x00008089, + GL_TEXTURE_COORD_ARRAY_STRIDE = 0x0000808A, + GL_TEXTURE_COORD_ARRAY_STRIDE_EXT = 0x0000808A, + GL_TEXTURE_COORD_ARRAY_COUNT_EXT = 0x0000808B, + GL_EDGE_FLAG_ARRAY_STRIDE = 0x0000808C, + GL_EDGE_FLAG_ARRAY_STRIDE_EXT = 0x0000808C, + GL_EDGE_FLAG_ARRAY_COUNT_EXT = 0x0000808D, + GL_VERTEX_ARRAY_POINTER = 0x0000808E, + GL_VERTEX_ARRAY_POINTER_EXT = 0x0000808E, + GL_NORMAL_ARRAY_POINTER = 0x0000808F, + GL_NORMAL_ARRAY_POINTER_EXT = 0x0000808F, + GL_COLOR_ARRAY_POINTER = 0x00008090, + GL_COLOR_ARRAY_POINTER_EXT = 0x00008090, + GL_INDEX_ARRAY_POINTER = 0x00008091, + GL_INDEX_ARRAY_POINTER_EXT = 0x00008091, + GL_TEXTURE_COORD_ARRAY_POINTER = 0x00008092, + GL_TEXTURE_COORD_ARRAY_POINTER_EXT = 0x00008092, + GL_EDGE_FLAG_ARRAY_POINTER = 0x00008093, + GL_EDGE_FLAG_ARRAY_POINTER_EXT = 0x00008093, + GL_INTERLACE_SGIX = 0x00008094, + GL_DETAIL_TEXTURE_2D_SGIS = 0x00008095, + GL_DETAIL_TEXTURE_2D_BINDING_SGIS = 0x00008096, + GL_LINEAR_DETAIL_SGIS = 0x00008097, + GL_LINEAR_DETAIL_ALPHA_SGIS = 0x00008098, + GL_LINEAR_DETAIL_COLOR_SGIS = 0x00008099, + GL_DETAIL_TEXTURE_LEVEL_SGIS = 0x0000809A, + GL_DETAIL_TEXTURE_MODE_SGIS = 0x0000809B, + GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS = 0x0000809C, + GL_MULTISAMPLE = 0x0000809D, + GL_MULTISAMPLE_ARB = 0x0000809D, + GL_MULTISAMPLE_EXT = 0x0000809D, + GL_MULTISAMPLE_SGIS = 0x0000809D, + GL_SAMPLE_ALPHA_TO_COVERAGE = 0x0000809E, + GL_SAMPLE_ALPHA_TO_COVERAGE_ARB = 0x0000809E, + GL_SAMPLE_ALPHA_TO_MASK_EXT = 0x0000809E, + GL_SAMPLE_ALPHA_TO_MASK_SGIS = 0x0000809E, + GL_SAMPLE_ALPHA_TO_ONE = 0x0000809F, + GL_SAMPLE_ALPHA_TO_ONE_ARB = 0x0000809F, + GL_SAMPLE_ALPHA_TO_ONE_EXT = 0x0000809F, + GL_SAMPLE_ALPHA_TO_ONE_SGIS = 0x0000809F, + GL_SAMPLE_COVERAGE = 0x000080A0, + GL_SAMPLE_COVERAGE_ARB = 0x000080A0, + GL_SAMPLE_MASK_EXT = 0x000080A0, + GL_SAMPLE_MASK_SGIS = 0x000080A0, + GL_1PASS_EXT = 0x000080A1, + GL_1PASS_SGIS = 0x000080A1, + GL_2PASS_0_EXT = 0x000080A2, + GL_2PASS_0_SGIS = 0x000080A2, + GL_2PASS_1_EXT = 0x000080A3, + GL_2PASS_1_SGIS = 0x000080A3, + GL_4PASS_0_EXT = 0x000080A4, + GL_4PASS_0_SGIS = 0x000080A4, + GL_4PASS_1_EXT = 0x000080A5, + GL_4PASS_1_SGIS = 0x000080A5, + GL_4PASS_2_EXT = 0x000080A6, + GL_4PASS_2_SGIS = 0x000080A6, + GL_4PASS_3_EXT = 0x000080A7, + GL_4PASS_3_SGIS = 0x000080A7, + GL_SAMPLE_BUFFERS = 0x000080A8, + GL_SAMPLE_BUFFERS_ARB = 0x000080A8, + GL_SAMPLE_BUFFERS_EXT = 0x000080A8, + GL_SAMPLE_BUFFERS_SGIS = 0x000080A8, + GL_SAMPLES = 0x000080A9, + GL_SAMPLES_ARB = 0x000080A9, + GL_SAMPLES_EXT = 0x000080A9, + GL_SAMPLES_SGIS = 0x000080A9, + GL_SAMPLE_COVERAGE_VALUE = 0x000080AA, + GL_SAMPLE_COVERAGE_VALUE_ARB = 0x000080AA, + GL_SAMPLE_MASK_VALUE_EXT = 0x000080AA, + GL_SAMPLE_MASK_VALUE_SGIS = 0x000080AA, + GL_SAMPLE_COVERAGE_INVERT = 0x000080AB, + GL_SAMPLE_COVERAGE_INVERT_ARB = 0x000080AB, + GL_SAMPLE_MASK_INVERT_EXT = 0x000080AB, + GL_SAMPLE_MASK_INVERT_SGIS = 0x000080AB, + GL_SAMPLE_PATTERN_EXT = 0x000080AC, + GL_SAMPLE_PATTERN_SGIS = 0x000080AC, + GL_LINEAR_SHARPEN_SGIS = 0x000080AD, + GL_LINEAR_SHARPEN_ALPHA_SGIS = 0x000080AE, + GL_LINEAR_SHARPEN_COLOR_SGIS = 0x000080AF, + GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS = 0x000080B0, + GL_COLOR_MATRIX = 0x000080B1, + GL_COLOR_MATRIX_SGI = 0x000080B1, + GL_COLOR_MATRIX_STACK_DEPTH = 0x000080B2, + GL_COLOR_MATRIX_STACK_DEPTH_SGI = 0x000080B2, + GL_MAX_COLOR_MATRIX_STACK_DEPTH = 0x000080B3, + GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI = 0x000080B3, + GL_POST_COLOR_MATRIX_RED_SCALE = 0x000080B4, + GL_POST_COLOR_MATRIX_RED_SCALE_SGI = 0x000080B4, + GL_POST_COLOR_MATRIX_GREEN_SCALE = 0x000080B5, + GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI = 0x000080B5, + GL_POST_COLOR_MATRIX_BLUE_SCALE = 0x000080B6, + GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI = 0x000080B6, + GL_POST_COLOR_MATRIX_ALPHA_SCALE = 0x000080B7, + GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI = 0x000080B7, + GL_POST_COLOR_MATRIX_RED_BIAS = 0x000080B8, + GL_POST_COLOR_MATRIX_RED_BIAS_SGI = 0x000080B8, + GL_POST_COLOR_MATRIX_GREEN_BIAS = 0x000080B9, + GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI = 0x000080B9, + GL_POST_COLOR_MATRIX_BLUE_BIAS = 0x000080BA, + GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI = 0x000080BA, + GL_POST_COLOR_MATRIX_ALPHA_BIAS = 0x000080BB, + GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI = 0x000080BB, + GL_TEXTURE_COLOR_TABLE_SGI = 0x000080BC, + GL_PROXY_TEXTURE_COLOR_TABLE_SGI = 0x000080BD, + GL_TEXTURE_ENV_BIAS_SGIX = 0x000080BE, + GL_SHADOW_AMBIENT_SGIX = 0x000080BF, + GL_TEXTURE_COMPARE_FAIL_VALUE_ARB = 0x000080BF, + GL_BLEND_DST_RGB = 0x000080C8, + GL_BLEND_DST_RGB_EXT = 0x000080C8, + GL_BLEND_DST_RGB_OES = 0x000080C8, + GL_BLEND_SRC_RGB = 0x000080C9, + GL_BLEND_SRC_RGB_EXT = 0x000080C9, + GL_BLEND_SRC_RGB_OES = 0x000080C9, + GL_BLEND_DST_ALPHA = 0x000080CA, + GL_BLEND_DST_ALPHA_EXT = 0x000080CA, + GL_BLEND_DST_ALPHA_OES = 0x000080CA, + GL_BLEND_SRC_ALPHA = 0x000080CB, + GL_BLEND_SRC_ALPHA_EXT = 0x000080CB, + GL_BLEND_SRC_ALPHA_OES = 0x000080CB, + GL_422_EXT = 0x000080CC, + GL_422_REV_EXT = 0x000080CD, + GL_422_AVERAGE_EXT = 0x000080CE, + GL_422_REV_AVERAGE_EXT = 0x000080CF, + GL_COLOR_TABLE = 0x000080D0, + GL_COLOR_TABLE_SGI = 0x000080D0, + GL_POST_CONVOLUTION_COLOR_TABLE = 0x000080D1, + GL_POST_CONVOLUTION_COLOR_TABLE_SGI = 0x000080D1, + GL_POST_COLOR_MATRIX_COLOR_TABLE = 0x000080D2, + GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI = 0x000080D2, + GL_PROXY_COLOR_TABLE = 0x000080D3, + GL_PROXY_COLOR_TABLE_SGI = 0x000080D3, + GL_PROXY_POST_CONVOLUTION_COLOR_TABLE = 0x000080D4, + GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI = 0x000080D4, + GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE = 0x000080D5, + GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI = 0x000080D5, + GL_COLOR_TABLE_SCALE = 0x000080D6, + GL_COLOR_TABLE_SCALE_SGI = 0x000080D6, + GL_COLOR_TABLE_BIAS = 0x000080D7, + GL_COLOR_TABLE_BIAS_SGI = 0x000080D7, + GL_COLOR_TABLE_FORMAT = 0x000080D8, + GL_COLOR_TABLE_FORMAT_SGI = 0x000080D8, + GL_COLOR_TABLE_WIDTH = 0x000080D9, + GL_COLOR_TABLE_WIDTH_SGI = 0x000080D9, + GL_COLOR_TABLE_RED_SIZE = 0x000080DA, + GL_COLOR_TABLE_RED_SIZE_SGI = 0x000080DA, + GL_COLOR_TABLE_GREEN_SIZE = 0x000080DB, + GL_COLOR_TABLE_GREEN_SIZE_SGI = 0x000080DB, + GL_COLOR_TABLE_BLUE_SIZE = 0x000080DC, + GL_COLOR_TABLE_BLUE_SIZE_SGI = 0x000080DC, + GL_COLOR_TABLE_ALPHA_SIZE = 0x000080DD, + GL_COLOR_TABLE_ALPHA_SIZE_SGI = 0x000080DD, + GL_COLOR_TABLE_LUMINANCE_SIZE = 0x000080DE, + GL_COLOR_TABLE_LUMINANCE_SIZE_SGI = 0x000080DE, + GL_COLOR_TABLE_INTENSITY_SIZE = 0x000080DF, + GL_COLOR_TABLE_INTENSITY_SIZE_SGI = 0x000080DF, + GL_BGR = 0x000080E0, + GL_BGR_EXT = 0x000080E0, + GL_BGRA = 0x000080E1, + GL_BGRA_EXT = 0x000080E1, + GL_BGRA_IMG = 0x000080E1, + GL_COLOR_INDEX1_EXT = 0x000080E2, + GL_COLOR_INDEX2_EXT = 0x000080E3, + GL_COLOR_INDEX4_EXT = 0x000080E4, + GL_COLOR_INDEX8_EXT = 0x000080E5, + GL_COLOR_INDEX12_EXT = 0x000080E6, + GL_COLOR_INDEX16_EXT = 0x000080E7, + GL_MAX_ELEMENTS_VERTICES = 0x000080E8, + GL_MAX_ELEMENTS_VERTICES_EXT = 0x000080E8, + GL_MAX_ELEMENTS_INDICES = 0x000080E9, + GL_MAX_ELEMENTS_INDICES_EXT = 0x000080E9, + GL_PHONG_WIN = 0x000080EA, + GL_PHONG_HINT_WIN = 0x000080EB, + GL_FOG_SPECULAR_TEXTURE_WIN = 0x000080EC, + GL_TEXTURE_INDEX_SIZE_EXT = 0x000080ED, + GL_PARAMETER_BUFFER_ARB = 0x000080EE, + GL_PARAMETER_BUFFER_BINDING_ARB = 0x000080EF, + GL_CLIP_VOLUME_CLIPPING_HINT_EXT = 0x000080F0, + GL_DUAL_ALPHA4_SGIS = 0x00008110, + GL_DUAL_ALPHA8_SGIS = 0x00008111, + GL_DUAL_ALPHA12_SGIS = 0x00008112, + GL_DUAL_ALPHA16_SGIS = 0x00008113, + GL_DUAL_LUMINANCE4_SGIS = 0x00008114, + GL_DUAL_LUMINANCE8_SGIS = 0x00008115, + GL_DUAL_LUMINANCE12_SGIS = 0x00008116, + GL_DUAL_LUMINANCE16_SGIS = 0x00008117, + GL_DUAL_INTENSITY4_SGIS = 0x00008118, + GL_DUAL_INTENSITY8_SGIS = 0x00008119, + GL_DUAL_INTENSITY12_SGIS = 0x0000811A, + GL_DUAL_INTENSITY16_SGIS = 0x0000811B, + GL_DUAL_LUMINANCE_ALPHA4_SGIS = 0x0000811C, + GL_DUAL_LUMINANCE_ALPHA8_SGIS = 0x0000811D, + GL_QUAD_ALPHA4_SGIS = 0x0000811E, + GL_QUAD_ALPHA8_SGIS = 0x0000811F, + GL_QUAD_LUMINANCE4_SGIS = 0x00008120, + GL_QUAD_LUMINANCE8_SGIS = 0x00008121, + GL_QUAD_INTENSITY4_SGIS = 0x00008122, + GL_QUAD_INTENSITY8_SGIS = 0x00008123, + GL_DUAL_TEXTURE_SELECT_SGIS = 0x00008124, + GL_QUAD_TEXTURE_SELECT_SGIS = 0x00008125, + GL_POINT_SIZE_MIN = 0x00008126, + GL_POINT_SIZE_MIN_ARB = 0x00008126, + GL_POINT_SIZE_MIN_EXT = 0x00008126, + GL_POINT_SIZE_MIN_SGIS = 0x00008126, + GL_POINT_SIZE_MAX = 0x00008127, + GL_POINT_SIZE_MAX_ARB = 0x00008127, + GL_POINT_SIZE_MAX_EXT = 0x00008127, + GL_POINT_SIZE_MAX_SGIS = 0x00008127, + GL_POINT_FADE_THRESHOLD_SIZE = 0x00008128, + GL_POINT_FADE_THRESHOLD_SIZE_ARB = 0x00008128, + GL_POINT_FADE_THRESHOLD_SIZE_EXT = 0x00008128, + GL_POINT_FADE_THRESHOLD_SIZE_SGIS = 0x00008128, + GL_DISTANCE_ATTENUATION_EXT = 0x00008129, + GL_DISTANCE_ATTENUATION_SGIS = 0x00008129, + GL_POINT_DISTANCE_ATTENUATION = 0x00008129, + GL_POINT_DISTANCE_ATTENUATION_ARB = 0x00008129, + GL_FOG_FUNC_SGIS = 0x0000812A, + GL_FOG_FUNC_POINTS_SGIS = 0x0000812B, + GL_MAX_FOG_FUNC_POINTS_SGIS = 0x0000812C, + GL_CLAMP_TO_BORDER = 0x0000812D, + GL_CLAMP_TO_BORDER_ARB = 0x0000812D, + GL_CLAMP_TO_BORDER_EXT = 0x0000812D, + GL_CLAMP_TO_BORDER_NV = 0x0000812D, + GL_CLAMP_TO_BORDER_SGIS = 0x0000812D, + GL_CLAMP_TO_BORDER_OES = 0x0000812D, + GL_TEXTURE_MULTI_BUFFER_HINT_SGIX = 0x0000812E, + GL_CLAMP_TO_EDGE = 0x0000812F, + GL_CLAMP_TO_EDGE_SGIS = 0x0000812F, + GL_PACK_SKIP_VOLUMES_SGIS = 0x00008130, + GL_PACK_IMAGE_DEPTH_SGIS = 0x00008131, + GL_UNPACK_SKIP_VOLUMES_SGIS = 0x00008132, + GL_UNPACK_IMAGE_DEPTH_SGIS = 0x00008133, + GL_TEXTURE_4D_SGIS = 0x00008134, + GL_PROXY_TEXTURE_4D_SGIS = 0x00008135, + GL_TEXTURE_4DSIZE_SGIS = 0x00008136, + GL_TEXTURE_WRAP_Q_SGIS = 0x00008137, + GL_MAX_4D_TEXTURE_SIZE_SGIS = 0x00008138, + GL_PIXEL_TEX_GEN_SGIX = 0x00008139, + GL_TEXTURE_MIN_LOD = 0x0000813A, + GL_TEXTURE_MIN_LOD_SGIS = 0x0000813A, + GL_TEXTURE_MAX_LOD = 0x0000813B, + GL_TEXTURE_MAX_LOD_SGIS = 0x0000813B, + GL_TEXTURE_BASE_LEVEL = 0x0000813C, + GL_TEXTURE_BASE_LEVEL_SGIS = 0x0000813C, + GL_TEXTURE_MAX_LEVEL = 0x0000813D, + GL_TEXTURE_MAX_LEVEL_APPLE = 0x0000813D, + GL_TEXTURE_MAX_LEVEL_SGIS = 0x0000813D, + GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX = 0x0000813E, + GL_PIXEL_TILE_CACHE_INCREMENT_SGIX = 0x0000813F, + GL_PIXEL_TILE_WIDTH_SGIX = 0x00008140, + GL_PIXEL_TILE_HEIGHT_SGIX = 0x00008141, + GL_PIXEL_TILE_GRID_WIDTH_SGIX = 0x00008142, + GL_PIXEL_TILE_GRID_HEIGHT_SGIX = 0x00008143, + GL_PIXEL_TILE_GRID_DEPTH_SGIX = 0x00008144, + GL_PIXEL_TILE_CACHE_SIZE_SGIX = 0x00008145, + GL_FILTER4_SGIS = 0x00008146, + GL_TEXTURE_FILTER4_SIZE_SGIS = 0x00008147, + GL_SPRITE_SGIX = 0x00008148, + GL_SPRITE_MODE_SGIX = 0x00008149, + GL_SPRITE_AXIS_SGIX = 0x0000814A, + GL_SPRITE_TRANSLATION_SGIX = 0x0000814B, + GL_SPRITE_AXIAL_SGIX = 0x0000814C, + GL_SPRITE_OBJECT_ALIGNED_SGIX = 0x0000814D, + GL_SPRITE_EYE_ALIGNED_SGIX = 0x0000814E, + GL_TEXTURE_4D_BINDING_SGIS = 0x0000814F, + GL_IGNORE_BORDER_HP = 0x00008150, + GL_CONSTANT_BORDER = 0x00008151, + GL_CONSTANT_BORDER_HP = 0x00008151, + GL_REPLICATE_BORDER = 0x00008153, + GL_REPLICATE_BORDER_HP = 0x00008153, + GL_CONVOLUTION_BORDER_COLOR = 0x00008154, + GL_CONVOLUTION_BORDER_COLOR_HP = 0x00008154, + GL_IMAGE_SCALE_X_HP = 0x00008155, + GL_IMAGE_SCALE_Y_HP = 0x00008156, + GL_IMAGE_TRANSLATE_X_HP = 0x00008157, + GL_IMAGE_TRANSLATE_Y_HP = 0x00008158, + GL_IMAGE_ROTATE_ANGLE_HP = 0x00008159, + GL_IMAGE_ROTATE_ORIGIN_X_HP = 0x0000815A, + GL_IMAGE_ROTATE_ORIGIN_Y_HP = 0x0000815B, + GL_IMAGE_MAG_FILTER_HP = 0x0000815C, + GL_IMAGE_MIN_FILTER_HP = 0x0000815D, + GL_IMAGE_CUBIC_WEIGHT_HP = 0x0000815E, + GL_CUBIC_HP = 0x0000815F, + GL_AVERAGE_HP = 0x00008160, + GL_IMAGE_TRANSFORM_2D_HP = 0x00008161, + GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP = 0x00008162, + GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP = 0x00008163, + GL_OCCLUSION_TEST_HP = 0x00008165, + GL_OCCLUSION_TEST_RESULT_HP = 0x00008166, + GL_TEXTURE_LIGHTING_MODE_HP = 0x00008167, + GL_TEXTURE_POST_SPECULAR_HP = 0x00008168, + GL_TEXTURE_PRE_SPECULAR_HP = 0x00008169, + GL_LINEAR_CLIPMAP_LINEAR_SGIX = 0x00008170, + GL_TEXTURE_CLIPMAP_CENTER_SGIX = 0x00008171, + GL_TEXTURE_CLIPMAP_FRAME_SGIX = 0x00008172, + GL_TEXTURE_CLIPMAP_OFFSET_SGIX = 0x00008173, + GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX = 0x00008174, + GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX = 0x00008175, + GL_TEXTURE_CLIPMAP_DEPTH_SGIX = 0x00008176, + GL_MAX_CLIPMAP_DEPTH_SGIX = 0x00008177, + GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX = 0x00008178, + GL_POST_TEXTURE_FILTER_BIAS_SGIX = 0x00008179, + GL_POST_TEXTURE_FILTER_SCALE_SGIX = 0x0000817A, + GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX = 0x0000817B, + GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX = 0x0000817C, + GL_REFERENCE_PLANE_SGIX = 0x0000817D, + GL_REFERENCE_PLANE_EQUATION_SGIX = 0x0000817E, + GL_IR_INSTRUMENT1_SGIX = 0x0000817F, + GL_INSTRUMENT_BUFFER_POINTER_SGIX = 0x00008180, + GL_INSTRUMENT_MEASUREMENTS_SGIX = 0x00008181, + GL_LIST_PRIORITY_SGIX = 0x00008182, + GL_CALLIGRAPHIC_FRAGMENT_SGIX = 0x00008183, + GL_PIXEL_TEX_GEN_Q_CEILING_SGIX = 0x00008184, + GL_PIXEL_TEX_GEN_Q_ROUND_SGIX = 0x00008185, + GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX = 0x00008186, + GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX = 0x00008187, + GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX = 0x00008188, + GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX = 0x00008189, + GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX = 0x0000818A, + GL_FRAMEZOOM_SGIX = 0x0000818B, + GL_FRAMEZOOM_FACTOR_SGIX = 0x0000818C, + GL_MAX_FRAMEZOOM_FACTOR_SGIX = 0x0000818D, + GL_TEXTURE_LOD_BIAS_S_SGIX = 0x0000818E, + GL_TEXTURE_LOD_BIAS_T_SGIX = 0x0000818F, + GL_TEXTURE_LOD_BIAS_R_SGIX = 0x00008190, + GL_GENERATE_MIPMAP = 0x00008191, + GL_GENERATE_MIPMAP_SGIS = 0x00008191, + GL_GENERATE_MIPMAP_HINT = 0x00008192, + GL_GENERATE_MIPMAP_HINT_SGIS = 0x00008192, + GL_GEOMETRY_DEFORMATION_SGIX = 0x00008194, + GL_TEXTURE_DEFORMATION_SGIX = 0x00008195, + GL_DEFORMATIONS_MASK_SGIX = 0x00008196, + GL_MAX_DEFORMATION_ORDER_SGIX = 0x00008197, + GL_FOG_OFFSET_SGIX = 0x00008198, + GL_FOG_OFFSET_VALUE_SGIX = 0x00008199, + GL_TEXTURE_COMPARE_SGIX = 0x0000819A, + GL_TEXTURE_COMPARE_OPERATOR_SGIX = 0x0000819B, + GL_TEXTURE_LEQUAL_R_SGIX = 0x0000819C, + GL_TEXTURE_GEQUAL_R_SGIX = 0x0000819D, + GL_DEPTH_COMPONENT16 = 0x000081A5, + GL_DEPTH_COMPONENT16_ARB = 0x000081A5, + GL_DEPTH_COMPONENT16_OES = 0x000081A5, + GL_DEPTH_COMPONENT16_SGIX = 0x000081A5, + GL_DEPTH_COMPONENT24 = 0x000081A6, + GL_DEPTH_COMPONENT24_ARB = 0x000081A6, + GL_DEPTH_COMPONENT24_OES = 0x000081A6, + GL_DEPTH_COMPONENT24_SGIX = 0x000081A6, + GL_DEPTH_COMPONENT32 = 0x000081A7, + GL_DEPTH_COMPONENT32_ARB = 0x000081A7, + GL_DEPTH_COMPONENT32_OES = 0x000081A7, + GL_DEPTH_COMPONENT32_SGIX = 0x000081A7, + GL_ARRAY_ELEMENT_LOCK_FIRST_EXT = 0x000081A8, + GL_ARRAY_ELEMENT_LOCK_COUNT_EXT = 0x000081A9, + GL_CULL_VERTEX_EXT = 0x000081AA, + GL_CULL_VERTEX_EYE_POSITION_EXT = 0x000081AB, + GL_CULL_VERTEX_OBJECT_POSITION_EXT = 0x000081AC, + GL_IUI_V2F_EXT = 0x000081AD, + GL_IUI_V3F_EXT = 0x000081AE, + GL_IUI_N3F_V2F_EXT = 0x000081AF, + GL_IUI_N3F_V3F_EXT = 0x000081B0, + GL_T2F_IUI_V2F_EXT = 0x000081B1, + GL_T2F_IUI_V3F_EXT = 0x000081B2, + GL_T2F_IUI_N3F_V2F_EXT = 0x000081B3, + GL_T2F_IUI_N3F_V3F_EXT = 0x000081B4, + GL_INDEX_TEST_EXT = 0x000081B5, + GL_INDEX_TEST_FUNC_EXT = 0x000081B6, + GL_INDEX_TEST_REF_EXT = 0x000081B7, + GL_INDEX_MATERIAL_EXT = 0x000081B8, + GL_INDEX_MATERIAL_PARAMETER_EXT = 0x000081B9, + GL_INDEX_MATERIAL_FACE_EXT = 0x000081BA, + GL_YCRCB_422_SGIX = 0x000081BB, + GL_YCRCB_444_SGIX = 0x000081BC, + GL_WRAP_BORDER_SUN = 0x000081D4, + GL_UNPACK_CONSTANT_DATA_SUNX = 0x000081D5, + GL_TEXTURE_CONSTANT_DATA_SUNX = 0x000081D6, + GL_TRIANGLE_LIST_SUN = 0x000081D7, + GL_REPLACEMENT_CODE_SUN = 0x000081D8, + GL_GLOBAL_ALPHA_SUN = 0x000081D9, + GL_GLOBAL_ALPHA_FACTOR_SUN = 0x000081DA, + GL_TEXTURE_COLOR_WRITEMASK_SGIS = 0x000081EF, + GL_EYE_DISTANCE_TO_POINT_SGIS = 0x000081F0, + GL_OBJECT_DISTANCE_TO_POINT_SGIS = 0x000081F1, + GL_EYE_DISTANCE_TO_LINE_SGIS = 0x000081F2, + GL_OBJECT_DISTANCE_TO_LINE_SGIS = 0x000081F3, + GL_EYE_POINT_SGIS = 0x000081F4, + GL_OBJECT_POINT_SGIS = 0x000081F5, + GL_EYE_LINE_SGIS = 0x000081F6, + GL_OBJECT_LINE_SGIS = 0x000081F7, + GL_LIGHT_MODEL_COLOR_CONTROL = 0x000081F8, + GL_LIGHT_MODEL_COLOR_CONTROL_EXT = 0x000081F8, + GL_SINGLE_COLOR = 0x000081F9, + GL_SINGLE_COLOR_EXT = 0x000081F9, + GL_SEPARATE_SPECULAR_COLOR = 0x000081FA, + GL_SEPARATE_SPECULAR_COLOR_EXT = 0x000081FA, + GL_SHARED_TEXTURE_PALETTE_EXT = 0x000081FB, + GL_TEXT_FRAGMENT_SHADER_ATI = 0x00008200, + GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x00008210, + GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT = 0x00008210, + GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x00008211, + GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT = 0x00008211, + GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x00008212, + GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x00008213, + GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x00008214, + GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x00008215, + GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x00008216, + GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x00008217, + GL_FRAMEBUFFER_DEFAULT = 0x00008218, + GL_FRAMEBUFFER_UNDEFINED = 0x00008219, + GL_FRAMEBUFFER_UNDEFINED_OES = 0x00008219, + GL_DEPTH_STENCIL_ATTACHMENT = 0x0000821A, + GL_MAJOR_VERSION = 0x0000821B, + GL_MINOR_VERSION = 0x0000821C, + GL_NUM_EXTENSIONS = 0x0000821D, + GL_CONTEXT_FLAGS = 0x0000821E, + GL_BUFFER_IMMUTABLE_STORAGE = 0x0000821F, + GL_BUFFER_IMMUTABLE_STORAGE_EXT = 0x0000821F, + GL_BUFFER_STORAGE_FLAGS = 0x00008220, + GL_BUFFER_STORAGE_FLAGS_EXT = 0x00008220, + GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED = 0x00008221, + GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED_OES = 0x00008221, + GL_INDEX = 0x00008222, + GL_COMPRESSED_RED = 0x00008225, + GL_COMPRESSED_RG = 0x00008226, + GL_RG = 0x00008227, + GL_RG_EXT = 0x00008227, + GL_RG_INTEGER = 0x00008228, + GL_R8 = 0x00008229, + GL_R8_EXT = 0x00008229, + GL_R16 = 0x0000822A, + GL_R16_EXT = 0x0000822A, + GL_RG8 = 0x0000822B, + GL_RG8_EXT = 0x0000822B, + GL_RG16 = 0x0000822C, + GL_RG16_EXT = 0x0000822C, + GL_R16F = 0x0000822D, + GL_R16F_EXT = 0x0000822D, + GL_R32F = 0x0000822E, + GL_R32F_EXT = 0x0000822E, + GL_RG16F = 0x0000822F, + GL_RG16F_EXT = 0x0000822F, + GL_RG32F = 0x00008230, + GL_RG32F_EXT = 0x00008230, + GL_R8I = 0x00008231, + GL_R8UI = 0x00008232, + GL_R16I = 0x00008233, + GL_R16UI = 0x00008234, + GL_R32I = 0x00008235, + GL_R32UI = 0x00008236, + GL_RG8I = 0x00008237, + GL_RG8UI = 0x00008238, + GL_RG16I = 0x00008239, + GL_RG16UI = 0x0000823A, + GL_RG32I = 0x0000823B, + GL_RG32UI = 0x0000823C, + GL_SYNC_CL_EVENT_ARB = 0x00008240, + GL_SYNC_CL_EVENT_COMPLETE_ARB = 0x00008241, + GL_DEBUG_OUTPUT_SYNCHRONOUS = 0x00008242, + GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB = 0x00008242, + GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR = 0x00008242, + GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH = 0x00008243, + GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB = 0x00008243, + GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR = 0x00008243, + GL_DEBUG_CALLBACK_FUNCTION = 0x00008244, + GL_DEBUG_CALLBACK_FUNCTION_ARB = 0x00008244, + GL_DEBUG_CALLBACK_FUNCTION_KHR = 0x00008244, + GL_DEBUG_CALLBACK_USER_PARAM = 0x00008245, + GL_DEBUG_CALLBACK_USER_PARAM_ARB = 0x00008245, + GL_DEBUG_CALLBACK_USER_PARAM_KHR = 0x00008245, + GL_DEBUG_SOURCE_API = 0x00008246, + GL_DEBUG_SOURCE_API_ARB = 0x00008246, + GL_DEBUG_SOURCE_API_KHR = 0x00008246, + GL_DEBUG_SOURCE_WINDOW_SYSTEM = 0x00008247, + GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB = 0x00008247, + GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR = 0x00008247, + GL_DEBUG_SOURCE_SHADER_COMPILER = 0x00008248, + GL_DEBUG_SOURCE_SHADER_COMPILER_ARB = 0x00008248, + GL_DEBUG_SOURCE_SHADER_COMPILER_KHR = 0x00008248, + GL_DEBUG_SOURCE_THIRD_PARTY = 0x00008249, + GL_DEBUG_SOURCE_THIRD_PARTY_ARB = 0x00008249, + GL_DEBUG_SOURCE_THIRD_PARTY_KHR = 0x00008249, + GL_DEBUG_SOURCE_APPLICATION = 0x0000824A, + GL_DEBUG_SOURCE_APPLICATION_ARB = 0x0000824A, + GL_DEBUG_SOURCE_APPLICATION_KHR = 0x0000824A, + GL_DEBUG_SOURCE_OTHER = 0x0000824B, + GL_DEBUG_SOURCE_OTHER_ARB = 0x0000824B, + GL_DEBUG_SOURCE_OTHER_KHR = 0x0000824B, + GL_DEBUG_TYPE_ERROR = 0x0000824C, + GL_DEBUG_TYPE_ERROR_ARB = 0x0000824C, + GL_DEBUG_TYPE_ERROR_KHR = 0x0000824C, + GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR = 0x0000824D, + GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB = 0x0000824D, + GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR = 0x0000824D, + GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR = 0x0000824E, + GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB = 0x0000824E, + GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR = 0x0000824E, + GL_DEBUG_TYPE_PORTABILITY = 0x0000824F, + GL_DEBUG_TYPE_PORTABILITY_ARB = 0x0000824F, + GL_DEBUG_TYPE_PORTABILITY_KHR = 0x0000824F, + GL_DEBUG_TYPE_PERFORMANCE = 0x00008250, + GL_DEBUG_TYPE_PERFORMANCE_ARB = 0x00008250, + GL_DEBUG_TYPE_PERFORMANCE_KHR = 0x00008250, + GL_DEBUG_TYPE_OTHER = 0x00008251, + GL_DEBUG_TYPE_OTHER_ARB = 0x00008251, + GL_DEBUG_TYPE_OTHER_KHR = 0x00008251, + GL_LOSE_CONTEXT_ON_RESET = 0x00008252, + GL_LOSE_CONTEXT_ON_RESET_ARB = 0x00008252, + GL_LOSE_CONTEXT_ON_RESET_EXT = 0x00008252, + GL_LOSE_CONTEXT_ON_RESET_KHR = 0x00008252, + GL_GUILTY_CONTEXT_RESET = 0x00008253, + GL_GUILTY_CONTEXT_RESET_ARB = 0x00008253, + GL_GUILTY_CONTEXT_RESET_EXT = 0x00008253, + GL_GUILTY_CONTEXT_RESET_KHR = 0x00008253, + GL_INNOCENT_CONTEXT_RESET = 0x00008254, + GL_INNOCENT_CONTEXT_RESET_ARB = 0x00008254, + GL_INNOCENT_CONTEXT_RESET_EXT = 0x00008254, + GL_INNOCENT_CONTEXT_RESET_KHR = 0x00008254, + GL_UNKNOWN_CONTEXT_RESET = 0x00008255, + GL_UNKNOWN_CONTEXT_RESET_ARB = 0x00008255, + GL_UNKNOWN_CONTEXT_RESET_EXT = 0x00008255, + GL_UNKNOWN_CONTEXT_RESET_KHR = 0x00008255, + GL_RESET_NOTIFICATION_STRATEGY = 0x00008256, + GL_RESET_NOTIFICATION_STRATEGY_ARB = 0x00008256, + GL_RESET_NOTIFICATION_STRATEGY_EXT = 0x00008256, + GL_RESET_NOTIFICATION_STRATEGY_KHR = 0x00008256, + GL_PROGRAM_BINARY_RETRIEVABLE_HINT = 0x00008257, + GL_PROGRAM_SEPARABLE = 0x00008258, + GL_PROGRAM_SEPARABLE_EXT = 0x00008258, + GL_ACTIVE_PROGRAM = 0x00008259, + GL_ACTIVE_PROGRAM_EXT = 0x00008259, + GL_PROGRAM_PIPELINE_BINDING = 0x0000825A, + GL_PROGRAM_PIPELINE_BINDING_EXT = 0x0000825A, + GL_MAX_VIEWPORTS = 0x0000825B, + GL_MAX_VIEWPORTS_NV = 0x0000825B, + GL_VIEWPORT_SUBPIXEL_BITS = 0x0000825C, + GL_VIEWPORT_SUBPIXEL_BITS_EXT = 0x0000825C, + GL_VIEWPORT_SUBPIXEL_BITS_NV = 0x0000825C, + GL_VIEWPORT_BOUNDS_RANGE = 0x0000825D, + GL_VIEWPORT_BOUNDS_RANGE_EXT = 0x0000825D, + GL_VIEWPORT_BOUNDS_RANGE_NV = 0x0000825D, + GL_LAYER_PROVOKING_VERTEX = 0x0000825E, + GL_LAYER_PROVOKING_VERTEX_EXT = 0x0000825E, + GL_LAYER_PROVOKING_VERTEX_OES = 0x0000825E, + GL_VIEWPORT_INDEX_PROVOKING_VERTEX = 0x0000825F, + GL_VIEWPORT_INDEX_PROVOKING_VERTEX_EXT = 0x0000825F, + GL_VIEWPORT_INDEX_PROVOKING_VERTEX_NV = 0x0000825F, + GL_UNDEFINED_VERTEX = 0x00008260, + GL_UNDEFINED_VERTEX_EXT = 0x00008260, + GL_UNDEFINED_VERTEX_OES = 0x00008260, + GL_NO_RESET_NOTIFICATION = 0x00008261, + GL_NO_RESET_NOTIFICATION_ARB = 0x00008261, + GL_NO_RESET_NOTIFICATION_EXT = 0x00008261, + GL_NO_RESET_NOTIFICATION_KHR = 0x00008261, + GL_MAX_COMPUTE_SHARED_MEMORY_SIZE = 0x00008262, + GL_MAX_COMPUTE_UNIFORM_COMPONENTS = 0x00008263, + GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS = 0x00008264, + GL_MAX_COMPUTE_ATOMIC_COUNTERS = 0x00008265, + GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS = 0x00008266, + GL_COMPUTE_WORK_GROUP_SIZE = 0x00008267, + GL_DEBUG_TYPE_MARKER = 0x00008268, + GL_DEBUG_TYPE_MARKER_KHR = 0x00008268, + GL_DEBUG_TYPE_PUSH_GROUP = 0x00008269, + GL_DEBUG_TYPE_PUSH_GROUP_KHR = 0x00008269, + GL_DEBUG_TYPE_POP_GROUP = 0x0000826A, + GL_DEBUG_TYPE_POP_GROUP_KHR = 0x0000826A, + GL_DEBUG_SEVERITY_NOTIFICATION = 0x0000826B, + GL_DEBUG_SEVERITY_NOTIFICATION_KHR = 0x0000826B, + GL_MAX_DEBUG_GROUP_STACK_DEPTH = 0x0000826C, + GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR = 0x0000826C, + GL_DEBUG_GROUP_STACK_DEPTH = 0x0000826D, + GL_DEBUG_GROUP_STACK_DEPTH_KHR = 0x0000826D, + GL_MAX_UNIFORM_LOCATIONS = 0x0000826E, + GL_INTERNALFORMAT_SUPPORTED = 0x0000826F, + GL_INTERNALFORMAT_PREFERRED = 0x00008270, + GL_INTERNALFORMAT_RED_SIZE = 0x00008271, + GL_INTERNALFORMAT_GREEN_SIZE = 0x00008272, + GL_INTERNALFORMAT_BLUE_SIZE = 0x00008273, + GL_INTERNALFORMAT_ALPHA_SIZE = 0x00008274, + GL_INTERNALFORMAT_DEPTH_SIZE = 0x00008275, + GL_INTERNALFORMAT_STENCIL_SIZE = 0x00008276, + GL_INTERNALFORMAT_SHARED_SIZE = 0x00008277, + GL_INTERNALFORMAT_RED_TYPE = 0x00008278, + GL_INTERNALFORMAT_GREEN_TYPE = 0x00008279, + GL_INTERNALFORMAT_BLUE_TYPE = 0x0000827A, + GL_INTERNALFORMAT_ALPHA_TYPE = 0x0000827B, + GL_INTERNALFORMAT_DEPTH_TYPE = 0x0000827C, + GL_INTERNALFORMAT_STENCIL_TYPE = 0x0000827D, + GL_MAX_WIDTH = 0x0000827E, + GL_MAX_HEIGHT = 0x0000827F, + GL_MAX_DEPTH = 0x00008280, + GL_MAX_LAYERS = 0x00008281, + GL_MAX_COMBINED_DIMENSIONS = 0x00008282, + GL_COLOR_COMPONENTS = 0x00008283, + GL_DEPTH_COMPONENTS = 0x00008284, + GL_STENCIL_COMPONENTS = 0x00008285, + GL_COLOR_RENDERABLE = 0x00008286, + GL_DEPTH_RENDERABLE = 0x00008287, + GL_STENCIL_RENDERABLE = 0x00008288, + GL_FRAMEBUFFER_RENDERABLE = 0x00008289, + GL_FRAMEBUFFER_RENDERABLE_LAYERED = 0x0000828A, + GL_FRAMEBUFFER_BLEND = 0x0000828B, + GL_READ_PIXELS = 0x0000828C, + GL_READ_PIXELS_FORMAT = 0x0000828D, + GL_READ_PIXELS_TYPE = 0x0000828E, + GL_TEXTURE_IMAGE_FORMAT = 0x0000828F, + GL_TEXTURE_IMAGE_TYPE = 0x00008290, + GL_GET_TEXTURE_IMAGE_FORMAT = 0x00008291, + GL_GET_TEXTURE_IMAGE_TYPE = 0x00008292, + GL_MIPMAP = 0x00008293, + GL_MANUAL_GENERATE_MIPMAP = 0x00008294, + GL_AUTO_GENERATE_MIPMAP = 0x00008295, + GL_COLOR_ENCODING = 0x00008296, + GL_SRGB_READ = 0x00008297, + GL_SRGB_WRITE = 0x00008298, + GL_SRGB_DECODE_ARB = 0x00008299, + GL_FILTER = 0x0000829A, + GL_VERTEX_TEXTURE = 0x0000829B, + GL_TESS_CONTROL_TEXTURE = 0x0000829C, + GL_TESS_EVALUATION_TEXTURE = 0x0000829D, + GL_GEOMETRY_TEXTURE = 0x0000829E, + GL_FRAGMENT_TEXTURE = 0x0000829F, + GL_COMPUTE_TEXTURE = 0x000082A0, + GL_TEXTURE_SHADOW = 0x000082A1, + GL_TEXTURE_GATHER = 0x000082A2, + GL_TEXTURE_GATHER_SHADOW = 0x000082A3, + GL_SHADER_IMAGE_LOAD = 0x000082A4, + GL_SHADER_IMAGE_STORE = 0x000082A5, + GL_SHADER_IMAGE_ATOMIC = 0x000082A6, + GL_IMAGE_TEXEL_SIZE = 0x000082A7, + GL_IMAGE_COMPATIBILITY_CLASS = 0x000082A8, + GL_IMAGE_PIXEL_FORMAT = 0x000082A9, + GL_IMAGE_PIXEL_TYPE = 0x000082AA, + GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST = 0x000082AC, + GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST = 0x000082AD, + GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE = 0x000082AE, + GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE = 0x000082AF, + GL_TEXTURE_COMPRESSED_BLOCK_WIDTH = 0x000082B1, + GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT = 0x000082B2, + GL_TEXTURE_COMPRESSED_BLOCK_SIZE = 0x000082B3, + GL_CLEAR_BUFFER = 0x000082B4, + GL_TEXTURE_VIEW = 0x000082B5, + GL_VIEW_COMPATIBILITY_CLASS = 0x000082B6, + GL_FULL_SUPPORT = 0x000082B7, + GL_CAVEAT_SUPPORT = 0x000082B8, + GL_IMAGE_CLASS_4_X_32 = 0x000082B9, + GL_IMAGE_CLASS_2_X_32 = 0x000082BA, + GL_IMAGE_CLASS_1_X_32 = 0x000082BB, + GL_IMAGE_CLASS_4_X_16 = 0x000082BC, + GL_IMAGE_CLASS_2_X_16 = 0x000082BD, + GL_IMAGE_CLASS_1_X_16 = 0x000082BE, + GL_IMAGE_CLASS_4_X_8 = 0x000082BF, + GL_IMAGE_CLASS_2_X_8 = 0x000082C0, + GL_IMAGE_CLASS_1_X_8 = 0x000082C1, + GL_IMAGE_CLASS_11_11_10 = 0x000082C2, + GL_IMAGE_CLASS_10_10_10_2 = 0x000082C3, + GL_VIEW_CLASS_128_BITS = 0x000082C4, + GL_VIEW_CLASS_96_BITS = 0x000082C5, + GL_VIEW_CLASS_64_BITS = 0x000082C6, + GL_VIEW_CLASS_48_BITS = 0x000082C7, + GL_VIEW_CLASS_32_BITS = 0x000082C8, + GL_VIEW_CLASS_24_BITS = 0x000082C9, + GL_VIEW_CLASS_16_BITS = 0x000082CA, + GL_VIEW_CLASS_8_BITS = 0x000082CB, + GL_VIEW_CLASS_S3TC_DXT1_RGB = 0x000082CC, + GL_VIEW_CLASS_S3TC_DXT1_RGBA = 0x000082CD, + GL_VIEW_CLASS_S3TC_DXT3_RGBA = 0x000082CE, + GL_VIEW_CLASS_S3TC_DXT5_RGBA = 0x000082CF, + GL_VIEW_CLASS_RGTC1_RED = 0x000082D0, + GL_VIEW_CLASS_RGTC2_RG = 0x000082D1, + GL_VIEW_CLASS_BPTC_UNORM = 0x000082D2, + GL_VIEW_CLASS_BPTC_FLOAT = 0x000082D3, + GL_VERTEX_ATTRIB_BINDING = 0x000082D4, + GL_VERTEX_ATTRIB_RELATIVE_OFFSET = 0x000082D5, + GL_VERTEX_BINDING_DIVISOR = 0x000082D6, + GL_VERTEX_BINDING_OFFSET = 0x000082D7, + GL_VERTEX_BINDING_STRIDE = 0x000082D8, + GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET = 0x000082D9, + GL_MAX_VERTEX_ATTRIB_BINDINGS = 0x000082DA, + GL_TEXTURE_VIEW_MIN_LEVEL = 0x000082DB, + GL_TEXTURE_VIEW_MIN_LEVEL_EXT = 0x000082DB, + GL_TEXTURE_VIEW_MIN_LEVEL_OES = 0x000082DB, + GL_TEXTURE_VIEW_NUM_LEVELS = 0x000082DC, + GL_TEXTURE_VIEW_NUM_LEVELS_EXT = 0x000082DC, + GL_TEXTURE_VIEW_NUM_LEVELS_OES = 0x000082DC, + GL_TEXTURE_VIEW_MIN_LAYER = 0x000082DD, + GL_TEXTURE_VIEW_MIN_LAYER_EXT = 0x000082DD, + GL_TEXTURE_VIEW_MIN_LAYER_OES = 0x000082DD, + GL_TEXTURE_VIEW_NUM_LAYERS = 0x000082DE, + GL_TEXTURE_VIEW_NUM_LAYERS_EXT = 0x000082DE, + GL_TEXTURE_VIEW_NUM_LAYERS_OES = 0x000082DE, + GL_TEXTURE_IMMUTABLE_LEVELS = 0x000082DF, + GL_BUFFER = 0x000082E0, + GL_BUFFER_KHR = 0x000082E0, + GL_SHADER = 0x000082E1, + GL_SHADER_KHR = 0x000082E1, + GL_PROGRAM = 0x000082E2, + GL_PROGRAM_KHR = 0x000082E2, + GL_QUERY = 0x000082E3, + GL_QUERY_KHR = 0x000082E3, + GL_PROGRAM_PIPELINE = 0x000082E4, + GL_PROGRAM_PIPELINE_KHR = 0x000082E4, + GL_MAX_VERTEX_ATTRIB_STRIDE = 0x000082E5, + GL_SAMPLER = 0x000082E6, + GL_SAMPLER_KHR = 0x000082E6, + GL_DISPLAY_LIST = 0x000082E7, + GL_MAX_LABEL_LENGTH = 0x000082E8, + GL_MAX_LABEL_LENGTH_KHR = 0x000082E8, + GL_NUM_SHADING_LANGUAGE_VERSIONS = 0x000082E9, + GL_QUERY_TARGET = 0x000082EA, + GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB = 0x000082EC, + GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB = 0x000082ED, + GL_VERTICES_SUBMITTED_ARB = 0x000082EE, + GL_PRIMITIVES_SUBMITTED_ARB = 0x000082EF, + GL_VERTEX_SHADER_INVOCATIONS_ARB = 0x000082F0, + GL_TESS_CONTROL_SHADER_PATCHES_ARB = 0x000082F1, + GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB = 0x000082F2, + GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB = 0x000082F3, + GL_FRAGMENT_SHADER_INVOCATIONS_ARB = 0x000082F4, + GL_COMPUTE_SHADER_INVOCATIONS_ARB = 0x000082F5, + GL_CLIPPING_INPUT_PRIMITIVES_ARB = 0x000082F6, + GL_CLIPPING_OUTPUT_PRIMITIVES_ARB = 0x000082F7, + GL_SPARSE_BUFFER_PAGE_SIZE_ARB = 0x000082F8, + GL_MAX_CULL_DISTANCES = 0x000082F9, + GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES = 0x000082FA, + GL_CONTEXT_RELEASE_BEHAVIOR = 0x000082FB, + GL_CONTEXT_RELEASE_BEHAVIOR_KHR = 0x000082FB, + GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x000082FC, + GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR = 0x000082FC, + GL_DEPTH_PASS_INSTRUMENT_SGIX = 0x00008310, + GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX = 0x00008311, + GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX = 0x00008312, + GL_FRAGMENTS_INSTRUMENT_SGIX = 0x00008313, + GL_FRAGMENTS_INSTRUMENT_COUNTERS_SGIX = 0x00008314, + GL_FRAGMENTS_INSTRUMENT_MAX_SGIX = 0x00008315, + GL_CONVOLUTION_HINT_SGIX = 0x00008316, + GL_YCRCB_SGIX = 0x00008318, + GL_YCRCBA_SGIX = 0x00008319, + GL_UNPACK_COMPRESSED_SIZE_SGIX = 0x0000831A, + GL_PACK_MAX_COMPRESSED_SIZE_SGIX = 0x0000831B, + GL_PACK_COMPRESSED_SIZE_SGIX = 0x0000831C, + GL_SLIM8U_SGIX = 0x0000831D, + GL_SLIM10U_SGIX = 0x0000831E, + GL_SLIM12S_SGIX = 0x0000831F, + GL_ALPHA_MIN_SGIX = 0x00008320, + GL_ALPHA_MAX_SGIX = 0x00008321, + GL_SCALEBIAS_HINT_SGIX = 0x00008322, + GL_ASYNC_MARKER_SGIX = 0x00008329, + GL_PIXEL_TEX_GEN_MODE_SGIX = 0x0000832B, + GL_ASYNC_HISTOGRAM_SGIX = 0x0000832C, + GL_MAX_ASYNC_HISTOGRAM_SGIX = 0x0000832D, + GL_PIXEL_TRANSFORM_2D_EXT = 0x00008330, + GL_PIXEL_MAG_FILTER_EXT = 0x00008331, + GL_PIXEL_MIN_FILTER_EXT = 0x00008332, + GL_PIXEL_CUBIC_WEIGHT_EXT = 0x00008333, + GL_CUBIC_EXT = 0x00008334, + GL_AVERAGE_EXT = 0x00008335, + GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT = 0x00008336, + GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT = 0x00008337, + GL_PIXEL_TRANSFORM_2D_MATRIX_EXT = 0x00008338, + GL_FRAGMENT_MATERIAL_EXT = 0x00008349, + GL_FRAGMENT_NORMAL_EXT = 0x0000834A, + GL_FRAGMENT_COLOR_EXT = 0x0000834C, + GL_ATTENUATION_EXT = 0x0000834D, + GL_SHADOW_ATTENUATION_EXT = 0x0000834E, + GL_TEXTURE_APPLICATION_MODE_EXT = 0x0000834F, + GL_TEXTURE_LIGHT_EXT = 0x00008350, + GL_TEXTURE_MATERIAL_FACE_EXT = 0x00008351, + GL_TEXTURE_MATERIAL_PARAMETER_EXT = 0x00008352, + GL_PIXEL_TEXTURE_SGIS = 0x00008353, + GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS = 0x00008354, + GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS = 0x00008355, + GL_PIXEL_GROUP_COLOR_SGIS = 0x00008356, + GL_LINE_QUALITY_HINT_SGIX = 0x0000835B, + GL_ASYNC_TEX_IMAGE_SGIX = 0x0000835C, + GL_ASYNC_DRAW_PIXELS_SGIX = 0x0000835D, + GL_ASYNC_READ_PIXELS_SGIX = 0x0000835E, + GL_MAX_ASYNC_TEX_IMAGE_SGIX = 0x0000835F, + GL_MAX_ASYNC_DRAW_PIXELS_SGIX = 0x00008360, + GL_MAX_ASYNC_READ_PIXELS_SGIX = 0x00008361, + GL_UNSIGNED_BYTE_2_3_3_REV = 0x00008362, + GL_UNSIGNED_BYTE_2_3_3_REV_EXT = 0x00008362, + GL_UNSIGNED_SHORT_5_6_5 = 0x00008363, + GL_UNSIGNED_SHORT_5_6_5_EXT = 0x00008363, + GL_UNSIGNED_SHORT_5_6_5_REV = 0x00008364, + GL_UNSIGNED_SHORT_5_6_5_REV_EXT = 0x00008364, + GL_UNSIGNED_SHORT_4_4_4_4_REV = 0x00008365, + GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT = 0x00008365, + GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG = 0x00008365, + GL_UNSIGNED_SHORT_1_5_5_5_REV = 0x00008366, + GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT = 0x00008366, + GL_UNSIGNED_INT_8_8_8_8_REV = 0x00008367, + GL_UNSIGNED_INT_8_8_8_8_REV_EXT = 0x00008367, + GL_UNSIGNED_INT_2_10_10_10_REV = 0x00008368, + GL_UNSIGNED_INT_2_10_10_10_REV_EXT = 0x00008368, + GL_TEXTURE_MAX_CLAMP_S_SGIX = 0x00008369, + GL_TEXTURE_MAX_CLAMP_T_SGIX = 0x0000836A, + GL_TEXTURE_MAX_CLAMP_R_SGIX = 0x0000836B, + GL_MIRRORED_REPEAT = 0x00008370, + GL_MIRRORED_REPEAT_ARB = 0x00008370, + GL_MIRRORED_REPEAT_IBM = 0x00008370, + GL_MIRRORED_REPEAT_OES = 0x00008370, + GL_RGB_S3TC = 0x000083A0, + GL_RGB4_S3TC = 0x000083A1, + GL_RGBA_S3TC = 0x000083A2, + GL_RGBA4_S3TC = 0x000083A3, + GL_RGBA_DXT5_S3TC = 0x000083A4, + GL_RGBA4_DXT5_S3TC = 0x000083A5, + GL_VERTEX_PRECLIP_SGIX = 0x000083EE, + GL_VERTEX_PRECLIP_HINT_SGIX = 0x000083EF, + GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 0x000083F0, + GL_COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x000083F1, + GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE = 0x000083F2, + GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x000083F2, + GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE = 0x000083F3, + GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x000083F3, + GL_PARALLEL_ARRAYS_INTEL = 0x000083F4, + GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL = 0x000083F5, + GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL = 0x000083F6, + GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL = 0x000083F7, + GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL = 0x000083F8, + GL_PERFQUERY_DONOT_FLUSH_INTEL = 0x000083F9, + GL_PERFQUERY_FLUSH_INTEL = 0x000083FA, + GL_PERFQUERY_WAIT_INTEL = 0x000083FB, + GL_TEXTURE_MEMORY_LAYOUT_INTEL = 0x000083FF, + GL_FRAGMENT_LIGHTING_SGIX = 0x00008400, + GL_FRAGMENT_COLOR_MATERIAL_SGIX = 0x00008401, + GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX = 0x00008402, + GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX = 0x00008403, + GL_MAX_FRAGMENT_LIGHTS_SGIX = 0x00008404, + GL_MAX_ACTIVE_LIGHTS_SGIX = 0x00008405, + GL_CURRENT_RASTER_NORMAL_SGIX = 0x00008406, + GL_LIGHT_ENV_MODE_SGIX = 0x00008407, + GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX = 0x00008408, + GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX = 0x00008409, + GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX = 0x0000840A, + GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX = 0x0000840B, + GL_FRAGMENT_LIGHT0_SGIX = 0x0000840C, + GL_FRAGMENT_LIGHT1_SGIX = 0x0000840D, + GL_FRAGMENT_LIGHT2_SGIX = 0x0000840E, + GL_FRAGMENT_LIGHT3_SGIX = 0x0000840F, + GL_FRAGMENT_LIGHT4_SGIX = 0x00008410, + GL_FRAGMENT_LIGHT5_SGIX = 0x00008411, + GL_FRAGMENT_LIGHT6_SGIX = 0x00008412, + GL_FRAGMENT_LIGHT7_SGIX = 0x00008413, + GL_PACK_RESAMPLE_SGIX = 0x0000842E, + GL_UNPACK_RESAMPLE_SGIX = 0x0000842F, + GL_RESAMPLE_DECIMATE_SGIX = 0x00008430, + GL_RESAMPLE_REPLICATE_SGIX = 0x00008433, + GL_RESAMPLE_ZERO_FILL_SGIX = 0x00008434, + GL_TANGENT_ARRAY_EXT = 0x00008439, + GL_BINORMAL_ARRAY_EXT = 0x0000843A, + GL_CURRENT_TANGENT_EXT = 0x0000843B, + GL_CURRENT_BINORMAL_EXT = 0x0000843C, + GL_TANGENT_ARRAY_TYPE_EXT = 0x0000843E, + GL_TANGENT_ARRAY_STRIDE_EXT = 0x0000843F, + GL_BINORMAL_ARRAY_TYPE_EXT = 0x00008440, + GL_BINORMAL_ARRAY_STRIDE_EXT = 0x00008441, + GL_TANGENT_ARRAY_POINTER_EXT = 0x00008442, + GL_BINORMAL_ARRAY_POINTER_EXT = 0x00008443, + GL_MAP1_TANGENT_EXT = 0x00008444, + GL_MAP2_TANGENT_EXT = 0x00008445, + GL_MAP1_BINORMAL_EXT = 0x00008446, + GL_MAP2_BINORMAL_EXT = 0x00008447, + GL_NEAREST_CLIPMAP_NEAREST_SGIX = 0x0000844D, + GL_NEAREST_CLIPMAP_LINEAR_SGIX = 0x0000844E, + GL_LINEAR_CLIPMAP_NEAREST_SGIX = 0x0000844F, + GL_FOG_COORDINATE_SOURCE = 0x00008450, + GL_FOG_COORDINATE_SOURCE_EXT = 0x00008450, + GL_FOG_COORD_SRC = 0x00008450, + GL_FOG_COORDINATE = 0x00008451, + GL_FOG_COORD = 0x00008451, + GL_FOG_COORDINATE_EXT = 0x00008451, + GL_FRAGMENT_DEPTH = 0x00008452, + GL_FRAGMENT_DEPTH_EXT = 0x00008452, + GL_CURRENT_FOG_COORDINATE = 0x00008453, + GL_CURRENT_FOG_COORD = 0x00008453, + GL_CURRENT_FOG_COORDINATE_EXT = 0x00008453, + GL_FOG_COORDINATE_ARRAY_TYPE = 0x00008454, + GL_FOG_COORDINATE_ARRAY_TYPE_EXT = 0x00008454, + GL_FOG_COORD_ARRAY_TYPE = 0x00008454, + GL_FOG_COORDINATE_ARRAY_STRIDE = 0x00008455, + GL_FOG_COORDINATE_ARRAY_STRIDE_EXT = 0x00008455, + GL_FOG_COORD_ARRAY_STRIDE = 0x00008455, + GL_FOG_COORDINATE_ARRAY_POINTER = 0x00008456, + GL_FOG_COORDINATE_ARRAY_POINTER_EXT = 0x00008456, + GL_FOG_COORD_ARRAY_POINTER = 0x00008456, + GL_FOG_COORDINATE_ARRAY = 0x00008457, + GL_FOG_COORDINATE_ARRAY_EXT = 0x00008457, + GL_FOG_COORD_ARRAY = 0x00008457, + GL_COLOR_SUM = 0x00008458, + GL_COLOR_SUM_ARB = 0x00008458, + GL_COLOR_SUM_EXT = 0x00008458, + GL_CURRENT_SECONDARY_COLOR = 0x00008459, + GL_CURRENT_SECONDARY_COLOR_EXT = 0x00008459, + GL_SECONDARY_COLOR_ARRAY_SIZE = 0x0000845A, + GL_SECONDARY_COLOR_ARRAY_SIZE_EXT = 0x0000845A, + GL_SECONDARY_COLOR_ARRAY_TYPE = 0x0000845B, + GL_SECONDARY_COLOR_ARRAY_TYPE_EXT = 0x0000845B, + GL_SECONDARY_COLOR_ARRAY_STRIDE = 0x0000845C, + GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT = 0x0000845C, + GL_SECONDARY_COLOR_ARRAY_POINTER = 0x0000845D, + GL_SECONDARY_COLOR_ARRAY_POINTER_EXT = 0x0000845D, + GL_SECONDARY_COLOR_ARRAY = 0x0000845E, + GL_SECONDARY_COLOR_ARRAY_EXT = 0x0000845E, + GL_CURRENT_RASTER_SECONDARY_COLOR = 0x0000845F, + GL_ALIASED_POINT_SIZE_RANGE = 0x0000846D, + GL_ALIASED_LINE_WIDTH_RANGE = 0x0000846E, + GL_SCREEN_COORDINATES_REND = 0x00008490, + GL_INVERTED_SCREEN_W_REND = 0x00008491, + GL_TEXTURE0 = 0x000084C0, + GL_TEXTURE0_ARB = 0x000084C0, + GL_TEXTURE1 = 0x000084C1, + GL_TEXTURE1_ARB = 0x000084C1, + GL_TEXTURE2 = 0x000084C2, + GL_TEXTURE2_ARB = 0x000084C2, + GL_TEXTURE3 = 0x000084C3, + GL_TEXTURE3_ARB = 0x000084C3, + GL_TEXTURE4 = 0x000084C4, + GL_TEXTURE4_ARB = 0x000084C4, + GL_TEXTURE5 = 0x000084C5, + GL_TEXTURE5_ARB = 0x000084C5, + GL_TEXTURE6 = 0x000084C6, + GL_TEXTURE6_ARB = 0x000084C6, + GL_TEXTURE7 = 0x000084C7, + GL_TEXTURE7_ARB = 0x000084C7, + GL_TEXTURE8 = 0x000084C8, + GL_TEXTURE8_ARB = 0x000084C8, + GL_TEXTURE9 = 0x000084C9, + GL_TEXTURE9_ARB = 0x000084C9, + GL_TEXTURE10 = 0x000084CA, + GL_TEXTURE10_ARB = 0x000084CA, + GL_TEXTURE11 = 0x000084CB, + GL_TEXTURE11_ARB = 0x000084CB, + GL_TEXTURE12 = 0x000084CC, + GL_TEXTURE12_ARB = 0x000084CC, + GL_TEXTURE13 = 0x000084CD, + GL_TEXTURE13_ARB = 0x000084CD, + GL_TEXTURE14 = 0x000084CE, + GL_TEXTURE14_ARB = 0x000084CE, + GL_TEXTURE15 = 0x000084CF, + GL_TEXTURE15_ARB = 0x000084CF, + GL_TEXTURE16 = 0x000084D0, + GL_TEXTURE16_ARB = 0x000084D0, + GL_TEXTURE17 = 0x000084D1, + GL_TEXTURE17_ARB = 0x000084D1, + GL_TEXTURE18 = 0x000084D2, + GL_TEXTURE18_ARB = 0x000084D2, + GL_TEXTURE19 = 0x000084D3, + GL_TEXTURE19_ARB = 0x000084D3, + GL_TEXTURE20 = 0x000084D4, + GL_TEXTURE20_ARB = 0x000084D4, + GL_TEXTURE21 = 0x000084D5, + GL_TEXTURE21_ARB = 0x000084D5, + GL_TEXTURE22 = 0x000084D6, + GL_TEXTURE22_ARB = 0x000084D6, + GL_TEXTURE23 = 0x000084D7, + GL_TEXTURE23_ARB = 0x000084D7, + GL_TEXTURE24 = 0x000084D8, + GL_TEXTURE24_ARB = 0x000084D8, + GL_TEXTURE25 = 0x000084D9, + GL_TEXTURE25_ARB = 0x000084D9, + GL_TEXTURE26 = 0x000084DA, + GL_TEXTURE26_ARB = 0x000084DA, + GL_TEXTURE27 = 0x000084DB, + GL_TEXTURE27_ARB = 0x000084DB, + GL_TEXTURE28 = 0x000084DC, + GL_TEXTURE28_ARB = 0x000084DC, + GL_TEXTURE29 = 0x000084DD, + GL_TEXTURE29_ARB = 0x000084DD, + GL_TEXTURE30 = 0x000084DE, + GL_TEXTURE30_ARB = 0x000084DE, + GL_TEXTURE31 = 0x000084DF, + GL_TEXTURE31_ARB = 0x000084DF, + GL_ACTIVE_TEXTURE = 0x000084E0, + GL_ACTIVE_TEXTURE_ARB = 0x000084E0, + GL_CLIENT_ACTIVE_TEXTURE = 0x000084E1, + GL_CLIENT_ACTIVE_TEXTURE_ARB = 0x000084E1, + GL_MAX_TEXTURE_UNITS = 0x000084E2, + GL_MAX_TEXTURE_UNITS_ARB = 0x000084E2, + GL_TRANSPOSE_MODELVIEW_MATRIX = 0x000084E3, + GL_TRANSPOSE_MODELVIEW_MATRIX_ARB = 0x000084E3, + GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV = 0x000084E3, + GL_TRANSPOSE_PROJECTION_MATRIX = 0x000084E4, + GL_TRANSPOSE_PROJECTION_MATRIX_ARB = 0x000084E4, + GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV = 0x000084E4, + GL_TRANSPOSE_TEXTURE_MATRIX = 0x000084E5, + GL_TRANSPOSE_TEXTURE_MATRIX_ARB = 0x000084E5, + GL_TRANSPOSE_COLOR_MATRIX = 0x000084E6, + GL_TRANSPOSE_COLOR_MATRIX_ARB = 0x000084E6, + GL_SUBTRACT = 0x000084E7, + GL_SUBTRACT_ARB = 0x000084E7, + GL_MAX_RENDERBUFFER_SIZE = 0x000084E8, + GL_MAX_RENDERBUFFER_SIZE_EXT = 0x000084E8, + GL_MAX_RENDERBUFFER_SIZE_OES = 0x000084E8, + GL_COMPRESSED_ALPHA = 0x000084E9, + GL_COMPRESSED_ALPHA_ARB = 0x000084E9, + GL_COMPRESSED_LUMINANCE = 0x000084EA, + GL_COMPRESSED_LUMINANCE_ARB = 0x000084EA, + GL_COMPRESSED_LUMINANCE_ALPHA = 0x000084EB, + GL_COMPRESSED_LUMINANCE_ALPHA_ARB = 0x000084EB, + GL_COMPRESSED_INTENSITY = 0x000084EC, + GL_COMPRESSED_INTENSITY_ARB = 0x000084EC, + GL_COMPRESSED_RGB = 0x000084ED, + GL_COMPRESSED_RGB_ARB = 0x000084ED, + GL_COMPRESSED_RGBA = 0x000084EE, + GL_COMPRESSED_RGBA_ARB = 0x000084EE, + GL_TEXTURE_COMPRESSION_HINT = 0x000084EF, + GL_TEXTURE_COMPRESSION_HINT_ARB = 0x000084EF, + GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = 0x000084F0, + GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x000084F1, + GL_ALL_COMPLETED_NV = 0x000084F2, + GL_FENCE_STATUS_NV = 0x000084F3, + GL_FENCE_CONDITION_NV = 0x000084F4, + GL_TEXTURE_RECTANGLE = 0x000084F5, + GL_TEXTURE_RECTANGLE_ARB = 0x000084F5, + GL_TEXTURE_RECTANGLE_NV = 0x000084F5, + GL_TEXTURE_BINDING_RECTANGLE = 0x000084F6, + GL_TEXTURE_BINDING_RECTANGLE_ARB = 0x000084F6, + GL_TEXTURE_BINDING_RECTANGLE_NV = 0x000084F6, + GL_PROXY_TEXTURE_RECTANGLE = 0x000084F7, + GL_PROXY_TEXTURE_RECTANGLE_ARB = 0x000084F7, + GL_PROXY_TEXTURE_RECTANGLE_NV = 0x000084F7, + GL_MAX_RECTANGLE_TEXTURE_SIZE = 0x000084F8, + GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB = 0x000084F8, + GL_MAX_RECTANGLE_TEXTURE_SIZE_NV = 0x000084F8, + GL_DEPTH_STENCIL = 0x000084F9, + GL_DEPTH_STENCIL_EXT = 0x000084F9, + GL_DEPTH_STENCIL_NV = 0x000084F9, + GL_DEPTH_STENCIL_OES = 0x000084F9, + GL_UNSIGNED_INT_24_8 = 0x000084FA, + GL_UNSIGNED_INT_24_8_EXT = 0x000084FA, + GL_UNSIGNED_INT_24_8_NV = 0x000084FA, + GL_UNSIGNED_INT_24_8_OES = 0x000084FA, + GL_MAX_TEXTURE_LOD_BIAS = 0x000084FD, + GL_MAX_TEXTURE_LOD_BIAS_EXT = 0x000084FD, + GL_TEXTURE_MAX_ANISOTROPY_EXT = 0x000084FE, + GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x000084FF, + GL_TEXTURE_FILTER_CONTROL = 0x00008500, + GL_TEXTURE_FILTER_CONTROL_EXT = 0x00008500, + GL_TEXTURE_LOD_BIAS = 0x00008501, + GL_TEXTURE_LOD_BIAS_EXT = 0x00008501, + GL_MODELVIEW1_STACK_DEPTH_EXT = 0x00008502, + GL_COMBINE4_NV = 0x00008503, + GL_MAX_SHININESS_NV = 0x00008504, + GL_MAX_SPOT_EXPONENT_NV = 0x00008505, + GL_MODELVIEW1_MATRIX_EXT = 0x00008506, + GL_INCR_WRAP = 0x00008507, + GL_INCR_WRAP_EXT = 0x00008507, + GL_INCR_WRAP_OES = 0x00008507, + GL_DECR_WRAP = 0x00008508, + GL_DECR_WRAP_EXT = 0x00008508, + GL_DECR_WRAP_OES = 0x00008508, + GL_VERTEX_WEIGHTING_EXT = 0x00008509, + GL_MODELVIEW1_ARB = 0x0000850A, + GL_MODELVIEW1_EXT = 0x0000850A, + GL_CURRENT_VERTEX_WEIGHT_EXT = 0x0000850B, + GL_VERTEX_WEIGHT_ARRAY_EXT = 0x0000850C, + GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT = 0x0000850D, + GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT = 0x0000850E, + GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT = 0x0000850F, + GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT = 0x00008510, + GL_NORMAL_MAP = 0x00008511, + GL_NORMAL_MAP_ARB = 0x00008511, + GL_NORMAL_MAP_EXT = 0x00008511, + GL_NORMAL_MAP_NV = 0x00008511, + GL_NORMAL_MAP_OES = 0x00008511, + GL_REFLECTION_MAP = 0x00008512, + GL_REFLECTION_MAP_ARB = 0x00008512, + GL_REFLECTION_MAP_EXT = 0x00008512, + GL_REFLECTION_MAP_NV = 0x00008512, + GL_REFLECTION_MAP_OES = 0x00008512, + GL_TEXTURE_CUBE_MAP = 0x00008513, + GL_TEXTURE_CUBE_MAP_ARB = 0x00008513, + GL_TEXTURE_CUBE_MAP_EXT = 0x00008513, + GL_TEXTURE_CUBE_MAP_OES = 0x00008513, + GL_TEXTURE_BINDING_CUBE_MAP = 0x00008514, + GL_TEXTURE_BINDING_CUBE_MAP_ARB = 0x00008514, + GL_TEXTURE_BINDING_CUBE_MAP_EXT = 0x00008514, + GL_TEXTURE_BINDING_CUBE_MAP_OES = 0x00008514, + GL_TEXTURE_CUBE_MAP_POSITIVE_X = 0x00008515, + GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB = 0x00008515, + GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT = 0x00008515, + GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES = 0x00008515, + GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 0x00008516, + GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB = 0x00008516, + GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT = 0x00008516, + GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES = 0x00008516, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 0x00008517, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB = 0x00008517, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT = 0x00008517, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES = 0x00008517, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x00008518, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB = 0x00008518, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT = 0x00008518, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES = 0x00008518, + GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 0x00008519, + GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB = 0x00008519, + GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT = 0x00008519, + GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES = 0x00008519, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x0000851A, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB = 0x0000851A, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT = 0x0000851A, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES = 0x0000851A, + GL_PROXY_TEXTURE_CUBE_MAP = 0x0000851B, + GL_PROXY_TEXTURE_CUBE_MAP_ARB = 0x0000851B, + GL_PROXY_TEXTURE_CUBE_MAP_EXT = 0x0000851B, + GL_MAX_CUBE_MAP_TEXTURE_SIZE = 0x0000851C, + GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB = 0x0000851C, + GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT = 0x0000851C, + GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES = 0x0000851C, + GL_VERTEX_ARRAY_RANGE_APPLE = 0x0000851D, + GL_VERTEX_ARRAY_RANGE_NV = 0x0000851D, + GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE = 0x0000851E, + GL_VERTEX_ARRAY_RANGE_LENGTH_NV = 0x0000851E, + GL_VERTEX_ARRAY_RANGE_VALID_NV = 0x0000851F, + GL_VERTEX_ARRAY_STORAGE_HINT_APPLE = 0x0000851F, + GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV = 0x00008520, + GL_VERTEX_ARRAY_RANGE_POINTER_APPLE = 0x00008521, + GL_VERTEX_ARRAY_RANGE_POINTER_NV = 0x00008521, + GL_REGISTER_COMBINERS_NV = 0x00008522, + GL_VARIABLE_A_NV = 0x00008523, + GL_VARIABLE_B_NV = 0x00008524, + GL_VARIABLE_C_NV = 0x00008525, + GL_VARIABLE_D_NV = 0x00008526, + GL_VARIABLE_E_NV = 0x00008527, + GL_VARIABLE_F_NV = 0x00008528, + GL_VARIABLE_G_NV = 0x00008529, + GL_CONSTANT_COLOR0_NV = 0x0000852A, + GL_CONSTANT_COLOR1_NV = 0x0000852B, + GL_PRIMARY_COLOR_NV = 0x0000852C, + GL_SECONDARY_COLOR_NV = 0x0000852D, + GL_SPARE0_NV = 0x0000852E, + GL_SPARE1_NV = 0x0000852F, + GL_DISCARD_NV = 0x00008530, + GL_E_TIMES_F_NV = 0x00008531, + GL_SPARE0_PLUS_SECONDARY_COLOR_NV = 0x00008532, + GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV = 0x00008533, + GL_MULTISAMPLE_FILTER_HINT_NV = 0x00008534, + GL_PER_STAGE_CONSTANTS_NV = 0x00008535, + GL_UNSIGNED_IDENTITY_NV = 0x00008536, + GL_UNSIGNED_INVERT_NV = 0x00008537, + GL_EXPAND_NORMAL_NV = 0x00008538, + GL_EXPAND_NEGATE_NV = 0x00008539, + GL_HALF_BIAS_NORMAL_NV = 0x0000853A, + GL_HALF_BIAS_NEGATE_NV = 0x0000853B, + GL_SIGNED_IDENTITY_NV = 0x0000853C, + GL_SIGNED_NEGATE_NV = 0x0000853D, + GL_SCALE_BY_TWO_NV = 0x0000853E, + GL_SCALE_BY_FOUR_NV = 0x0000853F, + GL_SCALE_BY_ONE_HALF_NV = 0x00008540, + GL_BIAS_BY_NEGATIVE_ONE_HALF_NV = 0x00008541, + GL_COMBINER_INPUT_NV = 0x00008542, + GL_COMBINER_MAPPING_NV = 0x00008543, + GL_COMBINER_COMPONENT_USAGE_NV = 0x00008544, + GL_COMBINER_AB_DOT_PRODUCT_NV = 0x00008545, + GL_COMBINER_CD_DOT_PRODUCT_NV = 0x00008546, + GL_COMBINER_MUX_SUM_NV = 0x00008547, + GL_COMBINER_SCALE_NV = 0x00008548, + GL_COMBINER_BIAS_NV = 0x00008549, + GL_COMBINER_AB_OUTPUT_NV = 0x0000854A, + GL_COMBINER_CD_OUTPUT_NV = 0x0000854B, + GL_COMBINER_SUM_OUTPUT_NV = 0x0000854C, + GL_MAX_GENERAL_COMBINERS_NV = 0x0000854D, + GL_NUM_GENERAL_COMBINERS_NV = 0x0000854E, + GL_COLOR_SUM_CLAMP_NV = 0x0000854F, + GL_COMBINER0_NV = 0x00008550, + GL_COMBINER1_NV = 0x00008551, + GL_COMBINER2_NV = 0x00008552, + GL_COMBINER3_NV = 0x00008553, + GL_COMBINER4_NV = 0x00008554, + GL_COMBINER5_NV = 0x00008555, + GL_COMBINER6_NV = 0x00008556, + GL_COMBINER7_NV = 0x00008557, + GL_PRIMITIVE_RESTART_NV = 0x00008558, + GL_PRIMITIVE_RESTART_INDEX_NV = 0x00008559, + GL_FOG_DISTANCE_MODE_NV = 0x0000855A, + GL_EYE_RADIAL_NV = 0x0000855B, + GL_EYE_PLANE_ABSOLUTE_NV = 0x0000855C, + GL_EMBOSS_LIGHT_NV = 0x0000855D, + GL_EMBOSS_CONSTANT_NV = 0x0000855E, + GL_EMBOSS_MAP_NV = 0x0000855F, + GL_RED_MIN_CLAMP_INGR = 0x00008560, + GL_GREEN_MIN_CLAMP_INGR = 0x00008561, + GL_BLUE_MIN_CLAMP_INGR = 0x00008562, + GL_ALPHA_MIN_CLAMP_INGR = 0x00008563, + GL_RED_MAX_CLAMP_INGR = 0x00008564, + GL_GREEN_MAX_CLAMP_INGR = 0x00008565, + GL_BLUE_MAX_CLAMP_INGR = 0x00008566, + GL_ALPHA_MAX_CLAMP_INGR = 0x00008567, + GL_INTERLACE_READ_INGR = 0x00008568, + GL_COMBINE = 0x00008570, + GL_COMBINE_ARB = 0x00008570, + GL_COMBINE_EXT = 0x00008570, + GL_COMBINE_RGB = 0x00008571, + GL_COMBINE_RGB_ARB = 0x00008571, + GL_COMBINE_RGB_EXT = 0x00008571, + GL_COMBINE_ALPHA = 0x00008572, + GL_COMBINE_ALPHA_ARB = 0x00008572, + GL_COMBINE_ALPHA_EXT = 0x00008572, + GL_RGB_SCALE = 0x00008573, + GL_RGB_SCALE_ARB = 0x00008573, + GL_RGB_SCALE_EXT = 0x00008573, + GL_ADD_SIGNED = 0x00008574, + GL_ADD_SIGNED_ARB = 0x00008574, + GL_ADD_SIGNED_EXT = 0x00008574, + GL_INTERPOLATE = 0x00008575, + GL_INTERPOLATE_ARB = 0x00008575, + GL_INTERPOLATE_EXT = 0x00008575, + GL_CONSTANT = 0x00008576, + GL_CONSTANT_ARB = 0x00008576, + GL_CONSTANT_EXT = 0x00008576, + GL_CONSTANT_NV = 0x00008576, + GL_PRIMARY_COLOR = 0x00008577, + GL_PRIMARY_COLOR_ARB = 0x00008577, + GL_PRIMARY_COLOR_EXT = 0x00008577, + GL_PREVIOUS = 0x00008578, + GL_PREVIOUS_ARB = 0x00008578, + GL_PREVIOUS_EXT = 0x00008578, + GL_SOURCE0_RGB = 0x00008580, + GL_SOURCE0_RGB_ARB = 0x00008580, + GL_SOURCE0_RGB_EXT = 0x00008580, + GL_SRC0_RGB = 0x00008580, + GL_SOURCE1_RGB = 0x00008581, + GL_SOURCE1_RGB_ARB = 0x00008581, + GL_SOURCE1_RGB_EXT = 0x00008581, + GL_SRC1_RGB = 0x00008581, + GL_SOURCE2_RGB = 0x00008582, + GL_SOURCE2_RGB_ARB = 0x00008582, + GL_SOURCE2_RGB_EXT = 0x00008582, + GL_SRC2_RGB = 0x00008582, + GL_SOURCE3_RGB_NV = 0x00008583, + GL_SOURCE0_ALPHA = 0x00008588, + GL_SOURCE0_ALPHA_ARB = 0x00008588, + GL_SOURCE0_ALPHA_EXT = 0x00008588, + GL_SRC0_ALPHA = 0x00008588, + GL_SOURCE1_ALPHA = 0x00008589, + GL_SOURCE1_ALPHA_ARB = 0x00008589, + GL_SOURCE1_ALPHA_EXT = 0x00008589, + GL_SRC1_ALPHA = 0x00008589, + GL_SOURCE2_ALPHA = 0x0000858A, + GL_SOURCE2_ALPHA_ARB = 0x0000858A, + GL_SOURCE2_ALPHA_EXT = 0x0000858A, + GL_SRC2_ALPHA = 0x0000858A, + GL_SOURCE3_ALPHA_NV = 0x0000858B, + GL_OPERAND0_RGB = 0x00008590, + GL_OPERAND0_RGB_ARB = 0x00008590, + GL_OPERAND0_RGB_EXT = 0x00008590, + GL_OPERAND1_RGB = 0x00008591, + GL_OPERAND1_RGB_ARB = 0x00008591, + GL_OPERAND1_RGB_EXT = 0x00008591, + GL_OPERAND2_RGB = 0x00008592, + GL_OPERAND2_RGB_ARB = 0x00008592, + GL_OPERAND2_RGB_EXT = 0x00008592, + GL_OPERAND3_RGB_NV = 0x00008593, + GL_OPERAND0_ALPHA = 0x00008598, + GL_OPERAND0_ALPHA_ARB = 0x00008598, + GL_OPERAND0_ALPHA_EXT = 0x00008598, + GL_OPERAND1_ALPHA = 0x00008599, + GL_OPERAND1_ALPHA_ARB = 0x00008599, + GL_OPERAND1_ALPHA_EXT = 0x00008599, + GL_OPERAND2_ALPHA = 0x0000859A, + GL_OPERAND2_ALPHA_ARB = 0x0000859A, + GL_OPERAND2_ALPHA_EXT = 0x0000859A, + GL_OPERAND3_ALPHA_NV = 0x0000859B, + GL_PACK_SUBSAMPLE_RATE_SGIX = 0x000085A0, + GL_UNPACK_SUBSAMPLE_RATE_SGIX = 0x000085A1, + GL_PIXEL_SUBSAMPLE_4444_SGIX = 0x000085A2, + GL_PIXEL_SUBSAMPLE_2424_SGIX = 0x000085A3, + GL_PIXEL_SUBSAMPLE_4242_SGIX = 0x000085A4, + GL_PERTURB_EXT = 0x000085AE, + GL_TEXTURE_NORMAL_EXT = 0x000085AF, + GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE = 0x000085B0, + GL_TRANSFORM_HINT_APPLE = 0x000085B1, + GL_UNPACK_CLIENT_STORAGE_APPLE = 0x000085B2, + GL_BUFFER_OBJECT_APPLE = 0x000085B3, + GL_STORAGE_CLIENT_APPLE = 0x000085B4, + GL_VERTEX_ARRAY_BINDING = 0x000085B5, + GL_VERTEX_ARRAY_BINDING_APPLE = 0x000085B5, + GL_VERTEX_ARRAY_BINDING_OES = 0x000085B5, + GL_TEXTURE_RANGE_LENGTH_APPLE = 0x000085B7, + GL_TEXTURE_RANGE_POINTER_APPLE = 0x000085B8, + GL_YCBCR_422_APPLE = 0x000085B9, + GL_UNSIGNED_SHORT_8_8_APPLE = 0x000085BA, + GL_UNSIGNED_SHORT_8_8_MESA = 0x000085BA, + GL_UNSIGNED_SHORT_8_8_REV_APPLE = 0x000085BB, + GL_UNSIGNED_SHORT_8_8_REV_MESA = 0x000085BB, + GL_TEXTURE_STORAGE_HINT_APPLE = 0x000085BC, + GL_STORAGE_PRIVATE_APPLE = 0x000085BD, + GL_STORAGE_CACHED_APPLE = 0x000085BE, + GL_STORAGE_SHARED_APPLE = 0x000085BF, + GL_REPLACEMENT_CODE_ARRAY_SUN = 0x000085C0, + GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN = 0x000085C1, + GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN = 0x000085C2, + GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN = 0x000085C3, + GL_R1UI_V3F_SUN = 0x000085C4, + GL_R1UI_C4UB_V3F_SUN = 0x000085C5, + GL_R1UI_C3F_V3F_SUN = 0x000085C6, + GL_R1UI_N3F_V3F_SUN = 0x000085C7, + GL_R1UI_C4F_N3F_V3F_SUN = 0x000085C8, + GL_R1UI_T2F_V3F_SUN = 0x000085C9, + GL_R1UI_T2F_N3F_V3F_SUN = 0x000085CA, + GL_R1UI_T2F_C4F_N3F_V3F_SUN = 0x000085CB, + GL_SLICE_ACCUM_SUN = 0x000085CC, + GL_QUAD_MESH_SUN = 0x00008614, + GL_TRIANGLE_MESH_SUN = 0x00008615, + GL_VERTEX_PROGRAM_ARB = 0x00008620, + GL_VERTEX_PROGRAM_NV = 0x00008620, + GL_VERTEX_STATE_PROGRAM_NV = 0x00008621, + GL_VERTEX_ATTRIB_ARRAY_ENABLED = 0x00008622, + GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB = 0x00008622, + GL_ATTRIB_ARRAY_SIZE_NV = 0x00008623, + GL_VERTEX_ATTRIB_ARRAY_SIZE = 0x00008623, + GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB = 0x00008623, + GL_ATTRIB_ARRAY_STRIDE_NV = 0x00008624, + GL_VERTEX_ATTRIB_ARRAY_STRIDE = 0x00008624, + GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB = 0x00008624, + GL_ATTRIB_ARRAY_TYPE_NV = 0x00008625, + GL_VERTEX_ATTRIB_ARRAY_TYPE = 0x00008625, + GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB = 0x00008625, + GL_CURRENT_ATTRIB_NV = 0x00008626, + GL_CURRENT_VERTEX_ATTRIB = 0x00008626, + GL_CURRENT_VERTEX_ATTRIB_ARB = 0x00008626, + GL_PROGRAM_LENGTH_ARB = 0x00008627, + GL_PROGRAM_LENGTH_NV = 0x00008627, + GL_PROGRAM_STRING_ARB = 0x00008628, + GL_PROGRAM_STRING_NV = 0x00008628, + GL_MODELVIEW_PROJECTION_NV = 0x00008629, + GL_IDENTITY_NV = 0x0000862A, + GL_INVERSE_NV = 0x0000862B, + GL_TRANSPOSE_NV = 0x0000862C, + GL_INVERSE_TRANSPOSE_NV = 0x0000862D, + GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB = 0x0000862E, + GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV = 0x0000862E, + GL_MAX_PROGRAM_MATRICES_ARB = 0x0000862F, + GL_MAX_TRACK_MATRICES_NV = 0x0000862F, + GL_MATRIX0_NV = 0x00008630, + GL_MATRIX1_NV = 0x00008631, + GL_MATRIX2_NV = 0x00008632, + GL_MATRIX3_NV = 0x00008633, + GL_MATRIX4_NV = 0x00008634, + GL_MATRIX5_NV = 0x00008635, + GL_MATRIX6_NV = 0x00008636, + GL_MATRIX7_NV = 0x00008637, + GL_CURRENT_MATRIX_STACK_DEPTH_ARB = 0x00008640, + GL_CURRENT_MATRIX_STACK_DEPTH_NV = 0x00008640, + GL_CURRENT_MATRIX_ARB = 0x00008641, + GL_CURRENT_MATRIX_NV = 0x00008641, + GL_VERTEX_PROGRAM_POINT_SIZE = 0x00008642, + GL_VERTEX_PROGRAM_POINT_SIZE_ARB = 0x00008642, + GL_VERTEX_PROGRAM_POINT_SIZE_NV = 0x00008642, + GL_PROGRAM_POINT_SIZE = 0x00008642, + GL_PROGRAM_POINT_SIZE_ARB = 0x00008642, + GL_PROGRAM_POINT_SIZE_EXT = 0x00008642, + GL_VERTEX_PROGRAM_TWO_SIDE = 0x00008643, + GL_VERTEX_PROGRAM_TWO_SIDE_ARB = 0x00008643, + GL_VERTEX_PROGRAM_TWO_SIDE_NV = 0x00008643, + GL_PROGRAM_PARAMETER_NV = 0x00008644, + GL_ATTRIB_ARRAY_POINTER_NV = 0x00008645, + GL_VERTEX_ATTRIB_ARRAY_POINTER = 0x00008645, + GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB = 0x00008645, + GL_PROGRAM_TARGET_NV = 0x00008646, + GL_PROGRAM_RESIDENT_NV = 0x00008647, + GL_TRACK_MATRIX_NV = 0x00008648, + GL_TRACK_MATRIX_TRANSFORM_NV = 0x00008649, + GL_VERTEX_PROGRAM_BINDING_NV = 0x0000864A, + GL_PROGRAM_ERROR_POSITION_ARB = 0x0000864B, + GL_PROGRAM_ERROR_POSITION_NV = 0x0000864B, + GL_OFFSET_TEXTURE_RECTANGLE_NV = 0x0000864C, + GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV = 0x0000864D, + GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV = 0x0000864E, + GL_DEPTH_CLAMP = 0x0000864F, + GL_DEPTH_CLAMP_NV = 0x0000864F, + GL_VERTEX_ATTRIB_ARRAY0_NV = 0x00008650, + GL_VERTEX_ATTRIB_ARRAY1_NV = 0x00008651, + GL_VERTEX_ATTRIB_ARRAY2_NV = 0x00008652, + GL_VERTEX_ATTRIB_ARRAY3_NV = 0x00008653, + GL_VERTEX_ATTRIB_ARRAY4_NV = 0x00008654, + GL_VERTEX_ATTRIB_ARRAY5_NV = 0x00008655, + GL_VERTEX_ATTRIB_ARRAY6_NV = 0x00008656, + GL_VERTEX_ATTRIB_ARRAY7_NV = 0x00008657, + GL_VERTEX_ATTRIB_ARRAY8_NV = 0x00008658, + GL_VERTEX_ATTRIB_ARRAY9_NV = 0x00008659, + GL_VERTEX_ATTRIB_ARRAY10_NV = 0x0000865A, + GL_VERTEX_ATTRIB_ARRAY11_NV = 0x0000865B, + GL_VERTEX_ATTRIB_ARRAY12_NV = 0x0000865C, + GL_VERTEX_ATTRIB_ARRAY13_NV = 0x0000865D, + GL_VERTEX_ATTRIB_ARRAY14_NV = 0x0000865E, + GL_VERTEX_ATTRIB_ARRAY15_NV = 0x0000865F, + GL_MAP1_VERTEX_ATTRIB0_4_NV = 0x00008660, + GL_MAP1_VERTEX_ATTRIB1_4_NV = 0x00008661, + GL_MAP1_VERTEX_ATTRIB2_4_NV = 0x00008662, + GL_MAP1_VERTEX_ATTRIB3_4_NV = 0x00008663, + GL_MAP1_VERTEX_ATTRIB4_4_NV = 0x00008664, + GL_MAP1_VERTEX_ATTRIB5_4_NV = 0x00008665, + GL_MAP1_VERTEX_ATTRIB6_4_NV = 0x00008666, + GL_MAP1_VERTEX_ATTRIB7_4_NV = 0x00008667, + GL_MAP1_VERTEX_ATTRIB8_4_NV = 0x00008668, + GL_MAP1_VERTEX_ATTRIB9_4_NV = 0x00008669, + GL_MAP1_VERTEX_ATTRIB10_4_NV = 0x0000866A, + GL_MAP1_VERTEX_ATTRIB11_4_NV = 0x0000866B, + GL_MAP1_VERTEX_ATTRIB12_4_NV = 0x0000866C, + GL_MAP1_VERTEX_ATTRIB13_4_NV = 0x0000866D, + GL_MAP1_VERTEX_ATTRIB14_4_NV = 0x0000866E, + GL_MAP1_VERTEX_ATTRIB15_4_NV = 0x0000866F, + GL_MAP2_VERTEX_ATTRIB0_4_NV = 0x00008670, + GL_MAP2_VERTEX_ATTRIB1_4_NV = 0x00008671, + GL_MAP2_VERTEX_ATTRIB2_4_NV = 0x00008672, + GL_MAP2_VERTEX_ATTRIB3_4_NV = 0x00008673, + GL_MAP2_VERTEX_ATTRIB4_4_NV = 0x00008674, + GL_MAP2_VERTEX_ATTRIB5_4_NV = 0x00008675, + GL_MAP2_VERTEX_ATTRIB6_4_NV = 0x00008676, + GL_MAP2_VERTEX_ATTRIB7_4_NV = 0x00008677, + GL_PROGRAM_BINDING_ARB = 0x00008677, + GL_MAP2_VERTEX_ATTRIB8_4_NV = 0x00008678, + GL_MAP2_VERTEX_ATTRIB9_4_NV = 0x00008679, + GL_MAP2_VERTEX_ATTRIB10_4_NV = 0x0000867A, + GL_MAP2_VERTEX_ATTRIB11_4_NV = 0x0000867B, + GL_MAP2_VERTEX_ATTRIB12_4_NV = 0x0000867C, + GL_MAP2_VERTEX_ATTRIB13_4_NV = 0x0000867D, + GL_MAP2_VERTEX_ATTRIB14_4_NV = 0x0000867E, + GL_MAP2_VERTEX_ATTRIB15_4_NV = 0x0000867F, + GL_TEXTURE_COMPRESSED_IMAGE_SIZE = 0x000086A0, + GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB = 0x000086A0, + GL_TEXTURE_COMPRESSED = 0x000086A1, + GL_TEXTURE_COMPRESSED_ARB = 0x000086A1, + GL_NUM_COMPRESSED_TEXTURE_FORMATS = 0x000086A2, + GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB = 0x000086A2, + GL_COMPRESSED_TEXTURE_FORMATS = 0x000086A3, + GL_COMPRESSED_TEXTURE_FORMATS_ARB = 0x000086A3, + GL_MAX_VERTEX_UNITS_ARB = 0x000086A4, + GL_MAX_VERTEX_UNITS_OES = 0x000086A4, + GL_ACTIVE_VERTEX_UNITS_ARB = 0x000086A5, + GL_WEIGHT_SUM_UNITY_ARB = 0x000086A6, + GL_VERTEX_BLEND_ARB = 0x000086A7, + GL_CURRENT_WEIGHT_ARB = 0x000086A8, + GL_WEIGHT_ARRAY_TYPE_ARB = 0x000086A9, + GL_WEIGHT_ARRAY_TYPE_OES = 0x000086A9, + GL_WEIGHT_ARRAY_STRIDE_ARB = 0x000086AA, + GL_WEIGHT_ARRAY_STRIDE_OES = 0x000086AA, + GL_WEIGHT_ARRAY_SIZE_ARB = 0x000086AB, + GL_WEIGHT_ARRAY_SIZE_OES = 0x000086AB, + GL_WEIGHT_ARRAY_POINTER_ARB = 0x000086AC, + GL_WEIGHT_ARRAY_POINTER_OES = 0x000086AC, + GL_WEIGHT_ARRAY_ARB = 0x000086AD, + GL_WEIGHT_ARRAY_OES = 0x000086AD, + GL_DOT3_RGB = 0x000086AE, + GL_DOT3_RGB_ARB = 0x000086AE, + GL_DOT3_RGBA = 0x000086AF, + GL_DOT3_RGBA_ARB = 0x000086AF, + GL_DOT3_RGBA_IMG = 0x000086AF, + GL_COMPRESSED_RGB_FXT1_3DFX = 0x000086B0, + GL_COMPRESSED_RGBA_FXT1_3DFX = 0x000086B1, + GL_MULTISAMPLE_3DFX = 0x000086B2, + GL_SAMPLE_BUFFERS_3DFX = 0x000086B3, + GL_SAMPLES_3DFX = 0x000086B4, + GL_EVAL_2D_NV = 0x000086C0, + GL_EVAL_TRIANGULAR_2D_NV = 0x000086C1, + GL_MAP_TESSELLATION_NV = 0x000086C2, + GL_MAP_ATTRIB_U_ORDER_NV = 0x000086C3, + GL_MAP_ATTRIB_V_ORDER_NV = 0x000086C4, + GL_EVAL_FRACTIONAL_TESSELLATION_NV = 0x000086C5, + GL_EVAL_VERTEX_ATTRIB0_NV = 0x000086C6, + GL_EVAL_VERTEX_ATTRIB1_NV = 0x000086C7, + GL_EVAL_VERTEX_ATTRIB2_NV = 0x000086C8, + GL_EVAL_VERTEX_ATTRIB3_NV = 0x000086C9, + GL_EVAL_VERTEX_ATTRIB4_NV = 0x000086CA, + GL_EVAL_VERTEX_ATTRIB5_NV = 0x000086CB, + GL_EVAL_VERTEX_ATTRIB6_NV = 0x000086CC, + GL_EVAL_VERTEX_ATTRIB7_NV = 0x000086CD, + GL_EVAL_VERTEX_ATTRIB8_NV = 0x000086CE, + GL_EVAL_VERTEX_ATTRIB9_NV = 0x000086CF, + GL_EVAL_VERTEX_ATTRIB10_NV = 0x000086D0, + GL_EVAL_VERTEX_ATTRIB11_NV = 0x000086D1, + GL_EVAL_VERTEX_ATTRIB12_NV = 0x000086D2, + GL_EVAL_VERTEX_ATTRIB13_NV = 0x000086D3, + GL_EVAL_VERTEX_ATTRIB14_NV = 0x000086D4, + GL_EVAL_VERTEX_ATTRIB15_NV = 0x000086D5, + GL_MAX_MAP_TESSELLATION_NV = 0x000086D6, + GL_MAX_RATIONAL_EVAL_ORDER_NV = 0x000086D7, + GL_MAX_PROGRAM_PATCH_ATTRIBS_NV = 0x000086D8, + GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV = 0x000086D9, + GL_UNSIGNED_INT_S8_S8_8_8_NV = 0x000086DA, + GL_UNSIGNED_INT_8_8_S8_S8_REV_NV = 0x000086DB, + GL_DSDT_MAG_INTENSITY_NV = 0x000086DC, + GL_SHADER_CONSISTENT_NV = 0x000086DD, + GL_TEXTURE_SHADER_NV = 0x000086DE, + GL_SHADER_OPERATION_NV = 0x000086DF, + GL_CULL_MODES_NV = 0x000086E0, + GL_OFFSET_TEXTURE_MATRIX_NV = 0x000086E1, + GL_OFFSET_TEXTURE_2D_MATRIX_NV = 0x000086E1, + GL_OFFSET_TEXTURE_SCALE_NV = 0x000086E2, + GL_OFFSET_TEXTURE_2D_SCALE_NV = 0x000086E2, + GL_OFFSET_TEXTURE_BIAS_NV = 0x000086E3, + GL_OFFSET_TEXTURE_2D_BIAS_NV = 0x000086E3, + GL_PREVIOUS_TEXTURE_INPUT_NV = 0x000086E4, + GL_CONST_EYE_NV = 0x000086E5, + GL_PASS_THROUGH_NV = 0x000086E6, + GL_CULL_FRAGMENT_NV = 0x000086E7, + GL_OFFSET_TEXTURE_2D_NV = 0x000086E8, + GL_DEPENDENT_AR_TEXTURE_2D_NV = 0x000086E9, + GL_DEPENDENT_GB_TEXTURE_2D_NV = 0x000086EA, + GL_SURFACE_STATE_NV = 0x000086EB, + GL_DOT_PRODUCT_NV = 0x000086EC, + GL_DOT_PRODUCT_DEPTH_REPLACE_NV = 0x000086ED, + GL_DOT_PRODUCT_TEXTURE_2D_NV = 0x000086EE, + GL_DOT_PRODUCT_TEXTURE_3D_NV = 0x000086EF, + GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV = 0x000086F0, + GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV = 0x000086F1, + GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV = 0x000086F2, + GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV = 0x000086F3, + GL_HILO_NV = 0x000086F4, + GL_DSDT_NV = 0x000086F5, + GL_DSDT_MAG_NV = 0x000086F6, + GL_DSDT_MAG_VIB_NV = 0x000086F7, + GL_HILO16_NV = 0x000086F8, + GL_SIGNED_HILO_NV = 0x000086F9, + GL_SIGNED_HILO16_NV = 0x000086FA, + GL_SIGNED_RGBA_NV = 0x000086FB, + GL_SIGNED_RGBA8_NV = 0x000086FC, + GL_SURFACE_REGISTERED_NV = 0x000086FD, + GL_SIGNED_RGB_NV = 0x000086FE, + GL_SIGNED_RGB8_NV = 0x000086FF, + GL_SURFACE_MAPPED_NV = 0x00008700, + GL_SIGNED_LUMINANCE_NV = 0x00008701, + GL_SIGNED_LUMINANCE8_NV = 0x00008702, + GL_SIGNED_LUMINANCE_ALPHA_NV = 0x00008703, + GL_SIGNED_LUMINANCE8_ALPHA8_NV = 0x00008704, + GL_SIGNED_ALPHA_NV = 0x00008705, + GL_SIGNED_ALPHA8_NV = 0x00008706, + GL_SIGNED_INTENSITY_NV = 0x00008707, + GL_SIGNED_INTENSITY8_NV = 0x00008708, + GL_DSDT8_NV = 0x00008709, + GL_DSDT8_MAG8_NV = 0x0000870A, + GL_DSDT8_MAG8_INTENSITY8_NV = 0x0000870B, + GL_SIGNED_RGB_UNSIGNED_ALPHA_NV = 0x0000870C, + GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV = 0x0000870D, + GL_HI_SCALE_NV = 0x0000870E, + GL_LO_SCALE_NV = 0x0000870F, + GL_DS_SCALE_NV = 0x00008710, + GL_DT_SCALE_NV = 0x00008711, + GL_MAGNITUDE_SCALE_NV = 0x00008712, + GL_VIBRANCE_SCALE_NV = 0x00008713, + GL_HI_BIAS_NV = 0x00008714, + GL_LO_BIAS_NV = 0x00008715, + GL_DS_BIAS_NV = 0x00008716, + GL_DT_BIAS_NV = 0x00008717, + GL_MAGNITUDE_BIAS_NV = 0x00008718, + GL_VIBRANCE_BIAS_NV = 0x00008719, + GL_TEXTURE_BORDER_VALUES_NV = 0x0000871A, + GL_TEXTURE_HI_SIZE_NV = 0x0000871B, + GL_TEXTURE_LO_SIZE_NV = 0x0000871C, + GL_TEXTURE_DS_SIZE_NV = 0x0000871D, + GL_TEXTURE_DT_SIZE_NV = 0x0000871E, + GL_TEXTURE_MAG_SIZE_NV = 0x0000871F, + GL_MODELVIEW2_ARB = 0x00008722, + GL_MODELVIEW3_ARB = 0x00008723, + GL_MODELVIEW4_ARB = 0x00008724, + GL_MODELVIEW5_ARB = 0x00008725, + GL_MODELVIEW6_ARB = 0x00008726, + GL_MODELVIEW7_ARB = 0x00008727, + GL_MODELVIEW8_ARB = 0x00008728, + GL_MODELVIEW9_ARB = 0x00008729, + GL_MODELVIEW10_ARB = 0x0000872A, + GL_MODELVIEW11_ARB = 0x0000872B, + GL_MODELVIEW12_ARB = 0x0000872C, + GL_MODELVIEW13_ARB = 0x0000872D, + GL_MODELVIEW14_ARB = 0x0000872E, + GL_MODELVIEW15_ARB = 0x0000872F, + GL_MODELVIEW16_ARB = 0x00008730, + GL_MODELVIEW17_ARB = 0x00008731, + GL_MODELVIEW18_ARB = 0x00008732, + GL_MODELVIEW19_ARB = 0x00008733, + GL_MODELVIEW20_ARB = 0x00008734, + GL_MODELVIEW21_ARB = 0x00008735, + GL_MODELVIEW22_ARB = 0x00008736, + GL_MODELVIEW23_ARB = 0x00008737, + GL_MODELVIEW24_ARB = 0x00008738, + GL_MODELVIEW25_ARB = 0x00008739, + GL_MODELVIEW26_ARB = 0x0000873A, + GL_MODELVIEW27_ARB = 0x0000873B, + GL_MODELVIEW28_ARB = 0x0000873C, + GL_MODELVIEW29_ARB = 0x0000873D, + GL_MODELVIEW30_ARB = 0x0000873E, + GL_MODELVIEW31_ARB = 0x0000873F, + GL_DOT3_RGB_EXT = 0x00008740, + GL_Z400_BINARY_AMD = 0x00008740, + GL_DOT3_RGBA_EXT = 0x00008741, + GL_PROGRAM_BINARY_LENGTH_OES = 0x00008741, + GL_PROGRAM_BINARY_LENGTH = 0x00008741, + GL_MIRROR_CLAMP_ATI = 0x00008742, + GL_MIRROR_CLAMP_EXT = 0x00008742, + GL_MIRROR_CLAMP_TO_EDGE = 0x00008743, + GL_MIRROR_CLAMP_TO_EDGE_ATI = 0x00008743, + GL_MIRROR_CLAMP_TO_EDGE_EXT = 0x00008743, + GL_MODULATE_ADD_ATI = 0x00008744, + GL_MODULATE_SIGNED_ADD_ATI = 0x00008745, + GL_MODULATE_SUBTRACT_ATI = 0x00008746, + GL_SET_AMD = 0x0000874A, + GL_REPLACE_VALUE_AMD = 0x0000874B, + GL_STENCIL_OP_VALUE_AMD = 0x0000874C, + GL_STENCIL_BACK_OP_VALUE_AMD = 0x0000874D, + GL_VERTEX_ATTRIB_ARRAY_LONG = 0x0000874E, + GL_OCCLUSION_QUERY_EVENT_MASK_AMD = 0x0000874F, + GL_DEPTH_STENCIL_MESA = 0x00008750, + GL_UNSIGNED_INT_24_8_MESA = 0x00008751, + GL_UNSIGNED_INT_8_24_REV_MESA = 0x00008752, + GL_UNSIGNED_SHORT_15_1_MESA = 0x00008753, + GL_UNSIGNED_SHORT_1_15_REV_MESA = 0x00008754, + GL_TRACE_MASK_MESA = 0x00008755, + GL_TRACE_NAME_MESA = 0x00008756, + GL_YCBCR_MESA = 0x00008757, + GL_PACK_INVERT_MESA = 0x00008758, + GL_DEBUG_OBJECT_MESA = 0x00008759, + GL_TEXTURE_1D_STACK_MESAX = 0x00008759, + GL_DEBUG_PRINT_MESA = 0x0000875A, + GL_TEXTURE_2D_STACK_MESAX = 0x0000875A, + GL_DEBUG_ASSERT_MESA = 0x0000875B, + GL_PROXY_TEXTURE_1D_STACK_MESAX = 0x0000875B, + GL_PROXY_TEXTURE_2D_STACK_MESAX = 0x0000875C, + GL_TEXTURE_1D_STACK_BINDING_MESAX = 0x0000875D, + GL_TEXTURE_2D_STACK_BINDING_MESAX = 0x0000875E, + GL_STATIC_ATI = 0x00008760, + GL_DYNAMIC_ATI = 0x00008761, + GL_PRESERVE_ATI = 0x00008762, + GL_DISCARD_ATI = 0x00008763, + GL_BUFFER_SIZE = 0x00008764, + GL_BUFFER_SIZE_ARB = 0x00008764, + GL_OBJECT_BUFFER_SIZE_ATI = 0x00008764, + GL_BUFFER_USAGE = 0x00008765, + GL_BUFFER_USAGE_ARB = 0x00008765, + GL_OBJECT_BUFFER_USAGE_ATI = 0x00008765, + GL_ARRAY_OBJECT_BUFFER_ATI = 0x00008766, + GL_ARRAY_OBJECT_OFFSET_ATI = 0x00008767, + GL_ELEMENT_ARRAY_ATI = 0x00008768, + GL_ELEMENT_ARRAY_TYPE_ATI = 0x00008769, + GL_ELEMENT_ARRAY_POINTER_ATI = 0x0000876A, + GL_MAX_VERTEX_STREAMS_ATI = 0x0000876B, + GL_VERTEX_STREAM0_ATI = 0x0000876C, + GL_VERTEX_STREAM1_ATI = 0x0000876D, + GL_VERTEX_STREAM2_ATI = 0x0000876E, + GL_VERTEX_STREAM3_ATI = 0x0000876F, + GL_VERTEX_STREAM4_ATI = 0x00008770, + GL_VERTEX_STREAM5_ATI = 0x00008771, + GL_VERTEX_STREAM6_ATI = 0x00008772, + GL_VERTEX_STREAM7_ATI = 0x00008773, + GL_VERTEX_SOURCE_ATI = 0x00008774, + GL_BUMP_ROT_MATRIX_ATI = 0x00008775, + GL_BUMP_ROT_MATRIX_SIZE_ATI = 0x00008776, + GL_BUMP_NUM_TEX_UNITS_ATI = 0x00008777, + GL_BUMP_TEX_UNITS_ATI = 0x00008778, + GL_DUDV_ATI = 0x00008779, + GL_DU8DV8_ATI = 0x0000877A, + GL_BUMP_ENVMAP_ATI = 0x0000877B, + GL_BUMP_TARGET_ATI = 0x0000877C, + GL_VERTEX_SHADER_EXT = 0x00008780, + GL_VERTEX_SHADER_BINDING_EXT = 0x00008781, + GL_OP_INDEX_EXT = 0x00008782, + GL_OP_NEGATE_EXT = 0x00008783, + GL_OP_DOT3_EXT = 0x00008784, + GL_OP_DOT4_EXT = 0x00008785, + GL_OP_MUL_EXT = 0x00008786, + GL_OP_ADD_EXT = 0x00008787, + GL_OP_MADD_EXT = 0x00008788, + GL_OP_FRAC_EXT = 0x00008789, + GL_OP_MAX_EXT = 0x0000878A, + GL_OP_MIN_EXT = 0x0000878B, + GL_OP_SET_GE_EXT = 0x0000878C, + GL_OP_SET_LT_EXT = 0x0000878D, + GL_OP_CLAMP_EXT = 0x0000878E, + GL_OP_FLOOR_EXT = 0x0000878F, + GL_OP_ROUND_EXT = 0x00008790, + GL_OP_EXP_BASE_2_EXT = 0x00008791, + GL_OP_LOG_BASE_2_EXT = 0x00008792, + GL_OP_POWER_EXT = 0x00008793, + GL_OP_RECIP_EXT = 0x00008794, + GL_OP_RECIP_SQRT_EXT = 0x00008795, + GL_OP_SUB_EXT = 0x00008796, + GL_OP_CROSS_PRODUCT_EXT = 0x00008797, + GL_OP_MULTIPLY_MATRIX_EXT = 0x00008798, + GL_OP_MOV_EXT = 0x00008799, + GL_OUTPUT_VERTEX_EXT = 0x0000879A, + GL_OUTPUT_COLOR0_EXT = 0x0000879B, + GL_OUTPUT_COLOR1_EXT = 0x0000879C, + GL_OUTPUT_TEXTURE_COORD0_EXT = 0x0000879D, + GL_OUTPUT_TEXTURE_COORD1_EXT = 0x0000879E, + GL_OUTPUT_TEXTURE_COORD2_EXT = 0x0000879F, + GL_OUTPUT_TEXTURE_COORD3_EXT = 0x000087A0, + GL_OUTPUT_TEXTURE_COORD4_EXT = 0x000087A1, + GL_OUTPUT_TEXTURE_COORD5_EXT = 0x000087A2, + GL_OUTPUT_TEXTURE_COORD6_EXT = 0x000087A3, + GL_OUTPUT_TEXTURE_COORD7_EXT = 0x000087A4, + GL_OUTPUT_TEXTURE_COORD8_EXT = 0x000087A5, + GL_OUTPUT_TEXTURE_COORD9_EXT = 0x000087A6, + GL_OUTPUT_TEXTURE_COORD10_EXT = 0x000087A7, + GL_OUTPUT_TEXTURE_COORD11_EXT = 0x000087A8, + GL_OUTPUT_TEXTURE_COORD12_EXT = 0x000087A9, + GL_OUTPUT_TEXTURE_COORD13_EXT = 0x000087AA, + GL_OUTPUT_TEXTURE_COORD14_EXT = 0x000087AB, + GL_OUTPUT_TEXTURE_COORD15_EXT = 0x000087AC, + GL_OUTPUT_TEXTURE_COORD16_EXT = 0x000087AD, + GL_OUTPUT_TEXTURE_COORD17_EXT = 0x000087AE, + GL_OUTPUT_TEXTURE_COORD18_EXT = 0x000087AF, + GL_OUTPUT_TEXTURE_COORD19_EXT = 0x000087B0, + GL_OUTPUT_TEXTURE_COORD20_EXT = 0x000087B1, + GL_OUTPUT_TEXTURE_COORD21_EXT = 0x000087B2, + GL_OUTPUT_TEXTURE_COORD22_EXT = 0x000087B3, + GL_OUTPUT_TEXTURE_COORD23_EXT = 0x000087B4, + GL_OUTPUT_TEXTURE_COORD24_EXT = 0x000087B5, + GL_OUTPUT_TEXTURE_COORD25_EXT = 0x000087B6, + GL_OUTPUT_TEXTURE_COORD26_EXT = 0x000087B7, + GL_OUTPUT_TEXTURE_COORD27_EXT = 0x000087B8, + GL_OUTPUT_TEXTURE_COORD28_EXT = 0x000087B9, + GL_OUTPUT_TEXTURE_COORD29_EXT = 0x000087BA, + GL_OUTPUT_TEXTURE_COORD30_EXT = 0x000087BB, + GL_OUTPUT_TEXTURE_COORD31_EXT = 0x000087BC, + GL_OUTPUT_FOG_EXT = 0x000087BD, + GL_SCALAR_EXT = 0x000087BE, + GL_VECTOR_EXT = 0x000087BF, + GL_MATRIX_EXT = 0x000087C0, + GL_VARIANT_EXT = 0x000087C1, + GL_INVARIANT_EXT = 0x000087C2, + GL_LOCAL_CONSTANT_EXT = 0x000087C3, + GL_LOCAL_EXT = 0x000087C4, + GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT = 0x000087C5, + GL_MAX_VERTEX_SHADER_VARIANTS_EXT = 0x000087C6, + GL_MAX_VERTEX_SHADER_INVARIANTS_EXT = 0x000087C7, + GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = 0x000087C8, + GL_MAX_VERTEX_SHADER_LOCALS_EXT = 0x000087C9, + GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT = 0x000087CA, + GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT = 0x000087CB, + GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = 0x000087CC, + GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT = 0x000087CD, + GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT = 0x000087CE, + GL_VERTEX_SHADER_INSTRUCTIONS_EXT = 0x000087CF, + GL_VERTEX_SHADER_VARIANTS_EXT = 0x000087D0, + GL_VERTEX_SHADER_INVARIANTS_EXT = 0x000087D1, + GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = 0x000087D2, + GL_VERTEX_SHADER_LOCALS_EXT = 0x000087D3, + GL_VERTEX_SHADER_OPTIMIZED_EXT = 0x000087D4, + GL_X_EXT = 0x000087D5, + GL_Y_EXT = 0x000087D6, + GL_Z_EXT = 0x000087D7, + GL_W_EXT = 0x000087D8, + GL_NEGATIVE_X_EXT = 0x000087D9, + GL_NEGATIVE_Y_EXT = 0x000087DA, + GL_NEGATIVE_Z_EXT = 0x000087DB, + GL_NEGATIVE_W_EXT = 0x000087DC, + GL_ZERO_EXT = 0x000087DD, + GL_ONE_EXT = 0x000087DE, + GL_NEGATIVE_ONE_EXT = 0x000087DF, + GL_NORMALIZED_RANGE_EXT = 0x000087E0, + GL_FULL_RANGE_EXT = 0x000087E1, + GL_CURRENT_VERTEX_EXT = 0x000087E2, + GL_MVP_MATRIX_EXT = 0x000087E3, + GL_VARIANT_VALUE_EXT = 0x000087E4, + GL_VARIANT_DATATYPE_EXT = 0x000087E5, + GL_VARIANT_ARRAY_STRIDE_EXT = 0x000087E6, + GL_VARIANT_ARRAY_TYPE_EXT = 0x000087E7, + GL_VARIANT_ARRAY_EXT = 0x000087E8, + GL_VARIANT_ARRAY_POINTER_EXT = 0x000087E9, + GL_INVARIANT_VALUE_EXT = 0x000087EA, + GL_INVARIANT_DATATYPE_EXT = 0x000087EB, + GL_LOCAL_CONSTANT_VALUE_EXT = 0x000087EC, + GL_LOCAL_CONSTANT_DATATYPE_EXT = 0x000087ED, + GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD = 0x000087EE, + GL_PN_TRIANGLES_ATI = 0x000087F0, + GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI = 0x000087F1, + GL_PN_TRIANGLES_POINT_MODE_ATI = 0x000087F2, + GL_PN_TRIANGLES_NORMAL_MODE_ATI = 0x000087F3, + GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI = 0x000087F4, + GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI = 0x000087F5, + GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI = 0x000087F6, + GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI = 0x000087F7, + GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI = 0x000087F8, + GL_3DC_X_AMD = 0x000087F9, + GL_3DC_XY_AMD = 0x000087FA, + GL_VBO_FREE_MEMORY_ATI = 0x000087FB, + GL_TEXTURE_FREE_MEMORY_ATI = 0x000087FC, + GL_RENDERBUFFER_FREE_MEMORY_ATI = 0x000087FD, + GL_NUM_PROGRAM_BINARY_FORMATS = 0x000087FE, + GL_NUM_PROGRAM_BINARY_FORMATS_OES = 0x000087FE, + GL_PROGRAM_BINARY_FORMATS = 0x000087FF, + GL_PROGRAM_BINARY_FORMATS_OES = 0x000087FF, + GL_STENCIL_BACK_FUNC = 0x00008800, + GL_STENCIL_BACK_FUNC_ATI = 0x00008800, + GL_STENCIL_BACK_FAIL = 0x00008801, + GL_STENCIL_BACK_FAIL_ATI = 0x00008801, + GL_STENCIL_BACK_PASS_DEPTH_FAIL = 0x00008802, + GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI = 0x00008802, + GL_STENCIL_BACK_PASS_DEPTH_PASS = 0x00008803, + GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI = 0x00008803, + GL_FRAGMENT_PROGRAM_ARB = 0x00008804, + GL_PROGRAM_ALU_INSTRUCTIONS_ARB = 0x00008805, + GL_PROGRAM_TEX_INSTRUCTIONS_ARB = 0x00008806, + GL_PROGRAM_TEX_INDIRECTIONS_ARB = 0x00008807, + GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB = 0x00008808, + GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB = 0x00008809, + GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB = 0x0000880A, + GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB = 0x0000880B, + GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB = 0x0000880C, + GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB = 0x0000880D, + GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB = 0x0000880E, + GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB = 0x0000880F, + GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB = 0x00008810, + GL_RGBA32F = 0x00008814, + GL_RGBA32F_ARB = 0x00008814, + GL_RGBA32F_EXT = 0x00008814, + GL_RGBA_FLOAT32_APPLE = 0x00008814, + GL_RGBA_FLOAT32_ATI = 0x00008814, + GL_RGB32F = 0x00008815, + GL_RGB32F_ARB = 0x00008815, + GL_RGB32F_EXT = 0x00008815, + GL_RGB_FLOAT32_APPLE = 0x00008815, + GL_RGB_FLOAT32_ATI = 0x00008815, + GL_ALPHA32F_ARB = 0x00008816, + GL_ALPHA32F_EXT = 0x00008816, + GL_ALPHA_FLOAT32_APPLE = 0x00008816, + GL_ALPHA_FLOAT32_ATI = 0x00008816, + GL_INTENSITY32F_ARB = 0x00008817, + GL_INTENSITY_FLOAT32_APPLE = 0x00008817, + GL_INTENSITY_FLOAT32_ATI = 0x00008817, + GL_LUMINANCE32F_ARB = 0x00008818, + GL_LUMINANCE32F_EXT = 0x00008818, + GL_LUMINANCE_FLOAT32_APPLE = 0x00008818, + GL_LUMINANCE_FLOAT32_ATI = 0x00008818, + GL_LUMINANCE_ALPHA32F_ARB = 0x00008819, + GL_LUMINANCE_ALPHA32F_EXT = 0x00008819, + GL_LUMINANCE_ALPHA_FLOAT32_APPLE = 0x00008819, + GL_LUMINANCE_ALPHA_FLOAT32_ATI = 0x00008819, + GL_RGBA16F = 0x0000881A, + GL_RGBA16F_ARB = 0x0000881A, + GL_RGBA16F_EXT = 0x0000881A, + GL_RGBA_FLOAT16_APPLE = 0x0000881A, + GL_RGBA_FLOAT16_ATI = 0x0000881A, + GL_RGB16F = 0x0000881B, + GL_RGB16F_ARB = 0x0000881B, + GL_RGB16F_EXT = 0x0000881B, + GL_RGB_FLOAT16_APPLE = 0x0000881B, + GL_RGB_FLOAT16_ATI = 0x0000881B, + GL_ALPHA16F_ARB = 0x0000881C, + GL_ALPHA16F_EXT = 0x0000881C, + GL_ALPHA_FLOAT16_APPLE = 0x0000881C, + GL_ALPHA_FLOAT16_ATI = 0x0000881C, + GL_INTENSITY16F_ARB = 0x0000881D, + GL_INTENSITY_FLOAT16_APPLE = 0x0000881D, + GL_INTENSITY_FLOAT16_ATI = 0x0000881D, + GL_LUMINANCE16F_ARB = 0x0000881E, + GL_LUMINANCE16F_EXT = 0x0000881E, + GL_LUMINANCE_FLOAT16_APPLE = 0x0000881E, + GL_LUMINANCE_FLOAT16_ATI = 0x0000881E, + GL_LUMINANCE_ALPHA16F_ARB = 0x0000881F, + GL_LUMINANCE_ALPHA16F_EXT = 0x0000881F, + GL_LUMINANCE_ALPHA_FLOAT16_APPLE = 0x0000881F, + GL_LUMINANCE_ALPHA_FLOAT16_ATI = 0x0000881F, + GL_RGBA_FLOAT_MODE_ARB = 0x00008820, + GL_RGBA_FLOAT_MODE_ATI = 0x00008820, + GL_WRITEONLY_RENDERING_QCOM = 0x00008823, + GL_MAX_DRAW_BUFFERS = 0x00008824, + GL_MAX_DRAW_BUFFERS_ARB = 0x00008824, + GL_MAX_DRAW_BUFFERS_ATI = 0x00008824, + GL_MAX_DRAW_BUFFERS_EXT = 0x00008824, + GL_MAX_DRAW_BUFFERS_NV = 0x00008824, + GL_DRAW_BUFFER0 = 0x00008825, + GL_DRAW_BUFFER0_ARB = 0x00008825, + GL_DRAW_BUFFER0_ATI = 0x00008825, + GL_DRAW_BUFFER0_EXT = 0x00008825, + GL_DRAW_BUFFER0_NV = 0x00008825, + GL_DRAW_BUFFER1 = 0x00008826, + GL_DRAW_BUFFER1_ARB = 0x00008826, + GL_DRAW_BUFFER1_ATI = 0x00008826, + GL_DRAW_BUFFER1_EXT = 0x00008826, + GL_DRAW_BUFFER1_NV = 0x00008826, + GL_DRAW_BUFFER2 = 0x00008827, + GL_DRAW_BUFFER2_ARB = 0x00008827, + GL_DRAW_BUFFER2_ATI = 0x00008827, + GL_DRAW_BUFFER2_EXT = 0x00008827, + GL_DRAW_BUFFER2_NV = 0x00008827, + GL_DRAW_BUFFER3 = 0x00008828, + GL_DRAW_BUFFER3_ARB = 0x00008828, + GL_DRAW_BUFFER3_ATI = 0x00008828, + GL_DRAW_BUFFER3_EXT = 0x00008828, + GL_DRAW_BUFFER3_NV = 0x00008828, + GL_DRAW_BUFFER4 = 0x00008829, + GL_DRAW_BUFFER4_ARB = 0x00008829, + GL_DRAW_BUFFER4_ATI = 0x00008829, + GL_DRAW_BUFFER4_EXT = 0x00008829, + GL_DRAW_BUFFER4_NV = 0x00008829, + GL_DRAW_BUFFER5 = 0x0000882A, + GL_DRAW_BUFFER5_ARB = 0x0000882A, + GL_DRAW_BUFFER5_ATI = 0x0000882A, + GL_DRAW_BUFFER5_EXT = 0x0000882A, + GL_DRAW_BUFFER5_NV = 0x0000882A, + GL_DRAW_BUFFER6 = 0x0000882B, + GL_DRAW_BUFFER6_ARB = 0x0000882B, + GL_DRAW_BUFFER6_ATI = 0x0000882B, + GL_DRAW_BUFFER6_EXT = 0x0000882B, + GL_DRAW_BUFFER6_NV = 0x0000882B, + GL_DRAW_BUFFER7 = 0x0000882C, + GL_DRAW_BUFFER7_ARB = 0x0000882C, + GL_DRAW_BUFFER7_ATI = 0x0000882C, + GL_DRAW_BUFFER7_EXT = 0x0000882C, + GL_DRAW_BUFFER7_NV = 0x0000882C, + GL_DRAW_BUFFER8 = 0x0000882D, + GL_DRAW_BUFFER8_ARB = 0x0000882D, + GL_DRAW_BUFFER8_ATI = 0x0000882D, + GL_DRAW_BUFFER8_EXT = 0x0000882D, + GL_DRAW_BUFFER8_NV = 0x0000882D, + GL_DRAW_BUFFER9 = 0x0000882E, + GL_DRAW_BUFFER9_ARB = 0x0000882E, + GL_DRAW_BUFFER9_ATI = 0x0000882E, + GL_DRAW_BUFFER9_EXT = 0x0000882E, + GL_DRAW_BUFFER9_NV = 0x0000882E, + GL_DRAW_BUFFER10 = 0x0000882F, + GL_DRAW_BUFFER10_ARB = 0x0000882F, + GL_DRAW_BUFFER10_ATI = 0x0000882F, + GL_DRAW_BUFFER10_EXT = 0x0000882F, + GL_DRAW_BUFFER10_NV = 0x0000882F, + GL_DRAW_BUFFER11 = 0x00008830, + GL_DRAW_BUFFER11_ARB = 0x00008830, + GL_DRAW_BUFFER11_ATI = 0x00008830, + GL_DRAW_BUFFER11_EXT = 0x00008830, + GL_DRAW_BUFFER11_NV = 0x00008830, + GL_DRAW_BUFFER12 = 0x00008831, + GL_DRAW_BUFFER12_ARB = 0x00008831, + GL_DRAW_BUFFER12_ATI = 0x00008831, + GL_DRAW_BUFFER12_EXT = 0x00008831, + GL_DRAW_BUFFER12_NV = 0x00008831, + GL_DRAW_BUFFER13 = 0x00008832, + GL_DRAW_BUFFER13_ARB = 0x00008832, + GL_DRAW_BUFFER13_ATI = 0x00008832, + GL_DRAW_BUFFER13_EXT = 0x00008832, + GL_DRAW_BUFFER13_NV = 0x00008832, + GL_DRAW_BUFFER14 = 0x00008833, + GL_DRAW_BUFFER14_ARB = 0x00008833, + GL_DRAW_BUFFER14_ATI = 0x00008833, + GL_DRAW_BUFFER14_EXT = 0x00008833, + GL_DRAW_BUFFER14_NV = 0x00008833, + GL_DRAW_BUFFER15 = 0x00008834, + GL_DRAW_BUFFER15_ARB = 0x00008834, + GL_DRAW_BUFFER15_ATI = 0x00008834, + GL_DRAW_BUFFER15_EXT = 0x00008834, + GL_DRAW_BUFFER15_NV = 0x00008834, + GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI = 0x00008835, + GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI = 0x00008837, + GL_BLEND_EQUATION_ALPHA = 0x0000883D, + GL_BLEND_EQUATION_ALPHA_EXT = 0x0000883D, + GL_BLEND_EQUATION_ALPHA_OES = 0x0000883D, + GL_SUBSAMPLE_DISTANCE_AMD = 0x0000883F, + GL_MATRIX_PALETTE_ARB = 0x00008840, + GL_MATRIX_PALETTE_OES = 0x00008840, + GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB = 0x00008841, + GL_MAX_PALETTE_MATRICES_ARB = 0x00008842, + GL_MAX_PALETTE_MATRICES_OES = 0x00008842, + GL_CURRENT_PALETTE_MATRIX_ARB = 0x00008843, + GL_CURRENT_PALETTE_MATRIX_OES = 0x00008843, + GL_MATRIX_INDEX_ARRAY_ARB = 0x00008844, + GL_MATRIX_INDEX_ARRAY_OES = 0x00008844, + GL_CURRENT_MATRIX_INDEX_ARB = 0x00008845, + GL_MATRIX_INDEX_ARRAY_SIZE_ARB = 0x00008846, + GL_MATRIX_INDEX_ARRAY_SIZE_OES = 0x00008846, + GL_MATRIX_INDEX_ARRAY_TYPE_ARB = 0x00008847, + GL_MATRIX_INDEX_ARRAY_TYPE_OES = 0x00008847, + GL_MATRIX_INDEX_ARRAY_STRIDE_ARB = 0x00008848, + GL_MATRIX_INDEX_ARRAY_STRIDE_OES = 0x00008848, + GL_MATRIX_INDEX_ARRAY_POINTER_ARB = 0x00008849, + GL_MATRIX_INDEX_ARRAY_POINTER_OES = 0x00008849, + GL_TEXTURE_DEPTH_SIZE = 0x0000884A, + GL_TEXTURE_DEPTH_SIZE_ARB = 0x0000884A, + GL_DEPTH_TEXTURE_MODE = 0x0000884B, + GL_DEPTH_TEXTURE_MODE_ARB = 0x0000884B, + GL_TEXTURE_COMPARE_MODE = 0x0000884C, + GL_TEXTURE_COMPARE_MODE_ARB = 0x0000884C, + GL_TEXTURE_COMPARE_MODE_EXT = 0x0000884C, + GL_TEXTURE_COMPARE_FUNC = 0x0000884D, + GL_TEXTURE_COMPARE_FUNC_ARB = 0x0000884D, + GL_TEXTURE_COMPARE_FUNC_EXT = 0x0000884D, + GL_COMPARE_R_TO_TEXTURE = 0x0000884E, + GL_COMPARE_R_TO_TEXTURE_ARB = 0x0000884E, + GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT = 0x0000884E, + GL_COMPARE_REF_TO_TEXTURE = 0x0000884E, + GL_COMPARE_REF_TO_TEXTURE_EXT = 0x0000884E, + GL_TEXTURE_CUBE_MAP_SEAMLESS = 0x0000884F, + GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV = 0x00008850, + GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV = 0x00008851, + GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV = 0x00008852, + GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV = 0x00008853, + GL_OFFSET_HILO_TEXTURE_2D_NV = 0x00008854, + GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV = 0x00008855, + GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV = 0x00008856, + GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV = 0x00008857, + GL_DEPENDENT_HILO_TEXTURE_2D_NV = 0x00008858, + GL_DEPENDENT_RGB_TEXTURE_3D_NV = 0x00008859, + GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV = 0x0000885A, + GL_DOT_PRODUCT_PASS_THROUGH_NV = 0x0000885B, + GL_DOT_PRODUCT_TEXTURE_1D_NV = 0x0000885C, + GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV = 0x0000885D, + GL_HILO8_NV = 0x0000885E, + GL_SIGNED_HILO8_NV = 0x0000885F, + GL_FORCE_BLUE_TO_ONE_NV = 0x00008860, + GL_POINT_SPRITE = 0x00008861, + GL_POINT_SPRITE_ARB = 0x00008861, + GL_POINT_SPRITE_NV = 0x00008861, + GL_POINT_SPRITE_OES = 0x00008861, + GL_COORD_REPLACE = 0x00008862, + GL_COORD_REPLACE_ARB = 0x00008862, + GL_COORD_REPLACE_NV = 0x00008862, + GL_COORD_REPLACE_OES = 0x00008862, + GL_POINT_SPRITE_R_MODE_NV = 0x00008863, + GL_PIXEL_COUNTER_BITS_NV = 0x00008864, + GL_QUERY_COUNTER_BITS = 0x00008864, + GL_QUERY_COUNTER_BITS_ARB = 0x00008864, + GL_QUERY_COUNTER_BITS_EXT = 0x00008864, + GL_CURRENT_OCCLUSION_QUERY_ID_NV = 0x00008865, + GL_CURRENT_QUERY = 0x00008865, + GL_CURRENT_QUERY_ARB = 0x00008865, + GL_CURRENT_QUERY_EXT = 0x00008865, + GL_PIXEL_COUNT_NV = 0x00008866, + GL_QUERY_RESULT = 0x00008866, + GL_QUERY_RESULT_ARB = 0x00008866, + GL_QUERY_RESULT_EXT = 0x00008866, + GL_PIXEL_COUNT_AVAILABLE_NV = 0x00008867, + GL_QUERY_RESULT_AVAILABLE = 0x00008867, + GL_QUERY_RESULT_AVAILABLE_ARB = 0x00008867, + GL_QUERY_RESULT_AVAILABLE_EXT = 0x00008867, + GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV = 0x00008868, + GL_MAX_VERTEX_ATTRIBS = 0x00008869, + GL_MAX_VERTEX_ATTRIBS_ARB = 0x00008869, + GL_VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x0000886A, + GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB = 0x0000886A, + GL_MAX_TESS_CONTROL_INPUT_COMPONENTS = 0x0000886C, + GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT = 0x0000886C, + GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_OES = 0x0000886C, + GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS = 0x0000886D, + GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT = 0x0000886D, + GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_OES = 0x0000886D, + GL_DEPTH_STENCIL_TO_RGBA_NV = 0x0000886E, + GL_DEPTH_STENCIL_TO_BGRA_NV = 0x0000886F, + GL_FRAGMENT_PROGRAM_NV = 0x00008870, + GL_MAX_TEXTURE_COORDS = 0x00008871, + GL_MAX_TEXTURE_COORDS_ARB = 0x00008871, + GL_MAX_TEXTURE_COORDS_NV = 0x00008871, + GL_MAX_TEXTURE_IMAGE_UNITS = 0x00008872, + GL_MAX_TEXTURE_IMAGE_UNITS_ARB = 0x00008872, + GL_MAX_TEXTURE_IMAGE_UNITS_NV = 0x00008872, + GL_FRAGMENT_PROGRAM_BINDING_NV = 0x00008873, + GL_PROGRAM_ERROR_STRING_ARB = 0x00008874, + GL_PROGRAM_ERROR_STRING_NV = 0x00008874, + GL_PROGRAM_FORMAT_ASCII_ARB = 0x00008875, + GL_PROGRAM_FORMAT_ARB = 0x00008876, + GL_WRITE_PIXEL_DATA_RANGE_NV = 0x00008878, + GL_READ_PIXEL_DATA_RANGE_NV = 0x00008879, + GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV = 0x0000887A, + GL_READ_PIXEL_DATA_RANGE_LENGTH_NV = 0x0000887B, + GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV = 0x0000887C, + GL_READ_PIXEL_DATA_RANGE_POINTER_NV = 0x0000887D, + GL_GEOMETRY_SHADER_INVOCATIONS = 0x0000887F, + GL_GEOMETRY_SHADER_INVOCATIONS_EXT = 0x0000887F, + GL_GEOMETRY_SHADER_INVOCATIONS_OES = 0x0000887F, + GL_FLOAT_R_NV = 0x00008880, + GL_FLOAT_RG_NV = 0x00008881, + GL_FLOAT_RGB_NV = 0x00008882, + GL_FLOAT_RGBA_NV = 0x00008883, + GL_FLOAT_R16_NV = 0x00008884, + GL_FLOAT_R32_NV = 0x00008885, + GL_FLOAT_RG16_NV = 0x00008886, + GL_FLOAT_RG32_NV = 0x00008887, + GL_FLOAT_RGB16_NV = 0x00008888, + GL_FLOAT_RGB32_NV = 0x00008889, + GL_FLOAT_RGBA16_NV = 0x0000888A, + GL_FLOAT_RGBA32_NV = 0x0000888B, + GL_TEXTURE_FLOAT_COMPONENTS_NV = 0x0000888C, + GL_FLOAT_CLEAR_COLOR_VALUE_NV = 0x0000888D, + GL_FLOAT_RGBA_MODE_NV = 0x0000888E, + GL_TEXTURE_UNSIGNED_REMAP_MODE_NV = 0x0000888F, + GL_DEPTH_BOUNDS_TEST_EXT = 0x00008890, + GL_DEPTH_BOUNDS_EXT = 0x00008891, + GL_ARRAY_BUFFER = 0x00008892, + GL_ARRAY_BUFFER_ARB = 0x00008892, + GL_ELEMENT_ARRAY_BUFFER = 0x00008893, + GL_ELEMENT_ARRAY_BUFFER_ARB = 0x00008893, + GL_ARRAY_BUFFER_BINDING = 0x00008894, + GL_ARRAY_BUFFER_BINDING_ARB = 0x00008894, + GL_ELEMENT_ARRAY_BUFFER_BINDING = 0x00008895, + GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB = 0x00008895, + GL_VERTEX_ARRAY_BUFFER_BINDING = 0x00008896, + GL_VERTEX_ARRAY_BUFFER_BINDING_ARB = 0x00008896, + GL_NORMAL_ARRAY_BUFFER_BINDING = 0x00008897, + GL_NORMAL_ARRAY_BUFFER_BINDING_ARB = 0x00008897, + GL_COLOR_ARRAY_BUFFER_BINDING = 0x00008898, + GL_COLOR_ARRAY_BUFFER_BINDING_ARB = 0x00008898, + GL_INDEX_ARRAY_BUFFER_BINDING = 0x00008899, + GL_INDEX_ARRAY_BUFFER_BINDING_ARB = 0x00008899, + GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x0000889A, + GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB = 0x0000889A, + GL_EDGE_FLAG_ARRAY_BUFFER_BINDING = 0x0000889B, + GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB = 0x0000889B, + GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 0x0000889C, + GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB = 0x0000889C, + GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB = 0x0000889D, + GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING = 0x0000889D, + GL_FOG_COORD_ARRAY_BUFFER_BINDING = 0x0000889D, + GL_WEIGHT_ARRAY_BUFFER_BINDING = 0x0000889E, + GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB = 0x0000889E, + GL_WEIGHT_ARRAY_BUFFER_BINDING_OES = 0x0000889E, + GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x0000889F, + GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB = 0x0000889F, + GL_PROGRAM_INSTRUCTIONS_ARB = 0x000088A0, + GL_MAX_PROGRAM_INSTRUCTIONS_ARB = 0x000088A1, + GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB = 0x000088A2, + GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB = 0x000088A3, + GL_PROGRAM_TEMPORARIES_ARB = 0x000088A4, + GL_MAX_PROGRAM_TEMPORARIES_ARB = 0x000088A5, + GL_PROGRAM_NATIVE_TEMPORARIES_ARB = 0x000088A6, + GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB = 0x000088A7, + GL_PROGRAM_PARAMETERS_ARB = 0x000088A8, + GL_MAX_PROGRAM_PARAMETERS_ARB = 0x000088A9, + GL_PROGRAM_NATIVE_PARAMETERS_ARB = 0x000088AA, + GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB = 0x000088AB, + GL_PROGRAM_ATTRIBS_ARB = 0x000088AC, + GL_MAX_PROGRAM_ATTRIBS_ARB = 0x000088AD, + GL_PROGRAM_NATIVE_ATTRIBS_ARB = 0x000088AE, + GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB = 0x000088AF, + GL_PROGRAM_ADDRESS_REGISTERS_ARB = 0x000088B0, + GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB = 0x000088B1, + GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB = 0x000088B2, + GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB = 0x000088B3, + GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB = 0x000088B4, + GL_MAX_PROGRAM_ENV_PARAMETERS_ARB = 0x000088B5, + GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB = 0x000088B6, + GL_TRANSPOSE_CURRENT_MATRIX_ARB = 0x000088B7, + GL_READ_ONLY = 0x000088B8, + GL_READ_ONLY_ARB = 0x000088B8, + GL_WRITE_ONLY = 0x000088B9, + GL_WRITE_ONLY_ARB = 0x000088B9, + GL_WRITE_ONLY_OES = 0x000088B9, + GL_READ_WRITE = 0x000088BA, + GL_READ_WRITE_ARB = 0x000088BA, + GL_BUFFER_ACCESS = 0x000088BB, + GL_BUFFER_ACCESS_ARB = 0x000088BB, + GL_BUFFER_ACCESS_OES = 0x000088BB, + GL_BUFFER_MAPPED = 0x000088BC, + GL_BUFFER_MAPPED_ARB = 0x000088BC, + GL_BUFFER_MAPPED_OES = 0x000088BC, + GL_BUFFER_MAP_POINTER = 0x000088BD, + GL_BUFFER_MAP_POINTER_ARB = 0x000088BD, + GL_BUFFER_MAP_POINTER_OES = 0x000088BD, + GL_WRITE_DISCARD_NV = 0x000088BE, + GL_TIME_ELAPSED = 0x000088BF, + GL_TIME_ELAPSED_EXT = 0x000088BF, + GL_MATRIX0_ARB = 0x000088C0, + GL_MATRIX1_ARB = 0x000088C1, + GL_MATRIX2_ARB = 0x000088C2, + GL_MATRIX3_ARB = 0x000088C3, + GL_MATRIX4_ARB = 0x000088C4, + GL_MATRIX5_ARB = 0x000088C5, + GL_MATRIX6_ARB = 0x000088C6, + GL_MATRIX7_ARB = 0x000088C7, + GL_MATRIX8_ARB = 0x000088C8, + GL_MATRIX9_ARB = 0x000088C9, + GL_MATRIX10_ARB = 0x000088CA, + GL_MATRIX11_ARB = 0x000088CB, + GL_MATRIX12_ARB = 0x000088CC, + GL_MATRIX13_ARB = 0x000088CD, + GL_MATRIX14_ARB = 0x000088CE, + GL_MATRIX15_ARB = 0x000088CF, + GL_MATRIX16_ARB = 0x000088D0, + GL_MATRIX17_ARB = 0x000088D1, + GL_MATRIX18_ARB = 0x000088D2, + GL_MATRIX19_ARB = 0x000088D3, + GL_MATRIX20_ARB = 0x000088D4, + GL_MATRIX21_ARB = 0x000088D5, + GL_MATRIX22_ARB = 0x000088D6, + GL_MATRIX23_ARB = 0x000088D7, + GL_MATRIX24_ARB = 0x000088D8, + GL_MATRIX25_ARB = 0x000088D9, + GL_MATRIX26_ARB = 0x000088DA, + GL_MATRIX27_ARB = 0x000088DB, + GL_MATRIX28_ARB = 0x000088DC, + GL_MATRIX29_ARB = 0x000088DD, + GL_MATRIX30_ARB = 0x000088DE, + GL_MATRIX31_ARB = 0x000088DF, + GL_STREAM_DRAW = 0x000088E0, + GL_STREAM_DRAW_ARB = 0x000088E0, + GL_STREAM_READ = 0x000088E1, + GL_STREAM_READ_ARB = 0x000088E1, + GL_STREAM_COPY = 0x000088E2, + GL_STREAM_COPY_ARB = 0x000088E2, + GL_STATIC_DRAW = 0x000088E4, + GL_STATIC_DRAW_ARB = 0x000088E4, + GL_STATIC_READ = 0x000088E5, + GL_STATIC_READ_ARB = 0x000088E5, + GL_STATIC_COPY = 0x000088E6, + GL_STATIC_COPY_ARB = 0x000088E6, + GL_DYNAMIC_DRAW = 0x000088E8, + GL_DYNAMIC_DRAW_ARB = 0x000088E8, + GL_DYNAMIC_READ = 0x000088E9, + GL_DYNAMIC_READ_ARB = 0x000088E9, + GL_DYNAMIC_COPY = 0x000088EA, + GL_DYNAMIC_COPY_ARB = 0x000088EA, + GL_PIXEL_PACK_BUFFER = 0x000088EB, + GL_PIXEL_PACK_BUFFER_ARB = 0x000088EB, + GL_PIXEL_PACK_BUFFER_EXT = 0x000088EB, + GL_PIXEL_UNPACK_BUFFER = 0x000088EC, + GL_PIXEL_UNPACK_BUFFER_ARB = 0x000088EC, + GL_PIXEL_UNPACK_BUFFER_EXT = 0x000088EC, + GL_PIXEL_PACK_BUFFER_BINDING = 0x000088ED, + GL_PIXEL_PACK_BUFFER_BINDING_ARB = 0x000088ED, + GL_PIXEL_PACK_BUFFER_BINDING_EXT = 0x000088ED, + GL_ETC1_SRGB8_NV = 0x000088EE, + GL_PIXEL_UNPACK_BUFFER_BINDING = 0x000088EF, + GL_PIXEL_UNPACK_BUFFER_BINDING_ARB = 0x000088EF, + GL_PIXEL_UNPACK_BUFFER_BINDING_EXT = 0x000088EF, + GL_DEPTH24_STENCIL8 = 0x000088F0, + GL_DEPTH24_STENCIL8_EXT = 0x000088F0, + GL_DEPTH24_STENCIL8_OES = 0x000088F0, + GL_TEXTURE_STENCIL_SIZE = 0x000088F1, + GL_TEXTURE_STENCIL_SIZE_EXT = 0x000088F1, + GL_STENCIL_TAG_BITS_EXT = 0x000088F2, + GL_STENCIL_CLEAR_TAG_VALUE_EXT = 0x000088F3, + GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV = 0x000088F4, + GL_MAX_PROGRAM_CALL_DEPTH_NV = 0x000088F5, + GL_MAX_PROGRAM_IF_DEPTH_NV = 0x000088F6, + GL_MAX_PROGRAM_LOOP_DEPTH_NV = 0x000088F7, + GL_MAX_PROGRAM_LOOP_COUNT_NV = 0x000088F8, + GL_SRC1_COLOR = 0x000088F9, + GL_ONE_MINUS_SRC1_COLOR = 0x000088FA, + GL_ONE_MINUS_SRC1_ALPHA = 0x000088FB, + GL_MAX_DUAL_SOURCE_DRAW_BUFFERS = 0x000088FC, + GL_VERTEX_ATTRIB_ARRAY_INTEGER = 0x000088FD, + GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT = 0x000088FD, + GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV = 0x000088FD, + GL_VERTEX_ATTRIB_ARRAY_DIVISOR = 0x000088FE, + GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE = 0x000088FE, + GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB = 0x000088FE, + GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT = 0x000088FE, + GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV = 0x000088FE, + GL_MAX_ARRAY_TEXTURE_LAYERS = 0x000088FF, + GL_MAX_ARRAY_TEXTURE_LAYERS_EXT = 0x000088FF, + GL_MIN_PROGRAM_TEXEL_OFFSET = 0x00008904, + GL_MIN_PROGRAM_TEXEL_OFFSET_EXT = 0x00008904, + GL_MIN_PROGRAM_TEXEL_OFFSET_NV = 0x00008904, + GL_MAX_PROGRAM_TEXEL_OFFSET = 0x00008905, + GL_MAX_PROGRAM_TEXEL_OFFSET_EXT = 0x00008905, + GL_MAX_PROGRAM_TEXEL_OFFSET_NV = 0x00008905, + GL_PROGRAM_ATTRIB_COMPONENTS_NV = 0x00008906, + GL_PROGRAM_RESULT_COMPONENTS_NV = 0x00008907, + GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV = 0x00008908, + GL_MAX_PROGRAM_RESULT_COMPONENTS_NV = 0x00008909, + GL_STENCIL_TEST_TWO_SIDE_EXT = 0x00008910, + GL_ACTIVE_STENCIL_FACE_EXT = 0x00008911, + GL_MIRROR_CLAMP_TO_BORDER_EXT = 0x00008912, + GL_SAMPLES_PASSED = 0x00008914, + GL_SAMPLES_PASSED_ARB = 0x00008914, + GL_GEOMETRY_VERTICES_OUT = 0x00008916, + GL_GEOMETRY_LINKED_VERTICES_OUT_EXT = 0x00008916, + GL_GEOMETRY_LINKED_VERTICES_OUT_OES = 0x00008916, + GL_GEOMETRY_INPUT_TYPE = 0x00008917, + GL_GEOMETRY_LINKED_INPUT_TYPE_EXT = 0x00008917, + GL_GEOMETRY_LINKED_INPUT_TYPE_OES = 0x00008917, + GL_GEOMETRY_OUTPUT_TYPE = 0x00008918, + GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT = 0x00008918, + GL_GEOMETRY_LINKED_OUTPUT_TYPE_OES = 0x00008918, + GL_SAMPLER_BINDING = 0x00008919, + GL_CLAMP_VERTEX_COLOR = 0x0000891A, + GL_CLAMP_VERTEX_COLOR_ARB = 0x0000891A, + GL_CLAMP_FRAGMENT_COLOR = 0x0000891B, + GL_CLAMP_FRAGMENT_COLOR_ARB = 0x0000891B, + GL_CLAMP_READ_COLOR = 0x0000891C, + GL_CLAMP_READ_COLOR_ARB = 0x0000891C, + GL_FIXED_ONLY = 0x0000891D, + GL_FIXED_ONLY_ARB = 0x0000891D, + GL_TESS_CONTROL_PROGRAM_NV = 0x0000891E, + GL_TESS_EVALUATION_PROGRAM_NV = 0x0000891F, + GL_FRAGMENT_SHADER_ATI = 0x00008920, + GL_REG_0_ATI = 0x00008921, + GL_REG_1_ATI = 0x00008922, + GL_REG_2_ATI = 0x00008923, + GL_REG_3_ATI = 0x00008924, + GL_REG_4_ATI = 0x00008925, + GL_REG_5_ATI = 0x00008926, + GL_REG_6_ATI = 0x00008927, + GL_REG_7_ATI = 0x00008928, + GL_REG_8_ATI = 0x00008929, + GL_REG_9_ATI = 0x0000892A, + GL_REG_10_ATI = 0x0000892B, + GL_REG_11_ATI = 0x0000892C, + GL_REG_12_ATI = 0x0000892D, + GL_REG_13_ATI = 0x0000892E, + GL_REG_14_ATI = 0x0000892F, + GL_REG_15_ATI = 0x00008930, + GL_REG_16_ATI = 0x00008931, + GL_REG_17_ATI = 0x00008932, + GL_REG_18_ATI = 0x00008933, + GL_REG_19_ATI = 0x00008934, + GL_REG_20_ATI = 0x00008935, + GL_REG_21_ATI = 0x00008936, + GL_REG_22_ATI = 0x00008937, + GL_REG_23_ATI = 0x00008938, + GL_REG_24_ATI = 0x00008939, + GL_REG_25_ATI = 0x0000893A, + GL_REG_26_ATI = 0x0000893B, + GL_REG_27_ATI = 0x0000893C, + GL_REG_28_ATI = 0x0000893D, + GL_REG_29_ATI = 0x0000893E, + GL_REG_30_ATI = 0x0000893F, + GL_REG_31_ATI = 0x00008940, + GL_CON_0_ATI = 0x00008941, + GL_CON_1_ATI = 0x00008942, + GL_CON_2_ATI = 0x00008943, + GL_CON_3_ATI = 0x00008944, + GL_CON_4_ATI = 0x00008945, + GL_CON_5_ATI = 0x00008946, + GL_CON_6_ATI = 0x00008947, + GL_CON_7_ATI = 0x00008948, + GL_CON_8_ATI = 0x00008949, + GL_CON_9_ATI = 0x0000894A, + GL_CON_10_ATI = 0x0000894B, + GL_CON_11_ATI = 0x0000894C, + GL_CON_12_ATI = 0x0000894D, + GL_CON_13_ATI = 0x0000894E, + GL_CON_14_ATI = 0x0000894F, + GL_CON_15_ATI = 0x00008950, + GL_CON_16_ATI = 0x00008951, + GL_CON_17_ATI = 0x00008952, + GL_CON_18_ATI = 0x00008953, + GL_CON_19_ATI = 0x00008954, + GL_CON_20_ATI = 0x00008955, + GL_CON_21_ATI = 0x00008956, + GL_CON_22_ATI = 0x00008957, + GL_CON_23_ATI = 0x00008958, + GL_CON_24_ATI = 0x00008959, + GL_CON_25_ATI = 0x0000895A, + GL_CON_26_ATI = 0x0000895B, + GL_CON_27_ATI = 0x0000895C, + GL_CON_28_ATI = 0x0000895D, + GL_CON_29_ATI = 0x0000895E, + GL_CON_30_ATI = 0x0000895F, + GL_CON_31_ATI = 0x00008960, + GL_MOV_ATI = 0x00008961, + GL_ADD_ATI = 0x00008963, + GL_MUL_ATI = 0x00008964, + GL_SUB_ATI = 0x00008965, + GL_DOT3_ATI = 0x00008966, + GL_DOT4_ATI = 0x00008967, + GL_MAD_ATI = 0x00008968, + GL_LERP_ATI = 0x00008969, + GL_CND_ATI = 0x0000896A, + GL_CND0_ATI = 0x0000896B, + GL_DOT2_ADD_ATI = 0x0000896C, + GL_SECONDARY_INTERPOLATOR_ATI = 0x0000896D, + GL_NUM_FRAGMENT_REGISTERS_ATI = 0x0000896E, + GL_NUM_FRAGMENT_CONSTANTS_ATI = 0x0000896F, + GL_NUM_PASSES_ATI = 0x00008970, + GL_NUM_INSTRUCTIONS_PER_PASS_ATI = 0x00008971, + GL_NUM_INSTRUCTIONS_TOTAL_ATI = 0x00008972, + GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI = 0x00008973, + GL_NUM_LOOPBACK_COMPONENTS_ATI = 0x00008974, + GL_COLOR_ALPHA_PAIRING_ATI = 0x00008975, + GL_SWIZZLE_STR_ATI = 0x00008976, + GL_SWIZZLE_STQ_ATI = 0x00008977, + GL_SWIZZLE_STR_DR_ATI = 0x00008978, + GL_SWIZZLE_STQ_DQ_ATI = 0x00008979, + GL_SWIZZLE_STRQ_ATI = 0x0000897A, + GL_SWIZZLE_STRQ_DQ_ATI = 0x0000897B, + GL_INTERLACE_OML = 0x00008980, + GL_INTERLACE_READ_OML = 0x00008981, + GL_FORMAT_SUBSAMPLE_24_24_OML = 0x00008982, + GL_FORMAT_SUBSAMPLE_244_244_OML = 0x00008983, + GL_PACK_RESAMPLE_OML = 0x00008984, + GL_UNPACK_RESAMPLE_OML = 0x00008985, + GL_RESAMPLE_REPLICATE_OML = 0x00008986, + GL_RESAMPLE_ZERO_FILL_OML = 0x00008987, + GL_RESAMPLE_AVERAGE_OML = 0x00008988, + GL_RESAMPLE_DECIMATE_OML = 0x00008989, + GL_POINT_SIZE_ARRAY_TYPE_OES = 0x0000898A, + GL_POINT_SIZE_ARRAY_STRIDE_OES = 0x0000898B, + GL_POINT_SIZE_ARRAY_POINTER_OES = 0x0000898C, + GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES = 0x0000898D, + GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES = 0x0000898E, + GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES = 0x0000898F, + GL_VERTEX_ATTRIB_MAP1_APPLE = 0x00008A00, + GL_VERTEX_ATTRIB_MAP2_APPLE = 0x00008A01, + GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE = 0x00008A02, + GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE = 0x00008A03, + GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE = 0x00008A04, + GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE = 0x00008A05, + GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE = 0x00008A06, + GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE = 0x00008A07, + GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE = 0x00008A08, + GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE = 0x00008A09, + GL_DRAW_PIXELS_APPLE = 0x00008A0A, + GL_FENCE_APPLE = 0x00008A0B, + GL_ELEMENT_ARRAY_APPLE = 0x00008A0C, + GL_ELEMENT_ARRAY_TYPE_APPLE = 0x00008A0D, + GL_ELEMENT_ARRAY_POINTER_APPLE = 0x00008A0E, + GL_COLOR_FLOAT_APPLE = 0x00008A0F, + GL_UNIFORM_BUFFER = 0x00008A11, + GL_BUFFER_SERIALIZED_MODIFY_APPLE = 0x00008A12, + GL_BUFFER_FLUSHING_UNMAP_APPLE = 0x00008A13, + GL_AUX_DEPTH_STENCIL_APPLE = 0x00008A14, + GL_PACK_ROW_BYTES_APPLE = 0x00008A15, + GL_UNPACK_ROW_BYTES_APPLE = 0x00008A16, + GL_RELEASED_APPLE = 0x00008A19, + GL_VOLATILE_APPLE = 0x00008A1A, + GL_RETAINED_APPLE = 0x00008A1B, + GL_UNDEFINED_APPLE = 0x00008A1C, + GL_PURGEABLE_APPLE = 0x00008A1D, + GL_RGB_422_APPLE = 0x00008A1F, + GL_UNIFORM_BUFFER_BINDING = 0x00008A28, + GL_UNIFORM_BUFFER_START = 0x00008A29, + GL_UNIFORM_BUFFER_SIZE = 0x00008A2A, + GL_MAX_VERTEX_UNIFORM_BLOCKS = 0x00008A2B, + GL_MAX_GEOMETRY_UNIFORM_BLOCKS = 0x00008A2C, + GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT = 0x00008A2C, + GL_MAX_GEOMETRY_UNIFORM_BLOCKS_OES = 0x00008A2C, + GL_MAX_FRAGMENT_UNIFORM_BLOCKS = 0x00008A2D, + GL_MAX_COMBINED_UNIFORM_BLOCKS = 0x00008A2E, + GL_MAX_UNIFORM_BUFFER_BINDINGS = 0x00008A2F, + GL_MAX_UNIFORM_BLOCK_SIZE = 0x00008A30, + GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x00008A31, + GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 0x00008A32, + GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT = 0x00008A32, + GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_OES = 0x00008A32, + GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x00008A33, + GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x00008A34, + GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x00008A35, + GL_ACTIVE_UNIFORM_BLOCKS = 0x00008A36, + GL_UNIFORM_TYPE = 0x00008A37, + GL_UNIFORM_SIZE = 0x00008A38, + GL_UNIFORM_NAME_LENGTH = 0x00008A39, + GL_UNIFORM_BLOCK_INDEX = 0x00008A3A, + GL_UNIFORM_OFFSET = 0x00008A3B, + GL_UNIFORM_ARRAY_STRIDE = 0x00008A3C, + GL_UNIFORM_MATRIX_STRIDE = 0x00008A3D, + GL_UNIFORM_IS_ROW_MAJOR = 0x00008A3E, + GL_UNIFORM_BLOCK_BINDING = 0x00008A3F, + GL_UNIFORM_BLOCK_DATA_SIZE = 0x00008A40, + GL_UNIFORM_BLOCK_NAME_LENGTH = 0x00008A41, + GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x00008A42, + GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x00008A43, + GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x00008A44, + GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = 0x00008A45, + GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x00008A46, + GL_TEXTURE_SRGB_DECODE_EXT = 0x00008A48, + GL_DECODE_EXT = 0x00008A49, + GL_SKIP_DECODE_EXT = 0x00008A4A, + GL_PROGRAM_PIPELINE_OBJECT_EXT = 0x00008A4F, + GL_RGB_RAW_422_APPLE = 0x00008A51, + GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT = 0x00008A52, + GL_SYNC_OBJECT_APPLE = 0x00008A53, + GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT = 0x00008A54, + GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT = 0x00008A55, + GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT = 0x00008A56, + GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT = 0x00008A57, + GL_FRAGMENT_SHADER = 0x00008B30, + GL_FRAGMENT_SHADER_ARB = 0x00008B30, + GL_VERTEX_SHADER = 0x00008B31, + GL_VERTEX_SHADER_ARB = 0x00008B31, + GL_PROGRAM_OBJECT_ARB = 0x00008B40, + GL_PROGRAM_OBJECT_EXT = 0x00008B40, + GL_SHADER_OBJECT_ARB = 0x00008B48, + GL_SHADER_OBJECT_EXT = 0x00008B48, + GL_MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x00008B49, + GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB = 0x00008B49, + GL_MAX_VERTEX_UNIFORM_COMPONENTS = 0x00008B4A, + GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB = 0x00008B4A, + GL_MAX_VARYING_FLOATS = 0x00008B4B, + GL_MAX_VARYING_COMPONENTS = 0x00008B4B, + GL_MAX_VARYING_COMPONENTS_EXT = 0x00008B4B, + GL_MAX_VARYING_FLOATS_ARB = 0x00008B4B, + GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x00008B4C, + GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB = 0x00008B4C, + GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x00008B4D, + GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB = 0x00008B4D, + GL_OBJECT_TYPE_ARB = 0x00008B4E, + GL_SHADER_TYPE = 0x00008B4F, + GL_OBJECT_SUBTYPE_ARB = 0x00008B4F, + GL_FLOAT_VEC2 = 0x00008B50, + GL_FLOAT_VEC2_ARB = 0x00008B50, + GL_FLOAT_VEC3 = 0x00008B51, + GL_FLOAT_VEC3_ARB = 0x00008B51, + GL_FLOAT_VEC4 = 0x00008B52, + GL_FLOAT_VEC4_ARB = 0x00008B52, + GL_INT_VEC2 = 0x00008B53, + GL_INT_VEC2_ARB = 0x00008B53, + GL_INT_VEC3 = 0x00008B54, + GL_INT_VEC3_ARB = 0x00008B54, + GL_INT_VEC4 = 0x00008B55, + GL_INT_VEC4_ARB = 0x00008B55, + GL_BOOL = 0x00008B56, + GL_BOOL_ARB = 0x00008B56, + GL_BOOL_VEC2 = 0x00008B57, + GL_BOOL_VEC2_ARB = 0x00008B57, + GL_BOOL_VEC3 = 0x00008B58, + GL_BOOL_VEC3_ARB = 0x00008B58, + GL_BOOL_VEC4 = 0x00008B59, + GL_BOOL_VEC4_ARB = 0x00008B59, + GL_FLOAT_MAT2 = 0x00008B5A, + GL_FLOAT_MAT2_ARB = 0x00008B5A, + GL_FLOAT_MAT3 = 0x00008B5B, + GL_FLOAT_MAT3_ARB = 0x00008B5B, + GL_FLOAT_MAT4 = 0x00008B5C, + GL_FLOAT_MAT4_ARB = 0x00008B5C, + GL_SAMPLER_1D = 0x00008B5D, + GL_SAMPLER_1D_ARB = 0x00008B5D, + GL_SAMPLER_2D = 0x00008B5E, + GL_SAMPLER_2D_ARB = 0x00008B5E, + GL_SAMPLER_3D = 0x00008B5F, + GL_SAMPLER_3D_ARB = 0x00008B5F, + GL_SAMPLER_3D_OES = 0x00008B5F, + GL_SAMPLER_CUBE = 0x00008B60, + GL_SAMPLER_CUBE_ARB = 0x00008B60, + GL_SAMPLER_1D_SHADOW = 0x00008B61, + GL_SAMPLER_1D_SHADOW_ARB = 0x00008B61, + GL_SAMPLER_2D_SHADOW = 0x00008B62, + GL_SAMPLER_2D_SHADOW_ARB = 0x00008B62, + GL_SAMPLER_2D_SHADOW_EXT = 0x00008B62, + GL_SAMPLER_2D_RECT = 0x00008B63, + GL_SAMPLER_2D_RECT_ARB = 0x00008B63, + GL_SAMPLER_2D_RECT_SHADOW = 0x00008B64, + GL_SAMPLER_2D_RECT_SHADOW_ARB = 0x00008B64, + GL_FLOAT_MAT2x3 = 0x00008B65, + GL_FLOAT_MAT2x3_NV = 0x00008B65, + GL_FLOAT_MAT2x4 = 0x00008B66, + GL_FLOAT_MAT2x4_NV = 0x00008B66, + GL_FLOAT_MAT3x2 = 0x00008B67, + GL_FLOAT_MAT3x2_NV = 0x00008B67, + GL_FLOAT_MAT3x4 = 0x00008B68, + GL_FLOAT_MAT3x4_NV = 0x00008B68, + GL_FLOAT_MAT4x2 = 0x00008B69, + GL_FLOAT_MAT4x2_NV = 0x00008B69, + GL_FLOAT_MAT4x3 = 0x00008B6A, + GL_FLOAT_MAT4x3_NV = 0x00008B6A, + GL_DELETE_STATUS = 0x00008B80, + GL_OBJECT_DELETE_STATUS_ARB = 0x00008B80, + GL_COMPILE_STATUS = 0x00008B81, + GL_OBJECT_COMPILE_STATUS_ARB = 0x00008B81, + GL_LINK_STATUS = 0x00008B82, + GL_OBJECT_LINK_STATUS_ARB = 0x00008B82, + GL_VALIDATE_STATUS = 0x00008B83, + GL_OBJECT_VALIDATE_STATUS_ARB = 0x00008B83, + GL_INFO_LOG_LENGTH = 0x00008B84, + GL_OBJECT_INFO_LOG_LENGTH_ARB = 0x00008B84, + GL_ATTACHED_SHADERS = 0x00008B85, + GL_OBJECT_ATTACHED_OBJECTS_ARB = 0x00008B85, + GL_ACTIVE_UNIFORMS = 0x00008B86, + GL_OBJECT_ACTIVE_UNIFORMS_ARB = 0x00008B86, + GL_ACTIVE_UNIFORM_MAX_LENGTH = 0x00008B87, + GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB = 0x00008B87, + GL_SHADER_SOURCE_LENGTH = 0x00008B88, + GL_OBJECT_SHADER_SOURCE_LENGTH_ARB = 0x00008B88, + GL_ACTIVE_ATTRIBUTES = 0x00008B89, + GL_OBJECT_ACTIVE_ATTRIBUTES_ARB = 0x00008B89, + GL_ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x00008B8A, + GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB = 0x00008B8A, + GL_FRAGMENT_SHADER_DERIVATIVE_HINT = 0x00008B8B, + GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB = 0x00008B8B, + GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 0x00008B8B, + GL_SHADING_LANGUAGE_VERSION = 0x00008B8C, + GL_SHADING_LANGUAGE_VERSION_ARB = 0x00008B8C, + GL_CURRENT_PROGRAM = 0x00008B8D, + GL_PALETTE4_RGB8_OES = 0x00008B90, + GL_PALETTE4_RGBA8_OES = 0x00008B91, + GL_PALETTE4_R5_G6_B5_OES = 0x00008B92, + GL_PALETTE4_RGBA4_OES = 0x00008B93, + GL_PALETTE4_RGB5_A1_OES = 0x00008B94, + GL_PALETTE8_RGB8_OES = 0x00008B95, + GL_PALETTE8_RGBA8_OES = 0x00008B96, + GL_PALETTE8_R5_G6_B5_OES = 0x00008B97, + GL_PALETTE8_RGBA4_OES = 0x00008B98, + GL_PALETTE8_RGB5_A1_OES = 0x00008B99, + GL_IMPLEMENTATION_COLOR_READ_TYPE = 0x00008B9A, + GL_IMPLEMENTATION_COLOR_READ_TYPE_OES = 0x00008B9A, + GL_IMPLEMENTATION_COLOR_READ_FORMAT = 0x00008B9B, + GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES = 0x00008B9B, + GL_POINT_SIZE_ARRAY_OES = 0x00008B9C, + GL_TEXTURE_CROP_RECT_OES = 0x00008B9D, + GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES = 0x00008B9E, + GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES = 0x00008B9F, + GL_FRAGMENT_PROGRAM_POSITION_MESA = 0x00008BB0, + GL_FRAGMENT_PROGRAM_CALLBACK_MESA = 0x00008BB1, + GL_FRAGMENT_PROGRAM_CALLBACK_FUNC_MESA = 0x00008BB2, + GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA = 0x00008BB3, + GL_VERTEX_PROGRAM_POSITION_MESA = 0x00008BB4, + GL_VERTEX_PROGRAM_CALLBACK_MESA = 0x00008BB5, + GL_VERTEX_PROGRAM_CALLBACK_FUNC_MESA = 0x00008BB6, + GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA = 0x00008BB7, + GL_COUNTER_TYPE_AMD = 0x00008BC0, + GL_COUNTER_RANGE_AMD = 0x00008BC1, + GL_UNSIGNED_INT64_AMD = 0x00008BC2, + GL_PERCENTAGE_AMD = 0x00008BC3, + GL_PERFMON_RESULT_AVAILABLE_AMD = 0x00008BC4, + GL_PERFMON_RESULT_SIZE_AMD = 0x00008BC5, + GL_PERFMON_RESULT_AMD = 0x00008BC6, + GL_TEXTURE_WIDTH_QCOM = 0x00008BD2, + GL_TEXTURE_HEIGHT_QCOM = 0x00008BD3, + GL_TEXTURE_DEPTH_QCOM = 0x00008BD4, + GL_TEXTURE_INTERNAL_FORMAT_QCOM = 0x00008BD5, + GL_TEXTURE_FORMAT_QCOM = 0x00008BD6, + GL_TEXTURE_TYPE_QCOM = 0x00008BD7, + GL_TEXTURE_IMAGE_VALID_QCOM = 0x00008BD8, + GL_TEXTURE_NUM_LEVELS_QCOM = 0x00008BD9, + GL_TEXTURE_TARGET_QCOM = 0x00008BDA, + GL_TEXTURE_OBJECT_VALID_QCOM = 0x00008BDB, + GL_STATE_RESTORE = 0x00008BDC, + GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT = 0x00008BE7, + GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x00008C00, + GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 0x00008C01, + GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x00008C02, + GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x00008C03, + GL_MODULATE_COLOR_IMG = 0x00008C04, + GL_RECIP_ADD_SIGNED_ALPHA_IMG = 0x00008C05, + GL_TEXTURE_ALPHA_MODULATE_IMG = 0x00008C06, + GL_FACTOR_ALPHA_MODULATE_IMG = 0x00008C07, + GL_FRAGMENT_ALPHA_MODULATE_IMG = 0x00008C08, + GL_ADD_BLEND_IMG = 0x00008C09, + GL_SGX_BINARY_IMG = 0x00008C0A, + GL_TEXTURE_RED_TYPE = 0x00008C10, + GL_TEXTURE_RED_TYPE_ARB = 0x00008C10, + GL_TEXTURE_GREEN_TYPE = 0x00008C11, + GL_TEXTURE_GREEN_TYPE_ARB = 0x00008C11, + GL_TEXTURE_BLUE_TYPE = 0x00008C12, + GL_TEXTURE_BLUE_TYPE_ARB = 0x00008C12, + GL_TEXTURE_ALPHA_TYPE = 0x00008C13, + GL_TEXTURE_ALPHA_TYPE_ARB = 0x00008C13, + GL_TEXTURE_LUMINANCE_TYPE = 0x00008C14, + GL_TEXTURE_LUMINANCE_TYPE_ARB = 0x00008C14, + GL_TEXTURE_INTENSITY_TYPE = 0x00008C15, + GL_TEXTURE_INTENSITY_TYPE_ARB = 0x00008C15, + GL_TEXTURE_DEPTH_TYPE = 0x00008C16, + GL_TEXTURE_DEPTH_TYPE_ARB = 0x00008C16, + GL_UNSIGNED_NORMALIZED = 0x00008C17, + GL_UNSIGNED_NORMALIZED_ARB = 0x00008C17, + GL_UNSIGNED_NORMALIZED_EXT = 0x00008C17, + GL_TEXTURE_1D_ARRAY = 0x00008C18, + GL_TEXTURE_1D_ARRAY_EXT = 0x00008C18, + GL_PROXY_TEXTURE_1D_ARRAY = 0x00008C19, + GL_PROXY_TEXTURE_1D_ARRAY_EXT = 0x00008C19, + GL_TEXTURE_2D_ARRAY = 0x00008C1A, + GL_TEXTURE_2D_ARRAY_EXT = 0x00008C1A, + GL_PROXY_TEXTURE_2D_ARRAY = 0x00008C1B, + GL_PROXY_TEXTURE_2D_ARRAY_EXT = 0x00008C1B, + GL_TEXTURE_BINDING_1D_ARRAY = 0x00008C1C, + GL_TEXTURE_BINDING_1D_ARRAY_EXT = 0x00008C1C, + GL_TEXTURE_BINDING_2D_ARRAY = 0x00008C1D, + GL_TEXTURE_BINDING_2D_ARRAY_EXT = 0x00008C1D, + GL_GEOMETRY_PROGRAM_NV = 0x00008C26, + GL_MAX_PROGRAM_OUTPUT_VERTICES_NV = 0x00008C27, + GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV = 0x00008C28, + GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 0x00008C29, + GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB = 0x00008C29, + GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT = 0x00008C29, + GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_OES = 0x00008C29, + GL_TEXTURE_BUFFER = 0x00008C2A, + GL_TEXTURE_BUFFER_ARB = 0x00008C2A, + GL_TEXTURE_BUFFER_EXT = 0x00008C2A, + GL_TEXTURE_BUFFER_OES = 0x00008C2A, + GL_TEXTURE_BUFFER_BINDING = 0x00008C2A, + GL_TEXTURE_BUFFER_BINDING_EXT = 0x00008C2A, + GL_TEXTURE_BUFFER_BINDING_OES = 0x00008C2A, + GL_MAX_TEXTURE_BUFFER_SIZE = 0x00008C2B, + GL_MAX_TEXTURE_BUFFER_SIZE_ARB = 0x00008C2B, + GL_MAX_TEXTURE_BUFFER_SIZE_EXT = 0x00008C2B, + GL_MAX_TEXTURE_BUFFER_SIZE_OES = 0x00008C2B, + GL_TEXTURE_BINDING_BUFFER = 0x00008C2C, + GL_TEXTURE_BINDING_BUFFER_ARB = 0x00008C2C, + GL_TEXTURE_BINDING_BUFFER_EXT = 0x00008C2C, + GL_TEXTURE_BINDING_BUFFER_OES = 0x00008C2C, + GL_TEXTURE_BUFFER_DATA_STORE_BINDING = 0x00008C2D, + GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB = 0x00008C2D, + GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT = 0x00008C2D, + GL_TEXTURE_BUFFER_DATA_STORE_BINDING_OES = 0x00008C2D, + GL_TEXTURE_BUFFER_FORMAT_ARB = 0x00008C2E, + GL_TEXTURE_BUFFER_FORMAT_EXT = 0x00008C2E, + GL_ANY_SAMPLES_PASSED = 0x00008C2F, + GL_ANY_SAMPLES_PASSED_EXT = 0x00008C2F, + GL_SAMPLE_SHADING = 0x00008C36, + GL_SAMPLE_SHADING_ARB = 0x00008C36, + GL_SAMPLE_SHADING_OES = 0x00008C36, + GL_MIN_SAMPLE_SHADING_VALUE = 0x00008C37, + GL_MIN_SAMPLE_SHADING_VALUE_ARB = 0x00008C37, + GL_MIN_SAMPLE_SHADING_VALUE_OES = 0x00008C37, + GL_R11F_G11F_B10F = 0x00008C3A, + GL_R11F_G11F_B10F_APPLE = 0x00008C3A, + GL_R11F_G11F_B10F_EXT = 0x00008C3A, + GL_UNSIGNED_INT_10F_11F_11F_REV = 0x00008C3B, + GL_UNSIGNED_INT_10F_11F_11F_REV_APPLE = 0x00008C3B, + GL_UNSIGNED_INT_10F_11F_11F_REV_EXT = 0x00008C3B, + GL_RGBA_SIGNED_COMPONENTS_EXT = 0x00008C3C, + GL_RGB9_E5 = 0x00008C3D, + GL_RGB9_E5_APPLE = 0x00008C3D, + GL_RGB9_E5_EXT = 0x00008C3D, + GL_UNSIGNED_INT_5_9_9_9_REV = 0x00008C3E, + GL_UNSIGNED_INT_5_9_9_9_REV_APPLE = 0x00008C3E, + GL_UNSIGNED_INT_5_9_9_9_REV_EXT = 0x00008C3E, + GL_TEXTURE_SHARED_SIZE = 0x00008C3F, + GL_TEXTURE_SHARED_SIZE_EXT = 0x00008C3F, + GL_SRGB = 0x00008C40, + GL_SRGB_EXT = 0x00008C40, + GL_SRGB8 = 0x00008C41, + GL_SRGB8_EXT = 0x00008C41, + GL_SRGB8_NV = 0x00008C41, + GL_SRGB_ALPHA = 0x00008C42, + GL_SRGB_ALPHA_EXT = 0x00008C42, + GL_SRGB8_ALPHA8 = 0x00008C43, + GL_SRGB8_ALPHA8_EXT = 0x00008C43, + GL_SLUMINANCE_ALPHA = 0x00008C44, + GL_SLUMINANCE_ALPHA_EXT = 0x00008C44, + GL_SLUMINANCE_ALPHA_NV = 0x00008C44, + GL_SLUMINANCE8_ALPHA8 = 0x00008C45, + GL_SLUMINANCE8_ALPHA8_EXT = 0x00008C45, + GL_SLUMINANCE8_ALPHA8_NV = 0x00008C45, + GL_SLUMINANCE = 0x00008C46, + GL_SLUMINANCE_EXT = 0x00008C46, + GL_SLUMINANCE_NV = 0x00008C46, + GL_SLUMINANCE8 = 0x00008C47, + GL_SLUMINANCE8_EXT = 0x00008C47, + GL_SLUMINANCE8_NV = 0x00008C47, + GL_COMPRESSED_SRGB = 0x00008C48, + GL_COMPRESSED_SRGB_EXT = 0x00008C48, + GL_COMPRESSED_SRGB_ALPHA = 0x00008C49, + GL_COMPRESSED_SRGB_ALPHA_EXT = 0x00008C49, + GL_COMPRESSED_SLUMINANCE = 0x00008C4A, + GL_COMPRESSED_SLUMINANCE_EXT = 0x00008C4A, + GL_COMPRESSED_SLUMINANCE_ALPHA = 0x00008C4B, + GL_COMPRESSED_SLUMINANCE_ALPHA_EXT = 0x00008C4B, + GL_COMPRESSED_SRGB_S3TC_DXT1_EXT = 0x00008C4C, + GL_COMPRESSED_SRGB_S3TC_DXT1_NV = 0x00008C4C, + GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT = 0x00008C4D, + GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV = 0x00008C4D, + GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT = 0x00008C4E, + GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV = 0x00008C4E, + GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT = 0x00008C4F, + GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV = 0x00008C4F, + GL_COMPRESSED_LUMINANCE_LATC1_EXT = 0x00008C70, + GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT = 0x00008C71, + GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT = 0x00008C72, + GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT = 0x00008C73, + GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV = 0x00008C74, + GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV = 0x00008C75, + GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x00008C76, + GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT = 0x00008C76, + GL_BACK_PRIMARY_COLOR_NV = 0x00008C77, + GL_BACK_SECONDARY_COLOR_NV = 0x00008C78, + GL_TEXTURE_COORD_NV = 0x00008C79, + GL_CLIP_DISTANCE_NV = 0x00008C7A, + GL_VERTEX_ID_NV = 0x00008C7B, + GL_PRIMITIVE_ID_NV = 0x00008C7C, + GL_GENERIC_ATTRIB_NV = 0x00008C7D, + GL_TRANSFORM_FEEDBACK_ATTRIBS_NV = 0x00008C7E, + GL_TRANSFORM_FEEDBACK_BUFFER_MODE = 0x00008C7F, + GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT = 0x00008C7F, + GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV = 0x00008C7F, + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x00008C80, + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT = 0x00008C80, + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV = 0x00008C80, + GL_ACTIVE_VARYINGS_NV = 0x00008C81, + GL_ACTIVE_VARYING_MAX_LENGTH_NV = 0x00008C82, + GL_TRANSFORM_FEEDBACK_VARYINGS = 0x00008C83, + GL_TRANSFORM_FEEDBACK_VARYINGS_EXT = 0x00008C83, + GL_TRANSFORM_FEEDBACK_VARYINGS_NV = 0x00008C83, + GL_TRANSFORM_FEEDBACK_BUFFER_START = 0x00008C84, + GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT = 0x00008C84, + GL_TRANSFORM_FEEDBACK_BUFFER_START_NV = 0x00008C84, + GL_TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x00008C85, + GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT = 0x00008C85, + GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV = 0x00008C85, + GL_TRANSFORM_FEEDBACK_RECORD_NV = 0x00008C86, + GL_PRIMITIVES_GENERATED = 0x00008C87, + GL_PRIMITIVES_GENERATED_EXT = 0x00008C87, + GL_PRIMITIVES_GENERATED_NV = 0x00008C87, + GL_PRIMITIVES_GENERATED_OES = 0x00008C87, + GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x00008C88, + GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT = 0x00008C88, + GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV = 0x00008C88, + GL_RASTERIZER_DISCARD = 0x00008C89, + GL_RASTERIZER_DISCARD_EXT = 0x00008C89, + GL_RASTERIZER_DISCARD_NV = 0x00008C89, + GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x00008C8A, + GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT = 0x00008C8A, + GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV = 0x00008C8A, + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x00008C8B, + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT = 0x00008C8B, + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV = 0x00008C8B, + GL_INTERLEAVED_ATTRIBS = 0x00008C8C, + GL_INTERLEAVED_ATTRIBS_EXT = 0x00008C8C, + GL_INTERLEAVED_ATTRIBS_NV = 0x00008C8C, + GL_SEPARATE_ATTRIBS = 0x00008C8D, + GL_SEPARATE_ATTRIBS_EXT = 0x00008C8D, + GL_SEPARATE_ATTRIBS_NV = 0x00008C8D, + GL_TRANSFORM_FEEDBACK_BUFFER = 0x00008C8E, + GL_TRANSFORM_FEEDBACK_BUFFER_EXT = 0x00008C8E, + GL_TRANSFORM_FEEDBACK_BUFFER_NV = 0x00008C8E, + GL_TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x00008C8F, + GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT = 0x00008C8F, + GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV = 0x00008C8F, + GL_ATC_RGB_AMD = 0x00008C92, + GL_ATC_RGBA_EXPLICIT_ALPHA_AMD = 0x00008C93, + GL_POINT_SPRITE_COORD_ORIGIN = 0x00008CA0, + GL_LOWER_LEFT = 0x00008CA1, + GL_UPPER_LEFT = 0x00008CA2, + GL_STENCIL_BACK_REF = 0x00008CA3, + GL_STENCIL_BACK_VALUE_MASK = 0x00008CA4, + GL_STENCIL_BACK_WRITEMASK = 0x00008CA5, + GL_DRAW_FRAMEBUFFER_BINDING = 0x00008CA6, + GL_DRAW_FRAMEBUFFER_BINDING_ANGLE = 0x00008CA6, + GL_DRAW_FRAMEBUFFER_BINDING_APPLE = 0x00008CA6, + GL_DRAW_FRAMEBUFFER_BINDING_EXT = 0x00008CA6, + GL_DRAW_FRAMEBUFFER_BINDING_NV = 0x00008CA6, + GL_FRAMEBUFFER_BINDING = 0x00008CA6, + GL_FRAMEBUFFER_BINDING_ANGLE = 0x00008CA6, + GL_FRAMEBUFFER_BINDING_EXT = 0x00008CA6, + GL_FRAMEBUFFER_BINDING_OES = 0x00008CA6, + GL_RENDERBUFFER_BINDING = 0x00008CA7, + GL_RENDERBUFFER_BINDING_ANGLE = 0x00008CA7, + GL_RENDERBUFFER_BINDING_EXT = 0x00008CA7, + GL_RENDERBUFFER_BINDING_OES = 0x00008CA7, + GL_READ_FRAMEBUFFER = 0x00008CA8, + GL_READ_FRAMEBUFFER_ANGLE = 0x00008CA8, + GL_READ_FRAMEBUFFER_APPLE = 0x00008CA8, + GL_READ_FRAMEBUFFER_EXT = 0x00008CA8, + GL_READ_FRAMEBUFFER_NV = 0x00008CA8, + GL_DRAW_FRAMEBUFFER = 0x00008CA9, + GL_DRAW_FRAMEBUFFER_ANGLE = 0x00008CA9, + GL_DRAW_FRAMEBUFFER_APPLE = 0x00008CA9, + GL_DRAW_FRAMEBUFFER_EXT = 0x00008CA9, + GL_DRAW_FRAMEBUFFER_NV = 0x00008CA9, + GL_READ_FRAMEBUFFER_BINDING = 0x00008CAA, + GL_READ_FRAMEBUFFER_BINDING_ANGLE = 0x00008CAA, + GL_READ_FRAMEBUFFER_BINDING_APPLE = 0x00008CAA, + GL_READ_FRAMEBUFFER_BINDING_EXT = 0x00008CAA, + GL_READ_FRAMEBUFFER_BINDING_NV = 0x00008CAA, + GL_RENDERBUFFER_COVERAGE_SAMPLES_NV = 0x00008CAB, + GL_RENDERBUFFER_SAMPLES = 0x00008CAB, + GL_RENDERBUFFER_SAMPLES_ANGLE = 0x00008CAB, + GL_RENDERBUFFER_SAMPLES_APPLE = 0x00008CAB, + GL_RENDERBUFFER_SAMPLES_EXT = 0x00008CAB, + GL_RENDERBUFFER_SAMPLES_NV = 0x00008CAB, + GL_DEPTH_COMPONENT32F = 0x00008CAC, + GL_DEPTH32F_STENCIL8 = 0x00008CAD, + GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x00008CD0, + GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT = 0x00008CD0, + GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES = 0x00008CD0, + GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x00008CD1, + GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT = 0x00008CD1, + GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES = 0x00008CD1, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x00008CD2, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT = 0x00008CD2, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES = 0x00008CD2, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x00008CD3, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT = 0x00008CD3, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES = 0x00008CD3, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT = 0x00008CD4, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES = 0x00008CD4, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x00008CD4, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT = 0x00008CD4, + GL_FRAMEBUFFER_COMPLETE = 0x00008CD5, + GL_FRAMEBUFFER_COMPLETE_EXT = 0x00008CD5, + GL_FRAMEBUFFER_COMPLETE_OES = 0x00008CD5, + GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x00008CD6, + GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT = 0x00008CD6, + GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES = 0x00008CD6, + GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x00008CD7, + GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT = 0x00008CD7, + GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES = 0x00008CD7, + GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x00008CD9, + GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT = 0x00008CD9, + GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES = 0x00008CD9, + GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT = 0x00008CDA, + GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES = 0x00008CDA, + GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = 0x00008CDB, + GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT = 0x00008CDB, + GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES = 0x00008CDB, + GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER = 0x00008CDC, + GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT = 0x00008CDC, + GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES = 0x00008CDC, + GL_FRAMEBUFFER_UNSUPPORTED = 0x00008CDD, + GL_FRAMEBUFFER_UNSUPPORTED_EXT = 0x00008CDD, + GL_FRAMEBUFFER_UNSUPPORTED_OES = 0x00008CDD, + GL_MAX_COLOR_ATTACHMENTS = 0x00008CDF, + GL_MAX_COLOR_ATTACHMENTS_EXT = 0x00008CDF, + GL_MAX_COLOR_ATTACHMENTS_NV = 0x00008CDF, + GL_COLOR_ATTACHMENT0 = 0x00008CE0, + GL_COLOR_ATTACHMENT0_EXT = 0x00008CE0, + GL_COLOR_ATTACHMENT0_NV = 0x00008CE0, + GL_COLOR_ATTACHMENT0_OES = 0x00008CE0, + GL_COLOR_ATTACHMENT1 = 0x00008CE1, + GL_COLOR_ATTACHMENT1_EXT = 0x00008CE1, + GL_COLOR_ATTACHMENT1_NV = 0x00008CE1, + GL_COLOR_ATTACHMENT2 = 0x00008CE2, + GL_COLOR_ATTACHMENT2_EXT = 0x00008CE2, + GL_COLOR_ATTACHMENT2_NV = 0x00008CE2, + GL_COLOR_ATTACHMENT3 = 0x00008CE3, + GL_COLOR_ATTACHMENT3_EXT = 0x00008CE3, + GL_COLOR_ATTACHMENT3_NV = 0x00008CE3, + GL_COLOR_ATTACHMENT4 = 0x00008CE4, + GL_COLOR_ATTACHMENT4_EXT = 0x00008CE4, + GL_COLOR_ATTACHMENT4_NV = 0x00008CE4, + GL_COLOR_ATTACHMENT5 = 0x00008CE5, + GL_COLOR_ATTACHMENT5_EXT = 0x00008CE5, + GL_COLOR_ATTACHMENT5_NV = 0x00008CE5, + GL_COLOR_ATTACHMENT6 = 0x00008CE6, + GL_COLOR_ATTACHMENT6_EXT = 0x00008CE6, + GL_COLOR_ATTACHMENT6_NV = 0x00008CE6, + GL_COLOR_ATTACHMENT7 = 0x00008CE7, + GL_COLOR_ATTACHMENT7_EXT = 0x00008CE7, + GL_COLOR_ATTACHMENT7_NV = 0x00008CE7, + GL_COLOR_ATTACHMENT8 = 0x00008CE8, + GL_COLOR_ATTACHMENT8_EXT = 0x00008CE8, + GL_COLOR_ATTACHMENT8_NV = 0x00008CE8, + GL_COLOR_ATTACHMENT9 = 0x00008CE9, + GL_COLOR_ATTACHMENT9_EXT = 0x00008CE9, + GL_COLOR_ATTACHMENT9_NV = 0x00008CE9, + GL_COLOR_ATTACHMENT10 = 0x00008CEA, + GL_COLOR_ATTACHMENT10_EXT = 0x00008CEA, + GL_COLOR_ATTACHMENT10_NV = 0x00008CEA, + GL_COLOR_ATTACHMENT11 = 0x00008CEB, + GL_COLOR_ATTACHMENT11_EXT = 0x00008CEB, + GL_COLOR_ATTACHMENT11_NV = 0x00008CEB, + GL_COLOR_ATTACHMENT12 = 0x00008CEC, + GL_COLOR_ATTACHMENT12_EXT = 0x00008CEC, + GL_COLOR_ATTACHMENT12_NV = 0x00008CEC, + GL_COLOR_ATTACHMENT13 = 0x00008CED, + GL_COLOR_ATTACHMENT13_EXT = 0x00008CED, + GL_COLOR_ATTACHMENT13_NV = 0x00008CED, + GL_COLOR_ATTACHMENT14 = 0x00008CEE, + GL_COLOR_ATTACHMENT14_EXT = 0x00008CEE, + GL_COLOR_ATTACHMENT14_NV = 0x00008CEE, + GL_COLOR_ATTACHMENT15 = 0x00008CEF, + GL_COLOR_ATTACHMENT15_EXT = 0x00008CEF, + GL_COLOR_ATTACHMENT15_NV = 0x00008CEF, + GL_COLOR_ATTACHMENT16 = 0x00008CF0, + GL_COLOR_ATTACHMENT17 = 0x00008CF1, + GL_COLOR_ATTACHMENT18 = 0x00008CF2, + GL_COLOR_ATTACHMENT19 = 0x00008CF3, + GL_COLOR_ATTACHMENT20 = 0x00008CF4, + GL_COLOR_ATTACHMENT21 = 0x00008CF5, + GL_COLOR_ATTACHMENT22 = 0x00008CF6, + GL_COLOR_ATTACHMENT23 = 0x00008CF7, + GL_COLOR_ATTACHMENT24 = 0x00008CF8, + GL_COLOR_ATTACHMENT25 = 0x00008CF9, + GL_COLOR_ATTACHMENT26 = 0x00008CFA, + GL_COLOR_ATTACHMENT27 = 0x00008CFB, + GL_COLOR_ATTACHMENT28 = 0x00008CFC, + GL_COLOR_ATTACHMENT29 = 0x00008CFD, + GL_COLOR_ATTACHMENT30 = 0x00008CFE, + GL_COLOR_ATTACHMENT31 = 0x00008CFF, + GL_DEPTH_ATTACHMENT = 0x00008D00, + GL_DEPTH_ATTACHMENT_EXT = 0x00008D00, + GL_DEPTH_ATTACHMENT_OES = 0x00008D00, + GL_STENCIL_ATTACHMENT = 0x00008D20, + GL_STENCIL_ATTACHMENT_EXT = 0x00008D20, + GL_STENCIL_ATTACHMENT_OES = 0x00008D20, + GL_FRAMEBUFFER = 0x00008D40, + GL_FRAMEBUFFER_EXT = 0x00008D40, + GL_FRAMEBUFFER_OES = 0x00008D40, + GL_RENDERBUFFER = 0x00008D41, + GL_RENDERBUFFER_EXT = 0x00008D41, + GL_RENDERBUFFER_OES = 0x00008D41, + GL_RENDERBUFFER_WIDTH = 0x00008D42, + GL_RENDERBUFFER_WIDTH_EXT = 0x00008D42, + GL_RENDERBUFFER_WIDTH_OES = 0x00008D42, + GL_RENDERBUFFER_HEIGHT = 0x00008D43, + GL_RENDERBUFFER_HEIGHT_EXT = 0x00008D43, + GL_RENDERBUFFER_HEIGHT_OES = 0x00008D43, + GL_RENDERBUFFER_INTERNAL_FORMAT = 0x00008D44, + GL_RENDERBUFFER_INTERNAL_FORMAT_EXT = 0x00008D44, + GL_RENDERBUFFER_INTERNAL_FORMAT_OES = 0x00008D44, + GL_STENCIL_INDEX1 = 0x00008D46, + GL_STENCIL_INDEX1_EXT = 0x00008D46, + GL_STENCIL_INDEX1_OES = 0x00008D46, + GL_STENCIL_INDEX4 = 0x00008D47, + GL_STENCIL_INDEX4_EXT = 0x00008D47, + GL_STENCIL_INDEX4_OES = 0x00008D47, + GL_STENCIL_INDEX8 = 0x00008D48, + GL_STENCIL_INDEX8_EXT = 0x00008D48, + GL_STENCIL_INDEX8_OES = 0x00008D48, + GL_STENCIL_INDEX16 = 0x00008D49, + GL_STENCIL_INDEX16_EXT = 0x00008D49, + GL_RENDERBUFFER_RED_SIZE = 0x00008D50, + GL_RENDERBUFFER_RED_SIZE_EXT = 0x00008D50, + GL_RENDERBUFFER_RED_SIZE_OES = 0x00008D50, + GL_RENDERBUFFER_GREEN_SIZE = 0x00008D51, + GL_RENDERBUFFER_GREEN_SIZE_EXT = 0x00008D51, + GL_RENDERBUFFER_GREEN_SIZE_OES = 0x00008D51, + GL_RENDERBUFFER_BLUE_SIZE = 0x00008D52, + GL_RENDERBUFFER_BLUE_SIZE_EXT = 0x00008D52, + GL_RENDERBUFFER_BLUE_SIZE_OES = 0x00008D52, + GL_RENDERBUFFER_ALPHA_SIZE = 0x00008D53, + GL_RENDERBUFFER_ALPHA_SIZE_EXT = 0x00008D53, + GL_RENDERBUFFER_ALPHA_SIZE_OES = 0x00008D53, + GL_RENDERBUFFER_DEPTH_SIZE = 0x00008D54, + GL_RENDERBUFFER_DEPTH_SIZE_EXT = 0x00008D54, + GL_RENDERBUFFER_DEPTH_SIZE_OES = 0x00008D54, + GL_RENDERBUFFER_STENCIL_SIZE = 0x00008D55, + GL_RENDERBUFFER_STENCIL_SIZE_EXT = 0x00008D55, + GL_RENDERBUFFER_STENCIL_SIZE_OES = 0x00008D55, + GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x00008D56, + GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE = 0x00008D56, + GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE = 0x00008D56, + GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT = 0x00008D56, + GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV = 0x00008D56, + GL_MAX_SAMPLES = 0x00008D57, + GL_MAX_SAMPLES_ANGLE = 0x00008D57, + GL_MAX_SAMPLES_APPLE = 0x00008D57, + GL_MAX_SAMPLES_EXT = 0x00008D57, + GL_MAX_SAMPLES_NV = 0x00008D57, + GL_TEXTURE_GEN_STR_OES = 0x00008D60, + GL_HALF_FLOAT_OES = 0x00008D61, + GL_RGB565_OES = 0x00008D62, + GL_RGB565 = 0x00008D62, + GL_ETC1_RGB8_OES = 0x00008D64, + GL_TEXTURE_EXTERNAL_OES = 0x00008D65, + GL_SAMPLER_EXTERNAL_OES = 0x00008D66, + GL_TEXTURE_BINDING_EXTERNAL_OES = 0x00008D67, + GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES = 0x00008D68, + GL_PRIMITIVE_RESTART_FIXED_INDEX = 0x00008D69, + GL_ANY_SAMPLES_PASSED_CONSERVATIVE = 0x00008D6A, + GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT = 0x00008D6A, + GL_MAX_ELEMENT_INDEX = 0x00008D6B, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT = 0x00008D6C, + GL_RGBA32UI = 0x00008D70, + GL_RGBA32UI_EXT = 0x00008D70, + GL_RGB32UI = 0x00008D71, + GL_RGB32UI_EXT = 0x00008D71, + GL_ALPHA32UI_EXT = 0x00008D72, + GL_INTENSITY32UI_EXT = 0x00008D73, + GL_LUMINANCE32UI_EXT = 0x00008D74, + GL_LUMINANCE_ALPHA32UI_EXT = 0x00008D75, + GL_RGBA16UI = 0x00008D76, + GL_RGBA16UI_EXT = 0x00008D76, + GL_RGB16UI = 0x00008D77, + GL_RGB16UI_EXT = 0x00008D77, + GL_ALPHA16UI_EXT = 0x00008D78, + GL_INTENSITY16UI_EXT = 0x00008D79, + GL_LUMINANCE16UI_EXT = 0x00008D7A, + GL_LUMINANCE_ALPHA16UI_EXT = 0x00008D7B, + GL_RGBA8UI = 0x00008D7C, + GL_RGBA8UI_EXT = 0x00008D7C, + GL_RGB8UI = 0x00008D7D, + GL_RGB8UI_EXT = 0x00008D7D, + GL_ALPHA8UI_EXT = 0x00008D7E, + GL_INTENSITY8UI_EXT = 0x00008D7F, + GL_LUMINANCE8UI_EXT = 0x00008D80, + GL_LUMINANCE_ALPHA8UI_EXT = 0x00008D81, + GL_RGBA32I = 0x00008D82, + GL_RGBA32I_EXT = 0x00008D82, + GL_RGB32I = 0x00008D83, + GL_RGB32I_EXT = 0x00008D83, + GL_ALPHA32I_EXT = 0x00008D84, + GL_INTENSITY32I_EXT = 0x00008D85, + GL_LUMINANCE32I_EXT = 0x00008D86, + GL_LUMINANCE_ALPHA32I_EXT = 0x00008D87, + GL_RGBA16I = 0x00008D88, + GL_RGBA16I_EXT = 0x00008D88, + GL_RGB16I = 0x00008D89, + GL_RGB16I_EXT = 0x00008D89, + GL_ALPHA16I_EXT = 0x00008D8A, + GL_INTENSITY16I_EXT = 0x00008D8B, + GL_LUMINANCE16I_EXT = 0x00008D8C, + GL_LUMINANCE_ALPHA16I_EXT = 0x00008D8D, + GL_RGBA8I = 0x00008D8E, + GL_RGBA8I_EXT = 0x00008D8E, + GL_RGB8I = 0x00008D8F, + GL_RGB8I_EXT = 0x00008D8F, + GL_ALPHA8I_EXT = 0x00008D90, + GL_INTENSITY8I_EXT = 0x00008D91, + GL_LUMINANCE8I_EXT = 0x00008D92, + GL_LUMINANCE_ALPHA8I_EXT = 0x00008D93, + GL_RED_INTEGER = 0x00008D94, + GL_RED_INTEGER_EXT = 0x00008D94, + GL_GREEN_INTEGER = 0x00008D95, + GL_GREEN_INTEGER_EXT = 0x00008D95, + GL_BLUE_INTEGER = 0x00008D96, + GL_BLUE_INTEGER_EXT = 0x00008D96, + GL_ALPHA_INTEGER = 0x00008D97, + GL_ALPHA_INTEGER_EXT = 0x00008D97, + GL_RGB_INTEGER = 0x00008D98, + GL_RGB_INTEGER_EXT = 0x00008D98, + GL_RGBA_INTEGER = 0x00008D99, + GL_RGBA_INTEGER_EXT = 0x00008D99, + GL_BGR_INTEGER = 0x00008D9A, + GL_BGR_INTEGER_EXT = 0x00008D9A, + GL_BGRA_INTEGER = 0x00008D9B, + GL_BGRA_INTEGER_EXT = 0x00008D9B, + GL_LUMINANCE_INTEGER_EXT = 0x00008D9C, + GL_LUMINANCE_ALPHA_INTEGER_EXT = 0x00008D9D, + GL_RGBA_INTEGER_MODE_EXT = 0x00008D9E, + GL_INT_2_10_10_10_REV = 0x00008D9F, + GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV = 0x00008DA0, + GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV = 0x00008DA1, + GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV = 0x00008DA2, + GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV = 0x00008DA3, + GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV = 0x00008DA4, + GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV = 0x00008DA5, + GL_MAX_PROGRAM_GENERIC_RESULTS_NV = 0x00008DA6, + GL_FRAMEBUFFER_ATTACHMENT_LAYERED = 0x00008DA7, + GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB = 0x00008DA7, + GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT = 0x00008DA7, + GL_FRAMEBUFFER_ATTACHMENT_LAYERED_OES = 0x00008DA7, + GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 0x00008DA8, + GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB = 0x00008DA8, + GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT = 0x00008DA8, + GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_OES = 0x00008DA8, + GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB = 0x00008DA9, + GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT = 0x00008DA9, + GL_LAYER_NV = 0x00008DAA, + GL_DEPTH_COMPONENT32F_NV = 0x00008DAB, + GL_DEPTH32F_STENCIL8_NV = 0x00008DAC, + GL_FLOAT_32_UNSIGNED_INT_24_8_REV = 0x00008DAD, + GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV = 0x00008DAD, + GL_SHADER_INCLUDE_ARB = 0x00008DAE, + GL_DEPTH_BUFFER_FLOAT_MODE_NV = 0x00008DAF, + GL_FRAMEBUFFER_SRGB = 0x00008DB9, + GL_FRAMEBUFFER_SRGB_EXT = 0x00008DB9, + GL_FRAMEBUFFER_SRGB_CAPABLE_EXT = 0x00008DBA, + GL_COMPRESSED_RED_RGTC1 = 0x00008DBB, + GL_COMPRESSED_RED_RGTC1_EXT = 0x00008DBB, + GL_COMPRESSED_SIGNED_RED_RGTC1 = 0x00008DBC, + GL_COMPRESSED_SIGNED_RED_RGTC1_EXT = 0x00008DBC, + GL_COMPRESSED_RED_GREEN_RGTC2_EXT = 0x00008DBD, + GL_COMPRESSED_RG_RGTC2 = 0x00008DBD, + GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT = 0x00008DBE, + GL_COMPRESSED_SIGNED_RG_RGTC2 = 0x00008DBE, + GL_SAMPLER_1D_ARRAY = 0x00008DC0, + GL_SAMPLER_1D_ARRAY_EXT = 0x00008DC0, + GL_SAMPLER_2D_ARRAY = 0x00008DC1, + GL_SAMPLER_2D_ARRAY_EXT = 0x00008DC1, + GL_SAMPLER_BUFFER = 0x00008DC2, + GL_SAMPLER_BUFFER_EXT = 0x00008DC2, + GL_SAMPLER_BUFFER_OES = 0x00008DC2, + GL_SAMPLER_1D_ARRAY_SHADOW = 0x00008DC3, + GL_SAMPLER_1D_ARRAY_SHADOW_EXT = 0x00008DC3, + GL_SAMPLER_2D_ARRAY_SHADOW = 0x00008DC4, + GL_SAMPLER_2D_ARRAY_SHADOW_EXT = 0x00008DC4, + GL_SAMPLER_2D_ARRAY_SHADOW_NV = 0x00008DC4, + GL_SAMPLER_CUBE_SHADOW = 0x00008DC5, + GL_SAMPLER_CUBE_SHADOW_EXT = 0x00008DC5, + GL_SAMPLER_CUBE_SHADOW_NV = 0x00008DC5, + GL_UNSIGNED_INT_VEC2 = 0x00008DC6, + GL_UNSIGNED_INT_VEC2_EXT = 0x00008DC6, + GL_UNSIGNED_INT_VEC3 = 0x00008DC7, + GL_UNSIGNED_INT_VEC3_EXT = 0x00008DC7, + GL_UNSIGNED_INT_VEC4 = 0x00008DC8, + GL_UNSIGNED_INT_VEC4_EXT = 0x00008DC8, + GL_INT_SAMPLER_1D = 0x00008DC9, + GL_INT_SAMPLER_1D_EXT = 0x00008DC9, + GL_INT_SAMPLER_2D = 0x00008DCA, + GL_INT_SAMPLER_2D_EXT = 0x00008DCA, + GL_INT_SAMPLER_3D = 0x00008DCB, + GL_INT_SAMPLER_3D_EXT = 0x00008DCB, + GL_INT_SAMPLER_CUBE = 0x00008DCC, + GL_INT_SAMPLER_CUBE_EXT = 0x00008DCC, + GL_INT_SAMPLER_2D_RECT = 0x00008DCD, + GL_INT_SAMPLER_2D_RECT_EXT = 0x00008DCD, + GL_INT_SAMPLER_1D_ARRAY = 0x00008DCE, + GL_INT_SAMPLER_1D_ARRAY_EXT = 0x00008DCE, + GL_INT_SAMPLER_2D_ARRAY = 0x00008DCF, + GL_INT_SAMPLER_2D_ARRAY_EXT = 0x00008DCF, + GL_INT_SAMPLER_BUFFER = 0x00008DD0, + GL_INT_SAMPLER_BUFFER_EXT = 0x00008DD0, + GL_INT_SAMPLER_BUFFER_OES = 0x00008DD0, + GL_UNSIGNED_INT_SAMPLER_1D = 0x00008DD1, + GL_UNSIGNED_INT_SAMPLER_1D_EXT = 0x00008DD1, + GL_UNSIGNED_INT_SAMPLER_2D = 0x00008DD2, + GL_UNSIGNED_INT_SAMPLER_2D_EXT = 0x00008DD2, + GL_UNSIGNED_INT_SAMPLER_3D = 0x00008DD3, + GL_UNSIGNED_INT_SAMPLER_3D_EXT = 0x00008DD3, + GL_UNSIGNED_INT_SAMPLER_CUBE = 0x00008DD4, + GL_UNSIGNED_INT_SAMPLER_CUBE_EXT = 0x00008DD4, + GL_UNSIGNED_INT_SAMPLER_2D_RECT = 0x00008DD5, + GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT = 0x00008DD5, + GL_UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x00008DD6, + GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT = 0x00008DD6, + GL_UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x00008DD7, + GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT = 0x00008DD7, + GL_UNSIGNED_INT_SAMPLER_BUFFER = 0x00008DD8, + GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT = 0x00008DD8, + GL_UNSIGNED_INT_SAMPLER_BUFFER_OES = 0x00008DD8, + GL_GEOMETRY_SHADER = 0x00008DD9, + GL_GEOMETRY_SHADER_ARB = 0x00008DD9, + GL_GEOMETRY_SHADER_EXT = 0x00008DD9, + GL_GEOMETRY_SHADER_OES = 0x00008DD9, + GL_GEOMETRY_VERTICES_OUT_ARB = 0x00008DDA, + GL_GEOMETRY_VERTICES_OUT_EXT = 0x00008DDA, + GL_GEOMETRY_INPUT_TYPE_ARB = 0x00008DDB, + GL_GEOMETRY_INPUT_TYPE_EXT = 0x00008DDB, + GL_GEOMETRY_OUTPUT_TYPE_ARB = 0x00008DDC, + GL_GEOMETRY_OUTPUT_TYPE_EXT = 0x00008DDC, + GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB = 0x00008DDD, + GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT = 0x00008DDD, + GL_MAX_VERTEX_VARYING_COMPONENTS_ARB = 0x00008DDE, + GL_MAX_VERTEX_VARYING_COMPONENTS_EXT = 0x00008DDE, + GL_MAX_GEOMETRY_UNIFORM_COMPONENTS = 0x00008DDF, + GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB = 0x00008DDF, + GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT = 0x00008DDF, + GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_OES = 0x00008DDF, + GL_MAX_GEOMETRY_OUTPUT_VERTICES = 0x00008DE0, + GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB = 0x00008DE0, + GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT = 0x00008DE0, + GL_MAX_GEOMETRY_OUTPUT_VERTICES_OES = 0x00008DE0, + GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 0x00008DE1, + GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB = 0x00008DE1, + GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT = 0x00008DE1, + GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_OES = 0x00008DE1, + GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT = 0x00008DE2, + GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT = 0x00008DE3, + GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT = 0x00008DE4, + GL_ACTIVE_SUBROUTINES = 0x00008DE5, + GL_ACTIVE_SUBROUTINE_UNIFORMS = 0x00008DE6, + GL_MAX_SUBROUTINES = 0x00008DE7, + GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS = 0x00008DE8, + GL_NAMED_STRING_LENGTH_ARB = 0x00008DE9, + GL_NAMED_STRING_TYPE_ARB = 0x00008DEA, + GL_MAX_BINDABLE_UNIFORM_SIZE_EXT = 0x00008DED, + GL_UNIFORM_BUFFER_EXT = 0x00008DEE, + GL_UNIFORM_BUFFER_BINDING_EXT = 0x00008DEF, + GL_LOW_FLOAT = 0x00008DF0, + GL_MEDIUM_FLOAT = 0x00008DF1, + GL_HIGH_FLOAT = 0x00008DF2, + GL_LOW_INT = 0x00008DF3, + GL_MEDIUM_INT = 0x00008DF4, + GL_HIGH_INT = 0x00008DF5, + GL_UNSIGNED_INT_10_10_10_2_OES = 0x00008DF6, + GL_INT_10_10_10_2_OES = 0x00008DF7, + GL_SHADER_BINARY_FORMATS = 0x00008DF8, + GL_NUM_SHADER_BINARY_FORMATS = 0x00008DF9, + GL_SHADER_COMPILER = 0x00008DFA, + GL_MAX_VERTEX_UNIFORM_VECTORS = 0x00008DFB, + GL_MAX_VARYING_VECTORS = 0x00008DFC, + GL_MAX_FRAGMENT_UNIFORM_VECTORS = 0x00008DFD, + GL_RENDERBUFFER_COLOR_SAMPLES_NV = 0x00008E10, + GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV = 0x00008E11, + GL_MULTISAMPLE_COVERAGE_MODES_NV = 0x00008E12, + GL_QUERY_WAIT = 0x00008E13, + GL_QUERY_WAIT_NV = 0x00008E13, + GL_QUERY_NO_WAIT = 0x00008E14, + GL_QUERY_NO_WAIT_NV = 0x00008E14, + GL_QUERY_BY_REGION_WAIT = 0x00008E15, + GL_QUERY_BY_REGION_WAIT_NV = 0x00008E15, + GL_QUERY_BY_REGION_NO_WAIT = 0x00008E16, + GL_QUERY_BY_REGION_NO_WAIT_NV = 0x00008E16, + GL_QUERY_WAIT_INVERTED = 0x00008E17, + GL_QUERY_NO_WAIT_INVERTED = 0x00008E18, + GL_QUERY_BY_REGION_WAIT_INVERTED = 0x00008E19, + GL_QUERY_BY_REGION_NO_WAIT_INVERTED = 0x00008E1A, + GL_POLYGON_OFFSET_CLAMP_EXT = 0x00008E1B, + GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = 0x00008E1E, + GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT = 0x00008E1E, + GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_OES = 0x00008E1E, + GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x00008E1F, + GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT = 0x00008E1F, + GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_OES = 0x00008E1F, + GL_COLOR_SAMPLES_NV = 0x00008E20, + GL_TRANSFORM_FEEDBACK = 0x00008E22, + GL_TRANSFORM_FEEDBACK_NV = 0x00008E22, + GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED = 0x00008E23, + GL_TRANSFORM_FEEDBACK_PAUSED = 0x00008E23, + GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV = 0x00008E23, + GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE = 0x00008E24, + GL_TRANSFORM_FEEDBACK_ACTIVE = 0x00008E24, + GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV = 0x00008E24, + GL_TRANSFORM_FEEDBACK_BINDING = 0x00008E25, + GL_TRANSFORM_FEEDBACK_BINDING_NV = 0x00008E25, + GL_FRAME_NV = 0x00008E26, + GL_FIELDS_NV = 0x00008E27, + GL_CURRENT_TIME_NV = 0x00008E28, + GL_TIMESTAMP = 0x00008E28, + GL_TIMESTAMP_EXT = 0x00008E28, + GL_NUM_FILL_STREAMS_NV = 0x00008E29, + GL_PRESENT_TIME_NV = 0x00008E2A, + GL_PRESENT_DURATION_NV = 0x00008E2B, + GL_DEPTH_COMPONENT16_NONLINEAR_NV = 0x00008E2C, + GL_PROGRAM_MATRIX_EXT = 0x00008E2D, + GL_TRANSPOSE_PROGRAM_MATRIX_EXT = 0x00008E2E, + GL_PROGRAM_MATRIX_STACK_DEPTH_EXT = 0x00008E2F, + GL_TEXTURE_SWIZZLE_R = 0x00008E42, + GL_TEXTURE_SWIZZLE_R_EXT = 0x00008E42, + GL_TEXTURE_SWIZZLE_G = 0x00008E43, + GL_TEXTURE_SWIZZLE_G_EXT = 0x00008E43, + GL_TEXTURE_SWIZZLE_B = 0x00008E44, + GL_TEXTURE_SWIZZLE_B_EXT = 0x00008E44, + GL_TEXTURE_SWIZZLE_A = 0x00008E45, + GL_TEXTURE_SWIZZLE_A_EXT = 0x00008E45, + GL_TEXTURE_SWIZZLE_RGBA = 0x00008E46, + GL_TEXTURE_SWIZZLE_RGBA_EXT = 0x00008E46, + GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = 0x00008E47, + GL_ACTIVE_SUBROUTINE_MAX_LENGTH = 0x00008E48, + GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = 0x00008E49, + GL_NUM_COMPATIBLE_SUBROUTINES = 0x00008E4A, + GL_COMPATIBLE_SUBROUTINES = 0x00008E4B, + GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = 0x00008E4C, + GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT = 0x00008E4C, + GL_FIRST_VERTEX_CONVENTION = 0x00008E4D, + GL_FIRST_VERTEX_CONVENTION_EXT = 0x00008E4D, + GL_FIRST_VERTEX_CONVENTION_OES = 0x00008E4D, + GL_LAST_VERTEX_CONVENTION = 0x00008E4E, + GL_LAST_VERTEX_CONVENTION_EXT = 0x00008E4E, + GL_LAST_VERTEX_CONVENTION_OES = 0x00008E4E, + GL_PROVOKING_VERTEX = 0x00008E4F, + GL_PROVOKING_VERTEX_EXT = 0x00008E4F, + GL_SAMPLE_POSITION = 0x00008E50, + GL_SAMPLE_POSITION_NV = 0x00008E50, + GL_SAMPLE_LOCATION_NV = 0x00008E50, + GL_SAMPLE_MASK = 0x00008E51, + GL_SAMPLE_MASK_NV = 0x00008E51, + GL_SAMPLE_MASK_VALUE = 0x00008E52, + GL_SAMPLE_MASK_VALUE_NV = 0x00008E52, + GL_TEXTURE_BINDING_RENDERBUFFER_NV = 0x00008E53, + GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV = 0x00008E54, + GL_TEXTURE_RENDERBUFFER_NV = 0x00008E55, + GL_SAMPLER_RENDERBUFFER_NV = 0x00008E56, + GL_INT_SAMPLER_RENDERBUFFER_NV = 0x00008E57, + GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV = 0x00008E58, + GL_MAX_SAMPLE_MASK_WORDS = 0x00008E59, + GL_MAX_SAMPLE_MASK_WORDS_NV = 0x00008E59, + GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV = 0x00008E5A, + GL_MAX_GEOMETRY_SHADER_INVOCATIONS = 0x00008E5A, + GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT = 0x00008E5A, + GL_MAX_GEOMETRY_SHADER_INVOCATIONS_OES = 0x00008E5A, + GL_MIN_FRAGMENT_INTERPOLATION_OFFSET = 0x00008E5B, + GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES = 0x00008E5B, + GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV = 0x00008E5B, + GL_MAX_FRAGMENT_INTERPOLATION_OFFSET = 0x00008E5C, + GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES = 0x00008E5C, + GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV = 0x00008E5C, + GL_FRAGMENT_INTERPOLATION_OFFSET_BITS = 0x00008E5D, + GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES = 0x00008E5D, + GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV = 0x00008E5D, + GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 0x00008E5E, + GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB = 0x00008E5E, + GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV = 0x00008E5E, + GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 0x00008E5F, + GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB = 0x00008E5F, + GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV = 0x00008E5F, + GL_MAX_TRANSFORM_FEEDBACK_BUFFERS = 0x00008E70, + GL_MAX_VERTEX_STREAMS = 0x00008E71, + GL_PATCH_VERTICES = 0x00008E72, + GL_PATCH_VERTICES_EXT = 0x00008E72, + GL_PATCH_VERTICES_OES = 0x00008E72, + GL_PATCH_DEFAULT_INNER_LEVEL = 0x00008E73, + GL_PATCH_DEFAULT_INNER_LEVEL_EXT = 0x00008E73, + GL_PATCH_DEFAULT_OUTER_LEVEL = 0x00008E74, + GL_PATCH_DEFAULT_OUTER_LEVEL_EXT = 0x00008E74, + GL_TESS_CONTROL_OUTPUT_VERTICES = 0x00008E75, + GL_TESS_CONTROL_OUTPUT_VERTICES_EXT = 0x00008E75, + GL_TESS_CONTROL_OUTPUT_VERTICES_OES = 0x00008E75, + GL_TESS_GEN_MODE = 0x00008E76, + GL_TESS_GEN_MODE_EXT = 0x00008E76, + GL_TESS_GEN_MODE_OES = 0x00008E76, + GL_TESS_GEN_SPACING = 0x00008E77, + GL_TESS_GEN_SPACING_EXT = 0x00008E77, + GL_TESS_GEN_SPACING_OES = 0x00008E77, + GL_TESS_GEN_VERTEX_ORDER = 0x00008E78, + GL_TESS_GEN_VERTEX_ORDER_EXT = 0x00008E78, + GL_TESS_GEN_VERTEX_ORDER_OES = 0x00008E78, + GL_TESS_GEN_POINT_MODE = 0x00008E79, + GL_TESS_GEN_POINT_MODE_EXT = 0x00008E79, + GL_TESS_GEN_POINT_MODE_OES = 0x00008E79, + GL_ISOLINES = 0x00008E7A, + GL_ISOLINES_EXT = 0x00008E7A, + GL_ISOLINES_OES = 0x00008E7A, + GL_FRACTIONAL_ODD = 0x00008E7B, + GL_FRACTIONAL_ODD_EXT = 0x00008E7B, + GL_FRACTIONAL_ODD_OES = 0x00008E7B, + GL_FRACTIONAL_EVEN = 0x00008E7C, + GL_FRACTIONAL_EVEN_EXT = 0x00008E7C, + GL_FRACTIONAL_EVEN_OES = 0x00008E7C, + GL_MAX_PATCH_VERTICES = 0x00008E7D, + GL_MAX_PATCH_VERTICES_EXT = 0x00008E7D, + GL_MAX_PATCH_VERTICES_OES = 0x00008E7D, + GL_MAX_TESS_GEN_LEVEL = 0x00008E7E, + GL_MAX_TESS_GEN_LEVEL_EXT = 0x00008E7E, + GL_MAX_TESS_GEN_LEVEL_OES = 0x00008E7E, + GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS = 0x00008E7F, + GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT = 0x00008E7F, + GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_OES = 0x00008E7F, + GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x00008E80, + GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT = 0x00008E80, + GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_OES = 0x00008E80, + GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = 0x00008E81, + GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT = 0x00008E81, + GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_OES = 0x00008E81, + GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = 0x00008E82, + GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT = 0x00008E82, + GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_OES = 0x00008E82, + GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS = 0x00008E83, + GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT = 0x00008E83, + GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_OES = 0x00008E83, + GL_MAX_TESS_PATCH_COMPONENTS = 0x00008E84, + GL_MAX_TESS_PATCH_COMPONENTS_EXT = 0x00008E84, + GL_MAX_TESS_PATCH_COMPONENTS_OES = 0x00008E84, + GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = 0x00008E85, + GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT = 0x00008E85, + GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_OES = 0x00008E85, + GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = 0x00008E86, + GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT = 0x00008E86, + GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_OES = 0x00008E86, + GL_TESS_EVALUATION_SHADER = 0x00008E87, + GL_TESS_EVALUATION_SHADER_EXT = 0x00008E87, + GL_TESS_EVALUATION_SHADER_OES = 0x00008E87, + GL_TESS_CONTROL_SHADER = 0x00008E88, + GL_TESS_CONTROL_SHADER_EXT = 0x00008E88, + GL_TESS_CONTROL_SHADER_OES = 0x00008E88, + GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS = 0x00008E89, + GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT = 0x00008E89, + GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_OES = 0x00008E89, + GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS = 0x00008E8A, + GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT = 0x00008E8A, + GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_OES = 0x00008E8A, + GL_COMPRESSED_RGBA_BPTC_UNORM = 0x00008E8C, + GL_COMPRESSED_RGBA_BPTC_UNORM_ARB = 0x00008E8C, + GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM = 0x00008E8D, + GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB = 0x00008E8D, + GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT = 0x00008E8E, + GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB = 0x00008E8E, + GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT = 0x00008E8F, + GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB = 0x00008E8F, + GL_COVERAGE_COMPONENT_NV = 0x00008ED0, + GL_COVERAGE_COMPONENT4_NV = 0x00008ED1, + GL_COVERAGE_ATTACHMENT_NV = 0x00008ED2, + GL_COVERAGE_BUFFERS_NV = 0x00008ED3, + GL_COVERAGE_SAMPLES_NV = 0x00008ED4, + GL_COVERAGE_ALL_FRAGMENTS_NV = 0x00008ED5, + GL_COVERAGE_EDGE_FRAGMENTS_NV = 0x00008ED6, + GL_COVERAGE_AUTOMATIC_NV = 0x00008ED7, + GL_BUFFER_GPU_ADDRESS_NV = 0x00008F1D, + GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV = 0x00008F1E, + GL_ELEMENT_ARRAY_UNIFIED_NV = 0x00008F1F, + GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV = 0x00008F20, + GL_VERTEX_ARRAY_ADDRESS_NV = 0x00008F21, + GL_NORMAL_ARRAY_ADDRESS_NV = 0x00008F22, + GL_COLOR_ARRAY_ADDRESS_NV = 0x00008F23, + GL_INDEX_ARRAY_ADDRESS_NV = 0x00008F24, + GL_TEXTURE_COORD_ARRAY_ADDRESS_NV = 0x00008F25, + GL_EDGE_FLAG_ARRAY_ADDRESS_NV = 0x00008F26, + GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV = 0x00008F27, + GL_FOG_COORD_ARRAY_ADDRESS_NV = 0x00008F28, + GL_ELEMENT_ARRAY_ADDRESS_NV = 0x00008F29, + GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV = 0x00008F2A, + GL_VERTEX_ARRAY_LENGTH_NV = 0x00008F2B, + GL_NORMAL_ARRAY_LENGTH_NV = 0x00008F2C, + GL_COLOR_ARRAY_LENGTH_NV = 0x00008F2D, + GL_INDEX_ARRAY_LENGTH_NV = 0x00008F2E, + GL_TEXTURE_COORD_ARRAY_LENGTH_NV = 0x00008F2F, + GL_EDGE_FLAG_ARRAY_LENGTH_NV = 0x00008F30, + GL_SECONDARY_COLOR_ARRAY_LENGTH_NV = 0x00008F31, + GL_FOG_COORD_ARRAY_LENGTH_NV = 0x00008F32, + GL_ELEMENT_ARRAY_LENGTH_NV = 0x00008F33, + GL_GPU_ADDRESS_NV = 0x00008F34, + GL_MAX_SHADER_BUFFER_ADDRESS_NV = 0x00008F35, + GL_COPY_READ_BUFFER = 0x00008F36, + GL_COPY_READ_BUFFER_NV = 0x00008F36, + GL_COPY_READ_BUFFER_BINDING = 0x00008F36, + GL_COPY_WRITE_BUFFER = 0x00008F37, + GL_COPY_WRITE_BUFFER_NV = 0x00008F37, + GL_COPY_WRITE_BUFFER_BINDING = 0x00008F37, + GL_MAX_IMAGE_UNITS = 0x00008F38, + GL_MAX_IMAGE_UNITS_EXT = 0x00008F38, + GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS = 0x00008F39, + GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT = 0x00008F39, + GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES = 0x00008F39, + GL_IMAGE_BINDING_NAME = 0x00008F3A, + GL_IMAGE_BINDING_NAME_EXT = 0x00008F3A, + GL_IMAGE_BINDING_LEVEL = 0x00008F3B, + GL_IMAGE_BINDING_LEVEL_EXT = 0x00008F3B, + GL_IMAGE_BINDING_LAYERED = 0x00008F3C, + GL_IMAGE_BINDING_LAYERED_EXT = 0x00008F3C, + GL_IMAGE_BINDING_LAYER = 0x00008F3D, + GL_IMAGE_BINDING_LAYER_EXT = 0x00008F3D, + GL_IMAGE_BINDING_ACCESS = 0x00008F3E, + GL_IMAGE_BINDING_ACCESS_EXT = 0x00008F3E, + GL_DRAW_INDIRECT_BUFFER = 0x00008F3F, + GL_DRAW_INDIRECT_UNIFIED_NV = 0x00008F40, + GL_DRAW_INDIRECT_ADDRESS_NV = 0x00008F41, + GL_DRAW_INDIRECT_LENGTH_NV = 0x00008F42, + GL_DRAW_INDIRECT_BUFFER_BINDING = 0x00008F43, + GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV = 0x00008F44, + GL_MAX_PROGRAM_SUBROUTINE_NUM_NV = 0x00008F45, + GL_DOUBLE_MAT2 = 0x00008F46, + GL_DOUBLE_MAT2_EXT = 0x00008F46, + GL_DOUBLE_MAT3 = 0x00008F47, + GL_DOUBLE_MAT3_EXT = 0x00008F47, + GL_DOUBLE_MAT4 = 0x00008F48, + GL_DOUBLE_MAT4_EXT = 0x00008F48, + GL_DOUBLE_MAT2x3 = 0x00008F49, + GL_DOUBLE_MAT2x3_EXT = 0x00008F49, + GL_DOUBLE_MAT2x4 = 0x00008F4A, + GL_DOUBLE_MAT2x4_EXT = 0x00008F4A, + GL_DOUBLE_MAT3x2 = 0x00008F4B, + GL_DOUBLE_MAT3x2_EXT = 0x00008F4B, + GL_DOUBLE_MAT3x4 = 0x00008F4C, + GL_DOUBLE_MAT3x4_EXT = 0x00008F4C, + GL_DOUBLE_MAT4x2 = 0x00008F4D, + GL_DOUBLE_MAT4x2_EXT = 0x00008F4D, + GL_DOUBLE_MAT4x3 = 0x00008F4E, + GL_DOUBLE_MAT4x3_EXT = 0x00008F4E, + GL_VERTEX_BINDING_BUFFER = 0x00008F4F, + GL_MALI_SHADER_BINARY_ARM = 0x00008F60, + GL_MALI_PROGRAM_BINARY_ARM = 0x00008F61, + GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT = 0x00008F63, + GL_SHADER_PIXEL_LOCAL_STORAGE_EXT = 0x00008F64, + GL_FETCH_PER_SAMPLE_ARM = 0x00008F65, + GL_FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM = 0x00008F66, + GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_SIZE_EXT = 0x00008F67, + GL_RED_SNORM = 0x00008F90, + GL_RG_SNORM = 0x00008F91, + GL_RGB_SNORM = 0x00008F92, + GL_RGBA_SNORM = 0x00008F93, + GL_R8_SNORM = 0x00008F94, + GL_RG8_SNORM = 0x00008F95, + GL_RGB8_SNORM = 0x00008F96, + GL_RGBA8_SNORM = 0x00008F97, + GL_R16_SNORM = 0x00008F98, + GL_R16_SNORM_EXT = 0x00008F98, + GL_RG16_SNORM = 0x00008F99, + GL_RG16_SNORM_EXT = 0x00008F99, + GL_RGB16_SNORM = 0x00008F9A, + GL_RGB16_SNORM_EXT = 0x00008F9A, + GL_RGBA16_SNORM = 0x00008F9B, + GL_RGBA16_SNORM_EXT = 0x00008F9B, + GL_SIGNED_NORMALIZED = 0x00008F9C, + GL_PRIMITIVE_RESTART = 0x00008F9D, + GL_PRIMITIVE_RESTART_INDEX = 0x00008F9E, + GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB = 0x00008F9F, + GL_PERFMON_GLOBAL_MODE_QCOM = 0x00008FA0, + GL_BINNING_CONTROL_HINT_QCOM = 0x00008FB0, + GL_CPU_OPTIMIZED_QCOM = 0x00008FB1, + GL_GPU_OPTIMIZED_QCOM = 0x00008FB2, + GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM = 0x00008FB3, + GL_GPU_DISJOINT_EXT = 0x00008FBB, + GL_SR8_EXT = 0x00008FBD, + GL_SRG8_EXT = 0x00008FBE, + GL_SHADER_BINARY_VIV = 0x00008FC4, + GL_INT8_NV = 0x00008FE0, + GL_INT8_VEC2_NV = 0x00008FE1, + GL_INT8_VEC3_NV = 0x00008FE2, + GL_INT8_VEC4_NV = 0x00008FE3, + GL_INT16_NV = 0x00008FE4, + GL_INT16_VEC2_NV = 0x00008FE5, + GL_INT16_VEC3_NV = 0x00008FE6, + GL_INT16_VEC4_NV = 0x00008FE7, + GL_INT64_VEC2_NV = 0x00008FE9, + GL_INT64_VEC3_NV = 0x00008FEA, + GL_INT64_VEC4_NV = 0x00008FEB, + GL_UNSIGNED_INT8_NV = 0x00008FEC, + GL_UNSIGNED_INT8_VEC2_NV = 0x00008FED, + GL_UNSIGNED_INT8_VEC3_NV = 0x00008FEE, + GL_UNSIGNED_INT8_VEC4_NV = 0x00008FEF, + GL_UNSIGNED_INT16_NV = 0x00008FF0, + GL_UNSIGNED_INT16_VEC2_NV = 0x00008FF1, + GL_UNSIGNED_INT16_VEC3_NV = 0x00008FF2, + GL_UNSIGNED_INT16_VEC4_NV = 0x00008FF3, + GL_UNSIGNED_INT64_VEC2_NV = 0x00008FF5, + GL_UNSIGNED_INT64_VEC3_NV = 0x00008FF6, + GL_UNSIGNED_INT64_VEC4_NV = 0x00008FF7, + GL_FLOAT16_NV = 0x00008FF8, + GL_FLOAT16_VEC2_NV = 0x00008FF9, + GL_FLOAT16_VEC3_NV = 0x00008FFA, + GL_FLOAT16_VEC4_NV = 0x00008FFB, + GL_DOUBLE_VEC2 = 0x00008FFC, + GL_DOUBLE_VEC2_EXT = 0x00008FFC, + GL_DOUBLE_VEC3 = 0x00008FFD, + GL_DOUBLE_VEC3_EXT = 0x00008FFD, + GL_DOUBLE_VEC4 = 0x00008FFE, + GL_DOUBLE_VEC4_EXT = 0x00008FFE, + GL_SAMPLER_BUFFER_AMD = 0x00009001, + GL_INT_SAMPLER_BUFFER_AMD = 0x00009002, + GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD = 0x00009003, + GL_TESSELLATION_MODE_AMD = 0x00009004, + GL_TESSELLATION_FACTOR_AMD = 0x00009005, + GL_DISCRETE_AMD = 0x00009006, + GL_CONTINUOUS_AMD = 0x00009007, + GL_TEXTURE_CUBE_MAP_ARRAY = 0x00009009, + GL_TEXTURE_CUBE_MAP_ARRAY_ARB = 0x00009009, + GL_TEXTURE_CUBE_MAP_ARRAY_EXT = 0x00009009, + GL_TEXTURE_CUBE_MAP_ARRAY_OES = 0x00009009, + GL_TEXTURE_BINDING_CUBE_MAP_ARRAY = 0x0000900A, + GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB = 0x0000900A, + GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT = 0x0000900A, + GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_OES = 0x0000900A, + GL_PROXY_TEXTURE_CUBE_MAP_ARRAY = 0x0000900B, + GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB = 0x0000900B, + GL_SAMPLER_CUBE_MAP_ARRAY = 0x0000900C, + GL_SAMPLER_CUBE_MAP_ARRAY_ARB = 0x0000900C, + GL_SAMPLER_CUBE_MAP_ARRAY_EXT = 0x0000900C, + GL_SAMPLER_CUBE_MAP_ARRAY_OES = 0x0000900C, + GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW = 0x0000900D, + GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB = 0x0000900D, + GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT = 0x0000900D, + GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_OES = 0x0000900D, + GL_INT_SAMPLER_CUBE_MAP_ARRAY = 0x0000900E, + GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB = 0x0000900E, + GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT = 0x0000900E, + GL_INT_SAMPLER_CUBE_MAP_ARRAY_OES = 0x0000900E, + GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = 0x0000900F, + GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB = 0x0000900F, + GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT = 0x0000900F, + GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_OES = 0x0000900F, + GL_ALPHA_SNORM = 0x00009010, + GL_LUMINANCE_SNORM = 0x00009011, + GL_LUMINANCE_ALPHA_SNORM = 0x00009012, + GL_INTENSITY_SNORM = 0x00009013, + GL_ALPHA8_SNORM = 0x00009014, + GL_LUMINANCE8_SNORM = 0x00009015, + GL_LUMINANCE8_ALPHA8_SNORM = 0x00009016, + GL_INTENSITY8_SNORM = 0x00009017, + GL_ALPHA16_SNORM = 0x00009018, + GL_LUMINANCE16_SNORM = 0x00009019, + GL_LUMINANCE16_ALPHA16_SNORM = 0x0000901A, + GL_INTENSITY16_SNORM = 0x0000901B, + GL_FACTOR_MIN_AMD = 0x0000901C, + GL_FACTOR_MAX_AMD = 0x0000901D, + GL_DEPTH_CLAMP_NEAR_AMD = 0x0000901E, + GL_DEPTH_CLAMP_FAR_AMD = 0x0000901F, + GL_VIDEO_BUFFER_NV = 0x00009020, + GL_VIDEO_BUFFER_BINDING_NV = 0x00009021, + GL_FIELD_UPPER_NV = 0x00009022, + GL_FIELD_LOWER_NV = 0x00009023, + GL_NUM_VIDEO_CAPTURE_STREAMS_NV = 0x00009024, + GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV = 0x00009025, + GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV = 0x00009026, + GL_LAST_VIDEO_CAPTURE_STATUS_NV = 0x00009027, + GL_VIDEO_BUFFER_PITCH_NV = 0x00009028, + GL_VIDEO_COLOR_CONVERSION_MATRIX_NV = 0x00009029, + GL_VIDEO_COLOR_CONVERSION_MAX_NV = 0x0000902A, + GL_VIDEO_COLOR_CONVERSION_MIN_NV = 0x0000902B, + GL_VIDEO_COLOR_CONVERSION_OFFSET_NV = 0x0000902C, + GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV = 0x0000902D, + GL_PARTIAL_SUCCESS_NV = 0x0000902E, + GL_SUCCESS_NV = 0x0000902F, + GL_FAILURE_NV = 0x00009030, + GL_YCBYCR8_422_NV = 0x00009031, + GL_YCBAYCR8A_4224_NV = 0x00009032, + GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV = 0x00009033, + GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV = 0x00009034, + GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV = 0x00009035, + GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV = 0x00009036, + GL_Z4Y12Z4CB12Z4CR12_444_NV = 0x00009037, + GL_VIDEO_CAPTURE_FRAME_WIDTH_NV = 0x00009038, + GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV = 0x00009039, + GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV = 0x0000903A, + GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV = 0x0000903B, + GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV = 0x0000903C, + GL_TEXTURE_COVERAGE_SAMPLES_NV = 0x00009045, + GL_TEXTURE_COLOR_SAMPLES_NV = 0x00009046, + GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX = 0x00009047, + GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX = 0x00009048, + GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX = 0x00009049, + GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX = 0x0000904A, + GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX = 0x0000904B, + GL_IMAGE_1D = 0x0000904C, + GL_IMAGE_1D_EXT = 0x0000904C, + GL_IMAGE_2D = 0x0000904D, + GL_IMAGE_2D_EXT = 0x0000904D, + GL_IMAGE_3D = 0x0000904E, + GL_IMAGE_3D_EXT = 0x0000904E, + GL_IMAGE_2D_RECT = 0x0000904F, + GL_IMAGE_2D_RECT_EXT = 0x0000904F, + GL_IMAGE_CUBE = 0x00009050, + GL_IMAGE_CUBE_EXT = 0x00009050, + GL_IMAGE_BUFFER = 0x00009051, + GL_IMAGE_BUFFER_EXT = 0x00009051, + GL_IMAGE_BUFFER_OES = 0x00009051, + GL_IMAGE_1D_ARRAY = 0x00009052, + GL_IMAGE_1D_ARRAY_EXT = 0x00009052, + GL_IMAGE_2D_ARRAY = 0x00009053, + GL_IMAGE_2D_ARRAY_EXT = 0x00009053, + GL_IMAGE_CUBE_MAP_ARRAY = 0x00009054, + GL_IMAGE_CUBE_MAP_ARRAY_EXT = 0x00009054, + GL_IMAGE_CUBE_MAP_ARRAY_OES = 0x00009054, + GL_IMAGE_2D_MULTISAMPLE = 0x00009055, + GL_IMAGE_2D_MULTISAMPLE_EXT = 0x00009055, + GL_IMAGE_2D_MULTISAMPLE_ARRAY = 0x00009056, + GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT = 0x00009056, + GL_INT_IMAGE_1D = 0x00009057, + GL_INT_IMAGE_1D_EXT = 0x00009057, + GL_INT_IMAGE_2D = 0x00009058, + GL_INT_IMAGE_2D_EXT = 0x00009058, + GL_INT_IMAGE_3D = 0x00009059, + GL_INT_IMAGE_3D_EXT = 0x00009059, + GL_INT_IMAGE_2D_RECT = 0x0000905A, + GL_INT_IMAGE_2D_RECT_EXT = 0x0000905A, + GL_INT_IMAGE_CUBE = 0x0000905B, + GL_INT_IMAGE_CUBE_EXT = 0x0000905B, + GL_INT_IMAGE_BUFFER = 0x0000905C, + GL_INT_IMAGE_BUFFER_EXT = 0x0000905C, + GL_INT_IMAGE_BUFFER_OES = 0x0000905C, + GL_INT_IMAGE_1D_ARRAY = 0x0000905D, + GL_INT_IMAGE_1D_ARRAY_EXT = 0x0000905D, + GL_INT_IMAGE_2D_ARRAY = 0x0000905E, + GL_INT_IMAGE_2D_ARRAY_EXT = 0x0000905E, + GL_INT_IMAGE_CUBE_MAP_ARRAY = 0x0000905F, + GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT = 0x0000905F, + GL_INT_IMAGE_CUBE_MAP_ARRAY_OES = 0x0000905F, + GL_INT_IMAGE_2D_MULTISAMPLE = 0x00009060, + GL_INT_IMAGE_2D_MULTISAMPLE_EXT = 0x00009060, + GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x00009061, + GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT = 0x00009061, + GL_UNSIGNED_INT_IMAGE_1D = 0x00009062, + GL_UNSIGNED_INT_IMAGE_1D_EXT = 0x00009062, + GL_UNSIGNED_INT_IMAGE_2D = 0x00009063, + GL_UNSIGNED_INT_IMAGE_2D_EXT = 0x00009063, + GL_UNSIGNED_INT_IMAGE_3D = 0x00009064, + GL_UNSIGNED_INT_IMAGE_3D_EXT = 0x00009064, + GL_UNSIGNED_INT_IMAGE_2D_RECT = 0x00009065, + GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT = 0x00009065, + GL_UNSIGNED_INT_IMAGE_CUBE = 0x00009066, + GL_UNSIGNED_INT_IMAGE_CUBE_EXT = 0x00009066, + GL_UNSIGNED_INT_IMAGE_BUFFER = 0x00009067, + GL_UNSIGNED_INT_IMAGE_BUFFER_EXT = 0x00009067, + GL_UNSIGNED_INT_IMAGE_BUFFER_OES = 0x00009067, + GL_UNSIGNED_INT_IMAGE_1D_ARRAY = 0x00009068, + GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT = 0x00009068, + GL_UNSIGNED_INT_IMAGE_2D_ARRAY = 0x00009069, + GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT = 0x00009069, + GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY = 0x0000906A, + GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT = 0x0000906A, + GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_OES = 0x0000906A, + GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE = 0x0000906B, + GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT = 0x0000906B, + GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY = 0x0000906C, + GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT = 0x0000906C, + GL_MAX_IMAGE_SAMPLES = 0x0000906D, + GL_MAX_IMAGE_SAMPLES_EXT = 0x0000906D, + GL_IMAGE_BINDING_FORMAT = 0x0000906E, + GL_IMAGE_BINDING_FORMAT_EXT = 0x0000906E, + GL_RGB10_A2UI = 0x0000906F, + GL_PATH_FORMAT_SVG_NV = 0x00009070, + GL_PATH_FORMAT_PS_NV = 0x00009071, + GL_STANDARD_FONT_NAME_NV = 0x00009072, + GL_SYSTEM_FONT_NAME_NV = 0x00009073, + GL_FILE_NAME_NV = 0x00009074, + GL_PATH_STROKE_WIDTH_NV = 0x00009075, + GL_PATH_END_CAPS_NV = 0x00009076, + GL_PATH_INITIAL_END_CAP_NV = 0x00009077, + GL_PATH_TERMINAL_END_CAP_NV = 0x00009078, + GL_PATH_JOIN_STYLE_NV = 0x00009079, + GL_PATH_MITER_LIMIT_NV = 0x0000907A, + GL_PATH_DASH_CAPS_NV = 0x0000907B, + GL_PATH_INITIAL_DASH_CAP_NV = 0x0000907C, + GL_PATH_TERMINAL_DASH_CAP_NV = 0x0000907D, + GL_PATH_DASH_OFFSET_NV = 0x0000907E, + GL_PATH_CLIENT_LENGTH_NV = 0x0000907F, + GL_PATH_FILL_MODE_NV = 0x00009080, + GL_PATH_FILL_MASK_NV = 0x00009081, + GL_PATH_FILL_COVER_MODE_NV = 0x00009082, + GL_PATH_STROKE_COVER_MODE_NV = 0x00009083, + GL_PATH_STROKE_MASK_NV = 0x00009084, + GL_COUNT_UP_NV = 0x00009088, + GL_COUNT_DOWN_NV = 0x00009089, + GL_PATH_OBJECT_BOUNDING_BOX_NV = 0x0000908A, + GL_CONVEX_HULL_NV = 0x0000908B, + GL_BOUNDING_BOX_NV = 0x0000908D, + GL_TRANSLATE_X_NV = 0x0000908E, + GL_TRANSLATE_Y_NV = 0x0000908F, + GL_TRANSLATE_2D_NV = 0x00009090, + GL_TRANSLATE_3D_NV = 0x00009091, + GL_AFFINE_2D_NV = 0x00009092, + GL_AFFINE_3D_NV = 0x00009094, + GL_TRANSPOSE_AFFINE_2D_NV = 0x00009096, + GL_TRANSPOSE_AFFINE_3D_NV = 0x00009098, + GL_UTF8_NV = 0x0000909A, + GL_UTF16_NV = 0x0000909B, + GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV = 0x0000909C, + GL_PATH_COMMAND_COUNT_NV = 0x0000909D, + GL_PATH_COORD_COUNT_NV = 0x0000909E, + GL_PATH_DASH_ARRAY_COUNT_NV = 0x0000909F, + GL_PATH_COMPUTED_LENGTH_NV = 0x000090A0, + GL_PATH_FILL_BOUNDING_BOX_NV = 0x000090A1, + GL_PATH_STROKE_BOUNDING_BOX_NV = 0x000090A2, + GL_SQUARE_NV = 0x000090A3, + GL_ROUND_NV = 0x000090A4, + GL_TRIANGULAR_NV = 0x000090A5, + GL_BEVEL_NV = 0x000090A6, + GL_MITER_REVERT_NV = 0x000090A7, + GL_MITER_TRUNCATE_NV = 0x000090A8, + GL_SKIP_MISSING_GLYPH_NV = 0x000090A9, + GL_USE_MISSING_GLYPH_NV = 0x000090AA, + GL_PATH_ERROR_POSITION_NV = 0x000090AB, + GL_PATH_FOG_GEN_MODE_NV = 0x000090AC, + GL_ACCUM_ADJACENT_PAIRS_NV = 0x000090AD, + GL_ADJACENT_PAIRS_NV = 0x000090AE, + GL_FIRST_TO_REST_NV = 0x000090AF, + GL_PATH_GEN_MODE_NV = 0x000090B0, + GL_PATH_GEN_COEFF_NV = 0x000090B1, + GL_PATH_GEN_COLOR_FORMAT_NV = 0x000090B2, + GL_PATH_GEN_COMPONENTS_NV = 0x000090B3, + GL_PATH_DASH_OFFSET_RESET_NV = 0x000090B4, + GL_MOVE_TO_RESETS_NV = 0x000090B5, + GL_MOVE_TO_CONTINUES_NV = 0x000090B6, + GL_PATH_STENCIL_FUNC_NV = 0x000090B7, + GL_PATH_STENCIL_REF_NV = 0x000090B8, + GL_PATH_STENCIL_VALUE_MASK_NV = 0x000090B9, + GL_SCALED_RESOLVE_FASTEST_EXT = 0x000090BA, + GL_SCALED_RESOLVE_NICEST_EXT = 0x000090BB, + GL_MIN_MAP_BUFFER_ALIGNMENT = 0x000090BC, + GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV = 0x000090BD, + GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV = 0x000090BE, + GL_PATH_COVER_DEPTH_FUNC_NV = 0x000090BF, + GL_IMAGE_FORMAT_COMPATIBILITY_TYPE = 0x000090C7, + GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE = 0x000090C8, + GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS = 0x000090C9, + GL_MAX_VERTEX_IMAGE_UNIFORMS = 0x000090CA, + GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS = 0x000090CB, + GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT = 0x000090CB, + GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_OES = 0x000090CB, + GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS = 0x000090CC, + GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT = 0x000090CC, + GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_OES = 0x000090CC, + GL_MAX_GEOMETRY_IMAGE_UNIFORMS = 0x000090CD, + GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT = 0x000090CD, + GL_MAX_GEOMETRY_IMAGE_UNIFORMS_OES = 0x000090CD, + GL_MAX_FRAGMENT_IMAGE_UNIFORMS = 0x000090CE, + GL_MAX_COMBINED_IMAGE_UNIFORMS = 0x000090CF, + GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV = 0x000090D0, + GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV = 0x000090D1, + GL_SHADER_STORAGE_BUFFER = 0x000090D2, + GL_SHADER_STORAGE_BUFFER_BINDING = 0x000090D3, + GL_SHADER_STORAGE_BUFFER_START = 0x000090D4, + GL_SHADER_STORAGE_BUFFER_SIZE = 0x000090D5, + GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS = 0x000090D6, + GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS = 0x000090D7, + GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT = 0x000090D7, + GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_OES = 0x000090D7, + GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS = 0x000090D8, + GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT = 0x000090D8, + GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_OES = 0x000090D8, + GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS = 0x000090D9, + GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT = 0x000090D9, + GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_OES = 0x000090D9, + GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS = 0x000090DA, + GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS = 0x000090DB, + GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS = 0x000090DC, + GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS = 0x000090DD, + GL_MAX_SHADER_STORAGE_BLOCK_SIZE = 0x000090DE, + GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT = 0x000090DF, + GL_SYNC_X11_FENCE_EXT = 0x000090E1, + GL_DEPTH_STENCIL_TEXTURE_MODE = 0x000090EA, + GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS = 0x000090EB, + GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB = 0x000090EB, + GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER = 0x000090EC, + GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER = 0x000090ED, + GL_DISPATCH_INDIRECT_BUFFER = 0x000090EE, + GL_DISPATCH_INDIRECT_BUFFER_BINDING = 0x000090EF, + GL_COLOR_ATTACHMENT_EXT = 0x000090F0, + GL_MULTIVIEW_EXT = 0x000090F1, + GL_MAX_MULTIVIEW_BUFFERS_EXT = 0x000090F2, + GL_CONTEXT_ROBUST_ACCESS = 0x000090F3, + GL_CONTEXT_ROBUST_ACCESS_EXT = 0x000090F3, + GL_CONTEXT_ROBUST_ACCESS_KHR = 0x000090F3, + GL_COMPUTE_PROGRAM_NV = 0x000090FB, + GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV = 0x000090FC, + GL_TEXTURE_2D_MULTISAMPLE = 0x00009100, + GL_PROXY_TEXTURE_2D_MULTISAMPLE = 0x00009101, + GL_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x00009102, + GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES = 0x00009102, + GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = 0x00009103, + GL_TEXTURE_BINDING_2D_MULTISAMPLE = 0x00009104, + GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 0x00009105, + GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES = 0x00009105, + GL_TEXTURE_SAMPLES = 0x00009106, + GL_TEXTURE_FIXED_SAMPLE_LOCATIONS = 0x00009107, + GL_SAMPLER_2D_MULTISAMPLE = 0x00009108, + GL_INT_SAMPLER_2D_MULTISAMPLE = 0x00009109, + GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 0x0000910A, + GL_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x0000910B, + GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES = 0x0000910B, + GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x0000910C, + GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES = 0x0000910C, + GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 0x0000910D, + GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES = 0x0000910D, + GL_MAX_COLOR_TEXTURE_SAMPLES = 0x0000910E, + GL_MAX_DEPTH_TEXTURE_SAMPLES = 0x0000910F, + GL_MAX_INTEGER_SAMPLES = 0x00009110, + GL_MAX_SERVER_WAIT_TIMEOUT = 0x00009111, + GL_MAX_SERVER_WAIT_TIMEOUT_APPLE = 0x00009111, + GL_OBJECT_TYPE = 0x00009112, + GL_OBJECT_TYPE_APPLE = 0x00009112, + GL_SYNC_CONDITION = 0x00009113, + GL_SYNC_CONDITION_APPLE = 0x00009113, + GL_SYNC_STATUS = 0x00009114, + GL_SYNC_STATUS_APPLE = 0x00009114, + GL_SYNC_FLAGS = 0x00009115, + GL_SYNC_FLAGS_APPLE = 0x00009115, + GL_SYNC_FENCE = 0x00009116, + GL_SYNC_FENCE_APPLE = 0x00009116, + GL_SYNC_GPU_COMMANDS_COMPLETE = 0x00009117, + GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE = 0x00009117, + GL_UNSIGNALED = 0x00009118, + GL_UNSIGNALED_APPLE = 0x00009118, + GL_SIGNALED = 0x00009119, + GL_SIGNALED_APPLE = 0x00009119, + GL_ALREADY_SIGNALED = 0x0000911A, + GL_ALREADY_SIGNALED_APPLE = 0x0000911A, + GL_TIMEOUT_EXPIRED = 0x0000911B, + GL_TIMEOUT_EXPIRED_APPLE = 0x0000911B, + GL_CONDITION_SATISFIED = 0x0000911C, + GL_CONDITION_SATISFIED_APPLE = 0x0000911C, + GL_WAIT_FAILED = 0x0000911D, + GL_WAIT_FAILED_APPLE = 0x0000911D, + GL_BUFFER_ACCESS_FLAGS = 0x0000911F, + GL_BUFFER_MAP_LENGTH = 0x00009120, + GL_BUFFER_MAP_OFFSET = 0x00009121, + GL_MAX_VERTEX_OUTPUT_COMPONENTS = 0x00009122, + GL_MAX_GEOMETRY_INPUT_COMPONENTS = 0x00009123, + GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT = 0x00009123, + GL_MAX_GEOMETRY_INPUT_COMPONENTS_OES = 0x00009123, + GL_MAX_GEOMETRY_OUTPUT_COMPONENTS = 0x00009124, + GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT = 0x00009124, + GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_OES = 0x00009124, + GL_MAX_FRAGMENT_INPUT_COMPONENTS = 0x00009125, + GL_CONTEXT_PROFILE_MASK = 0x00009126, + GL_UNPACK_COMPRESSED_BLOCK_WIDTH = 0x00009127, + GL_UNPACK_COMPRESSED_BLOCK_HEIGHT = 0x00009128, + GL_UNPACK_COMPRESSED_BLOCK_DEPTH = 0x00009129, + GL_UNPACK_COMPRESSED_BLOCK_SIZE = 0x0000912A, + GL_PACK_COMPRESSED_BLOCK_WIDTH = 0x0000912B, + GL_PACK_COMPRESSED_BLOCK_HEIGHT = 0x0000912C, + GL_PACK_COMPRESSED_BLOCK_DEPTH = 0x0000912D, + GL_PACK_COMPRESSED_BLOCK_SIZE = 0x0000912E, + GL_TEXTURE_IMMUTABLE_FORMAT = 0x0000912F, + GL_TEXTURE_IMMUTABLE_FORMAT_EXT = 0x0000912F, + GL_SGX_PROGRAM_BINARY_IMG = 0x00009130, + GL_RENDERBUFFER_SAMPLES_IMG = 0x00009133, + GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG = 0x00009134, + GL_MAX_SAMPLES_IMG = 0x00009135, + GL_TEXTURE_SAMPLES_IMG = 0x00009136, + GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG = 0x00009137, + GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG = 0x00009138, + GL_MAX_DEBUG_MESSAGE_LENGTH = 0x00009143, + GL_MAX_DEBUG_MESSAGE_LENGTH_AMD = 0x00009143, + GL_MAX_DEBUG_MESSAGE_LENGTH_ARB = 0x00009143, + GL_MAX_DEBUG_MESSAGE_LENGTH_KHR = 0x00009143, + GL_MAX_DEBUG_LOGGED_MESSAGES = 0x00009144, + GL_MAX_DEBUG_LOGGED_MESSAGES_AMD = 0x00009144, + GL_MAX_DEBUG_LOGGED_MESSAGES_ARB = 0x00009144, + GL_MAX_DEBUG_LOGGED_MESSAGES_KHR = 0x00009144, + GL_DEBUG_LOGGED_MESSAGES = 0x00009145, + GL_DEBUG_LOGGED_MESSAGES_AMD = 0x00009145, + GL_DEBUG_LOGGED_MESSAGES_ARB = 0x00009145, + GL_DEBUG_LOGGED_MESSAGES_KHR = 0x00009145, + GL_DEBUG_SEVERITY_HIGH = 0x00009146, + GL_DEBUG_SEVERITY_HIGH_AMD = 0x00009146, + GL_DEBUG_SEVERITY_HIGH_ARB = 0x00009146, + GL_DEBUG_SEVERITY_HIGH_KHR = 0x00009146, + GL_DEBUG_SEVERITY_MEDIUM = 0x00009147, + GL_DEBUG_SEVERITY_MEDIUM_AMD = 0x00009147, + GL_DEBUG_SEVERITY_MEDIUM_ARB = 0x00009147, + GL_DEBUG_SEVERITY_MEDIUM_KHR = 0x00009147, + GL_DEBUG_SEVERITY_LOW = 0x00009148, + GL_DEBUG_SEVERITY_LOW_AMD = 0x00009148, + GL_DEBUG_SEVERITY_LOW_ARB = 0x00009148, + GL_DEBUG_SEVERITY_LOW_KHR = 0x00009148, + GL_DEBUG_CATEGORY_API_ERROR_AMD = 0x00009149, + GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD = 0x0000914A, + GL_DEBUG_CATEGORY_DEPRECATION_AMD = 0x0000914B, + GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD = 0x0000914C, + GL_DEBUG_CATEGORY_PERFORMANCE_AMD = 0x0000914D, + GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD = 0x0000914E, + GL_DEBUG_CATEGORY_APPLICATION_AMD = 0x0000914F, + GL_DEBUG_CATEGORY_OTHER_AMD = 0x00009150, + GL_BUFFER_OBJECT_EXT = 0x00009151, + GL_DATA_BUFFER_AMD = 0x00009151, + GL_PERFORMANCE_MONITOR_AMD = 0x00009152, + GL_QUERY_OBJECT_AMD = 0x00009153, + GL_QUERY_OBJECT_EXT = 0x00009153, + GL_VERTEX_ARRAY_OBJECT_AMD = 0x00009154, + GL_VERTEX_ARRAY_OBJECT_EXT = 0x00009154, + GL_SAMPLER_OBJECT_AMD = 0x00009155, + GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD = 0x00009160, + GL_QUERY_BUFFER = 0x00009192, + GL_QUERY_BUFFER_AMD = 0x00009192, + GL_QUERY_BUFFER_BINDING = 0x00009193, + GL_QUERY_BUFFER_BINDING_AMD = 0x00009193, + GL_QUERY_RESULT_NO_WAIT = 0x00009194, + GL_QUERY_RESULT_NO_WAIT_AMD = 0x00009194, + GL_VIRTUAL_PAGE_SIZE_X_ARB = 0x00009195, + GL_VIRTUAL_PAGE_SIZE_X_EXT = 0x00009195, + GL_VIRTUAL_PAGE_SIZE_X_AMD = 0x00009195, + GL_VIRTUAL_PAGE_SIZE_Y_ARB = 0x00009196, + GL_VIRTUAL_PAGE_SIZE_Y_EXT = 0x00009196, + GL_VIRTUAL_PAGE_SIZE_Y_AMD = 0x00009196, + GL_VIRTUAL_PAGE_SIZE_Z_ARB = 0x00009197, + GL_VIRTUAL_PAGE_SIZE_Z_EXT = 0x00009197, + GL_VIRTUAL_PAGE_SIZE_Z_AMD = 0x00009197, + GL_MAX_SPARSE_TEXTURE_SIZE_ARB = 0x00009198, + GL_MAX_SPARSE_TEXTURE_SIZE_EXT = 0x00009198, + GL_MAX_SPARSE_TEXTURE_SIZE_AMD = 0x00009198, + GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB = 0x00009199, + GL_MAX_SPARSE_3D_TEXTURE_SIZE_EXT = 0x00009199, + GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD = 0x00009199, + GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS = 0x0000919A, + GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB = 0x0000919A, + GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_EXT = 0x0000919A, + GL_MIN_SPARSE_LEVEL_AMD = 0x0000919B, + GL_MIN_LOD_WARNING_AMD = 0x0000919C, + GL_TEXTURE_BUFFER_OFFSET = 0x0000919D, + GL_TEXTURE_BUFFER_OFFSET_EXT = 0x0000919D, + GL_TEXTURE_BUFFER_OFFSET_OES = 0x0000919D, + GL_TEXTURE_BUFFER_SIZE = 0x0000919E, + GL_TEXTURE_BUFFER_SIZE_EXT = 0x0000919E, + GL_TEXTURE_BUFFER_SIZE_OES = 0x0000919E, + GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT = 0x0000919F, + GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT = 0x0000919F, + GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES = 0x0000919F, + GL_STREAM_RASTERIZATION_AMD = 0x000091A0, + GL_VERTEX_ELEMENT_SWIZZLE_AMD = 0x000091A4, + GL_VERTEX_ID_SWIZZLE_AMD = 0x000091A5, + GL_TEXTURE_SPARSE_ARB = 0x000091A6, + GL_TEXTURE_SPARSE_EXT = 0x000091A6, + GL_VIRTUAL_PAGE_SIZE_INDEX_ARB = 0x000091A7, + GL_VIRTUAL_PAGE_SIZE_INDEX_EXT = 0x000091A7, + GL_NUM_VIRTUAL_PAGE_SIZES_ARB = 0x000091A8, + GL_NUM_VIRTUAL_PAGE_SIZES_EXT = 0x000091A8, + GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB = 0x000091A9, + GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_EXT = 0x000091A9, + GL_NUM_SPARSE_LEVELS_ARB = 0x000091AA, + GL_NUM_SPARSE_LEVELS_EXT = 0x000091AA, + GL_COMPUTE_SHADER = 0x000091B9, + GL_MAX_COMPUTE_UNIFORM_BLOCKS = 0x000091BB, + GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS = 0x000091BC, + GL_MAX_COMPUTE_IMAGE_UNIFORMS = 0x000091BD, + GL_MAX_COMPUTE_WORK_GROUP_COUNT = 0x000091BE, + GL_MAX_COMPUTE_WORK_GROUP_SIZE = 0x000091BF, + GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB = 0x000091BF, + GL_UNPACK_FLIP_Y_WEBGL = 0x00009240, + GL_UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x00009241, + GL_CONTEXT_LOST_WEBGL = 0x00009242, + GL_UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x00009243, + GL_BROWSER_DEFAULT_WEBGL = 0x00009244, + GL_SHADER_BINARY_DMP = 0x00009250, + GL_SMAPHS30_PROGRAM_BINARY_DMP = 0x00009251, + GL_SMAPHS_PROGRAM_BINARY_DMP = 0x00009252, + GL_DMP_PROGRAM_BINARY_DMP = 0x00009253, + GL_GCCSO_SHADER_BINARY_FJ = 0x00009260, + GL_COMPRESSED_R11_EAC = 0x00009270, + GL_COMPRESSED_R11_EAC_OES = 0x00009270, + GL_COMPRESSED_SIGNED_R11_EAC = 0x00009271, + GL_COMPRESSED_SIGNED_R11_EAC_OES = 0x00009271, + GL_COMPRESSED_RG11_EAC = 0x00009272, + GL_COMPRESSED_RG11_EAC_OES = 0x00009272, + GL_COMPRESSED_SIGNED_RG11_EAC = 0x00009273, + GL_COMPRESSED_SIGNED_RG11_EAC_OES = 0x00009273, + GL_COMPRESSED_RGB8_ETC2 = 0x00009274, + GL_COMPRESSED_RGB8_ETC2_OES = 0x00009274, + GL_COMPRESSED_SRGB8_ETC2 = 0x00009275, + GL_COMPRESSED_SRGB8_ETC2_OES = 0x00009275, + GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x00009276, + GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2_OES = 0x00009276, + GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x00009277, + GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2_OES = 0x00009277, + GL_COMPRESSED_RGBA8_ETC2_EAC = 0x00009278, + GL_COMPRESSED_RGBA8_ETC2_EAC_OES = 0x00009278, + GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x00009279, + GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC_OES = 0x00009279, + GL_BLEND_PREMULTIPLIED_SRC_NV = 0x00009280, + GL_BLEND_OVERLAP_NV = 0x00009281, + GL_UNCORRELATED_NV = 0x00009282, + GL_DISJOINT_NV = 0x00009283, + GL_CONJOINT_NV = 0x00009284, + GL_BLEND_ADVANCED_COHERENT_KHR = 0x00009285, + GL_BLEND_ADVANCED_COHERENT_NV = 0x00009285, + GL_SRC_NV = 0x00009286, + GL_DST_NV = 0x00009287, + GL_SRC_OVER_NV = 0x00009288, + GL_DST_OVER_NV = 0x00009289, + GL_SRC_IN_NV = 0x0000928A, + GL_DST_IN_NV = 0x0000928B, + GL_SRC_OUT_NV = 0x0000928C, + GL_DST_OUT_NV = 0x0000928D, + GL_SRC_ATOP_NV = 0x0000928E, + GL_DST_ATOP_NV = 0x0000928F, + GL_PLUS_NV = 0x00009291, + GL_PLUS_DARKER_NV = 0x00009292, + GL_MULTIPLY_KHR = 0x00009294, + GL_MULTIPLY_NV = 0x00009294, + GL_SCREEN_KHR = 0x00009295, + GL_SCREEN_NV = 0x00009295, + GL_OVERLAY_KHR = 0x00009296, + GL_OVERLAY_NV = 0x00009296, + GL_DARKEN_KHR = 0x00009297, + GL_DARKEN_NV = 0x00009297, + GL_LIGHTEN_KHR = 0x00009298, + GL_LIGHTEN_NV = 0x00009298, + GL_COLORDODGE_KHR = 0x00009299, + GL_COLORDODGE_NV = 0x00009299, + GL_COLORBURN_KHR = 0x0000929A, + GL_COLORBURN_NV = 0x0000929A, + GL_HARDLIGHT_KHR = 0x0000929B, + GL_HARDLIGHT_NV = 0x0000929B, + GL_SOFTLIGHT_KHR = 0x0000929C, + GL_SOFTLIGHT_NV = 0x0000929C, + GL_DIFFERENCE_KHR = 0x0000929E, + GL_DIFFERENCE_NV = 0x0000929E, + GL_MINUS_NV = 0x0000929F, + GL_EXCLUSION_KHR = 0x000092A0, + GL_EXCLUSION_NV = 0x000092A0, + GL_CONTRAST_NV = 0x000092A1, + GL_INVERT_RGB_NV = 0x000092A3, + GL_LINEARDODGE_NV = 0x000092A4, + GL_LINEARBURN_NV = 0x000092A5, + GL_VIVIDLIGHT_NV = 0x000092A6, + GL_LINEARLIGHT_NV = 0x000092A7, + GL_PINLIGHT_NV = 0x000092A8, + GL_HARDMIX_NV = 0x000092A9, + GL_HSL_HUE_KHR = 0x000092AD, + GL_HSL_HUE_NV = 0x000092AD, + GL_HSL_SATURATION_KHR = 0x000092AE, + GL_HSL_SATURATION_NV = 0x000092AE, + GL_HSL_COLOR_KHR = 0x000092AF, + GL_HSL_COLOR_NV = 0x000092AF, + GL_HSL_LUMINOSITY_KHR = 0x000092B0, + GL_HSL_LUMINOSITY_NV = 0x000092B0, + GL_PLUS_CLAMPED_NV = 0x000092B1, + GL_PLUS_CLAMPED_ALPHA_NV = 0x000092B2, + GL_MINUS_CLAMPED_NV = 0x000092B3, + GL_INVERT_OVG_NV = 0x000092B4, + GL_PRIMITIVE_BOUNDING_BOX_EXT = 0x000092BE, + GL_PRIMITIVE_BOUNDING_BOX_OES = 0x000092BE, + GL_ATOMIC_COUNTER_BUFFER = 0x000092C0, + GL_ATOMIC_COUNTER_BUFFER_BINDING = 0x000092C1, + GL_ATOMIC_COUNTER_BUFFER_START = 0x000092C2, + GL_ATOMIC_COUNTER_BUFFER_SIZE = 0x000092C3, + GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE = 0x000092C4, + GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS = 0x000092C5, + GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES = 0x000092C6, + GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER = 0x000092C7, + GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER = 0x000092C8, + GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x000092C9, + GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER = 0x000092CA, + GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER = 0x000092CB, + GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS = 0x000092CC, + GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS = 0x000092CD, + GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT = 0x000092CD, + GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_OES = 0x000092CD, + GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS = 0x000092CE, + GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT = 0x000092CE, + GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_OES = 0x000092CE, + GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS = 0x000092CF, + GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT = 0x000092CF, + GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_OES = 0x000092CF, + GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS = 0x000092D0, + GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS = 0x000092D1, + GL_MAX_VERTEX_ATOMIC_COUNTERS = 0x000092D2, + GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS = 0x000092D3, + GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT = 0x000092D3, + GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_OES = 0x000092D3, + GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS = 0x000092D4, + GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT = 0x000092D4, + GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_OES = 0x000092D4, + GL_MAX_GEOMETRY_ATOMIC_COUNTERS = 0x000092D5, + GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT = 0x000092D5, + GL_MAX_GEOMETRY_ATOMIC_COUNTERS_OES = 0x000092D5, + GL_MAX_FRAGMENT_ATOMIC_COUNTERS = 0x000092D6, + GL_MAX_COMBINED_ATOMIC_COUNTERS = 0x000092D7, + GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE = 0x000092D8, + GL_ACTIVE_ATOMIC_COUNTER_BUFFERS = 0x000092D9, + GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX = 0x000092DA, + GL_UNSIGNED_INT_ATOMIC_COUNTER = 0x000092DB, + GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS = 0x000092DC, + GL_FRAGMENT_COVERAGE_TO_COLOR_NV = 0x000092DD, + GL_FRAGMENT_COVERAGE_COLOR_NV = 0x000092DE, + GL_DEBUG_OUTPUT = 0x000092E0, + GL_DEBUG_OUTPUT_KHR = 0x000092E0, + GL_UNIFORM = 0x000092E1, + GL_UNIFORM_BLOCK = 0x000092E2, + GL_PROGRAM_INPUT = 0x000092E3, + GL_PROGRAM_OUTPUT = 0x000092E4, + GL_BUFFER_VARIABLE = 0x000092E5, + GL_SHADER_STORAGE_BLOCK = 0x000092E6, + GL_IS_PER_PATCH = 0x000092E7, + GL_IS_PER_PATCH_EXT = 0x000092E7, + GL_IS_PER_PATCH_OES = 0x000092E7, + GL_VERTEX_SUBROUTINE = 0x000092E8, + GL_TESS_CONTROL_SUBROUTINE = 0x000092E9, + GL_TESS_EVALUATION_SUBROUTINE = 0x000092EA, + GL_GEOMETRY_SUBROUTINE = 0x000092EB, + GL_FRAGMENT_SUBROUTINE = 0x000092EC, + GL_COMPUTE_SUBROUTINE = 0x000092ED, + GL_VERTEX_SUBROUTINE_UNIFORM = 0x000092EE, + GL_TESS_CONTROL_SUBROUTINE_UNIFORM = 0x000092EF, + GL_TESS_EVALUATION_SUBROUTINE_UNIFORM = 0x000092F0, + GL_GEOMETRY_SUBROUTINE_UNIFORM = 0x000092F1, + GL_FRAGMENT_SUBROUTINE_UNIFORM = 0x000092F2, + GL_COMPUTE_SUBROUTINE_UNIFORM = 0x000092F3, + GL_TRANSFORM_FEEDBACK_VARYING = 0x000092F4, + GL_ACTIVE_RESOURCES = 0x000092F5, + GL_MAX_NAME_LENGTH = 0x000092F6, + GL_MAX_NUM_ACTIVE_VARIABLES = 0x000092F7, + GL_MAX_NUM_COMPATIBLE_SUBROUTINES = 0x000092F8, + GL_NAME_LENGTH = 0x000092F9, + GL_TYPE = 0x000092FA, + GL_ARRAY_SIZE = 0x000092FB, + GL_OFFSET = 0x000092FC, + GL_BLOCK_INDEX = 0x000092FD, + GL_ARRAY_STRIDE = 0x000092FE, + GL_MATRIX_STRIDE = 0x000092FF, + GL_IS_ROW_MAJOR = 0x00009300, + GL_ATOMIC_COUNTER_BUFFER_INDEX = 0x00009301, + GL_BUFFER_BINDING = 0x00009302, + GL_BUFFER_DATA_SIZE = 0x00009303, + GL_NUM_ACTIVE_VARIABLES = 0x00009304, + GL_ACTIVE_VARIABLES = 0x00009305, + GL_REFERENCED_BY_VERTEX_SHADER = 0x00009306, + GL_REFERENCED_BY_TESS_CONTROL_SHADER = 0x00009307, + GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT = 0x00009307, + GL_REFERENCED_BY_TESS_CONTROL_SHADER_OES = 0x00009307, + GL_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x00009308, + GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT = 0x00009308, + GL_REFERENCED_BY_TESS_EVALUATION_SHADER_OES = 0x00009308, + GL_REFERENCED_BY_GEOMETRY_SHADER = 0x00009309, + GL_REFERENCED_BY_GEOMETRY_SHADER_EXT = 0x00009309, + GL_REFERENCED_BY_GEOMETRY_SHADER_OES = 0x00009309, + GL_REFERENCED_BY_FRAGMENT_SHADER = 0x0000930A, + GL_REFERENCED_BY_COMPUTE_SHADER = 0x0000930B, + GL_TOP_LEVEL_ARRAY_SIZE = 0x0000930C, + GL_TOP_LEVEL_ARRAY_STRIDE = 0x0000930D, + GL_LOCATION = 0x0000930E, + GL_LOCATION_INDEX = 0x0000930F, + GL_FRAMEBUFFER_DEFAULT_WIDTH = 0x00009310, + GL_FRAMEBUFFER_DEFAULT_HEIGHT = 0x00009311, + GL_FRAMEBUFFER_DEFAULT_LAYERS = 0x00009312, + GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT = 0x00009312, + GL_FRAMEBUFFER_DEFAULT_LAYERS_OES = 0x00009312, + GL_FRAMEBUFFER_DEFAULT_SAMPLES = 0x00009313, + GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS = 0x00009314, + GL_MAX_FRAMEBUFFER_WIDTH = 0x00009315, + GL_MAX_FRAMEBUFFER_HEIGHT = 0x00009316, + GL_MAX_FRAMEBUFFER_LAYERS = 0x00009317, + GL_MAX_FRAMEBUFFER_LAYERS_EXT = 0x00009317, + GL_MAX_FRAMEBUFFER_LAYERS_OES = 0x00009317, + GL_MAX_FRAMEBUFFER_SAMPLES = 0x00009318, + GL_RASTER_MULTISAMPLE_EXT = 0x00009327, + GL_RASTER_SAMPLES_EXT = 0x00009328, + GL_MAX_RASTER_SAMPLES_EXT = 0x00009329, + GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT = 0x0000932A, + GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT = 0x0000932B, + GL_EFFECTIVE_RASTER_SAMPLES_EXT = 0x0000932C, + GL_DEPTH_SAMPLES_NV = 0x0000932D, + GL_STENCIL_SAMPLES_NV = 0x0000932E, + GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV = 0x0000932F, + GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV = 0x00009330, + GL_COVERAGE_MODULATION_TABLE_NV = 0x00009331, + GL_COVERAGE_MODULATION_NV = 0x00009332, + GL_COVERAGE_MODULATION_TABLE_SIZE_NV = 0x00009333, + GL_WARP_SIZE_NV = 0x00009339, + GL_WARPS_PER_SM_NV = 0x0000933A, + GL_SM_COUNT_NV = 0x0000933B, + GL_FILL_RECTANGLE_NV = 0x0000933C, + GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV = 0x0000933D, + GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV = 0x0000933E, + GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV = 0x0000933F, + GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV = 0x00009340, + GL_PROGRAMMABLE_SAMPLE_LOCATION_NV = 0x00009341, + GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV = 0x00009342, + GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV = 0x00009343, + GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB = 0x00009344, + GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB = 0x00009345, + GL_CONSERVATIVE_RASTERIZATION_NV = 0x00009346, + GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV = 0x00009347, + GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV = 0x00009348, + GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV = 0x00009349, + GL_LOCATION_COMPONENT = 0x0000934A, + GL_TRANSFORM_FEEDBACK_BUFFER_INDEX = 0x0000934B, + GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE = 0x0000934C, + GL_CLIP_ORIGIN = 0x0000935C, + GL_CLIP_DEPTH_MODE = 0x0000935D, + GL_NEGATIVE_ONE_TO_ONE = 0x0000935E, + GL_ZERO_TO_ONE = 0x0000935F, + GL_CLEAR_TEXTURE = 0x00009365, + GL_FONT_GLYPHS_AVAILABLE_NV = 0x00009368, + GL_FONT_TARGET_UNAVAILABLE_NV = 0x00009369, + GL_FONT_UNAVAILABLE_NV = 0x0000936A, + GL_FONT_UNINTELLIGIBLE_NV = 0x0000936B, + GL_STANDARD_FONT_FORMAT_NV = 0x0000936C, + GL_FRAGMENT_INPUT_NV = 0x0000936D, + GL_UNIFORM_BUFFER_UNIFIED_NV = 0x0000936E, + GL_UNIFORM_BUFFER_ADDRESS_NV = 0x0000936F, + GL_UNIFORM_BUFFER_LENGTH_NV = 0x00009370, + GL_MULTISAMPLES_NV = 0x00009371, + GL_SUPERSAMPLE_SCALE_X_NV = 0x00009372, + GL_SUPERSAMPLE_SCALE_Y_NV = 0x00009373, + GL_CONFORMANT_NV = 0x00009374, + GL_NUM_SAMPLE_COUNTS = 0x00009380, + GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE = 0x000093A0, + GL_BGRA8_EXT = 0x000093A1, + GL_TEXTURE_USAGE_ANGLE = 0x000093A2, + GL_FRAMEBUFFER_ATTACHMENT_ANGLE = 0x000093A3, + GL_PACK_REVERSE_ROW_ORDER_ANGLE = 0x000093A4, + GL_PROGRAM_BINARY_ANGLE = 0x000093A6, + GL_COMPRESSED_RGBA_ASTC_4x4_KHR = 0x000093B0, + GL_COMPRESSED_RGBA_ASTC_5x4_KHR = 0x000093B1, + GL_COMPRESSED_RGBA_ASTC_5x5_KHR = 0x000093B2, + GL_COMPRESSED_RGBA_ASTC_6x5_KHR = 0x000093B3, + GL_COMPRESSED_RGBA_ASTC_6x6_KHR = 0x000093B4, + GL_COMPRESSED_RGBA_ASTC_8x5_KHR = 0x000093B5, + GL_COMPRESSED_RGBA_ASTC_8x6_KHR = 0x000093B6, + GL_COMPRESSED_RGBA_ASTC_8x8_KHR = 0x000093B7, + GL_COMPRESSED_RGBA_ASTC_10x5_KHR = 0x000093B8, + GL_COMPRESSED_RGBA_ASTC_10x6_KHR = 0x000093B9, + GL_COMPRESSED_RGBA_ASTC_10x8_KHR = 0x000093BA, + GL_COMPRESSED_RGBA_ASTC_10x10_KHR = 0x000093BB, + GL_COMPRESSED_RGBA_ASTC_12x10_KHR = 0x000093BC, + GL_COMPRESSED_RGBA_ASTC_12x12_KHR = 0x000093BD, + GL_COMPRESSED_RGBA_ASTC_3x3x3_OES = 0x000093C0, + GL_COMPRESSED_RGBA_ASTC_4x3x3_OES = 0x000093C1, + GL_COMPRESSED_RGBA_ASTC_4x4x3_OES = 0x000093C2, + GL_COMPRESSED_RGBA_ASTC_4x4x4_OES = 0x000093C3, + GL_COMPRESSED_RGBA_ASTC_5x4x4_OES = 0x000093C4, + GL_COMPRESSED_RGBA_ASTC_5x5x4_OES = 0x000093C5, + GL_COMPRESSED_RGBA_ASTC_5x5x5_OES = 0x000093C6, + GL_COMPRESSED_RGBA_ASTC_6x5x5_OES = 0x000093C7, + GL_COMPRESSED_RGBA_ASTC_6x6x5_OES = 0x000093C8, + GL_COMPRESSED_RGBA_ASTC_6x6x6_OES = 0x000093C9, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR = 0x000093D0, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR = 0x000093D1, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR = 0x000093D2, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR = 0x000093D3, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR = 0x000093D4, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR = 0x000093D5, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR = 0x000093D6, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR = 0x000093D7, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR = 0x000093D8, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR = 0x000093D9, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR = 0x000093DA, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR = 0x000093DB, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR = 0x000093DC, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR = 0x000093DD, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES = 0x000093E0, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES = 0x000093E1, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES = 0x000093E2, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES = 0x000093E3, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES = 0x000093E4, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES = 0x000093E5, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES = 0x000093E6, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES = 0x000093E7, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES = 0x000093E8, + GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES = 0x000093E9, + GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG = 0x000093F0, + GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG = 0x000093F1, + GL_PERFQUERY_COUNTER_EVENT_INTEL = 0x000094F0, + GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL = 0x000094F1, + GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL = 0x000094F2, + GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL = 0x000094F3, + GL_PERFQUERY_COUNTER_RAW_INTEL = 0x000094F4, + GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL = 0x000094F5, + GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL = 0x000094F8, + GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL = 0x000094F9, + GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL = 0x000094FA, + GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL = 0x000094FB, + GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL = 0x000094FC, + GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL = 0x000094FD, + GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL = 0x000094FE, + GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL = 0x000094FF, + GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL = 0x00009500, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR = 0x00009630, + GL_MAX_VIEWS_OVR = 0x00009631, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR = 0x00009632, + GL_GS_SHADER_BINARY_MTK = 0x00009640, + GL_GS_PROGRAM_BINARY_MTK = 0x00009641, + GL_RASTER_POSITION_UNCLIPPED_IBM = 0x00019262, + GL_CULL_VERTEX_IBM = 0x0001928A, + GL_ALL_STATIC_DATA_IBM = 0x00019294, + GL_STATIC_VERTEX_ARRAY_IBM = 0x00019295, + GL_VERTEX_ARRAY_LIST_IBM = 0x0001929E, + GL_NORMAL_ARRAY_LIST_IBM = 0x0001929F, + GL_COLOR_ARRAY_LIST_IBM = 0x000192A0, + GL_INDEX_ARRAY_LIST_IBM = 0x000192A1, + GL_TEXTURE_COORD_ARRAY_LIST_IBM = 0x000192A2, + GL_EDGE_FLAG_ARRAY_LIST_IBM = 0x000192A3, + GL_FOG_COORDINATE_ARRAY_LIST_IBM = 0x000192A4, + GL_SECONDARY_COLOR_ARRAY_LIST_IBM = 0x000192A5, + GL_VERTEX_ARRAY_LIST_STRIDE_IBM = 0x000192A8, + GL_NORMAL_ARRAY_LIST_STRIDE_IBM = 0x000192A9, + GL_COLOR_ARRAY_LIST_STRIDE_IBM = 0x000192AA, + GL_INDEX_ARRAY_LIST_STRIDE_IBM = 0x000192AB, + GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM = 0x000192AC, + GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM = 0x000192AD, + GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM = 0x000192AE, + GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM = 0x000192AF, + GL_PREFER_DOUBLEBUFFER_HINT_PGI = 0x0001A1F8, + GL_CONSERVE_MEMORY_HINT_PGI = 0x0001A1FD, + GL_RECLAIM_MEMORY_HINT_PGI = 0x0001A1FE, + GL_NATIVE_GRAPHICS_HANDLE_PGI = 0x0001A202, + GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI = 0x0001A203, + GL_NATIVE_GRAPHICS_END_HINT_PGI = 0x0001A204, + GL_ALWAYS_FAST_HINT_PGI = 0x0001A20C, + GL_ALWAYS_SOFT_HINT_PGI = 0x0001A20D, + GL_ALLOW_DRAW_OBJ_HINT_PGI = 0x0001A20E, + GL_ALLOW_DRAW_WIN_HINT_PGI = 0x0001A20F, + GL_ALLOW_DRAW_FRG_HINT_PGI = 0x0001A210, + GL_ALLOW_DRAW_MEM_HINT_PGI = 0x0001A211, + GL_STRICT_DEPTHFUNC_HINT_PGI = 0x0001A216, + GL_STRICT_LIGHTING_HINT_PGI = 0x0001A217, + GL_STRICT_SCISSOR_HINT_PGI = 0x0001A218, + GL_FULL_STIPPLE_HINT_PGI = 0x0001A219, + GL_CLIP_NEAR_HINT_PGI = 0x0001A220, + GL_CLIP_FAR_HINT_PGI = 0x0001A221, + GL_WIDE_LINE_HINT_PGI = 0x0001A222, + GL_BACK_NORMALS_HINT_PGI = 0x0001A223, + GL_VERTEX_DATA_HINT_PGI = 0x0001A22A, + GL_VERTEX_CONSISTENT_HINT_PGI = 0x0001A22B, + GL_MATERIAL_SIDE_HINT_PGI = 0x0001A22C, + GL_MAX_VERTEX_HINT_PGI = 0x0001A22D, +} + diff --git a/gfxapi/gles/api/other.api b/gfxapi/gles/api/other.api new file mode 100644 index 000000000..1438967ed --- /dev/null +++ b/gfxapi/gles/api/other.api @@ -0,0 +1,135 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glEnable.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glEnable.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glEnable.xhtml","OpenGL ES 3.1") +cmd void glDisable(GLenum capability) { + minRequiredVersion(2, 0) + switch (capability) { + case GL_BLEND, GL_CULL_FACE, GL_DEPTH_TEST, GL_DITHER, GL_POLYGON_OFFSET_FILL, + GL_SAMPLE_ALPHA_TO_COVERAGE, GL_SAMPLE_COVERAGE, GL_SCISSOR_TEST, GL_STENCIL_TEST: { + // version 2.0 + } + case GL_PRIMITIVE_RESTART_FIXED_INDEX, GL_RASTERIZER_DISCARD: { + minRequiredVersion(3, 0) + } + case GL_SAMPLE_MASK: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(capability) + } + } + + ctx := GetContext() + ctx.Capabilities[capability] = false +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glEnable.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glEnable.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glEnable.xhtml","OpenGL ES 3.1") +cmd void glEnable(GLenum capability) { + minRequiredVersion(2, 0) + switch (capability) { + case GL_BLEND, GL_CULL_FACE, GL_DEPTH_TEST, GL_DITHER, GL_POLYGON_OFFSET_FILL, + GL_SAMPLE_ALPHA_TO_COVERAGE, GL_SAMPLE_COVERAGE, GL_SCISSOR_TEST, GL_STENCIL_TEST: { + // version 2.0 + } + case GL_PRIMITIVE_RESTART_FIXED_INDEX, GL_RASTERIZER_DISCARD: { + minRequiredVersion(3, 0) + } + case GL_SAMPLE_MASK: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(capability) + } + } + + ctx := GetContext() + ctx.Capabilities[capability] = true +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glFinish.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glFinish.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glFinish.xhtml","OpenGL ES 3.1") +cmd void glFinish() { + minRequiredVersion(2, 0) + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glFlush.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glFlush.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glFlush.xhtml","OpenGL ES 3.1") +cmd void glFlush() { + minRequiredVersion(2, 0) + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glFlushMappedBufferRange.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glFlushMappedBufferRange.xhtml","OpenGL ES 3.1") +cmd void glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length) { + minRequiredVersion(3, 0) + switch (target) { + case GL_ARRAY_BUFFER, GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, GL_ELEMENT_ARRAY_BUFFER, + GL_PIXEL_PACK_BUFFER, GL_PIXEL_UNPACK_BUFFER, GL_TRANSFORM_FEEDBACK_BUFFER, + GL_UNIFORM_BUFFER: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetError.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetError.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetError.xhtml","OpenGL ES 3.1") +cmd GLenum glGetError() { + minRequiredVersion(2, 0) + + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glHint.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glHint.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glHint.xhtml","OpenGL ES 3.1") +cmd void glHint(GLenum target, GLenum mode) { + minRequiredVersion(2, 0) + switch (target) { + case GL_GENERATE_MIPMAP_HINT: { + // version 2.0 + } + case GL_FRAGMENT_SHADER_DERIVATIVE_HINT: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(target) + } + } + switch (mode) { + case GL_DONT_CARE, GL_FASTEST, GL_NICEST: { + // version 2.0 + } + default: { + glErrorInvalidEnum(mode) + } + } + + ctx := GetContext() + ctx.GenerateMipmapHint = mode +} + diff --git a/gfxapi/gles/api/programs_and_shaders.api b/gfxapi/gles/api/programs_and_shaders.api new file mode 100644 index 000000000..7f4bbb59f --- /dev/null +++ b/gfxapi/gles/api/programs_and_shaders.api @@ -0,0 +1,1603 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glActiveShaderProgram.xhtml","OpenGL ES 3.1") +cmd void glActiveShaderProgram(PipelineId pipeline, ProgramId program) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glAttachShader.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glAttachShader.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glAttachShader.xhtml","OpenGL ES 3.1") +cmd void glAttachShader(ProgramId program, ShaderId shader) { + minRequiredVersion(2, 0) + + ctx := GetContext() + p := ctx.Instances.Programs[program] + s := ctx.Instances.Shaders[shader] + p.Shaders[s.Type] = shader +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBindAttribLocation.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBindAttribLocation.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindAttribLocation.xhtml","OpenGL ES 3.1") +cmd void glBindAttribLocation(ProgramId program, AttributeLocation location, string name) { + minRequiredVersion(2, 0) + + ctx := GetContext() + p := ctx.Instances.Programs[program] + p.AttributeBindings[name] = location +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindProgramPipeline.xhtml","OpenGL ES 3.1") +cmd void glBindProgramPipeline(PipelineId pipeline) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glCompileShader.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCompileShader.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCompileShader.xhtml","OpenGL ES 3.1") +cmd void glCompileShader(ShaderId shader) { + minRequiredVersion(2, 0) + + // TODO: shader.Binary < ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glCreateProgram.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCreateProgram.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCreateProgram.xhtml","OpenGL ES 3.1") +cmd ProgramId glCreateProgram() { + minRequiredVersion(2, 0) + + ctx := GetContext() + id := as!ProgramId(?) + ctx.Instances.Programs[id] = new!Program() + return id +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glCreateShader.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCreateShader.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCreateShader.xhtml","OpenGL ES 3.1") +cmd ShaderId glCreateShader(GLenum type) { + minRequiredVersion(2, 0) + switch (type) { + case GL_FRAGMENT_SHADER, GL_VERTEX_SHADER: { + // version 2.0 + } + case GL_COMPUTE_SHADER: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(type) + } + } + + ctx := GetContext() + id := as!ShaderId(?) + ctx.Instances.Shaders[id] = new!Shader() + s := ctx.Instances.Shaders[id] + s.Type = type + return id +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCreateShaderProgram.xhtml","OpenGL ES 3.1") +cmd ProgramId glCreateShaderProgramv(GLenum type, GLsizei count, const GLchar* const* strings) { + minRequiredVersion(3, 1) + switch (type) { + case GL_COMPUTE_SHADER, GL_FRAGMENT_SHADER, GL_VERTEX_SHADER: { + // version 3.1 + } + default: { + glErrorInvalidEnum(type) + } + } + // TODO + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glDeleteProgram.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteProgram.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDeleteProgram.xhtml","OpenGL ES 3.1") +cmd void glDeleteProgram(ProgramId program) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.Instances.Programs[program] = null +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDeleteProgramPipelines.xhtml","OpenGL ES 3.1") +cmd void glDeleteProgramPipelines(GLsizei n, const PipelineId* pipelines) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glDeleteShader.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteShader.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDeleteShader.xhtml","OpenGL ES 3.1") +cmd void glDeleteShader(ShaderId shader) { + minRequiredVersion(2, 0) + + ctx := GetContext() + s := ctx.Instances.Shaders[shader] + s.Deletable = true + // TODO: refcount shader attachment and only destroy if zero + ctx.Instances.Shaders[shader] = null +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glDetachShader.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDetachShader.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDetachShader.xhtml","OpenGL ES 3.1") +cmd void glDetachShader(ProgramId program, ShaderId shader) { + minRequiredVersion(2, 0) + + ctx := GetContext() + p := ctx.Instances.Programs[program] + s := ctx.Instances.Shaders[shader] + p.Shaders[s.Type] = null +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDispatchCompute.xhtml","OpenGL ES 3.1") +cmd void glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDispatchComputeIndirect.xhtml","OpenGL ES 3.1") +cmd void glDispatchComputeIndirect(GLintptr indirect) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGenProgramPipelines.xhtml","OpenGL ES 3.1") +cmd void glGenProgramPipelines(GLsizei n, PipelineId* pipelines) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetActiveAttrib.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetActiveAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetActiveAttrib.xhtml","OpenGL ES 3.1") +cmd void glGetActiveAttrib(ProgramId program, + AttributeLocation location, + GLsizei buffer_size, + GLsizei* buffer_bytes_written, + GLint* vector_count, + GLenum* type, + GLchar* name) { + minRequiredVersion(2, 0) + + if buffer_bytes_written != null { + l := as!s32(?) + buffer_bytes_written[0] = l + write(name[0:l]) + } else { + write(name[0:256]) // HACK: Non-deterministic string length! + } + + vector_count[0] = as!s32(?) + type[0] = as!GLenum(?) +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetActiveUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetActiveUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetActiveUniform.xhtml","OpenGL ES 3.1") +cmd void glGetActiveUniform(ProgramId program, + GLuint location, + GLsizei buffer_size, + GLsizei* buffer_bytes_written, + GLint* vector_count, + GLenum* type, + GLchar* name) { + minRequiredVersion(2, 0) + + if buffer_bytes_written != null { + l := as!s32(?) + buffer_bytes_written[0] = l + write(name[0:l]) + } else { + write(name[0:256]) // HACK: Non-deterministic string length! + } + + vector_count[0] = as!s32(?) + type[0] = as!GLenum(?) +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetActiveUniformBlockName.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetActiveUniformBlockName.xhtml","OpenGL ES 3.1") +cmd void glGetActiveUniformBlockName(ProgramId program, + UniformBlockId uniform_block_index, + GLsizei buffer_size, + GLsizei* buffer_bytes_written, + GLchar* name) { + minRequiredVersion(3, 0) + + l := as!s32(?) + buffer_bytes_written[0] = l + write(name[0:l]) +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetActiveUniformBlockiv.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetActiveUniformBlockiv.xhtml","OpenGL ES 3.1") +cmd void glGetActiveUniformBlockiv(ProgramId program, + UniformBlockId uniform_block_index, + GLenum parameter_name, + GLint* parameters) { + minRequiredVersion(3, 0) + switch (parameter_name) { + case GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS, GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES, + GL_UNIFORM_BLOCK_BINDING, GL_UNIFORM_BLOCK_DATA_SIZE, GL_UNIFORM_BLOCK_NAME_LENGTH, + GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER, + GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: { + // version 3.0 + } + default: { + glErrorInvalidEnum(parameter_name) + } + } + + parameters[0] = ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetActiveUniformsiv.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetActiveUniformsiv.xhtml","OpenGL ES 3.1") +cmd void glGetActiveUniformsiv(ProgramId program, + GLsizei uniform_count, + const GLuint* uniform_indices, + GLenum parameter_name, + GLint* parameters) { + minRequiredVersion(3, 0) + switch (parameter_name) { + case GL_UNIFORM_ARRAY_STRIDE, GL_UNIFORM_BLOCK_INDEX, GL_UNIFORM_IS_ROW_MAJOR, + GL_UNIFORM_MATRIX_STRIDE, GL_UNIFORM_NAME_LENGTH, GL_UNIFORM_OFFSET, GL_UNIFORM_SIZE, + GL_UNIFORM_TYPE: { + // version 3.0 + } + default: { + glErrorInvalidEnum(parameter_name) + } + } + + read(uniform_indices[0:uniform_count]) + write(parameters[0:uniform_count]) +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetAttachedShaders.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetAttachedShaders.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetAttachedShaders.xhtml","OpenGL ES 3.1") +cmd void glGetAttachedShaders(ProgramId program, + GLsizei buffer_length, + GLsizei* shaders_length_written, + ShaderId* shaders) { + minRequiredVersion(2, 0) + + ctx := GetContext() + p := ctx.Instances.Programs[program] + l := min(buffer_length, len(p.Shaders)) + shaders_length_written[0] = l + // TODO: Requires language support. + // for i, k, v in p.Shaders { + // if i < l { + // shaders[i] = v + // } + // } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetAttribLocation.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetAttribLocation.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetAttribLocation.xhtml","OpenGL ES 3.1") +cmd GLint glGetAttribLocation(ProgramId program, string name) { + minRequiredVersion(2, 0) + + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetFragDataLocation.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetFragDataLocation.xhtml","OpenGL ES 3.1") +cmd GLint glGetFragDataLocation(ProgramId program, const GLchar* name) { + minRequiredVersion(3, 0) + // TODO + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetProgramBinary.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetProgramBinary.xhtml","OpenGL ES 3.1") +cmd void glGetProgramBinary(ProgramId program, + GLsizei bufSize, + GLsizei* length, + GLenum* binaryFormat, + void* binary) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetProgramInfoLog.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetProgramInfoLog.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetProgramInfoLog.xhtml","OpenGL ES 3.1") +cmd void glGetProgramInfoLog(ProgramId program, + GLsizei buffer_length, + GLsizei* string_length_written, + GLchar* info) { + minRequiredVersion(2, 0) + + ctx := GetContext() + p := ctx.Instances.Programs[program] + l := min(buffer_length, as!s32(len(p.InfoLog))) + copy(info[0:l], p.InfoLog[0:l]) + string_length_written[0] = l +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetProgramInterface.xhtml","OpenGL ES 3.1") +cmd void glGetProgramInterfaceiv(ProgramId program, + GLenum programInterface, + GLenum pname, + GLint* params) { + minRequiredVersion(3, 1) + switch (programInterface) { + case GL_ATOMIC_COUNTER_BUFFER, GL_BUFFER_VARIABLE, GL_PROGRAM_INPUT, GL_PROGRAM_OUTPUT, + GL_SHADER_STORAGE_BLOCK, GL_TRANSFORM_FEEDBACK_BUFFER, GL_TRANSFORM_FEEDBACK_VARYING, + GL_UNIFORM, GL_UNIFORM_BLOCK: { + // version 3.1 + } + default: { + glErrorInvalidEnum(programInterface) + } + } + switch (pname) { + case GL_ACTIVE_RESOURCES, GL_MAX_NAME_LENGTH, GL_MAX_NUM_ACTIVE_VARIABLES: { + // version 3.1 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetProgramPipelineInfoLog.xhtml","OpenGL ES 3.1") +cmd void glGetProgramPipelineInfoLog(PipelineId pipeline, + GLsizei bufSize, + GLsizei* length, + GLchar* infoLog) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetProgramPipeline.xhtml","OpenGL ES 3.1") +cmd void glGetProgramPipelineiv(PipelineId pipeline, GLenum pname, GLint* params) { + minRequiredVersion(3, 1) + switch (pname) { + case GL_ACTIVE_PROGRAM, GL_COMPUTE_SHADER, GL_FRAGMENT_SHADER, GL_INFO_LOG_LENGTH, + GL_VALIDATE_STATUS, GL_VERTEX_SHADER: { + // version 3.1 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetProgramResourceIndex.xhtml","OpenGL ES 3.1") +cmd GLuint glGetProgramResourceIndex(ProgramId program, + GLenum programInterface, + const GLchar* name) { + minRequiredVersion(3, 1) + switch (programInterface) { + case GL_BUFFER_VARIABLE, GL_PROGRAM_INPUT, GL_PROGRAM_OUTPUT, GL_SHADER_STORAGE_BLOCK, + GL_TRANSFORM_FEEDBACK_VARYING, GL_UNIFORM, GL_UNIFORM_BLOCK: { + // version 3.1 + } + default: { + glErrorInvalidEnum(programInterface) + } + } + // TODO + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetProgramResourceLocation.xhtml","OpenGL ES 3.1") +cmd GLint glGetProgramResourceLocation(ProgramId program, + GLenum programInterface, + const GLchar* name) { + minRequiredVersion(3, 1) + switch (programInterface) { + case GL_PROGRAM_INPUT, GL_PROGRAM_OUTPUT, GL_TRANSFORM_FEEDBACK_BUFFER, GL_UNIFORM: { + // version 3.1 + } + default: { + glErrorInvalidEnum(programInterface) + } + } + // TODO + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetProgramResourceName.xhtml","OpenGL ES 3.1") +cmd void glGetProgramResourceName(ProgramId program, + GLenum programInterface, + GLuint index, + GLsizei bufSize, + GLsizei* length, + GLchar* name) { + minRequiredVersion(3, 1) + switch (programInterface) { + case GL_BUFFER_VARIABLE, GL_PROGRAM_INPUT, GL_PROGRAM_OUTPUT, GL_SHADER_STORAGE_BLOCK, + GL_TRANSFORM_FEEDBACK_VARYING, GL_UNIFORM, GL_UNIFORM_BLOCK: { + // version 3.1 + } + default: { + glErrorInvalidEnum(programInterface) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetProgramResource.xhtml","OpenGL ES 3.1") +cmd void glGetProgramResourceiv(ProgramId program, + GLenum programInterface, + GLuint index, + GLsizei propCount, + const GLenum* props, + GLsizei bufSize, + GLsizei* length, + GLint* params) { + minRequiredVersion(3, 1) + switch (programInterface) { + case GL_ATOMIC_COUNTER_BUFFER, GL_BUFFER_VARIABLE, GL_PROGRAM_INPUT, GL_PROGRAM_OUTPUT, + GL_SHADER_STORAGE_BLOCK, GL_TRANSFORM_FEEDBACK_BUFFER, GL_TRANSFORM_FEEDBACK_VARYING, + GL_UNIFORM, GL_UNIFORM_BLOCK: { + // version 3.1 + } + default: { + glErrorInvalidEnum(programInterface) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetProgramiv.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetProgramiv.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetProgramiv.xhtml","OpenGL ES 3.1") +cmd void glGetProgramiv(ProgramId program, GLenum parameter, GLint* value) { + minRequiredVersion(2, 0) + switch (parameter) { + case GL_ACTIVE_ATTRIBUTES, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, GL_ACTIVE_UNIFORMS, + GL_ACTIVE_UNIFORM_MAX_LENGTH, GL_ATTACHED_SHADERS, GL_DELETE_STATUS, GL_INFO_LOG_LENGTH, + GL_LINK_STATUS, GL_VALIDATE_STATUS: { + // version 2.0 + } + case GL_ACTIVE_UNIFORM_BLOCKS, GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH, + GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRANSFORM_FEEDBACK_BUFFER_MODE, + GL_TRANSFORM_FEEDBACK_VARYINGS, GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: { + minRequiredVersion(3, 0) + } + case GL_ACTIVE_ATOMIC_COUNTER_BUFFERS, GL_COMPUTE_WORK_GROUP_SIZE, GL_PROGRAM_SEPARABLE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(parameter) + } + } + + value[0] = ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetShaderInfoLog.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetShaderInfoLog.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetShaderInfoLog.xhtml","OpenGL ES 3.1") +cmd void glGetShaderInfoLog(ShaderId shader, + GLsizei buffer_length, + GLsizei* string_length_written, + GLchar* info) { + minRequiredVersion(2, 0) + + ctx := GetContext() + s := ctx.Instances.Shaders[shader] + l := min(buffer_length, as!s32(len(s.InfoLog))) + copy(info[0:l], s.InfoLog[0:l]) + string_length_written[0] = l +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetShaderPrecisionFormat.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetShaderPrecisionFormat.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetShaderPrecisionFormat.xhtml","OpenGL ES 3.1") +cmd void glGetShaderPrecisionFormat(GLenum shader_type, + GLenum precision_type, + GLint* range, + GLint* precision) { + minRequiredVersion(2, 0) + switch (shader_type) { + case GL_FRAGMENT_SHADER, GL_VERTEX_SHADER: { + // version 2.0 + } + default: { + glErrorInvalidEnum(shader_type) + } + } + switch (precision_type) { + case GL_HIGH_FLOAT, GL_HIGH_INT, GL_LOW_FLOAT, GL_LOW_INT, GL_MEDIUM_FLOAT, GL_MEDIUM_INT: { + // version 2.0 + } + default: { + glErrorInvalidEnum(precision_type) + } + } + + write(range[0:2]) + precision[0] = ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetShaderSource.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetShaderSource.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetShaderSource.xhtml","OpenGL ES 3.1") +cmd void glGetShaderSource(ShaderId shader, + GLsizei buffer_length, + GLsizei* string_length_written, + GLchar* source) { + minRequiredVersion(2, 0) + + ctx := GetContext() + s := ctx.Instances.Shaders[shader] + l := min(buffer_length, as!s32(len(s.Source))) + copy(source[0:l], as!char[](s.Source)[0:l]) + string_length_written[0] = l +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetShaderiv.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetShaderiv.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetShaderiv.xhtml","OpenGL ES 3.1") +cmd void glGetShaderiv(ShaderId shader, GLenum parameter, GLint* value) { + minRequiredVersion(2, 0) + switch (parameter) { + case GL_COMPILE_STATUS, GL_DELETE_STATUS, GL_INFO_LOG_LENGTH, GL_SHADER_SOURCE_LENGTH, + GL_SHADER_TYPE: { + // version 2.0 + } + default: { + glErrorInvalidEnum(parameter) + } + } + + ctx := GetContext() + s := ctx.Instances.Shaders[shader] + value[0] = switch (parameter) { + case GL_SHADER_TYPE: as!s32(s.Type) + case GL_DELETE_STATUS: switch (s.Deletable) { case true: 1 case false: 0 } + case GL_COMPILE_STATUS: switch (s.Compiled) { case true: 1 case false: 0 } + case GL_INFO_LOG_LENGTH: as!s32(len(s.InfoLog)) + case GL_SHADER_SOURCE_LENGTH: as!s32(len(s.Source)) + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetUniformBlockIndex.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetUniformBlockIndex.xhtml","OpenGL ES 3.1") +cmd UniformBlockId glGetUniformBlockIndex(ProgramId program, const GLchar* uniformBlockName) { + minRequiredVersion(3, 0) + // TODO + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetUniformIndices.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetUniformIndices.xhtml","OpenGL ES 3.1") +cmd void glGetUniformIndices(ProgramId program, + GLsizei uniformCount, + const GLchar* const* uniformNames, + GLuint* uniformIndices) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetUniformLocation.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetUniformLocation.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetUniformLocation.xhtml","OpenGL ES 3.1") +cmd UniformLocation glGetUniformLocation(ProgramId program, string name) { + minRequiredVersion(2, 0) + + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetUniform.xhtml","OpenGL ES 3.1") +cmd void glGetUniformfv(ProgramId program, UniformLocation location, GLfloat* values) { + minRequiredVersion(2, 0) + + // p := Instances.Programs[program] + // uniform := p.Uniforms[location] +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetUniform.xhtml","OpenGL ES 3.1") +cmd void glGetUniformiv(ProgramId program, UniformLocation location, GLint* values) { + minRequiredVersion(2, 0) + + // p := Instances.Programs[program] + // uniform := p.Uniforms[location] +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetUniform.xhtml","OpenGL ES 3.1") +cmd void glGetUniformuiv(ProgramId program, UniformLocation location, GLuint* params) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glIsProgram.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glIsProgram.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glIsProgram.xhtml","OpenGL ES 3.1") +cmd bool glIsProgram(ProgramId program) { + minRequiredVersion(2, 0) + + ctx := GetContext() + return program in ctx.Instances.Programs +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glIsProgramPipeline.xhtml","OpenGL ES 3.1") +cmd bool glIsProgramPipeline(PipelineId pipeline) { + minRequiredVersion(3, 1) + // TODO + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glIsShader.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glIsShader.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glIsShader.xhtml","OpenGL ES 3.1") +cmd bool glIsShader(ShaderId shader) { + minRequiredVersion(2, 0) + + ctx := GetContext() + return shader in ctx.Instances.Shaders +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glLinkProgram.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glLinkProgram.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glLinkProgram.xhtml","OpenGL ES 3.1") +cmd void glLinkProgram(ProgramId program) { + minRequiredVersion(2, 0) + + //for s in (program.Shaders) { + // TODO: use(s.Binary) + //} + // TODO: program.Binary < ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glMemoryBarrier.xhtml","OpenGL ES 3.1") +cmd void glMemoryBarrier(GLbitfield barriers) { + minRequiredVersion(3, 1) + supportsBits(barriers, GL_ALL_BARRIER_BITS | GL_ATOMIC_COUNTER_BARRIER_BIT | GL_BUFFER_UPDATE_BARRIER_BIT | GL_COMMAND_BARRIER_BIT | GL_ELEMENT_ARRAY_BARRIER_BIT | GL_FRAMEBUFFER_BARRIER_BIT | GL_PIXEL_BUFFER_BARRIER_BIT | GL_SHADER_IMAGE_ACCESS_BARRIER_BIT | GL_SHADER_STORAGE_BARRIER_BIT | GL_TEXTURE_FETCH_BARRIER_BIT | GL_TEXTURE_UPDATE_BARRIER_BIT | GL_TRANSFORM_FEEDBACK_BARRIER_BIT | GL_UNIFORM_BARRIER_BIT | GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT) + if (GL_ALL_BARRIER_BITS in barriers) { + } + if (GL_ATOMIC_COUNTER_BARRIER_BIT in barriers) { + } + if (GL_BUFFER_UPDATE_BARRIER_BIT in barriers) { + } + if (GL_COMMAND_BARRIER_BIT in barriers) { + } + if (GL_ELEMENT_ARRAY_BARRIER_BIT in barriers) { + } + if (GL_FRAMEBUFFER_BARRIER_BIT in barriers) { + } + if (GL_PIXEL_BUFFER_BARRIER_BIT in barriers) { + } + if (GL_SHADER_IMAGE_ACCESS_BARRIER_BIT in barriers) { + } + if (GL_SHADER_STORAGE_BARRIER_BIT in barriers) { + } + if (GL_TEXTURE_FETCH_BARRIER_BIT in barriers) { + } + if (GL_TEXTURE_UPDATE_BARRIER_BIT in barriers) { + } + if (GL_TRANSFORM_FEEDBACK_BARRIER_BIT in barriers) { + } + if (GL_UNIFORM_BARRIER_BIT in barriers) { + } + if (GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT in barriers) { + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glMemoryBarrier.xhtml","OpenGL ES 3.1") +cmd void glMemoryBarrierByRegion(GLbitfield barriers) { + minRequiredVersion(3, 1) + supportsBits(barriers, GL_ALL_BARRIER_BITS | GL_ATOMIC_COUNTER_BARRIER_BIT | GL_BUFFER_UPDATE_BARRIER_BIT | GL_COMMAND_BARRIER_BIT | GL_ELEMENT_ARRAY_BARRIER_BIT | GL_FRAMEBUFFER_BARRIER_BIT | GL_PIXEL_BUFFER_BARRIER_BIT | GL_SHADER_IMAGE_ACCESS_BARRIER_BIT | GL_SHADER_STORAGE_BARRIER_BIT | GL_TEXTURE_FETCH_BARRIER_BIT | GL_TEXTURE_UPDATE_BARRIER_BIT | GL_TRANSFORM_FEEDBACK_BARRIER_BIT | GL_UNIFORM_BARRIER_BIT | GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT) + if (GL_ALL_BARRIER_BITS in barriers) { + } + if (GL_ATOMIC_COUNTER_BARRIER_BIT in barriers) { + } + if (GL_BUFFER_UPDATE_BARRIER_BIT in barriers) { + } + if (GL_COMMAND_BARRIER_BIT in barriers) { + } + if (GL_ELEMENT_ARRAY_BARRIER_BIT in barriers) { + } + if (GL_FRAMEBUFFER_BARRIER_BIT in barriers) { + } + if (GL_PIXEL_BUFFER_BARRIER_BIT in barriers) { + } + if (GL_SHADER_IMAGE_ACCESS_BARRIER_BIT in barriers) { + } + if (GL_SHADER_STORAGE_BARRIER_BIT in barriers) { + } + if (GL_TEXTURE_FETCH_BARRIER_BIT in barriers) { + } + if (GL_TEXTURE_UPDATE_BARRIER_BIT in barriers) { + } + if (GL_TRANSFORM_FEEDBACK_BARRIER_BIT in barriers) { + } + if (GL_UNIFORM_BARRIER_BIT in barriers) { + } + if (GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT in barriers) { + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glProgramBinary.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramBinary.xhtml","OpenGL ES 3.1") +cmd void glProgramBinary(ProgramId program, + GLenum binaryFormat, + const void* binary, + GLsizei length) { + minRequiredVersion(3, 0) + switch (binaryFormat) { + default: { + glErrorInvalidEnum(binaryFormat) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glProgramParameteri.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramParameteri.xhtml","OpenGL ES 3.1") +cmd void glProgramParameteri(ProgramId program, GLenum pname, GLint value) { + minRequiredVersion(3, 0) + switch (pname) { + case GL_PROGRAM_BINARY_RETRIEVABLE_HINT: { + // version 3.0 + } + case GL_PROGRAM_SEPARABLE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform1f(ProgramId program, UniformLocation location, GLfloat v0) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform1fv(ProgramId program, + UniformLocation location, + GLsizei count, + const GLfloat* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform1i(ProgramId program, UniformLocation location, GLint v0) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform1iv(ProgramId program, + UniformLocation location, + GLsizei count, + const GLint* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform1ui(ProgramId program, UniformLocation location, GLuint v0) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform1uiv(ProgramId program, + UniformLocation location, + GLsizei count, + const GLuint* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform2f(ProgramId program, UniformLocation location, GLfloat v0, GLfloat v1) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform2fv(ProgramId program, + UniformLocation location, + GLsizei count, + const GLfloat* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform2i(ProgramId program, UniformLocation location, GLint v0, GLint v1) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform2iv(ProgramId program, + UniformLocation location, + GLsizei count, + const GLint* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform2ui(ProgramId program, UniformLocation location, GLuint v0, GLuint v1) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform2uiv(ProgramId program, + UniformLocation location, + GLsizei count, + const GLuint* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform3f(ProgramId program, + UniformLocation location, + GLfloat v0, + GLfloat v1, + GLfloat v2) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform3fv(ProgramId program, + UniformLocation location, + GLsizei count, + const GLfloat* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform3i(ProgramId program, + UniformLocation location, + GLint v0, + GLint v1, + GLint v2) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform3iv(ProgramId program, + UniformLocation location, + GLsizei count, + const GLint* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform3ui(ProgramId program, + UniformLocation location, + GLuint v0, + GLuint v1, + GLuint v2) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform3uiv(ProgramId program, + UniformLocation location, + GLsizei count, + const GLuint* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform4f(ProgramId program, + UniformLocation location, + GLfloat v0, + GLfloat v1, + GLfloat v2, + GLfloat v3) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform4fv(ProgramId program, + UniformLocation location, + GLsizei count, + const GLfloat* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform4i(ProgramId program, + UniformLocation location, + GLint v0, + GLint v1, + GLint v2, + GLint v3) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform4iv(ProgramId program, + UniformLocation location, + GLsizei count, + const GLint* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform4ui(ProgramId program, + UniformLocation location, + GLuint v0, + GLuint v1, + GLuint v2, + GLuint v3) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniform4uiv(ProgramId program, + UniformLocation location, + GLsizei count, + const GLuint* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniformMatrix2fv(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniformMatrix2x3fv(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniformMatrix2x4fv(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniformMatrix3fv(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniformMatrix3x2fv(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniformMatrix3x4fv(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniformMatrix4fv(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniformMatrix4x2fv(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glProgramUniform.xhtml","OpenGL ES 3.1") +cmd void glProgramUniformMatrix4x3fv(ProgramId program, + UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glReleaseShaderCompiler.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glReleaseShaderCompiler.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glReleaseShaderCompiler.xhtml","OpenGL ES 3.1") +cmd void glReleaseShaderCompiler() { + minRequiredVersion(2, 0) + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glShaderBinary.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glShaderBinary.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glShaderBinary.xhtml","OpenGL ES 3.1") +cmd void glShaderBinary(GLsizei count, + const ShaderId* shaders, + GLenum binary_format, + const void* binary, + GLsizei binary_size) { + minRequiredVersion(2, 0) + switch (binary_format) { + default: { + glErrorInvalidEnum(binary_format) + } + } + + for i in (0 .. count) { + // TODO: shaders[i].Binary = ? + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glShaderSource.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glShaderSource.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glShaderSource.xhtml","OpenGL ES 3.1") +cmd void glShaderSource(ShaderId shader, + GLsizei count, + const GLchar* const* source, + const GLint* length) { + minRequiredVersion(2, 0) + + sources := source[0:count] + lengths := length[0:count] + ctx := GetContext() + s := ctx.Instances.Shaders[shader] + for i in (0 .. count) { + str := switch ((length == null) || (lengths[i] < 0)) { + case true: as!string(sources[i]) + case false: as!string(sources[i][0:lengths[i]]) + } + // TODO: We should have a newline between sources to avoid unintentional + // concatenation. The language currently does not support string literals. + s.Source += str + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform1f(UniformLocation location, GLfloat value) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := make!f32(1) + v[0] = value + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_FLOAT + uniform.Value = as!u8[](v) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform1fv(UniformLocation location, GLsizei count, const GLfloat* values) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := values[0:count] + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_FLOAT + uniform.Value = clone(as!u8[](v)) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform1i(UniformLocation location, GLint value) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := make!s32(1) + v[0] = value + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_INT + uniform.Value = as!u8[](v) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform1iv(UniformLocation location, GLsizei count, const GLint* values) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := values[0:count] + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_INT + uniform.Value = clone(as!u8[](v)) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform1ui(UniformLocation location, GLuint v0) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform1uiv(UniformLocation location, GLsizei count, const GLuint* value) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform2f(UniformLocation location, GLfloat value0, GLfloat value1) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := make!Vec2f(1) + v[0] = Vec2f(value0, value1) + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_FLOAT_VEC2 + uniform.Value = as!u8[](v) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform2fv(UniformLocation location, GLsizei count, const GLfloat* values) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := as!Vec2f*(values)[0:count] + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_FLOAT_VEC2 + uniform.Value = clone(as!u8[](v)) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform2i(UniformLocation location, GLint value0, GLint value1) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := make!Vec2i(1) + v[0] = Vec2i(value0, value1) + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_INT_VEC2 + uniform.Value = as!u8[](v) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform2iv(UniformLocation location, GLsizei count, const GLint* values) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := as!Vec2i*(values)[0:count] + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_INT_VEC2 + uniform.Value = clone(as!u8[](v)) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform2ui(UniformLocation location, GLuint v0, GLuint v1) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform2uiv(UniformLocation location, GLsizei count, const GLuint* value) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform3f(UniformLocation location, GLfloat value0, GLfloat value1, GLfloat value2) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := make!Vec3f(1) + v[0] = Vec3f(value0, value1, value2) + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_FLOAT_VEC3 + uniform.Value = as!u8[](v) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform3fv(UniformLocation location, GLsizei count, const GLfloat* values) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := as!Vec3f*(values)[0:count] + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_FLOAT_VEC3 + uniform.Value = clone(as!u8[](v)) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform3i(UniformLocation location, GLint value0, GLint value1, GLint value2) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := make!Vec3i(1) + v[0] = Vec3i(value0, value1, value2) + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_INT_VEC3 + uniform.Value = as!u8[](v) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform3iv(UniformLocation location, GLsizei count, const GLint* values) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := as!Vec3i*(values)[0:count] + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_INT_VEC3 + uniform.Value = clone(as!u8[](v)) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform3ui(UniformLocation location, GLuint v0, GLuint v1, GLuint v2) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform3uiv(UniformLocation location, GLsizei count, const GLuint* value) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform4f(UniformLocation location, + GLfloat value0, + GLfloat value1, + GLfloat value2, + GLfloat value3) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := make!Vec4f(1) + v[0] = Vec4f(value0, value1, value2, value3) + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_FLOAT_VEC4 + uniform.Value = as!u8[](v) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform4fv(UniformLocation location, GLsizei count, const GLfloat* values) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := as!Vec4f*(values)[0:count] + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_FLOAT_VEC4 + uniform.Value = clone(as!u8[](v)) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform4i(UniformLocation location, + GLint value0, + GLint value1, + GLint value2, + GLint value3) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := make!Vec4i(1) + v[0] = Vec4i(value0, value1, value2, value3) + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_INT_VEC4 + uniform.Value = as!u8[](v) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform4iv(UniformLocation location, GLsizei count, const GLint* values) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := as!Vec4i*(values)[0:count] + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_INT_VEC4 + uniform.Value = clone(as!u8[](v)) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform4ui(UniformLocation location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniform4uiv(UniformLocation location, GLsizei count, const GLuint* value) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniformBlockBinding.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniformBlockBinding.xhtml","OpenGL ES 3.1") +cmd void glUniformBlockBinding(ProgramId program, + UniformBlockId uniform_block_index, + GLuint uniform_block_binding) { + minRequiredVersion(3, 0) + + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniformMatrix2fv(UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* values) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := as!Mat2f*(values)[0:count] + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_FLOAT_MAT2 + uniform.Value = clone(as!u8[](v)) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniformMatrix2x3fv(UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniformMatrix2x4fv(UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniformMatrix3fv(UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* values) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := as!Mat3f*(values)[0:count] + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Type = GL_FLOAT_MAT3 + uniform.Value = clone(as!u8[](v)) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniformMatrix3x2fv(UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniformMatrix3x4fv(UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniformMatrix4fv(UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* values) { + minRequiredVersion(2, 0) + + ctx := GetContext() + v := as!Mat4f*(values)[0:count] + program := ctx.Instances.Programs[ctx.BoundProgram] + uniform := program.Uniforms[location] + uniform.Value = clone(as!u8[](v)) + program.Uniforms[location] = uniform +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniformMatrix4x2fv(UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUniform.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUniform.xhtml","OpenGL ES 3.1") +cmd void glUniformMatrix4x3fv(UniformLocation location, + GLsizei count, + GLboolean transpose, + const GLfloat* value) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glUseProgram.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glUseProgram.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUseProgram.xhtml","OpenGL ES 3.1") +cmd void glUseProgram(ProgramId program) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.BoundProgram = program +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glUseProgramStages.xhtml","OpenGL ES 3.1") +cmd void glUseProgramStages(PipelineId pipeline, GLbitfield stages, ProgramId program) { + minRequiredVersion(3, 1) + supportsBits(stages, GL_ALL_SHADER_BITS | GL_COMPUTE_SHADER_BIT | GL_FRAGMENT_SHADER_BIT | GL_VERTEX_SHADER_BIT) + if (GL_ALL_SHADER_BITS in stages) { + } + if (GL_COMPUTE_SHADER_BIT in stages) { + } + if (GL_FRAGMENT_SHADER_BIT in stages) { + } + if (GL_VERTEX_SHADER_BIT in stages) { + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glValidateProgram.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glValidateProgram.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glValidateProgram.xhtml","OpenGL ES 3.1") +cmd void glValidateProgram(ProgramId program) { + minRequiredVersion(2, 0) + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glValidateProgramPipeline.xhtml","OpenGL ES 3.1") +cmd void glValidateProgramPipeline(PipelineId pipeline) { + minRequiredVersion(3, 1) + // TODO +} + diff --git a/gfxapi/gles/api/rasterization.api b/gfxapi/gles/api/rasterization.api new file mode 100644 index 000000000..a8e0b95b6 --- /dev/null +++ b/gfxapi/gles/api/rasterization.api @@ -0,0 +1,106 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glCullFace.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCullFace.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCullFace.xhtml","OpenGL ES 3.1") +cmd void glCullFace(GLenum mode) { + minRequiredVersion(2, 0) + switch (mode) { + case GL_BACK, GL_FRONT, GL_FRONT_AND_BACK: { + // version 2.0 + } + default: { + glErrorInvalidEnum(mode) + } + } + + ctx := GetContext() + ctx.Rasterizing.CullFace = mode +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glDepthRangef.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDepthRangef.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDepthRangef.xhtml","OpenGL ES 3.1") +cmd void glDepthRangef(GLfloat near, GLfloat far) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.Rasterizing.DepthNear = near + ctx.Rasterizing.DepthFar = far +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glFrontFace.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glFrontFace.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glFrontFace.xhtml","OpenGL ES 3.1") +cmd void glFrontFace(GLenum orientation) { + minRequiredVersion(2, 0) + switch (orientation) { + case GL_CCW, GL_CW: { + // version 2.0 + } + default: { + glErrorInvalidEnum(orientation) + } + } + + ctx := GetContext() + ctx.Rasterizing.FrontFace = orientation +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetMultisamplefv.xhtml","OpenGL ES 3.1") +cmd void glGetMultisamplefv(GLenum pname, GLuint index, GLfloat* val) { + minRequiredVersion(3, 1) + switch (pname) { + case GL_SAMPLE_POSITION: { + // version 3.1 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glLineWidth.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glLineWidth.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glLineWidth.xhtml","OpenGL ES 3.1") +cmd void glLineWidth(GLfloat width) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.Rasterizing.LineWidth = width +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glPolygonOffset.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glPolygonOffset.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glPolygonOffset.xhtml","OpenGL ES 3.1") +cmd void glPolygonOffset(GLfloat scale_factor, GLfloat units) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.Rasterizing.PolygonOffsetUnits = units + ctx.Rasterizing.PolygonOffsetFactor = scale_factor +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glViewport.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glViewport.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glViewport.xhtml","OpenGL ES 3.1") +cmd void glViewport(GLint x, GLint y, GLsizei width, GLsizei height) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.Rasterizing.Viewport = Rect(x, y, width, height) +} + diff --git a/gfxapi/gles/api/state_queries.api b/gfxapi/gles/api/state_queries.api new file mode 100644 index 000000000..b81844254 --- /dev/null +++ b/gfxapi/gles/api/state_queries.api @@ -0,0 +1,965 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGet.xhtml","OpenGL ES 3.1") +cmd void glGetBooleani_v(GLenum target, GLuint index, GLboolean* data) { + minRequiredVersion(3, 1) + switch (target) { + case GL_ACTIVE_TEXTURE, GL_ALIASED_LINE_WIDTH_RANGE, GL_ALIASED_POINT_SIZE_RANGE, + GL_ALPHA_BITS, GL_ARRAY_BUFFER_BINDING, GL_BLEND, GL_BLEND_COLOR, GL_BLEND_DST_ALPHA, + GL_BLEND_DST_RGB, GL_BLEND_EQUATION_ALPHA, GL_BLEND_EQUATION_RGB, GL_BLEND_SRC_ALPHA, + GL_BLEND_SRC_RGB, GL_BLUE_BITS, GL_COLOR_CLEAR_VALUE, GL_COLOR_WRITEMASK, + GL_COMPRESSED_TEXTURE_FORMATS, GL_COPY_READ_BUFFER_BINDING, GL_COPY_WRITE_BUFFER_BINDING, + GL_CULL_FACE, GL_CULL_FACE_MODE, GL_CURRENT_PROGRAM, GL_DEPTH_BITS, GL_DEPTH_CLEAR_VALUE, + GL_DEPTH_FUNC, GL_DEPTH_RANGE, GL_DEPTH_TEST, GL_DEPTH_WRITEMASK, + GL_DISPATCH_INDIRECT_BUFFER_BINDING, GL_DITHER, GL_DRAW_BUFFER, + GL_DRAW_FRAMEBUFFER_BINDING, GL_ELEMENT_ARRAY_BUFFER_BINDING, + GL_FRAGMENT_SHADER_DERIVATIVE_HINT, GL_FRONT_FACE, GL_GENERATE_MIPMAP_HINT, GL_GREEN_BITS, + GL_IMAGE_BINDING_LAYERED, GL_IMPLEMENTATION_COLOR_READ_FORMAT, + GL_IMPLEMENTATION_COLOR_READ_TYPE, GL_LINE_WIDTH, GL_MAJOR_VERSION, GL_MAX_3D_TEXTURE_SIZE, + GL_MAX_ARRAY_TEXTURE_LAYERS, GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, + GL_MAX_COLOR_ATTACHMENTS, GL_MAX_COLOR_TEXTURE_SAMPLES, GL_MAX_COMBINED_ATOMIC_COUNTERS, + GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS, GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, + GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS, GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, + GL_MAX_COMBINED_UNIFORM_BLOCKS, GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, + GL_MAX_COMPUTE_ATOMIC_COUNTERS, GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS, + GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS, GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS, + GL_MAX_COMPUTE_UNIFORM_BLOCKS, GL_MAX_COMPUTE_UNIFORM_COMPONENTS, + GL_MAX_COMPUTE_WORK_GROUP_COUNT, GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS, + GL_MAX_COMPUTE_WORK_GROUP_SIZE, GL_MAX_CUBE_MAP_TEXTURE_SIZE, GL_MAX_DRAW_BUFFERS, + GL_MAX_ELEMENTS_INDICES, GL_MAX_ELEMENTS_VERTICES, GL_MAX_ELEMENT_INDEX, + GL_MAX_FRAGMENT_ATOMIC_COUNTERS, GL_MAX_FRAGMENT_INPUT_COMPONENTS, + GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS, GL_MAX_FRAGMENT_UNIFORM_BLOCKS, + GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, GL_MAX_FRAGMENT_UNIFORM_VECTORS, + GL_MAX_FRAMEBUFFER_HEIGHT, GL_MAX_FRAMEBUFFER_SAMPLES, GL_MAX_FRAMEBUFFER_WIDTH, + GL_MAX_INTEGER_SAMPLES, GL_MAX_PROGRAM_TEXEL_OFFSET, GL_MAX_RENDERBUFFER_SIZE, + GL_MAX_SAMPLES, GL_MAX_SAMPLE_MASK_WORDS, GL_MAX_SERVER_WAIT_TIMEOUT, + GL_MAX_SHADER_STORAGE_BLOCK_SIZE, GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, + GL_MAX_TEXTURE_IMAGE_UNITS, GL_MAX_TEXTURE_LOD_BIAS, GL_MAX_TEXTURE_SIZE, + GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, + GL_MAX_UNIFORM_BLOCK_SIZE, GL_MAX_UNIFORM_BUFFER_BINDINGS, GL_MAX_UNIFORM_LOCATIONS, + GL_MAX_VARYING_COMPONENTS, GL_MAX_VARYING_VECTORS, GL_MAX_VERTEX_ATOMIC_COUNTERS, + GL_MAX_VERTEX_ATTRIBS, GL_MAX_VERTEX_ATTRIB_BINDINGS, GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET, + GL_MAX_VERTEX_OUTPUT_COMPONENTS, GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, + GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, GL_MAX_VERTEX_UNIFORM_BLOCKS, + GL_MAX_VERTEX_UNIFORM_COMPONENTS, GL_MAX_VERTEX_UNIFORM_VECTORS, GL_MAX_VIEWPORT_DIMS, + GL_MINOR_VERSION, GL_MIN_PROGRAM_TEXEL_OFFSET, GL_NUM_COMPRESSED_TEXTURE_FORMATS, + GL_NUM_EXTENSIONS, GL_NUM_PROGRAM_BINARY_FORMATS, GL_NUM_SHADER_BINARY_FORMATS, + GL_PACK_ALIGNMENT, GL_PACK_ROW_LENGTH, GL_PACK_SKIP_PIXELS, GL_PACK_SKIP_ROWS, + GL_PIXEL_PACK_BUFFER_BINDING, GL_PIXEL_UNPACK_BUFFER_BINDING, GL_POLYGON_OFFSET_FACTOR, + GL_POLYGON_OFFSET_FILL, GL_POLYGON_OFFSET_UNITS, GL_PRIMITIVE_RESTART_FIXED_INDEX, + GL_PROGRAM_BINARY_FORMATS, GL_PROGRAM_PIPELINE_BINDING, GL_RASTERIZER_DISCARD, + GL_READ_BUFFER, GL_READ_FRAMEBUFFER_BINDING, GL_RED_BITS, GL_RENDERBUFFER_BINDING, + GL_SAMPLER_BINDING, GL_SAMPLES, GL_SAMPLE_ALPHA_TO_COVERAGE, GL_SAMPLE_BUFFERS, + GL_SAMPLE_COVERAGE, GL_SAMPLE_COVERAGE_INVERT, GL_SAMPLE_COVERAGE_VALUE, GL_SCISSOR_BOX, + GL_SCISSOR_TEST, GL_SHADER_BINARY_FORMATS, GL_SHADER_COMPILER, + GL_SHADER_STORAGE_BUFFER_BINDING, GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT, + GL_SHADER_STORAGE_BUFFER_SIZE, GL_SHADER_STORAGE_BUFFER_START, GL_STENCIL_BACK_FAIL, + GL_STENCIL_BACK_FUNC, GL_STENCIL_BACK_PASS_DEPTH_FAIL, GL_STENCIL_BACK_PASS_DEPTH_PASS, + GL_STENCIL_BACK_REF, GL_STENCIL_BACK_VALUE_MASK, GL_STENCIL_BACK_WRITEMASK, + GL_STENCIL_BITS, GL_STENCIL_CLEAR_VALUE, GL_STENCIL_FAIL, GL_STENCIL_FUNC, + GL_STENCIL_PASS_DEPTH_FAIL, GL_STENCIL_PASS_DEPTH_PASS, GL_STENCIL_REF, GL_STENCIL_TEST, + GL_STENCIL_VALUE_MASK, GL_STENCIL_WRITEMASK, GL_SUBPIXEL_BITS, GL_TEXTURE_BINDING_2D, + GL_TEXTURE_BINDING_2D_ARRAY, GL_TEXTURE_BINDING_2D_MULTISAMPLE, GL_TEXTURE_BINDING_3D, + GL_TEXTURE_BINDING_CUBE_MAP, GL_TRANSFORM_FEEDBACK_ACTIVE, GL_TRANSFORM_FEEDBACK_BINDING, + GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, GL_TRANSFORM_FEEDBACK_BUFFER_SIZE, + GL_TRANSFORM_FEEDBACK_BUFFER_START, GL_TRANSFORM_FEEDBACK_PAUSED, + GL_UNIFORM_BUFFER_BINDING, GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, GL_UNIFORM_BUFFER_SIZE, + GL_UNIFORM_BUFFER_START, GL_UNPACK_ALIGNMENT, GL_UNPACK_IMAGE_HEIGHT, GL_UNPACK_ROW_LENGTH, + GL_UNPACK_SKIP_IMAGES, GL_UNPACK_SKIP_PIXELS, GL_UNPACK_SKIP_ROWS, GL_VERTEX_ARRAY_BINDING, + GL_VERTEX_BINDING_DIVISOR, GL_VERTEX_BINDING_OFFSET, GL_VERTEX_BINDING_STRIDE, GL_VIEWPORT: + { + // version 3.1 + } + default: { + glErrorInvalidEnum(target) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGet.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGet.xhtml","OpenGL ES 3.1") +cmd void glGetBooleanv(GLenum param, GLboolean* values) { + minRequiredVersion(2, 0) + switch (param) { + case GL_ACTIVE_TEXTURE, GL_ALIASED_LINE_WIDTH_RANGE, GL_ALIASED_POINT_SIZE_RANGE, + GL_ALPHA_BITS, GL_ARRAY_BUFFER_BINDING, GL_BLEND, GL_BLEND_COLOR, GL_BLEND_DST_ALPHA, + GL_BLEND_DST_RGB, GL_BLEND_EQUATION_ALPHA, GL_BLEND_EQUATION_RGB, GL_BLEND_SRC_ALPHA, + GL_BLEND_SRC_RGB, GL_BLUE_BITS, GL_COLOR_CLEAR_VALUE, GL_COLOR_WRITEMASK, + GL_COMPRESSED_TEXTURE_FORMATS, GL_CULL_FACE, GL_CULL_FACE_MODE, GL_CURRENT_PROGRAM, + GL_DEPTH_BITS, GL_DEPTH_CLEAR_VALUE, GL_DEPTH_FUNC, GL_DEPTH_RANGE, GL_DEPTH_TEST, + GL_DEPTH_WRITEMASK, GL_DITHER, GL_ELEMENT_ARRAY_BUFFER_BINDING, GL_FRAMEBUFFER_BINDING, + GL_FRONT_FACE, GL_GENERATE_MIPMAP_HINT, GL_GREEN_BITS, GL_IMPLEMENTATION_COLOR_READ_FORMAT, + GL_IMPLEMENTATION_COLOR_READ_TYPE, GL_LINE_WIDTH, GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, + GL_MAX_CUBE_MAP_TEXTURE_SIZE, GL_MAX_FRAGMENT_UNIFORM_VECTORS, GL_MAX_RENDERBUFFER_SIZE, + GL_MAX_TEXTURE_IMAGE_UNITS, GL_MAX_TEXTURE_SIZE, GL_MAX_VARYING_VECTORS, + GL_MAX_VERTEX_ATTRIBS, GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, GL_MAX_VERTEX_UNIFORM_VECTORS, + GL_MAX_VIEWPORT_DIMS, GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_NUM_SHADER_BINARY_FORMATS, + GL_PACK_ALIGNMENT, GL_POLYGON_OFFSET_FACTOR, GL_POLYGON_OFFSET_FILL, + GL_POLYGON_OFFSET_UNITS, GL_RED_BITS, GL_RENDERBUFFER_BINDING, GL_SAMPLES, + GL_SAMPLE_ALPHA_TO_COVERAGE, GL_SAMPLE_BUFFERS, GL_SAMPLE_COVERAGE, + GL_SAMPLE_COVERAGE_INVERT, GL_SAMPLE_COVERAGE_VALUE, GL_SCISSOR_BOX, GL_SCISSOR_TEST, + GL_SHADER_BINARY_FORMATS, GL_SHADER_COMPILER, GL_STENCIL_BACK_FAIL, GL_STENCIL_BACK_FUNC, + GL_STENCIL_BACK_PASS_DEPTH_FAIL, GL_STENCIL_BACK_PASS_DEPTH_PASS, GL_STENCIL_BACK_REF, + GL_STENCIL_BACK_VALUE_MASK, GL_STENCIL_BACK_WRITEMASK, GL_STENCIL_BITS, + GL_STENCIL_CLEAR_VALUE, GL_STENCIL_FAIL, GL_STENCIL_FUNC, GL_STENCIL_PASS_DEPTH_FAIL, + GL_STENCIL_PASS_DEPTH_PASS, GL_STENCIL_REF, GL_STENCIL_TEST, GL_STENCIL_VALUE_MASK, + GL_STENCIL_WRITEMASK, GL_SUBPIXEL_BITS, GL_TEXTURE_BINDING_2D, GL_TEXTURE_BINDING_CUBE_MAP, + GL_UNPACK_ALIGNMENT, GL_VIEWPORT: { + // version 2.0 + } + // TODO: GL_FRAMEBUFFER_BINDING seems to be removed in 3.0 + case GL_COPY_READ_BUFFER_BINDING, GL_COPY_WRITE_BUFFER_BINDING, GL_DRAW_BUFFER, + GL_DRAW_FRAMEBUFFER_BINDING, GL_FRAGMENT_SHADER_DERIVATIVE_HINT, GL_MAJOR_VERSION, + GL_MAX_3D_TEXTURE_SIZE, GL_MAX_ARRAY_TEXTURE_LAYERS, GL_MAX_COLOR_ATTACHMENTS, + GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, GL_MAX_COMBINED_UNIFORM_BLOCKS, + GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, GL_MAX_DRAW_BUFFERS, GL_MAX_ELEMENTS_INDICES, + GL_MAX_ELEMENTS_VERTICES, GL_MAX_ELEMENT_INDEX, GL_MAX_FRAGMENT_INPUT_COMPONENTS, + GL_MAX_FRAGMENT_UNIFORM_BLOCKS, GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, + GL_MAX_PROGRAM_TEXEL_OFFSET, GL_MAX_SAMPLES, GL_MAX_SERVER_WAIT_TIMEOUT, + GL_MAX_TEXTURE_LOD_BIAS, GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, + GL_MAX_UNIFORM_BLOCK_SIZE, GL_MAX_UNIFORM_BUFFER_BINDINGS, GL_MAX_VARYING_COMPONENTS, + GL_MAX_VERTEX_OUTPUT_COMPONENTS, GL_MAX_VERTEX_UNIFORM_BLOCKS, + GL_MAX_VERTEX_UNIFORM_COMPONENTS, GL_MINOR_VERSION, GL_MIN_PROGRAM_TEXEL_OFFSET, + GL_NUM_EXTENSIONS, GL_NUM_PROGRAM_BINARY_FORMATS, GL_PACK_ROW_LENGTH, GL_PACK_SKIP_PIXELS, + GL_PACK_SKIP_ROWS, GL_PIXEL_PACK_BUFFER_BINDING, GL_PIXEL_UNPACK_BUFFER_BINDING, + GL_PRIMITIVE_RESTART_FIXED_INDEX, GL_PROGRAM_BINARY_FORMATS, GL_RASTERIZER_DISCARD, + GL_READ_BUFFER, GL_READ_FRAMEBUFFER_BINDING, GL_SAMPLER_BINDING, + GL_TEXTURE_BINDING_2D_ARRAY, GL_TEXTURE_BINDING_3D, GL_TRANSFORM_FEEDBACK_ACTIVE, + GL_TRANSFORM_FEEDBACK_BINDING, GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, + GL_TRANSFORM_FEEDBACK_BUFFER_SIZE, GL_TRANSFORM_FEEDBACK_BUFFER_START, + GL_TRANSFORM_FEEDBACK_PAUSED, GL_UNIFORM_BUFFER_BINDING, + GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, GL_UNIFORM_BUFFER_SIZE, GL_UNIFORM_BUFFER_START, + GL_UNPACK_IMAGE_HEIGHT, GL_UNPACK_ROW_LENGTH, GL_UNPACK_SKIP_IMAGES, GL_UNPACK_SKIP_PIXELS, + GL_UNPACK_SKIP_ROWS, GL_VERTEX_ARRAY_BINDING: { + minRequiredVersion(3, 0) + } + // TODO: GL_FRAMEBUFFER_BINDING seems to be removed in 3.1 + case GL_DISPATCH_INDIRECT_BUFFER_BINDING, GL_IMAGE_BINDING_LAYERED, + GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, GL_MAX_COLOR_TEXTURE_SAMPLES, + GL_MAX_COMBINED_ATOMIC_COUNTERS, GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS, + GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS, GL_MAX_COMPUTE_ATOMIC_COUNTERS, + GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS, GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS, + GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS, GL_MAX_COMPUTE_UNIFORM_BLOCKS, + GL_MAX_COMPUTE_UNIFORM_COMPONENTS, GL_MAX_COMPUTE_WORK_GROUP_COUNT, + GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS, GL_MAX_COMPUTE_WORK_GROUP_SIZE, + GL_MAX_FRAGMENT_ATOMIC_COUNTERS, GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS, + GL_MAX_FRAMEBUFFER_HEIGHT, GL_MAX_FRAMEBUFFER_SAMPLES, GL_MAX_FRAMEBUFFER_WIDTH, + GL_MAX_INTEGER_SAMPLES, GL_MAX_SAMPLE_MASK_WORDS, GL_MAX_SHADER_STORAGE_BLOCK_SIZE, + GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, GL_MAX_UNIFORM_LOCATIONS, + GL_MAX_VERTEX_ATOMIC_COUNTERS, GL_MAX_VERTEX_ATTRIB_BINDINGS, + GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET, GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, + GL_PROGRAM_PIPELINE_BINDING, GL_SHADER_STORAGE_BUFFER_BINDING, + GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT, GL_SHADER_STORAGE_BUFFER_SIZE, + GL_SHADER_STORAGE_BUFFER_START, GL_TEXTURE_BINDING_2D_MULTISAMPLE, + GL_VERTEX_BINDING_DIVISOR, GL_VERTEX_BINDING_OFFSET, GL_VERTEX_BINDING_STRIDE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(param) + } + } + + v := values[0:stateVariableSize(param)] + ctx := GetContext() + switch (param) { + case GL_BLEND: + v[0] = ctx.Capabilities[GL_BLEND] + case GL_CULL_FACE: + v[0] = ctx.Capabilities[GL_CULL_FACE] + case GL_DEPTH_TEST: + v[0] = ctx.Capabilities[GL_DEPTH_TEST] + case GL_DITHER: + v[0] = ctx.Capabilities[GL_DITHER] + case GL_POLYGON_OFFSET_FILL: + v[0] = ctx.Capabilities[GL_POLYGON_OFFSET_FILL] + case GL_SAMPLE_ALPHA_TO_COVERAGE: + v[0] = ctx.Capabilities[GL_SAMPLE_ALPHA_TO_COVERAGE] + case GL_SAMPLE_COVERAGE: + v[0] = ctx.Capabilities[GL_SAMPLE_COVERAGE] + case GL_SCISSOR_TEST: + v[0] = ctx.Capabilities[GL_SCISSOR_TEST] + case GL_STENCIL_TEST: + v[0] = ctx.Capabilities[GL_STENCIL_TEST] + + case GL_DEPTH_WRITEMASK: + v[0] = ctx.Rasterizing.DepthMask + case GL_COLOR_WRITEMASK: { + v[0] = ctx.Rasterizing.ColorMaskRed + v[1] = ctx.Rasterizing.ColorMaskGreen + v[2] = ctx.Rasterizing.ColorMaskBlue + v[3] = ctx.Rasterizing.ColorMaskAlpha + } + case GL_SAMPLE_COVERAGE_INVERT: + v[0] = ctx.Rasterizing.SampleCoverageInvert + case GL_SHADER_COMPILER: + v[0] = ? + case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: + v[0] = ? + + // TODO: all the values returned by glGetFloatv and glGetIntegerv can + // be returned here with a type conversion where GL_FALSE is only returned + // if the value is 0.0 (or 0). + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGet.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGet.xhtml","OpenGL ES 3.1") +cmd void glGetFloatv(GLenum param, GLfloat* values) { + minRequiredVersion(2, 0) + switch (param) { + case GL_ACTIVE_TEXTURE, GL_ALIASED_LINE_WIDTH_RANGE, GL_ALIASED_POINT_SIZE_RANGE, + GL_ALPHA_BITS, GL_ARRAY_BUFFER_BINDING, GL_BLEND, GL_BLEND_COLOR, GL_BLEND_DST_ALPHA, + GL_BLEND_DST_RGB, GL_BLEND_EQUATION_ALPHA, GL_BLEND_EQUATION_RGB, GL_BLEND_SRC_ALPHA, + GL_BLEND_SRC_RGB, GL_BLUE_BITS, GL_COLOR_CLEAR_VALUE, GL_COLOR_WRITEMASK, + GL_COMPRESSED_TEXTURE_FORMATS, GL_CULL_FACE, GL_CULL_FACE_MODE, GL_CURRENT_PROGRAM, + GL_DEPTH_BITS, GL_DEPTH_CLEAR_VALUE, GL_DEPTH_FUNC, GL_DEPTH_RANGE, GL_DEPTH_TEST, + GL_DEPTH_WRITEMASK, GL_DITHER, GL_ELEMENT_ARRAY_BUFFER_BINDING, GL_FRAMEBUFFER_BINDING, + GL_FRONT_FACE, GL_GENERATE_MIPMAP_HINT, GL_GREEN_BITS, GL_IMPLEMENTATION_COLOR_READ_FORMAT, + GL_IMPLEMENTATION_COLOR_READ_TYPE, GL_LINE_WIDTH, GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, + GL_MAX_CUBE_MAP_TEXTURE_SIZE, GL_MAX_FRAGMENT_UNIFORM_VECTORS, GL_MAX_RENDERBUFFER_SIZE, + GL_MAX_TEXTURE_IMAGE_UNITS, GL_MAX_TEXTURE_SIZE, GL_MAX_VARYING_VECTORS, + GL_MAX_VERTEX_ATTRIBS, GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, GL_MAX_VERTEX_UNIFORM_VECTORS, + GL_MAX_VIEWPORT_DIMS, GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_NUM_SHADER_BINARY_FORMATS, + GL_PACK_ALIGNMENT, GL_POLYGON_OFFSET_FACTOR, GL_POLYGON_OFFSET_FILL, + GL_POLYGON_OFFSET_UNITS, GL_RED_BITS, GL_RENDERBUFFER_BINDING, GL_SAMPLES, + GL_SAMPLE_ALPHA_TO_COVERAGE, GL_SAMPLE_BUFFERS, GL_SAMPLE_COVERAGE, + GL_SAMPLE_COVERAGE_INVERT, GL_SAMPLE_COVERAGE_VALUE, GL_SCISSOR_BOX, GL_SCISSOR_TEST, + GL_SHADER_BINARY_FORMATS, GL_SHADER_COMPILER, GL_STENCIL_BACK_FAIL, GL_STENCIL_BACK_FUNC, + GL_STENCIL_BACK_PASS_DEPTH_FAIL, GL_STENCIL_BACK_PASS_DEPTH_PASS, GL_STENCIL_BACK_REF, + GL_STENCIL_BACK_VALUE_MASK, GL_STENCIL_BACK_WRITEMASK, GL_STENCIL_BITS, + GL_STENCIL_CLEAR_VALUE, GL_STENCIL_FAIL, GL_STENCIL_FUNC, GL_STENCIL_PASS_DEPTH_FAIL, + GL_STENCIL_PASS_DEPTH_PASS, GL_STENCIL_REF, GL_STENCIL_TEST, GL_STENCIL_VALUE_MASK, + GL_STENCIL_WRITEMASK, GL_SUBPIXEL_BITS, GL_TEXTURE_BINDING_2D, GL_TEXTURE_BINDING_CUBE_MAP, + GL_UNPACK_ALIGNMENT, GL_VIEWPORT: { + // version 2.0 + } + // TODO: GL_FRAMEBUFFER_BINDING seems to be removed in 3.0 + case GL_COPY_READ_BUFFER_BINDING, GL_COPY_WRITE_BUFFER_BINDING, GL_DRAW_BUFFER, + GL_DRAW_FRAMEBUFFER_BINDING, GL_FRAGMENT_SHADER_DERIVATIVE_HINT, GL_MAJOR_VERSION, + GL_MAX_3D_TEXTURE_SIZE, GL_MAX_ARRAY_TEXTURE_LAYERS, GL_MAX_COLOR_ATTACHMENTS, + GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, GL_MAX_COMBINED_UNIFORM_BLOCKS, + GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, GL_MAX_DRAW_BUFFERS, GL_MAX_ELEMENTS_INDICES, + GL_MAX_ELEMENTS_VERTICES, GL_MAX_ELEMENT_INDEX, GL_MAX_FRAGMENT_INPUT_COMPONENTS, + GL_MAX_FRAGMENT_UNIFORM_BLOCKS, GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, + GL_MAX_PROGRAM_TEXEL_OFFSET, GL_MAX_SAMPLES, GL_MAX_SERVER_WAIT_TIMEOUT, + GL_MAX_TEXTURE_LOD_BIAS, GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, + GL_MAX_UNIFORM_BLOCK_SIZE, GL_MAX_UNIFORM_BUFFER_BINDINGS, GL_MAX_VARYING_COMPONENTS, + GL_MAX_VERTEX_OUTPUT_COMPONENTS, GL_MAX_VERTEX_UNIFORM_BLOCKS, + GL_MAX_VERTEX_UNIFORM_COMPONENTS, GL_MINOR_VERSION, GL_MIN_PROGRAM_TEXEL_OFFSET, + GL_NUM_EXTENSIONS, GL_NUM_PROGRAM_BINARY_FORMATS, GL_PACK_ROW_LENGTH, GL_PACK_SKIP_PIXELS, + GL_PACK_SKIP_ROWS, GL_PIXEL_PACK_BUFFER_BINDING, GL_PIXEL_UNPACK_BUFFER_BINDING, + GL_PRIMITIVE_RESTART_FIXED_INDEX, GL_PROGRAM_BINARY_FORMATS, GL_RASTERIZER_DISCARD, + GL_READ_BUFFER, GL_READ_FRAMEBUFFER_BINDING, GL_SAMPLER_BINDING, + GL_TEXTURE_BINDING_2D_ARRAY, GL_TEXTURE_BINDING_3D, GL_TRANSFORM_FEEDBACK_ACTIVE, + GL_TRANSFORM_FEEDBACK_BINDING, GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, + GL_TRANSFORM_FEEDBACK_BUFFER_SIZE, GL_TRANSFORM_FEEDBACK_BUFFER_START, + GL_TRANSFORM_FEEDBACK_PAUSED, GL_UNIFORM_BUFFER_BINDING, + GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, GL_UNIFORM_BUFFER_SIZE, GL_UNIFORM_BUFFER_START, + GL_UNPACK_IMAGE_HEIGHT, GL_UNPACK_ROW_LENGTH, GL_UNPACK_SKIP_IMAGES, GL_UNPACK_SKIP_PIXELS, + GL_UNPACK_SKIP_ROWS, GL_VERTEX_ARRAY_BINDING: { + minRequiredVersion(3, 0) + } + // TODO: GL_FRAMEBUFFER_BINDING seems to be removed in 3.1 + case GL_DISPATCH_INDIRECT_BUFFER_BINDING, GL_IMAGE_BINDING_LAYERED, + GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, GL_MAX_COLOR_TEXTURE_SAMPLES, + GL_MAX_COMBINED_ATOMIC_COUNTERS, GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS, + GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS, GL_MAX_COMPUTE_ATOMIC_COUNTERS, + GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS, GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS, + GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS, GL_MAX_COMPUTE_UNIFORM_BLOCKS, + GL_MAX_COMPUTE_UNIFORM_COMPONENTS, GL_MAX_COMPUTE_WORK_GROUP_COUNT, + GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS, GL_MAX_COMPUTE_WORK_GROUP_SIZE, + GL_MAX_FRAGMENT_ATOMIC_COUNTERS, GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS, + GL_MAX_FRAMEBUFFER_HEIGHT, GL_MAX_FRAMEBUFFER_SAMPLES, GL_MAX_FRAMEBUFFER_WIDTH, + GL_MAX_INTEGER_SAMPLES, GL_MAX_SAMPLE_MASK_WORDS, GL_MAX_SHADER_STORAGE_BLOCK_SIZE, + GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, GL_MAX_UNIFORM_LOCATIONS, + GL_MAX_VERTEX_ATOMIC_COUNTERS, GL_MAX_VERTEX_ATTRIB_BINDINGS, + GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET, GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, + GL_PROGRAM_PIPELINE_BINDING, GL_SHADER_STORAGE_BUFFER_BINDING, + GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT, GL_SHADER_STORAGE_BUFFER_SIZE, + GL_SHADER_STORAGE_BUFFER_START, GL_TEXTURE_BINDING_2D_MULTISAMPLE, + GL_VERTEX_BINDING_DIVISOR, GL_VERTEX_BINDING_OFFSET, GL_VERTEX_BINDING_STRIDE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(param) + } + } + + v := values[0:stateVariableSize(param)] + ctx := GetContext() + switch (param) { + case GL_DEPTH_RANGE: { + v[0] = ctx.Rasterizing.DepthNear + v[1] = ctx.Rasterizing.DepthFar + } + case GL_LINE_WIDTH: + v[0] = ctx.Rasterizing.LineWidth + case GL_POLYGON_OFFSET_FACTOR: + v[0] = ctx.Rasterizing.PolygonOffsetFactor + case GL_POLYGON_OFFSET_UNITS: + v[0] = ctx.Rasterizing.PolygonOffsetUnits + case GL_SAMPLE_COVERAGE_VALUE: + v[0] = ctx.Rasterizing.SampleCoverageValue + case GL_COLOR_CLEAR_VALUE: { + v[0] = ctx.Clearing.ClearColor.Red + v[1] = ctx.Clearing.ClearColor.Green + v[2] = ctx.Clearing.ClearColor.Blue + v[3] = ctx.Clearing.ClearColor.Alpha + } + case GL_DEPTH_CLEAR_VALUE: + v[0] = ctx.Clearing.ClearDepth + case GL_ALIASED_LINE_WIDTH_RANGE: { + v[0] = ? /* smallest */ + v[1] = ? /* largest */ + } + case GL_ALIASED_POINT_SIZE_RANGE: { + v[0] = ? /* smallest */ + v[1] = ? /* largest */ + } + case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: + v[0] = ? + + // TODO: all the values returned by glGetBooleanv and glGetIntegerv can + // be returned here with a type conversion. + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGet.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGet.xhtml","OpenGL ES 3.1") +cmd void glGetInteger64i_v(GLenum target, GLuint index, GLint64* data) { + minRequiredVersion(3, 0) + switch (target) { + case GL_ACTIVE_TEXTURE, GL_ALIASED_LINE_WIDTH_RANGE, GL_ALIASED_POINT_SIZE_RANGE, + GL_ALPHA_BITS, GL_ARRAY_BUFFER_BINDING, GL_BLEND, GL_BLEND_COLOR, GL_BLEND_DST_ALPHA, + GL_BLEND_DST_RGB, GL_BLEND_EQUATION_ALPHA, GL_BLEND_EQUATION_RGB, GL_BLEND_SRC_ALPHA, + GL_BLEND_SRC_RGB, GL_BLUE_BITS, GL_COLOR_CLEAR_VALUE, GL_COLOR_WRITEMASK, + GL_COMPRESSED_TEXTURE_FORMATS, GL_COPY_READ_BUFFER_BINDING, GL_COPY_WRITE_BUFFER_BINDING, + GL_CULL_FACE, GL_CULL_FACE_MODE, GL_CURRENT_PROGRAM, GL_DEPTH_BITS, GL_DEPTH_CLEAR_VALUE, + GL_DEPTH_FUNC, GL_DEPTH_RANGE, GL_DEPTH_TEST, GL_DEPTH_WRITEMASK, GL_DITHER, + GL_DRAW_BUFFER, GL_DRAW_FRAMEBUFFER_BINDING, GL_ELEMENT_ARRAY_BUFFER_BINDING, + GL_FRAGMENT_SHADER_DERIVATIVE_HINT, GL_FRONT_FACE, GL_GENERATE_MIPMAP_HINT, GL_GREEN_BITS, + GL_IMPLEMENTATION_COLOR_READ_FORMAT, GL_IMPLEMENTATION_COLOR_READ_TYPE, GL_LINE_WIDTH, + GL_MAJOR_VERSION, GL_MAX_3D_TEXTURE_SIZE, GL_MAX_ARRAY_TEXTURE_LAYERS, + GL_MAX_COLOR_ATTACHMENTS, GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, + GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, GL_MAX_COMBINED_UNIFORM_BLOCKS, + GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, GL_MAX_CUBE_MAP_TEXTURE_SIZE, + GL_MAX_DRAW_BUFFERS, GL_MAX_ELEMENTS_INDICES, GL_MAX_ELEMENTS_VERTICES, + GL_MAX_ELEMENT_INDEX, GL_MAX_FRAGMENT_INPUT_COMPONENTS, GL_MAX_FRAGMENT_UNIFORM_BLOCKS, + GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, GL_MAX_FRAGMENT_UNIFORM_VECTORS, + GL_MAX_PROGRAM_TEXEL_OFFSET, GL_MAX_RENDERBUFFER_SIZE, GL_MAX_SAMPLES, + GL_MAX_SERVER_WAIT_TIMEOUT, GL_MAX_TEXTURE_IMAGE_UNITS, GL_MAX_TEXTURE_LOD_BIAS, + GL_MAX_TEXTURE_SIZE, GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, + GL_MAX_UNIFORM_BLOCK_SIZE, GL_MAX_UNIFORM_BUFFER_BINDINGS, GL_MAX_VARYING_COMPONENTS, + GL_MAX_VARYING_VECTORS, GL_MAX_VERTEX_ATTRIBS, GL_MAX_VERTEX_OUTPUT_COMPONENTS, + GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, GL_MAX_VERTEX_UNIFORM_BLOCKS, + GL_MAX_VERTEX_UNIFORM_COMPONENTS, GL_MAX_VERTEX_UNIFORM_VECTORS, GL_MAX_VIEWPORT_DIMS, + GL_MINOR_VERSION, GL_MIN_PROGRAM_TEXEL_OFFSET, GL_NUM_COMPRESSED_TEXTURE_FORMATS, + GL_NUM_EXTENSIONS, GL_NUM_PROGRAM_BINARY_FORMATS, GL_NUM_SHADER_BINARY_FORMATS, + GL_PACK_ALIGNMENT, GL_PACK_ROW_LENGTH, GL_PACK_SKIP_PIXELS, GL_PACK_SKIP_ROWS, + GL_PIXEL_PACK_BUFFER_BINDING, GL_PIXEL_UNPACK_BUFFER_BINDING, GL_POLYGON_OFFSET_FACTOR, + GL_POLYGON_OFFSET_FILL, GL_POLYGON_OFFSET_UNITS, GL_PRIMITIVE_RESTART_FIXED_INDEX, + GL_PROGRAM_BINARY_FORMATS, GL_RASTERIZER_DISCARD, GL_READ_BUFFER, + GL_READ_FRAMEBUFFER_BINDING, GL_RED_BITS, GL_RENDERBUFFER_BINDING, GL_SAMPLER_BINDING, + GL_SAMPLES, GL_SAMPLE_ALPHA_TO_COVERAGE, GL_SAMPLE_BUFFERS, GL_SAMPLE_COVERAGE, + GL_SAMPLE_COVERAGE_INVERT, GL_SAMPLE_COVERAGE_VALUE, GL_SCISSOR_BOX, GL_SCISSOR_TEST, + GL_SHADER_BINARY_FORMATS, GL_SHADER_COMPILER, GL_STENCIL_BACK_FAIL, GL_STENCIL_BACK_FUNC, + GL_STENCIL_BACK_PASS_DEPTH_FAIL, GL_STENCIL_BACK_PASS_DEPTH_PASS, GL_STENCIL_BACK_REF, + GL_STENCIL_BACK_VALUE_MASK, GL_STENCIL_BACK_WRITEMASK, GL_STENCIL_BITS, + GL_STENCIL_CLEAR_VALUE, GL_STENCIL_FAIL, GL_STENCIL_FUNC, GL_STENCIL_PASS_DEPTH_FAIL, + GL_STENCIL_PASS_DEPTH_PASS, GL_STENCIL_REF, GL_STENCIL_TEST, GL_STENCIL_VALUE_MASK, + GL_STENCIL_WRITEMASK, GL_SUBPIXEL_BITS, GL_TEXTURE_BINDING_2D, GL_TEXTURE_BINDING_2D_ARRAY, + GL_TEXTURE_BINDING_3D, GL_TEXTURE_BINDING_CUBE_MAP, GL_TRANSFORM_FEEDBACK_ACTIVE, + GL_TRANSFORM_FEEDBACK_BINDING, GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, + GL_TRANSFORM_FEEDBACK_BUFFER_SIZE, GL_TRANSFORM_FEEDBACK_BUFFER_START, + GL_TRANSFORM_FEEDBACK_PAUSED, GL_UNIFORM_BUFFER_BINDING, + GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, GL_UNIFORM_BUFFER_SIZE, GL_UNIFORM_BUFFER_START, + GL_UNPACK_ALIGNMENT, GL_UNPACK_IMAGE_HEIGHT, GL_UNPACK_ROW_LENGTH, GL_UNPACK_SKIP_IMAGES, + GL_UNPACK_SKIP_PIXELS, GL_UNPACK_SKIP_ROWS, GL_VERTEX_ARRAY_BINDING, GL_VIEWPORT: { + // version 3.0 + } + case GL_DISPATCH_INDIRECT_BUFFER_BINDING, GL_IMAGE_BINDING_LAYERED, + GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, GL_MAX_COLOR_TEXTURE_SAMPLES, + GL_MAX_COMBINED_ATOMIC_COUNTERS, GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS, + GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS, GL_MAX_COMPUTE_ATOMIC_COUNTERS, + GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS, GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS, + GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS, GL_MAX_COMPUTE_UNIFORM_BLOCKS, + GL_MAX_COMPUTE_UNIFORM_COMPONENTS, GL_MAX_COMPUTE_WORK_GROUP_COUNT, + GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS, GL_MAX_COMPUTE_WORK_GROUP_SIZE, + GL_MAX_FRAGMENT_ATOMIC_COUNTERS, GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS, + GL_MAX_FRAMEBUFFER_HEIGHT, GL_MAX_FRAMEBUFFER_SAMPLES, GL_MAX_FRAMEBUFFER_WIDTH, + GL_MAX_INTEGER_SAMPLES, GL_MAX_SAMPLE_MASK_WORDS, GL_MAX_SHADER_STORAGE_BLOCK_SIZE, + GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, GL_MAX_UNIFORM_LOCATIONS, + GL_MAX_VERTEX_ATOMIC_COUNTERS, GL_MAX_VERTEX_ATTRIB_BINDINGS, + GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET, GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, + GL_PROGRAM_PIPELINE_BINDING, GL_SHADER_STORAGE_BUFFER_BINDING, + GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT, GL_SHADER_STORAGE_BUFFER_SIZE, + GL_SHADER_STORAGE_BUFFER_START, GL_TEXTURE_BINDING_2D_MULTISAMPLE, + GL_VERTEX_BINDING_DIVISOR, GL_VERTEX_BINDING_OFFSET, GL_VERTEX_BINDING_STRIDE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGet.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGet.xhtml","OpenGL ES 3.1") +cmd void glGetInteger64v(GLenum pname, GLint64* data) { + minRequiredVersion(3, 0) + switch (pname) { + case GL_ACTIVE_TEXTURE, GL_ALIASED_LINE_WIDTH_RANGE, GL_ALIASED_POINT_SIZE_RANGE, + GL_ALPHA_BITS, GL_ARRAY_BUFFER_BINDING, GL_BLEND, GL_BLEND_COLOR, GL_BLEND_DST_ALPHA, + GL_BLEND_DST_RGB, GL_BLEND_EQUATION_ALPHA, GL_BLEND_EQUATION_RGB, GL_BLEND_SRC_ALPHA, + GL_BLEND_SRC_RGB, GL_BLUE_BITS, GL_COLOR_CLEAR_VALUE, GL_COLOR_WRITEMASK, + GL_COMPRESSED_TEXTURE_FORMATS, GL_COPY_READ_BUFFER_BINDING, GL_COPY_WRITE_BUFFER_BINDING, + GL_CULL_FACE, GL_CULL_FACE_MODE, GL_CURRENT_PROGRAM, GL_DEPTH_BITS, GL_DEPTH_CLEAR_VALUE, + GL_DEPTH_FUNC, GL_DEPTH_RANGE, GL_DEPTH_TEST, GL_DEPTH_WRITEMASK, GL_DITHER, + GL_DRAW_BUFFER, GL_DRAW_FRAMEBUFFER_BINDING, GL_ELEMENT_ARRAY_BUFFER_BINDING, + GL_FRAGMENT_SHADER_DERIVATIVE_HINT, GL_FRONT_FACE, GL_GENERATE_MIPMAP_HINT, GL_GREEN_BITS, + GL_IMPLEMENTATION_COLOR_READ_FORMAT, GL_IMPLEMENTATION_COLOR_READ_TYPE, GL_LINE_WIDTH, + GL_MAJOR_VERSION, GL_MAX_3D_TEXTURE_SIZE, GL_MAX_ARRAY_TEXTURE_LAYERS, + GL_MAX_COLOR_ATTACHMENTS, GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, + GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, GL_MAX_COMBINED_UNIFORM_BLOCKS, + GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, GL_MAX_CUBE_MAP_TEXTURE_SIZE, + GL_MAX_DRAW_BUFFERS, GL_MAX_ELEMENTS_INDICES, GL_MAX_ELEMENTS_VERTICES, + GL_MAX_ELEMENT_INDEX, GL_MAX_FRAGMENT_INPUT_COMPONENTS, GL_MAX_FRAGMENT_UNIFORM_BLOCKS, + GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, GL_MAX_FRAGMENT_UNIFORM_VECTORS, + GL_MAX_PROGRAM_TEXEL_OFFSET, GL_MAX_RENDERBUFFER_SIZE, GL_MAX_SAMPLES, + GL_MAX_SERVER_WAIT_TIMEOUT, GL_MAX_TEXTURE_IMAGE_UNITS, GL_MAX_TEXTURE_LOD_BIAS, + GL_MAX_TEXTURE_SIZE, GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, + GL_MAX_UNIFORM_BLOCK_SIZE, GL_MAX_UNIFORM_BUFFER_BINDINGS, GL_MAX_VARYING_COMPONENTS, + GL_MAX_VARYING_VECTORS, GL_MAX_VERTEX_ATTRIBS, GL_MAX_VERTEX_OUTPUT_COMPONENTS, + GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, GL_MAX_VERTEX_UNIFORM_BLOCKS, + GL_MAX_VERTEX_UNIFORM_COMPONENTS, GL_MAX_VERTEX_UNIFORM_VECTORS, GL_MAX_VIEWPORT_DIMS, + GL_MINOR_VERSION, GL_MIN_PROGRAM_TEXEL_OFFSET, GL_NUM_COMPRESSED_TEXTURE_FORMATS, + GL_NUM_EXTENSIONS, GL_NUM_PROGRAM_BINARY_FORMATS, GL_NUM_SHADER_BINARY_FORMATS, + GL_PACK_ALIGNMENT, GL_PACK_ROW_LENGTH, GL_PACK_SKIP_PIXELS, GL_PACK_SKIP_ROWS, + GL_PIXEL_PACK_BUFFER_BINDING, GL_PIXEL_UNPACK_BUFFER_BINDING, GL_POLYGON_OFFSET_FACTOR, + GL_POLYGON_OFFSET_FILL, GL_POLYGON_OFFSET_UNITS, GL_PRIMITIVE_RESTART_FIXED_INDEX, + GL_PROGRAM_BINARY_FORMATS, GL_RASTERIZER_DISCARD, GL_READ_BUFFER, + GL_READ_FRAMEBUFFER_BINDING, GL_RED_BITS, GL_RENDERBUFFER_BINDING, GL_SAMPLER_BINDING, + GL_SAMPLES, GL_SAMPLE_ALPHA_TO_COVERAGE, GL_SAMPLE_BUFFERS, GL_SAMPLE_COVERAGE, + GL_SAMPLE_COVERAGE_INVERT, GL_SAMPLE_COVERAGE_VALUE, GL_SCISSOR_BOX, GL_SCISSOR_TEST, + GL_SHADER_BINARY_FORMATS, GL_SHADER_COMPILER, GL_STENCIL_BACK_FAIL, GL_STENCIL_BACK_FUNC, + GL_STENCIL_BACK_PASS_DEPTH_FAIL, GL_STENCIL_BACK_PASS_DEPTH_PASS, GL_STENCIL_BACK_REF, + GL_STENCIL_BACK_VALUE_MASK, GL_STENCIL_BACK_WRITEMASK, GL_STENCIL_BITS, + GL_STENCIL_CLEAR_VALUE, GL_STENCIL_FAIL, GL_STENCIL_FUNC, GL_STENCIL_PASS_DEPTH_FAIL, + GL_STENCIL_PASS_DEPTH_PASS, GL_STENCIL_REF, GL_STENCIL_TEST, GL_STENCIL_VALUE_MASK, + GL_STENCIL_WRITEMASK, GL_SUBPIXEL_BITS, GL_TEXTURE_BINDING_2D, GL_TEXTURE_BINDING_2D_ARRAY, + GL_TEXTURE_BINDING_3D, GL_TEXTURE_BINDING_CUBE_MAP, GL_TRANSFORM_FEEDBACK_ACTIVE, + GL_TRANSFORM_FEEDBACK_BINDING, GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, + GL_TRANSFORM_FEEDBACK_BUFFER_SIZE, GL_TRANSFORM_FEEDBACK_BUFFER_START, + GL_TRANSFORM_FEEDBACK_PAUSED, GL_UNIFORM_BUFFER_BINDING, + GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, GL_UNIFORM_BUFFER_SIZE, GL_UNIFORM_BUFFER_START, + GL_UNPACK_ALIGNMENT, GL_UNPACK_IMAGE_HEIGHT, GL_UNPACK_ROW_LENGTH, GL_UNPACK_SKIP_IMAGES, + GL_UNPACK_SKIP_PIXELS, GL_UNPACK_SKIP_ROWS, GL_VERTEX_ARRAY_BINDING, GL_VIEWPORT: { + // version 3.0 + } + case GL_DISPATCH_INDIRECT_BUFFER_BINDING, GL_IMAGE_BINDING_LAYERED, + GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, GL_MAX_COLOR_TEXTURE_SAMPLES, + GL_MAX_COMBINED_ATOMIC_COUNTERS, GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS, + GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS, GL_MAX_COMPUTE_ATOMIC_COUNTERS, + GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS, GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS, + GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS, GL_MAX_COMPUTE_UNIFORM_BLOCKS, + GL_MAX_COMPUTE_UNIFORM_COMPONENTS, GL_MAX_COMPUTE_WORK_GROUP_COUNT, + GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS, GL_MAX_COMPUTE_WORK_GROUP_SIZE, + GL_MAX_FRAGMENT_ATOMIC_COUNTERS, GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS, + GL_MAX_FRAMEBUFFER_HEIGHT, GL_MAX_FRAMEBUFFER_SAMPLES, GL_MAX_FRAMEBUFFER_WIDTH, + GL_MAX_INTEGER_SAMPLES, GL_MAX_SAMPLE_MASK_WORDS, GL_MAX_SHADER_STORAGE_BLOCK_SIZE, + GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, GL_MAX_UNIFORM_LOCATIONS, + GL_MAX_VERTEX_ATOMIC_COUNTERS, GL_MAX_VERTEX_ATTRIB_BINDINGS, + GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET, GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, + GL_PROGRAM_PIPELINE_BINDING, GL_SHADER_STORAGE_BUFFER_BINDING, + GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT, GL_SHADER_STORAGE_BUFFER_SIZE, + GL_SHADER_STORAGE_BUFFER_START, GL_TEXTURE_BINDING_2D_MULTISAMPLE, + GL_VERTEX_BINDING_DIVISOR, GL_VERTEX_BINDING_OFFSET, GL_VERTEX_BINDING_STRIDE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGet.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGet.xhtml","OpenGL ES 3.1") +cmd void glGetIntegeri_v(GLenum target, GLuint index, GLint* data) { + minRequiredVersion(3, 0) + switch (target) { + case GL_ACTIVE_TEXTURE, GL_ALIASED_LINE_WIDTH_RANGE, GL_ALIASED_POINT_SIZE_RANGE, + GL_ALPHA_BITS, GL_ARRAY_BUFFER_BINDING, GL_BLEND, GL_BLEND_COLOR, GL_BLEND_DST_ALPHA, + GL_BLEND_DST_RGB, GL_BLEND_EQUATION_ALPHA, GL_BLEND_EQUATION_RGB, GL_BLEND_SRC_ALPHA, + GL_BLEND_SRC_RGB, GL_BLUE_BITS, GL_COLOR_CLEAR_VALUE, GL_COLOR_WRITEMASK, + GL_COMPRESSED_TEXTURE_FORMATS, GL_COPY_READ_BUFFER_BINDING, GL_COPY_WRITE_BUFFER_BINDING, + GL_CULL_FACE, GL_CULL_FACE_MODE, GL_CURRENT_PROGRAM, GL_DEPTH_BITS, GL_DEPTH_CLEAR_VALUE, + GL_DEPTH_FUNC, GL_DEPTH_RANGE, GL_DEPTH_TEST, GL_DEPTH_WRITEMASK, GL_DITHER, + GL_DRAW_BUFFER, GL_DRAW_FRAMEBUFFER_BINDING, GL_ELEMENT_ARRAY_BUFFER_BINDING, + GL_FRAGMENT_SHADER_DERIVATIVE_HINT, GL_FRONT_FACE, GL_GENERATE_MIPMAP_HINT, GL_GREEN_BITS, + GL_IMPLEMENTATION_COLOR_READ_FORMAT, GL_IMPLEMENTATION_COLOR_READ_TYPE, GL_LINE_WIDTH, + GL_MAJOR_VERSION, GL_MAX_3D_TEXTURE_SIZE, GL_MAX_ARRAY_TEXTURE_LAYERS, + GL_MAX_COLOR_ATTACHMENTS, GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, + GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, GL_MAX_COMBINED_UNIFORM_BLOCKS, + GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, GL_MAX_CUBE_MAP_TEXTURE_SIZE, + GL_MAX_DRAW_BUFFERS, GL_MAX_ELEMENTS_INDICES, GL_MAX_ELEMENTS_VERTICES, + GL_MAX_ELEMENT_INDEX, GL_MAX_FRAGMENT_INPUT_COMPONENTS, GL_MAX_FRAGMENT_UNIFORM_BLOCKS, + GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, GL_MAX_FRAGMENT_UNIFORM_VECTORS, + GL_MAX_PROGRAM_TEXEL_OFFSET, GL_MAX_RENDERBUFFER_SIZE, GL_MAX_SAMPLES, + GL_MAX_SERVER_WAIT_TIMEOUT, GL_MAX_TEXTURE_IMAGE_UNITS, GL_MAX_TEXTURE_LOD_BIAS, + GL_MAX_TEXTURE_SIZE, GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, + GL_MAX_UNIFORM_BLOCK_SIZE, GL_MAX_UNIFORM_BUFFER_BINDINGS, GL_MAX_VARYING_COMPONENTS, + GL_MAX_VARYING_VECTORS, GL_MAX_VERTEX_ATTRIBS, GL_MAX_VERTEX_OUTPUT_COMPONENTS, + GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, GL_MAX_VERTEX_UNIFORM_BLOCKS, + GL_MAX_VERTEX_UNIFORM_COMPONENTS, GL_MAX_VERTEX_UNIFORM_VECTORS, GL_MAX_VIEWPORT_DIMS, + GL_MINOR_VERSION, GL_MIN_PROGRAM_TEXEL_OFFSET, GL_NUM_COMPRESSED_TEXTURE_FORMATS, + GL_NUM_EXTENSIONS, GL_NUM_PROGRAM_BINARY_FORMATS, GL_NUM_SHADER_BINARY_FORMATS, + GL_PACK_ALIGNMENT, GL_PACK_ROW_LENGTH, GL_PACK_SKIP_PIXELS, GL_PACK_SKIP_ROWS, + GL_PIXEL_PACK_BUFFER_BINDING, GL_PIXEL_UNPACK_BUFFER_BINDING, GL_POLYGON_OFFSET_FACTOR, + GL_POLYGON_OFFSET_FILL, GL_POLYGON_OFFSET_UNITS, GL_PRIMITIVE_RESTART_FIXED_INDEX, + GL_PROGRAM_BINARY_FORMATS, GL_RASTERIZER_DISCARD, GL_READ_BUFFER, + GL_READ_FRAMEBUFFER_BINDING, GL_RED_BITS, GL_RENDERBUFFER_BINDING, GL_SAMPLER_BINDING, + GL_SAMPLES, GL_SAMPLE_ALPHA_TO_COVERAGE, GL_SAMPLE_BUFFERS, GL_SAMPLE_COVERAGE, + GL_SAMPLE_COVERAGE_INVERT, GL_SAMPLE_COVERAGE_VALUE, GL_SCISSOR_BOX, GL_SCISSOR_TEST, + GL_SHADER_BINARY_FORMATS, GL_SHADER_COMPILER, GL_STENCIL_BACK_FAIL, GL_STENCIL_BACK_FUNC, + GL_STENCIL_BACK_PASS_DEPTH_FAIL, GL_STENCIL_BACK_PASS_DEPTH_PASS, GL_STENCIL_BACK_REF, + GL_STENCIL_BACK_VALUE_MASK, GL_STENCIL_BACK_WRITEMASK, GL_STENCIL_BITS, + GL_STENCIL_CLEAR_VALUE, GL_STENCIL_FAIL, GL_STENCIL_FUNC, GL_STENCIL_PASS_DEPTH_FAIL, + GL_STENCIL_PASS_DEPTH_PASS, GL_STENCIL_REF, GL_STENCIL_TEST, GL_STENCIL_VALUE_MASK, + GL_STENCIL_WRITEMASK, GL_SUBPIXEL_BITS, GL_TEXTURE_BINDING_2D, GL_TEXTURE_BINDING_2D_ARRAY, + GL_TEXTURE_BINDING_3D, GL_TEXTURE_BINDING_CUBE_MAP, GL_TRANSFORM_FEEDBACK_ACTIVE, + GL_TRANSFORM_FEEDBACK_BINDING, GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, + GL_TRANSFORM_FEEDBACK_BUFFER_SIZE, GL_TRANSFORM_FEEDBACK_BUFFER_START, + GL_TRANSFORM_FEEDBACK_PAUSED, GL_UNIFORM_BUFFER_BINDING, + GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, GL_UNIFORM_BUFFER_SIZE, GL_UNIFORM_BUFFER_START, + GL_UNPACK_ALIGNMENT, GL_UNPACK_IMAGE_HEIGHT, GL_UNPACK_ROW_LENGTH, GL_UNPACK_SKIP_IMAGES, + GL_UNPACK_SKIP_PIXELS, GL_UNPACK_SKIP_ROWS, GL_VERTEX_ARRAY_BINDING, GL_VIEWPORT: { + // version 3.0 + } + case GL_DISPATCH_INDIRECT_BUFFER_BINDING, GL_IMAGE_BINDING_LAYERED, + GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, GL_MAX_COLOR_TEXTURE_SAMPLES, + GL_MAX_COMBINED_ATOMIC_COUNTERS, GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS, + GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS, GL_MAX_COMPUTE_ATOMIC_COUNTERS, + GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS, GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS, + GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS, GL_MAX_COMPUTE_UNIFORM_BLOCKS, + GL_MAX_COMPUTE_UNIFORM_COMPONENTS, GL_MAX_COMPUTE_WORK_GROUP_COUNT, + GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS, GL_MAX_COMPUTE_WORK_GROUP_SIZE, + GL_MAX_FRAGMENT_ATOMIC_COUNTERS, GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS, + GL_MAX_FRAMEBUFFER_HEIGHT, GL_MAX_FRAMEBUFFER_SAMPLES, GL_MAX_FRAMEBUFFER_WIDTH, + GL_MAX_INTEGER_SAMPLES, GL_MAX_SAMPLE_MASK_WORDS, GL_MAX_SHADER_STORAGE_BLOCK_SIZE, + GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, GL_MAX_UNIFORM_LOCATIONS, + GL_MAX_VERTEX_ATOMIC_COUNTERS, GL_MAX_VERTEX_ATTRIB_BINDINGS, + GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET, GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, + GL_PROGRAM_PIPELINE_BINDING, GL_SHADER_STORAGE_BUFFER_BINDING, + GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT, GL_SHADER_STORAGE_BUFFER_SIZE, + GL_SHADER_STORAGE_BUFFER_START, GL_TEXTURE_BINDING_2D_MULTISAMPLE, + GL_VERTEX_BINDING_DIVISOR, GL_VERTEX_BINDING_OFFSET, GL_VERTEX_BINDING_STRIDE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGet.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGet.xhtml","OpenGL ES 3.1") +cmd void glGetIntegerv(GLenum param, GLint* values) { + minRequiredVersion(2, 0) + switch (param) { + case GL_ACTIVE_TEXTURE, GL_ALIASED_LINE_WIDTH_RANGE, GL_ALIASED_POINT_SIZE_RANGE, + GL_ALPHA_BITS, GL_ARRAY_BUFFER_BINDING, GL_BLEND, GL_BLEND_COLOR, GL_BLEND_DST_ALPHA, + GL_BLEND_DST_RGB, GL_BLEND_EQUATION_ALPHA, GL_BLEND_EQUATION_RGB, GL_BLEND_SRC_ALPHA, + GL_BLEND_SRC_RGB, GL_BLUE_BITS, GL_COLOR_CLEAR_VALUE, GL_COLOR_WRITEMASK, + GL_COMPRESSED_TEXTURE_FORMATS, GL_CULL_FACE, GL_CULL_FACE_MODE, GL_CURRENT_PROGRAM, + GL_DEPTH_BITS, GL_DEPTH_CLEAR_VALUE, GL_DEPTH_FUNC, GL_DEPTH_RANGE, GL_DEPTH_TEST, + GL_DEPTH_WRITEMASK, GL_DITHER, GL_ELEMENT_ARRAY_BUFFER_BINDING, GL_FRAMEBUFFER_BINDING, + GL_FRONT_FACE, GL_GENERATE_MIPMAP_HINT, GL_GREEN_BITS, GL_IMPLEMENTATION_COLOR_READ_FORMAT, + GL_IMPLEMENTATION_COLOR_READ_TYPE, GL_LINE_WIDTH, GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, + GL_MAX_CUBE_MAP_TEXTURE_SIZE, GL_MAX_FRAGMENT_UNIFORM_VECTORS, GL_MAX_RENDERBUFFER_SIZE, + GL_MAX_TEXTURE_IMAGE_UNITS, GL_MAX_TEXTURE_SIZE, GL_MAX_VARYING_VECTORS, + GL_MAX_VERTEX_ATTRIBS, GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, GL_MAX_VERTEX_UNIFORM_VECTORS, + GL_MAX_VIEWPORT_DIMS, GL_NUM_COMPRESSED_TEXTURE_FORMATS, GL_NUM_SHADER_BINARY_FORMATS, + GL_PACK_ALIGNMENT, GL_POLYGON_OFFSET_FACTOR, GL_POLYGON_OFFSET_FILL, + GL_POLYGON_OFFSET_UNITS, GL_RED_BITS, GL_RENDERBUFFER_BINDING, GL_SAMPLES, + GL_SAMPLE_ALPHA_TO_COVERAGE, GL_SAMPLE_BUFFERS, GL_SAMPLE_COVERAGE, + GL_SAMPLE_COVERAGE_INVERT, GL_SAMPLE_COVERAGE_VALUE, GL_SCISSOR_BOX, GL_SCISSOR_TEST, + GL_SHADER_BINARY_FORMATS, GL_SHADER_COMPILER, GL_STENCIL_BACK_FAIL, GL_STENCIL_BACK_FUNC, + GL_STENCIL_BACK_PASS_DEPTH_FAIL, GL_STENCIL_BACK_PASS_DEPTH_PASS, GL_STENCIL_BACK_REF, + GL_STENCIL_BACK_VALUE_MASK, GL_STENCIL_BACK_WRITEMASK, GL_STENCIL_BITS, + GL_STENCIL_CLEAR_VALUE, GL_STENCIL_FAIL, GL_STENCIL_FUNC, GL_STENCIL_PASS_DEPTH_FAIL, + GL_STENCIL_PASS_DEPTH_PASS, GL_STENCIL_REF, GL_STENCIL_TEST, GL_STENCIL_VALUE_MASK, + GL_STENCIL_WRITEMASK, GL_SUBPIXEL_BITS, GL_TEXTURE_BINDING_2D, GL_TEXTURE_BINDING_CUBE_MAP, + GL_UNPACK_ALIGNMENT, GL_VIEWPORT: { + // version 2.0 + } + // TODO: GL_FRAMEBUFFER_BINDING seems to be removed in 3.0 + case GL_COPY_READ_BUFFER_BINDING, GL_COPY_WRITE_BUFFER_BINDING, GL_DRAW_BUFFER, + GL_DRAW_FRAMEBUFFER_BINDING, GL_FRAGMENT_SHADER_DERIVATIVE_HINT, GL_MAJOR_VERSION, + GL_MAX_3D_TEXTURE_SIZE, GL_MAX_ARRAY_TEXTURE_LAYERS, GL_MAX_COLOR_ATTACHMENTS, + GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, GL_MAX_COMBINED_UNIFORM_BLOCKS, + GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, GL_MAX_DRAW_BUFFERS, GL_MAX_ELEMENTS_INDICES, + GL_MAX_ELEMENTS_VERTICES, GL_MAX_ELEMENT_INDEX, GL_MAX_FRAGMENT_INPUT_COMPONENTS, + GL_MAX_FRAGMENT_UNIFORM_BLOCKS, GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, + GL_MAX_PROGRAM_TEXEL_OFFSET, GL_MAX_SAMPLES, GL_MAX_SERVER_WAIT_TIMEOUT, + GL_MAX_TEXTURE_LOD_BIAS, GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, + GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, + GL_MAX_UNIFORM_BLOCK_SIZE, GL_MAX_UNIFORM_BUFFER_BINDINGS, GL_MAX_VARYING_COMPONENTS, + GL_MAX_VERTEX_OUTPUT_COMPONENTS, GL_MAX_VERTEX_UNIFORM_BLOCKS, + GL_MAX_VERTEX_UNIFORM_COMPONENTS, GL_MINOR_VERSION, GL_MIN_PROGRAM_TEXEL_OFFSET, + GL_NUM_EXTENSIONS, GL_NUM_PROGRAM_BINARY_FORMATS, GL_PACK_ROW_LENGTH, GL_PACK_SKIP_PIXELS, + GL_PACK_SKIP_ROWS, GL_PIXEL_PACK_BUFFER_BINDING, GL_PIXEL_UNPACK_BUFFER_BINDING, + GL_PRIMITIVE_RESTART_FIXED_INDEX, GL_PROGRAM_BINARY_FORMATS, GL_RASTERIZER_DISCARD, + GL_READ_BUFFER, GL_READ_FRAMEBUFFER_BINDING, GL_SAMPLER_BINDING, + GL_TEXTURE_BINDING_2D_ARRAY, GL_TEXTURE_BINDING_3D, GL_TRANSFORM_FEEDBACK_ACTIVE, + GL_TRANSFORM_FEEDBACK_BINDING, GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, + GL_TRANSFORM_FEEDBACK_BUFFER_SIZE, GL_TRANSFORM_FEEDBACK_BUFFER_START, + GL_TRANSFORM_FEEDBACK_PAUSED, GL_UNIFORM_BUFFER_BINDING, + GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, GL_UNIFORM_BUFFER_SIZE, GL_UNIFORM_BUFFER_START, + GL_UNPACK_IMAGE_HEIGHT, GL_UNPACK_ROW_LENGTH, GL_UNPACK_SKIP_IMAGES, GL_UNPACK_SKIP_PIXELS, + GL_UNPACK_SKIP_ROWS, GL_VERTEX_ARRAY_BINDING: { + minRequiredVersion(3, 0) + } + // TODO: GL_FRAMEBUFFER_BINDING seems to be removed in 3.1 + case GL_DISPATCH_INDIRECT_BUFFER_BINDING, GL_IMAGE_BINDING_LAYERED, + GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, GL_MAX_COLOR_TEXTURE_SAMPLES, + GL_MAX_COMBINED_ATOMIC_COUNTERS, GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS, + GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS, GL_MAX_COMPUTE_ATOMIC_COUNTERS, + GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS, GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS, + GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS, GL_MAX_COMPUTE_UNIFORM_BLOCKS, + GL_MAX_COMPUTE_UNIFORM_COMPONENTS, GL_MAX_COMPUTE_WORK_GROUP_COUNT, + GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS, GL_MAX_COMPUTE_WORK_GROUP_SIZE, + GL_MAX_FRAGMENT_ATOMIC_COUNTERS, GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS, + GL_MAX_FRAMEBUFFER_HEIGHT, GL_MAX_FRAMEBUFFER_SAMPLES, GL_MAX_FRAMEBUFFER_WIDTH, + GL_MAX_INTEGER_SAMPLES, GL_MAX_SAMPLE_MASK_WORDS, GL_MAX_SHADER_STORAGE_BLOCK_SIZE, + GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, GL_MAX_UNIFORM_LOCATIONS, + GL_MAX_VERTEX_ATOMIC_COUNTERS, GL_MAX_VERTEX_ATTRIB_BINDINGS, + GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET, GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, + GL_PROGRAM_PIPELINE_BINDING, GL_SHADER_STORAGE_BUFFER_BINDING, + GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT, GL_SHADER_STORAGE_BUFFER_SIZE, + GL_SHADER_STORAGE_BUFFER_START, GL_TEXTURE_BINDING_2D_MULTISAMPLE, + GL_VERTEX_BINDING_DIVISOR, GL_VERTEX_BINDING_OFFSET, GL_VERTEX_BINDING_STRIDE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(param) + } + } + + v := values[0:stateVariableSize(param)] + ctx := GetContext() + switch (param) { + case GL_ACTIVE_TEXTURE: + v[0] = as!s32(ctx.ActiveTextureUnit) + case GL_ARRAY_BUFFER_BINDING: + v[0] = as!s32(ctx.BoundBuffers[GL_ARRAY_BUFFER]) + case GL_ELEMENT_ARRAY_BUFFER_BINDING: + v[0] = as!s32(ctx.BoundBuffers[GL_ELEMENT_ARRAY_BUFFER]) + case GL_BLEND_SRC_ALPHA: + v[0] = as!s32(ctx.Blending.SrcAlphaBlendFactor) + case GL_BLEND_SRC_RGB: + v[0] = as!s32(ctx.Blending.SrcRgbBlendFactor) + case GL_BLEND_DST_ALPHA: + v[0] = as!s32(ctx.Blending.DstAlphaBlendFactor) + case GL_BLEND_DST_RGB: + v[0] = as!s32(ctx.Blending.DstRgbBlendFactor) + case GL_BLEND_EQUATION_RGB: + v[0] = as!s32(ctx.Blending.BlendEquationRgb) + case GL_BLEND_EQUATION_ALPHA: + v[0] = as!s32(ctx.Blending.BlendEquationAlpha) + case GL_BLEND_COLOR: { + v[0] = as!s32(ctx.Blending.BlendColor.Red) + v[1] = as!s32(ctx.Blending.BlendColor.Green) + v[2] = as!s32(ctx.Blending.BlendColor.Blue) + v[3] = as!s32(ctx.Blending.BlendColor.Alpha) + } + case GL_DEPTH_FUNC: + v[0] = as!s32(ctx.Rasterizing.DepthTestFunction) + case GL_DEPTH_CLEAR_VALUE: + v[0] = as!s32(ctx.Clearing.ClearDepth) + case GL_STENCIL_WRITEMASK: + v[0] = as!s32(ctx.Rasterizing.StencilMask[GL_FRONT]) + case GL_STENCIL_BACK_WRITEMASK: + v[0] = as!s32(ctx.Rasterizing.StencilMask[GL_BACK]) + case GL_VIEWPORT: { + v[0] = ctx.Rasterizing.Viewport.X + v[1] = ctx.Rasterizing.Viewport.Y + v[2] = ctx.Rasterizing.Viewport.Width + v[3] = ctx.Rasterizing.Viewport.Height + } + case GL_SCISSOR_BOX: { + v[0] = ctx.Rasterizing.Scissor.X + v[1] = ctx.Rasterizing.Scissor.Y + v[2] = ctx.Rasterizing.Scissor.Width + v[3] = ctx.Rasterizing.Scissor.Height + } + case GL_FRONT_FACE: + v[0] = as!s32(ctx.Rasterizing.FrontFace) + case GL_CULL_FACE_MODE: + v[0] = as!s32(ctx.Rasterizing.CullFace) + case GL_STENCIL_CLEAR_VALUE: + v[0] = ctx.Clearing.ClearStencil + case GL_FRAMEBUFFER_BINDING: + v[0] = as!s32(ctx.BoundFramebuffers[GL_FRAMEBUFFER]) + case GL_READ_FRAMEBUFFER_BINDING: + v[0] = as!s32(ctx.BoundFramebuffers[GL_READ_FRAMEBUFFER]) + case GL_RENDERBUFFER_BINDING: + v[0] = as!s32(ctx.BoundRenderbuffers[GL_RENDERBUFFER]) + case GL_CURRENT_PROGRAM: + v[0] = as!s32(ctx.BoundProgram) + case GL_TEXTURE_BINDING_2D: + v[0] = as!s32(ctx.TextureUnits[ctx.ActiveTextureUnit][GL_TEXTURE_2D]) + case GL_TEXTURE_BINDING_CUBE_MAP: + v[0] = as!s32(ctx.TextureUnits[ctx.ActiveTextureUnit][GL_TEXTURE_CUBE_MAP]) + case GL_GENERATE_MIPMAP_HINT: + v[0] = as!s32(ctx.GenerateMipmapHint) + case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: { + result := ? + assert(result > 7) + v[0] = result + } + case GL_MAX_CUBE_MAP_TEXTURE_SIZE: { + result := ? + assert(result > 15) + v[0] = result + } + case GL_MAX_FRAGMENT_UNIFORM_VECTORS: { + result := ? + assert(result > 15) + v[0] = result + } + case GL_MAX_RENDERBUFFER_SIZE: { + result := ? + assert(result > 0) + v[0] = result + } + case GL_MAX_TEXTURE_IMAGE_UNITS: { + result := ? + assert(result > 7) + v[0] = result + } + case GL_MAX_TEXTURE_SIZE: { + result := ? + assert(result > 63) + v[0] = result + } + case GL_MAX_VARYING_VECTORS: { + result := ? + assert(result > 7) + v[0] = result + } + case GL_MAX_VERTEX_ATTRIBS: { + result := ? + assert(result > 7) + v[0] = result + } + case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS: + v[0] = ? + case GL_MAX_VERTEX_UNIFORM_VECTORS: { + result := ? + assert(result > 127) + v[0] = result + } + case GL_MAX_VIEWPORT_DIMS: { + max_width := ? + max_height := ? + assert(max_width > ctx.Rasterizing.Viewport.Width - 1) + assert(max_height > ctx.Rasterizing.Viewport.Height - 1) + v[0] = max_width + v[1] = max_height + } + case GL_NUM_COMPRESSED_TEXTURE_FORMATS: { + result := ? + assert(result > -1) + v[0] = result + } + case GL_NUM_SHADER_BINARY_FORMATS: { + result := ? + assert(result > -1) + v[0] = result + } + case GL_PACK_ALIGNMENT: + v[0] = ctx.PixelStorage[GL_PACK_ALIGNMENT] + case GL_UNPACK_ALIGNMENT: + v[0] = ctx.PixelStorage[GL_UNPACK_ALIGNMENT] + case GL_ALPHA_BITS: + v[0] = ? + case GL_BLUE_BITS: + v[0] = ? + case GL_GREEN_BITS: + v[0] = ? + case GL_RED_BITS: + v[0] = ? + case GL_DEPTH_BITS: + v[0] = ? + case GL_SAMPLE_BUFFERS: + v[0] = ? + case GL_SAMPLES: + v[0] = ? + /* + case GL_SHADER_BINARY_FORMATS: + values = ? // list of length GL_NUM_SHADER_BINARY_FORMATS + case GL_COMPRESSED_TEXTURE_FORMATS: + values = ? // list of length GL_NUM_COMPRESSED_TEXTURE_FORMATS + */ + case GL_STENCIL_BITS: + v[0] = ? + case GL_SUBPIXEL_BITS: { + result := ? + assert(result > 3) + v[0] = result + } + case GL_IMPLEMENTATION_COLOR_READ_FORMAT: + v[0] = ? + case GL_IMPLEMENTATION_COLOR_READ_TYPE: + v[0] = ? + case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: + v[0] = ? + case GL_GPU_DISJOINT_EXT: + v[0] = ? + + // TODO: implement the following which depend on: + // glStencilOp, glStencilOpSeparate, glStencilFuncSeparate. + // GL_STENCIL_BACK_FAIL + // GL_STENCIL_BACK_FUNC + // GL_STENCIL_BACK_PASS_DEPTH_FAIL + // GL_STENCIL_BACK_PASS_DEPTH_PASS + // GL_STENCIL_BACK_REF + // GL_STENCIL_BACK_VALUE_MASK + // GL_STENCIL_FAIL + // GL_STENCIL_FUNC + // GL_STENCIL_PASS_DEPTH_FAIL + // GL_STENCIL_PASS_DEPTH_PASS + // GL_STENCIL_REF + // GL_STENCIL_VALUE_MASK + + // TODO: all the values returned by glGetFloatv and glGetBooleanv can + // be returned here with a type conversion: "_most_ floating-point values + // are rounded to the nearest integer value". + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetInternalformativ.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetInternalformativ.xhtml","OpenGL ES 3.1") +cmd void glGetInternalformativ(GLenum target, + GLenum internalformat, + GLenum pname, + GLsizei bufSize, + GLint* params) { + minRequiredVersion(3, 0) + switch (target) { + case GL_RENDERBUFFER: { + // version 3.0 + } + case GL_TEXTURE_2D_MULTISAMPLE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + switch (internalformat) { + case GL_DEPTH24_STENCIL8, GL_DEPTH32F_STENCIL8, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24, + GL_DEPTH_COMPONENT32F, GL_R11F_G11F_B10F, GL_R16F, GL_R16I, GL_R16UI, GL_R32F, GL_R32I, + GL_R32UI, GL_R8, GL_R8I, GL_R8UI, GL_R8_SNORM, GL_RG16F, GL_RG16I, GL_RG16UI, GL_RG32F, + GL_RG32I, GL_RG32UI, GL_RG8, GL_RG8I, GL_RG8UI, GL_RG8_SNORM, GL_RGB10_A2, GL_RGB10_A2UI, + GL_RGB16F, GL_RGB16I, GL_RGB16UI, GL_RGB32F, GL_RGB32I, GL_RGB32UI, GL_RGB565, GL_RGB5_A1, + GL_RGB8, GL_RGB8I, GL_RGB8UI, GL_RGB8_SNORM, GL_RGB9_E5, GL_RGBA16F, GL_RGBA16I, + GL_RGBA16UI, GL_RGBA32F, GL_RGBA32I, GL_RGBA32UI, GL_RGBA4, GL_RGBA8, GL_RGBA8I, + GL_RGBA8UI, GL_RGBA8_SNORM, GL_SRGB8, GL_SRGB8_ALPHA8: { + // version 3.0 + } + default: { + glErrorInvalidEnum(internalformat) + } + } + switch (pname) { + case GL_NUM_SAMPLE_COUNTS, GL_SAMPLES: { + // version 3.0 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetString.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetString.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetString.xhtml","OpenGL ES 3.1") +cmd const GLubyte* glGetString(GLenum param) { + minRequiredVersion(2, 0) + switch (param) { + case GL_EXTENSIONS, GL_RENDERER, GL_SHADING_LANGUAGE_VERSION, GL_VENDOR, GL_VERSION: { + // version 2.0 + } + default: { + glErrorInvalidEnum(param) + } + } + + return null +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetString.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetString.xhtml","OpenGL ES 3.1") +cmd const GLubyte* glGetStringi(GLenum name, GLuint index) { + minRequiredVersion(3, 0) + switch (name) { + case GL_EXTENSIONS: { + // version 3.0 + } + default: { + glErrorInvalidEnum(name) + } + } + // TODO + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glIsEnabled.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glIsEnabled.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glIsEnabled.xhtml","OpenGL ES 3.1") +cmd bool glIsEnabled(GLenum capability) { + minRequiredVersion(2, 0) + switch (capability) { + case GL_BLEND, GL_CULL_FACE, GL_DEPTH_TEST, GL_DITHER, GL_POLYGON_OFFSET_FILL, + GL_SAMPLE_ALPHA_TO_COVERAGE, GL_SAMPLE_COVERAGE, GL_SCISSOR_TEST, GL_STENCIL_TEST: { + // version 2.0 + } + case GL_PRIMITIVE_RESTART_FIXED_INDEX, GL_RASTERIZER_DISCARD: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(capability) + } + } + + ctx := GetContext() + return ctx.Capabilities[capability] +} + diff --git a/gfxapi/gles/api/synchronization.api b/gfxapi/gles/api/synchronization.api new file mode 100644 index 000000000..cec69988a --- /dev/null +++ b/gfxapi/gles/api/synchronization.api @@ -0,0 +1,79 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glClientWaitSync.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glClientWaitSync.xhtml","OpenGL ES 3.1") +cmd GLenum glClientWaitSync(GLsync sync, GLbitfield syncFlags, GLuint64 timeout) { + minRequiredVersion(3, 0) + supportsBits(syncFlags, GL_SYNC_FLUSH_COMMANDS_BIT) + if (GL_SYNC_FLUSH_COMMANDS_BIT in syncFlags) { + } + + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteSync.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDeleteSync.xhtml","OpenGL ES 3.1") +cmd void glDeleteSync(GLsync sync) { + minRequiredVersion(3, 0) + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glFenceSync.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glFenceSync.xhtml","OpenGL ES 3.1") +cmd GLsync glFenceSync(GLenum condition, GLbitfield syncFlags) { + minRequiredVersion(3, 0) + switch (condition) { + case GL_SYNC_GPU_COMMANDS_COMPLETE: { + // version 3.0 + } + default: { + glErrorInvalidEnum(condition) + } + } + + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetSynciv.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetSynciv.xhtml","OpenGL ES 3.1") +cmd void glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) { + minRequiredVersion(3, 0) + switch (pname) { + case GL_OBJECT_TYPE, GL_SYNC_CONDITION, GL_SYNC_FLAGS, GL_SYNC_STATUS: { + // version 3.0 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glIsSync.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glIsSync.xhtml","OpenGL ES 3.1") +cmd bool glIsSync(GLsync sync) { + minRequiredVersion(3, 0) + // TODO + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glWaitSync.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glWaitSync.xhtml","OpenGL ES 3.1") +cmd void glWaitSync(GLsync sync, GLbitfield syncFlags, GLuint64 timeout) { + minRequiredVersion(3, 0) + + assert(timeout == 0xFFFFFFFFFFFFFFFF) // GL_TIMEOUT_IGNORED +} + diff --git a/gfxapi/gles/api/textures_and_samplers.api b/gfxapi/gles/api/textures_and_samplers.api new file mode 100644 index 000000000..1985353c2 --- /dev/null +++ b/gfxapi/gles/api/textures_and_samplers.api @@ -0,0 +1,1328 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glActiveTexture.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glActiveTexture.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glActiveTexture.xhtml","OpenGL ES 3.1") +cmd void glActiveTexture(GLenum unit) { + minRequiredVersion(2, 0) + switch (unit) { + case GL_TEXTURE0, GL_TEXTURE1, GL_TEXTURE10, GL_TEXTURE11, GL_TEXTURE12, GL_TEXTURE13, + GL_TEXTURE14, GL_TEXTURE15, GL_TEXTURE16, GL_TEXTURE17, GL_TEXTURE18, GL_TEXTURE19, + GL_TEXTURE2, GL_TEXTURE20, GL_TEXTURE21, GL_TEXTURE22, GL_TEXTURE23, GL_TEXTURE24, + GL_TEXTURE25, GL_TEXTURE26, GL_TEXTURE27, GL_TEXTURE28, GL_TEXTURE29, GL_TEXTURE3, + GL_TEXTURE30, GL_TEXTURE31, GL_TEXTURE4, GL_TEXTURE5, GL_TEXTURE6, GL_TEXTURE7, + GL_TEXTURE8, GL_TEXTURE9: { + // version 2.0 + } + default: { + glErrorInvalidEnum(unit) + } + } + + ctx := GetContext() + ctx.ActiveTextureUnit = unit + if !(unit in ctx.TextureUnits) { + ctx.TextureUnits[unit] = ctx.TextureUnits[unit] + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindImageTexture.xhtml","OpenGL ES 3.1") +cmd void glBindImageTexture(GLuint unit, + TextureId texture, + GLint level, + GLboolean layered, + GLint layer, + GLenum access, + GLenum format) { + minRequiredVersion(3, 1) + switch (access) { + case GL_READ_ONLY, GL_READ_WRITE, GL_WRITE_ONLY: { + // version 3.1 + } + default: { + glErrorInvalidEnum(access) + } + } + switch (format) { + case GL_R32F, GL_R32I, GL_R32UI, GL_RGBA16F, GL_RGBA16I, GL_RGBA16UI, GL_RGBA32F, GL_RGBA32I, + GL_RGBA32UI, GL_RGBA8, GL_RGBA8I, GL_RGBA8UI, GL_RGBA8_SNORM: { + // version 3.1 + } + default: { + glErrorInvalidEnum(format) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBindSampler.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindSampler.xhtml","OpenGL ES 3.1") +cmd void glBindSampler(GLuint unit, SamplerId sampler) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBindTexture.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBindTexture.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindTexture.xhtml","OpenGL ES 3.1") +cmd void glBindTexture(GLenum target, TextureId texture) { + minRequiredVersion(2, 0) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { + // version 2.0 + } + case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { + minRequiredVersion(3, 0) + } + case GL_TEXTURE_2D_MULTISAMPLE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + + ctx := GetContext() + if !(texture in ctx.Instances.Textures) { + ctx.Instances.Textures[texture] = new!Texture() + } + ctx.TextureUnits[ctx.ActiveTextureUnit][target] = texture +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glCompressedTexImage2D.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCompressedTexImage2D.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCompressedTexImage2D.xhtml","OpenGL ES 3.1") +cmd void glCompressedTexImage2D(GLenum target, + GLint level, + GLenum format, + GLsizei width, + GLsizei height, + GLint border, + GLsizei image_size, + TexturePointer data) { + minRequiredVersion(2, 0) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { + // version 2.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (format) { + case GL_COMPRESSED_R11_EAC, GL_COMPRESSED_RG11_EAC, GL_COMPRESSED_RGB8_ETC2, + GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_COMPRESSED_RGBA8_ETC2_EAC, + GL_COMPRESSED_SIGNED_R11_EAC, GL_COMPRESSED_SIGNED_RG11_EAC, + GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_COMPRESSED_SRGB8_ETC2, + GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(format) + } + } + + assert(border == 0) + ctx := GetContext() + switch (target) { + case GL_TEXTURE_2D: { + id := ctx.TextureUnits[ctx.ActiveTextureUnit][GL_TEXTURE_2D] + t := ctx.Instances.Textures[id] + l := Image( + Width: width, + Height: height, + Size: as!u32(image_size), + Format: as!GLenum(format) /* TODO: Implicit cast? */, + ) + if (ctx.BoundBuffers[GL_PIXEL_UNPACK_BUFFER] == 0) && (data != null) { + l.Data = clone(as!u8*(data)[0:l.Size]) + } + t.Texture2D[level] = l + t.Kind = TEXTURE2D // TODO: Warning/Error if kind has changed? + // TODO: Warning/Error if format has changed + t.Format = as!GLenum(format) // TODO: Implicit cast? + } + case GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, + GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: { + id := ctx.TextureUnits[ctx.ActiveTextureUnit][GL_TEXTURE_CUBE_MAP] + t := ctx.Instances.Textures[id] + l := Image( + Width: width, + Height: height, + Size: as!u32(image_size), + Format: as!GLenum(format) /* TODO: Implicit cast? */, + ) + if (ctx.BoundBuffers[GL_PIXEL_UNPACK_BUFFER] == 0) && (data != null) { + l.Data = clone(as!u8*(data)[0:l.Size]) + } + cube := t.Cubemap[level] + cube.Faces[as!GLenum(target)] = l + t.Cubemap[level] = cube + t.Kind = CUBEMAP // TODO: Warning/Error if kind has changed? + // TODO: Warning/Error if format has changed + t.Format = as!GLenum(format) // TODO: Implicit cast? + } + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCompressedTexImage3D.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCompressedTexImage3D.xhtml","OpenGL ES 3.1") +cmd void glCompressedTexImage3D(GLenum target, + GLint level, + GLenum internalformat, + GLsizei width, + GLsizei height, + GLsizei depth, + GLint border, + GLsizei imageSize, + const void* data) { + minRequiredVersion(3, 0) + switch (target) { + case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (internalformat) { + case GL_COMPRESSED_R11_EAC, GL_COMPRESSED_RG11_EAC, GL_COMPRESSED_RGB8_ETC2, + GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_COMPRESSED_RGBA8_ETC2_EAC, + GL_COMPRESSED_SIGNED_R11_EAC, GL_COMPRESSED_SIGNED_RG11_EAC, + GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_COMPRESSED_SRGB8_ETC2, + GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: { + // version 3.0 + } + default: { + glErrorInvalidEnum(internalformat) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glCompressedTexSubImage2D.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCompressedTexSubImage2D.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCompressedTexSubImage2D.xhtml","OpenGL ES 3.1") +cmd void glCompressedTexSubImage2D(GLenum target, + GLint level, + GLint xoffset, + GLint yoffset, + GLsizei width, + GLsizei height, + GLenum format, + GLsizei image_size, + TexturePointer data) { + minRequiredVersion(2, 0) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { + // version 2.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (format) { + case GL_COMPRESSED_R11_EAC, GL_COMPRESSED_RG11_EAC, GL_COMPRESSED_RGB8_ETC2, + GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_COMPRESSED_RGBA8_ETC2_EAC, + GL_COMPRESSED_SIGNED_R11_EAC, GL_COMPRESSED_SIGNED_RG11_EAC, + GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_COMPRESSED_SRGB8_ETC2, + GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(format) + } + } + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCompressedTexSubImage3D.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCompressedTexSubImage3D.xhtml","OpenGL ES 3.1") +cmd void glCompressedTexSubImage3D(GLenum target, + GLint level, + GLint xoffset, + GLint yoffset, + GLint zoffset, + GLsizei width, + GLsizei height, + GLsizei depth, + GLenum format, + GLsizei imageSize, + const void* data) { + minRequiredVersion(3, 0) + switch (target) { + case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (format) { + case GL_COMPRESSED_R11_EAC, GL_COMPRESSED_RG11_EAC, GL_COMPRESSED_RGB8_ETC2, + GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_COMPRESSED_RGBA8_ETC2_EAC, + GL_COMPRESSED_SIGNED_R11_EAC, GL_COMPRESSED_SIGNED_RG11_EAC, + GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_COMPRESSED_SRGB8_ETC2, + GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: { + // version 3.0 + } + default: { + glErrorInvalidEnum(format) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glCopyTexImage2D.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCopyTexImage2D.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCopyTexImage2D.xhtml","OpenGL ES 3.1") +cmd void glCopyTexImage2D(GLenum target, + GLint level, + GLenum format, + GLint x, + GLint y, + GLsizei width, + GLsizei height, + GLint border) { + minRequiredVersion(2, 0) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { + // version 2.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (format) { + case GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA: { + // version 2.0 + } + case GL_R16I, GL_R16UI, GL_R32I, GL_R32UI, GL_R8, GL_R8I, GL_R8UI, GL_RG16I, GL_RG16UI, + GL_RG32I, GL_RG32UI, GL_RG8, GL_RG8I, GL_RG8UI, GL_RGB10_A2, GL_RGB10_A2UI, GL_RGB565, + GL_RGB5_A1, GL_RGB8, GL_RGBA16I, GL_RGBA16UI, GL_RGBA32I, GL_RGBA32UI, GL_RGBA4, GL_RGBA8, + GL_RGBA8I, GL_RGBA8UI, GL_SRGB8, GL_SRGB8_ALPHA8: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(format) + } + } + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glCopyTexSubImage2D.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCopyTexSubImage2D.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCopyTexSubImage2D.xhtml","OpenGL ES 3.1") +cmd void glCopyTexSubImage2D(GLenum target, + GLint level, + GLint xoffset, + GLint yoffset, + GLint x, + GLint y, + GLsizei width, + GLsizei height) { + minRequiredVersion(2, 0) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { + // version 2.0 + } + default: { + glErrorInvalidEnum(target) + } + } + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCopyTexSubImage3D.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCopyTexSubImage3D.xhtml","OpenGL ES 3.1") +cmd void glCopyTexSubImage3D(GLenum target, + GLint level, + GLint xoffset, + GLint yoffset, + GLint zoffset, + GLint x, + GLint y, + GLsizei width, + GLsizei height) { + minRequiredVersion(3, 0) + switch (target) { + case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteSamplers.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDeleteSamplers.xhtml","OpenGL ES 3.1") +cmd void glDeleteSamplers(GLsizei count, const SamplerId* samplers) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glDeleteTextures.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteTextures.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDeleteTextures.xhtml","OpenGL ES 3.1") +cmd void glDeleteTextures(GLsizei count, const TextureId* textures) { + minRequiredVersion(2, 0) + + t := textures[0:count] + ctx := GetContext() + for i in (0 .. count) { + ctx.Instances.Textures[t[i]] = null + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGenSamplers.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGenSamplers.xhtml","OpenGL ES 3.1") +cmd void glGenSamplers(GLsizei count, SamplerId* samplers) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGenTextures.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGenTextures.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGenTextures.xhtml","OpenGL ES 3.1") +cmd void glGenTextures(GLsizei count, TextureId* textures) { + minRequiredVersion(2, 0) + + t := textures[0:count] + ctx := GetContext() + for i in (0 .. count) { + id := as!TextureId(?) + ctx.Instances.Textures[id] = new!Texture() + t[i] = id + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGenerateMipmap.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGenerateMipmap.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGenerateMipmap.xhtml","OpenGL ES 3.1") +cmd void glGenerateMipmap(GLenum target) { + minRequiredVersion(2, 0) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { + // version 2.0 + } + case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(target) + } + } + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetSamplerParameter.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetSamplerParameter.xhtml","OpenGL ES 3.1") +cmd void glGetSamplerParameterfv(SamplerId sampler, GLenum pname, GLfloat* params) { + minRequiredVersion(3, 0) + switch (pname) { + case GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, GL_TEXTURE_MAG_FILTER, + GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MIN_LOD, GL_TEXTURE_WRAP_R, + GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { + // version 3.0 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetSamplerParameter.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetSamplerParameter.xhtml","OpenGL ES 3.1") +cmd void glGetSamplerParameteriv(SamplerId sampler, GLenum pname, GLint* params) { + minRequiredVersion(3, 0) + switch (pname) { + case GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, GL_TEXTURE_MAG_FILTER, + GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MIN_LOD, GL_TEXTURE_WRAP_R, + GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { + // version 3.0 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetTexLevelParameter.xhtml","OpenGL ES 3.1") +cmd void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat* params) { + minRequiredVersion(3, 1) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_3D, + GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { + // version 3.1 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (pname) { + case GL_TEXTURE_ALPHA_SIZE, GL_TEXTURE_ALPHA_TYPE, GL_TEXTURE_BLUE_SIZE, GL_TEXTURE_BLUE_TYPE, + GL_TEXTURE_COMPRESSED, GL_TEXTURE_DEPTH, GL_TEXTURE_DEPTH_SIZE, GL_TEXTURE_DEPTH_TYPE, + GL_TEXTURE_FIXED_SAMPLE_LOCATIONS, GL_TEXTURE_GREEN_SIZE, GL_TEXTURE_GREEN_TYPE, + GL_TEXTURE_HEIGHT, GL_TEXTURE_INTERNAL_FORMAT, GL_TEXTURE_RED_SIZE, GL_TEXTURE_RED_TYPE, + GL_TEXTURE_SAMPLES, GL_TEXTURE_SHARED_SIZE, GL_TEXTURE_STENCIL_SIZE, GL_TEXTURE_WIDTH: { + // version 3.1 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetTexLevelParameter.xhtml","OpenGL ES 3.1") +cmd void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint* params) { + minRequiredVersion(3, 1) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_3D, + GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { + // version 3.1 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (pname) { + case GL_TEXTURE_ALPHA_SIZE, GL_TEXTURE_ALPHA_TYPE, GL_TEXTURE_BLUE_SIZE, GL_TEXTURE_BLUE_TYPE, + GL_TEXTURE_COMPRESSED, GL_TEXTURE_DEPTH, GL_TEXTURE_DEPTH_SIZE, GL_TEXTURE_DEPTH_TYPE, + GL_TEXTURE_FIXED_SAMPLE_LOCATIONS, GL_TEXTURE_GREEN_SIZE, GL_TEXTURE_GREEN_TYPE, + GL_TEXTURE_HEIGHT, GL_TEXTURE_INTERNAL_FORMAT, GL_TEXTURE_RED_SIZE, GL_TEXTURE_RED_TYPE, + GL_TEXTURE_SAMPLES, GL_TEXTURE_SHARED_SIZE, GL_TEXTURE_STENCIL_SIZE, GL_TEXTURE_WIDTH: { + // version 3.1 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetTexParameter.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetTexParameter.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetTexParameter.xhtml","OpenGL ES 3.1") +cmd void glGetTexParameterfv(GLenum target, GLenum parameter, GLfloat* values) { + minRequiredVersion(2, 0) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { + // version 2.0 + } + case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { + minRequiredVersion(3, 0) + } + case GL_TEXTURE_2D_MULTISAMPLE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + switch (parameter) { + case GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { + // version 2.0 + } + case GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, + GL_TEXTURE_IMMUTABLE_FORMAT, GL_TEXTURE_MAX_LEVEL, GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_LOD, + GL_TEXTURE_SWIZZLE_A, GL_TEXTURE_SWIZZLE_B, GL_TEXTURE_SWIZZLE_G, GL_TEXTURE_SWIZZLE_R, + GL_TEXTURE_WRAP_R: { + minRequiredVersion(3, 0) + } + case GL_DEPTH_STENCIL_TEXTURE_MODE, GL_IMAGE_FORMAT_COMPATIBILITY_TYPE, + GL_TEXTURE_IMMUTABLE_LEVELS: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(parameter) + } + } + + ctx := GetContext() + id := ctx.TextureUnits[ctx.ActiveTextureUnit][target] + t := ctx.Instances.Textures[id] + values[0] = switch (parameter) { + case GL_TEXTURE_MAG_FILTER: as!f32(t.MagFilter) + case GL_TEXTURE_MIN_FILTER: as!f32(t.MinFilter) + case GL_TEXTURE_WRAP_S: as!f32(t.WrapS) + case GL_TEXTURE_WRAP_T: as!f32(t.WrapT) + case GL_TEXTURE_MAX_ANISOTROPY_EXT: as!f32(t.MaxAnisotropy) + case GL_TEXTURE_SWIZZLE_R: as!f32(t.SwizzleR) + case GL_TEXTURE_SWIZZLE_G: as!f32(t.SwizzleG) + case GL_TEXTURE_SWIZZLE_B: as!f32(t.SwizzleB) + case GL_TEXTURE_SWIZZLE_A: as!f32(t.SwizzleA) + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetTexParameter.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetTexParameter.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetTexParameter.xhtml","OpenGL ES 3.1") +cmd void glGetTexParameteriv(GLenum target, GLenum parameter, GLint* values) { + minRequiredVersion(2, 0) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { + // version 2.0 + } + case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { + minRequiredVersion(3, 0) + } + case GL_TEXTURE_2D_MULTISAMPLE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + switch (parameter) { + case GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { + // version 2.0 + } + case GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, + GL_TEXTURE_IMMUTABLE_FORMAT, GL_TEXTURE_MAX_LEVEL, GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_LOD, + GL_TEXTURE_SWIZZLE_A, GL_TEXTURE_SWIZZLE_B, GL_TEXTURE_SWIZZLE_G, GL_TEXTURE_SWIZZLE_R, + GL_TEXTURE_WRAP_R: { + minRequiredVersion(3, 0) + } + case GL_DEPTH_STENCIL_TEXTURE_MODE, GL_IMAGE_FORMAT_COMPATIBILITY_TYPE, + GL_TEXTURE_IMMUTABLE_LEVELS: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(parameter) + } + } + + ctx := GetContext() + id := ctx.TextureUnits[ctx.ActiveTextureUnit][target] + t := ctx.Instances.Textures[id] + values[0] = switch (parameter) { + case GL_TEXTURE_MAG_FILTER: as!s32(t.MagFilter) + case GL_TEXTURE_MIN_FILTER: as!s32(t.MinFilter) + case GL_TEXTURE_WRAP_S: as!s32(t.WrapS) + case GL_TEXTURE_WRAP_T: as!s32(t.WrapT) + case GL_TEXTURE_MAX_ANISOTROPY_EXT: as!s32(t.MaxAnisotropy) + case GL_TEXTURE_SWIZZLE_R: as!s32(t.SwizzleR) + case GL_TEXTURE_SWIZZLE_G: as!s32(t.SwizzleG) + case GL_TEXTURE_SWIZZLE_B: as!s32(t.SwizzleB) + case GL_TEXTURE_SWIZZLE_A: as!s32(t.SwizzleA) + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glIsSampler.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glIsSampler.xhtml","OpenGL ES 3.1") +cmd bool glIsSampler(SamplerId sampler) { + minRequiredVersion(3, 0) + // TODO + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glIsTexture.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glIsTexture.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glIsTexture.xhtml","OpenGL ES 3.1") +cmd bool glIsTexture(TextureId texture) { + minRequiredVersion(2, 0) + + ctx := GetContext() + return texture in ctx.Instances.Textures +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glPixelStorei.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glPixelStorei.xhtml","OpenGL ES 3.1") +cmd void glPixelStorei(GLenum parameter, GLint value) { + minRequiredVersion(2, 0) + switch (parameter) { + case GL_PACK_ALIGNMENT, GL_UNPACK_ALIGNMENT: { + // version 2.0 + } + case GL_PACK_IMAGE_HEIGHT, GL_PACK_ROW_LENGTH, GL_PACK_SKIP_IMAGES, GL_PACK_SKIP_PIXELS, + GL_PACK_SKIP_ROWS, GL_UNPACK_IMAGE_HEIGHT, GL_UNPACK_ROW_LENGTH, GL_UNPACK_SKIP_IMAGES, + GL_UNPACK_SKIP_PIXELS, GL_UNPACK_SKIP_ROWS: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(parameter) + } + } + + assert((value == 1) || (value == 2) || (value == 4) || (value == 8)) + ctx := GetContext() + ctx.PixelStorage[parameter] = value +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glSamplerParameter.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glSamplerParameter.xhtml","OpenGL ES 3.1") +cmd void glSamplerParameterf(SamplerId sampler, GLenum pname, GLfloat param) { + minRequiredVersion(3, 0) + switch (pname) { + case GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, GL_TEXTURE_MAG_FILTER, + GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MIN_LOD, GL_TEXTURE_WRAP_R, + GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { + // version 3.0 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glSamplerParameter.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glSamplerParameter.xhtml","OpenGL ES 3.1") +cmd void glSamplerParameterfv(SamplerId sampler, GLenum pname, const GLfloat* param) { + minRequiredVersion(3, 0) + switch (pname) { + case GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, GL_TEXTURE_MAG_FILTER, + GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MIN_LOD, GL_TEXTURE_WRAP_R, + GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { + // version 3.0 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glSamplerParameter.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glSamplerParameter.xhtml","OpenGL ES 3.1") +cmd void glSamplerParameteri(SamplerId sampler, GLenum pname, GLint param) { + minRequiredVersion(3, 0) + switch (pname) { + case GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, GL_TEXTURE_MAG_FILTER, + GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MIN_LOD, GL_TEXTURE_WRAP_R, + GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { + // version 3.0 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glSamplerParameter.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glSamplerParameter.xhtml","OpenGL ES 3.1") +cmd void glSamplerParameteriv(SamplerId sampler, GLenum pname, const GLint* param) { + minRequiredVersion(3, 0) + switch (pname) { + case GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, GL_TEXTURE_MAG_FILTER, + GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MIN_LOD, GL_TEXTURE_WRAP_R, + GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { + // version 3.0 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexImage2D.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexImage2D.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexImage2D.xhtml","OpenGL ES 3.1") +cmd void glTexImage2D(GLenum target, + GLint level, + GLint internal_format, + GLsizei width, + GLsizei height, + GLint border, + GLenum format, + GLenum type, + TexturePointer data) { + minRequiredVersion(2, 0) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { + // version 2.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (format) { + case GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA: { + // version 2.0 + } + case GL_DEPTH_COMPONENT, GL_DEPTH_STENCIL, GL_RED, GL_RED_INTEGER, GL_RG, GL_RGBA_INTEGER, + GL_RGB_INTEGER, GL_RG_INTEGER: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(format) + } + } + switch (type) { + case GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_5_5_5_1, + GL_UNSIGNED_SHORT_5_6_5: { + // version 2.0 + } + case GL_BYTE, GL_FLOAT, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, GL_HALF_FLOAT, GL_INT, GL_SHORT, + GL_UNSIGNED_INT, GL_UNSIGNED_INT_10F_11F_11F_REV, GL_UNSIGNED_INT_24_8, + GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_INT_5_9_9_9_REV, GL_UNSIGNED_SHORT: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(type) + } + } + + assert(internal_format == format) + assert(border == 0) + ctx := GetContext() + switch (target) { + case GL_TEXTURE_2D: { + id := ctx.TextureUnits[ctx.ActiveTextureUnit][GL_TEXTURE_2D] + t := ctx.Instances.Textures[id] + l := Image( + Width: width, + Height: height, + Size: imageSize(as!u32(width), as!u32(height), format, type), + Format: as!GLenum(format) /* TODO: Implicit cast? */, + ) + if (data != null) { + if (ctx.BoundBuffers[GL_PIXEL_UNPACK_BUFFER] == 0) { + l.Data = clone(as!u8*(data)[0:l.Size]) + } + } else { + l.Data = make!u8(l.Size) + } + + t.Texture2D[level] = l + t.Kind = TEXTURE2D // TODO: Warning/Error if kind has changed? + // TODO: Warning/Error if format has changed + t.Format = as!GLenum(format) // TODO: Implicit cast? + } + case GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, + GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: { + id := ctx.TextureUnits[ctx.ActiveTextureUnit][GL_TEXTURE_CUBE_MAP] + t := ctx.Instances.Textures[id] + l := Image( + Width: width, + Height: height, + Size: imageSize(as!u32(width), as!u32(height), format, type), + Format: as!GLenum(format) /* TODO: Implicit cast? */, + ) + if (data != null) { + if (ctx.BoundBuffers[GL_PIXEL_UNPACK_BUFFER] == 0) { + l.Data = clone(as!u8*(data)[0:l.Size]) + } + } else { + l.Data = make!u8(l.Size) + } + cube := t.Cubemap[level] + cube.Faces[as!GLenum(target)] = l + t.Cubemap[level] = cube + t.Kind = CUBEMAP // TODO: Warning/Error if kind has changed? + // TODO: Warning/Error if format has changed + t.Format = as!GLenum(format) // TODO: Implicit cast? + } + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexImage3D.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexImage3D.xhtml","OpenGL ES 3.1") +cmd void glTexImage3D(GLenum target, + GLint level, + GLint internalformat, + GLsizei width, + GLsizei height, + GLsizei depth, + GLint border, + GLenum format, + GLenum type, + const void* pixels) { + minRequiredVersion(3, 0) + switch (target) { + case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (format) { + case GL_ALPHA, GL_DEPTH_COMPONENT, GL_DEPTH_STENCIL, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RED, + GL_RED_INTEGER, GL_RG, GL_RGB, GL_RGBA, GL_RGBA_INTEGER, GL_RGB_INTEGER, GL_RG_INTEGER: { + // version 3.0 + } + default: { + glErrorInvalidEnum(format) + } + } + switch (type) { + case GL_BYTE, GL_FLOAT, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, GL_HALF_FLOAT, GL_INT, GL_SHORT, + GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, GL_UNSIGNED_INT_10F_11F_11F_REV, GL_UNSIGNED_INT_24_8, + GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_INT_5_9_9_9_REV, GL_UNSIGNED_SHORT, + GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_5_5_5_1, GL_UNSIGNED_SHORT_5_6_5: { + // version 3.0 + } + default: { + glErrorInvalidEnum(type) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexParameter.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexParameter.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexParameter.xhtml","OpenGL ES 3.1") +cmd void glTexParameterf(GLenum target, GLenum parameter, GLfloat value) { + minRequiredVersion(2, 0) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { + // version 2.0 + } + case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { + minRequiredVersion(3, 0) + } + case GL_TEXTURE_2D_MULTISAMPLE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + switch (parameter) { + case GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { + // version 2.0 + } + case GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, + GL_TEXTURE_MAX_LEVEL, GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_LOD, GL_TEXTURE_SWIZZLE_A, + GL_TEXTURE_SWIZZLE_B, GL_TEXTURE_SWIZZLE_G, GL_TEXTURE_SWIZZLE_R, GL_TEXTURE_WRAP_R: { + minRequiredVersion(3, 0) + } + case GL_DEPTH_STENCIL_TEXTURE_MODE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(parameter) + } + } + + ctx := GetContext() + id := ctx.TextureUnits[ctx.ActiveTextureUnit][target] + t := ctx.Instances.Textures[id] + switch (parameter) { + case GL_TEXTURE_MAG_FILTER: t.MagFilter = as!GLenum(value) + case GL_TEXTURE_MIN_FILTER: t.MinFilter = as!GLenum(value) + case GL_TEXTURE_WRAP_S: t.WrapS = as!GLenum(value) + case GL_TEXTURE_WRAP_T: t.WrapT = as!GLenum(value) + case GL_TEXTURE_MAX_ANISOTROPY_EXT: t.MaxAnisotropy = as!f32(value) + case GL_TEXTURE_SWIZZLE_R: t.SwizzleR = as!GLenum(value) + case GL_TEXTURE_SWIZZLE_G: t.SwizzleG = as!GLenum(value) + case GL_TEXTURE_SWIZZLE_B: t.SwizzleB = as!GLenum(value) + case GL_TEXTURE_SWIZZLE_A: t.SwizzleA = as!GLenum(value) + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexParameter.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexParameter.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexParameter.xhtml","OpenGL ES 3.1") +cmd void glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params) { + minRequiredVersion(2, 0) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { + // version 2.0 + } + case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { + minRequiredVersion(3, 0) + } + case GL_TEXTURE_2D_MULTISAMPLE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + switch (pname) { + case GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { + // version 2.0 + } + case GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, + GL_TEXTURE_MAX_LEVEL, GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_LOD, GL_TEXTURE_SWIZZLE_A, + GL_TEXTURE_SWIZZLE_B, GL_TEXTURE_SWIZZLE_G, GL_TEXTURE_SWIZZLE_R, GL_TEXTURE_WRAP_R: { + minRequiredVersion(3, 0) + } + case GL_DEPTH_STENCIL_TEXTURE_MODE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexParameter.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexParameter.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexParameter.xhtml","OpenGL ES 3.1") +cmd void glTexParameteri(GLenum target, GLenum parameter, GLint value) { + minRequiredVersion(2, 0) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { + // version 2.0 + } + case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { + minRequiredVersion(3, 0) + } + case GL_TEXTURE_2D_MULTISAMPLE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + switch (parameter) { + case GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { + // version 2.0 + } + case GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, + GL_TEXTURE_MAX_LEVEL, GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_LOD, GL_TEXTURE_SWIZZLE_A, + GL_TEXTURE_SWIZZLE_B, GL_TEXTURE_SWIZZLE_G, GL_TEXTURE_SWIZZLE_R, GL_TEXTURE_WRAP_R: { + minRequiredVersion(3, 0) + } + case GL_DEPTH_STENCIL_TEXTURE_MODE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(parameter) + } + } + + ctx := GetContext() + id := ctx.TextureUnits[ctx.ActiveTextureUnit][target] + t := ctx.Instances.Textures[id] + switch (parameter) { + case GL_TEXTURE_MAG_FILTER: t.MagFilter = as!GLenum(value) + case GL_TEXTURE_MIN_FILTER: t.MinFilter = as!GLenum(value) + case GL_TEXTURE_WRAP_S: t.WrapS = as!GLenum(value) + case GL_TEXTURE_WRAP_T: t.WrapT = as!GLenum(value) + case GL_TEXTURE_MAX_ANISOTROPY_EXT: t.MaxAnisotropy = as!f32(value) + case GL_TEXTURE_SWIZZLE_R: t.SwizzleR = as!GLenum(value) + case GL_TEXTURE_SWIZZLE_G: t.SwizzleG = as!GLenum(value) + case GL_TEXTURE_SWIZZLE_B: t.SwizzleB = as!GLenum(value) + case GL_TEXTURE_SWIZZLE_A: t.SwizzleA = as!GLenum(value) + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexParameter.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexParameter.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexParameter.xhtml","OpenGL ES 3.1") +cmd void glTexParameteriv(GLenum target, GLenum pname, const GLint* params) { + minRequiredVersion(2, 0) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { + // version 2.0 + } + case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { + minRequiredVersion(3, 0) + } + case GL_TEXTURE_2D_MULTISAMPLE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(target) + } + } + switch (pname) { + case GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { + // version 2.0 + } + case GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, + GL_TEXTURE_MAX_LEVEL, GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_LOD, GL_TEXTURE_SWIZZLE_A, + GL_TEXTURE_SWIZZLE_B, GL_TEXTURE_SWIZZLE_G, GL_TEXTURE_SWIZZLE_R, GL_TEXTURE_WRAP_R: { + minRequiredVersion(3, 0) + } + case GL_DEPTH_STENCIL_TEXTURE_MODE: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexStorage2D.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexStorage2D.xhtml","OpenGL ES 3.1") +cmd void glTexStorage2D(GLenum target, + GLsizei levels, + GLenum internalformat, + GLsizei width, + GLsizei height) { + minRequiredVersion(3, 0) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (internalformat) { + case GL_COMPRESSED_R11_EAC, GL_COMPRESSED_RG11_EAC, GL_COMPRESSED_RGB8_ETC2, + GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_COMPRESSED_RGBA8_ETC2_EAC, + GL_COMPRESSED_SIGNED_R11_EAC, GL_COMPRESSED_SIGNED_RG11_EAC, + GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_COMPRESSED_SRGB8_ETC2, + GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_DEPTH24_STENCIL8, GL_DEPTH32F_STENCIL8, + GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT32F, GL_R11F_G11F_B10F, + GL_R16F, GL_R16I, GL_R16UI, GL_R32F, GL_R32I, GL_R32UI, GL_R8, GL_R8I, GL_R8UI, + GL_R8_SNORM, GL_RG16F, GL_RG16I, GL_RG16UI, GL_RG32F, GL_RG32I, GL_RG32UI, GL_RG8, GL_RG8I, + GL_RG8UI, GL_RG8_SNORM, GL_RGB10_A2, GL_RGB10_A2UI, GL_RGB16F, GL_RGB16I, GL_RGB16UI, + GL_RGB32F, GL_RGB32I, GL_RGB32UI, GL_RGB565, GL_RGB5_A1, GL_RGB8, GL_RGB8I, GL_RGB8UI, + GL_RGB8_SNORM, GL_RGB9_E5, GL_RGBA16F, GL_RGBA16I, GL_RGBA16UI, GL_RGBA32F, GL_RGBA32I, + GL_RGBA32UI, GL_RGBA4, GL_RGBA8, GL_RGBA8I, GL_RGBA8UI, GL_RGBA8_SNORM, GL_SRGB8, + GL_SRGB8_ALPHA8: { + // version 3.0 + } + default: { + glErrorInvalidEnum(internalformat) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexStorage2DMultisample.xhtml","OpenGL ES 3.1") +cmd void glTexStorage2DMultisample(GLenum target, + GLsizei samples, + GLenum internalformat, + GLsizei width, + GLsizei height, + GLboolean fixedsamplelocations) { + minRequiredVersion(3, 1) + switch (target) { + case GL_TEXTURE_2D_MULTISAMPLE: { + // version 3.1 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (internalformat) { + case GL_DEPTH24_STENCIL8, GL_DEPTH32F_STENCIL8, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24, + GL_DEPTH_COMPONENT32F, GL_R11F_G11F_B10F, GL_R16F, GL_R16I, GL_R16UI, GL_R32F, GL_R32I, + GL_R32UI, GL_R8, GL_R8I, GL_R8UI, GL_R8_SNORM, GL_RG16F, GL_RG16I, GL_RG16UI, GL_RG32F, + GL_RG32I, GL_RG32UI, GL_RG8, GL_RG8I, GL_RG8UI, GL_RG8_SNORM, GL_RGB10_A2, GL_RGB10_A2UI, + GL_RGB16F, GL_RGB16I, GL_RGB16UI, GL_RGB32F, GL_RGB32I, GL_RGB32UI, GL_RGB565, GL_RGB5_A1, + GL_RGB8, GL_RGB8I, GL_RGB8UI, GL_RGB8_SNORM, GL_RGB9_E5, GL_RGBA16F, GL_RGBA16I, + GL_RGBA16UI, GL_RGBA32F, GL_RGBA32I, GL_RGBA32UI, GL_RGBA4, GL_RGBA8, GL_RGBA8I, + GL_RGBA8UI, GL_RGBA8_SNORM, GL_SRGB8, GL_SRGB8_ALPHA8: { + // version 3.1 + } + default: { + glErrorInvalidEnum(internalformat) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexStorage3D.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexStorage3D.xhtml","OpenGL ES 3.1") +cmd void glTexStorage3D(GLenum target, + GLsizei levels, + GLenum internalformat, + GLsizei width, + GLsizei height, + GLsizei depth) { + minRequiredVersion(3, 0) + switch (target) { + case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (internalformat) { + case GL_COMPRESSED_R11_EAC, GL_COMPRESSED_RG11_EAC, GL_COMPRESSED_RGB8_ETC2, + GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_COMPRESSED_RGBA8_ETC2_EAC, + GL_COMPRESSED_SIGNED_R11_EAC, GL_COMPRESSED_SIGNED_RG11_EAC, + GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_COMPRESSED_SRGB8_ETC2, + GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_DEPTH24_STENCIL8, GL_DEPTH32F_STENCIL8, + GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT32F, GL_R11F_G11F_B10F, + GL_R16F, GL_R16I, GL_R16UI, GL_R32F, GL_R32I, GL_R32UI, GL_R8, GL_R8I, GL_R8UI, + GL_R8_SNORM, GL_RG16F, GL_RG16I, GL_RG16UI, GL_RG32F, GL_RG32I, GL_RG32UI, GL_RG8, GL_RG8I, + GL_RG8UI, GL_RG8_SNORM, GL_RGB10_A2, GL_RGB10_A2UI, GL_RGB16F, GL_RGB16I, GL_RGB16UI, + GL_RGB32F, GL_RGB32I, GL_RGB32UI, GL_RGB565, GL_RGB5_A1, GL_RGB8, GL_RGB8I, GL_RGB8UI, + GL_RGB8_SNORM, GL_RGB9_E5, GL_RGBA16F, GL_RGBA16I, GL_RGBA16UI, GL_RGBA32F, GL_RGBA32I, + GL_RGBA32UI, GL_RGBA4, GL_RGBA8, GL_RGBA8I, GL_RGBA8UI, GL_RGBA8_SNORM, GL_SRGB8, + GL_SRGB8_ALPHA8: { + // version 3.0 + } + default: { + glErrorInvalidEnum(internalformat) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexSubImage2D.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexSubImage2D.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexSubImage2D.xhtml","OpenGL ES 3.1") +cmd void glTexSubImage2D(GLenum target, + GLint level, + GLint xoffset, + GLint yoffset, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + TexturePointer data) { + minRequiredVersion(2, 0) + switch (target) { + case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { + // version 2.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (format) { + case GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA: { + // version 2.0 + } + case GL_DEPTH_COMPONENT, GL_DEPTH_STENCIL, GL_RED, GL_RED_INTEGER, GL_RG, GL_RGBA_INTEGER, + GL_RGB_INTEGER, GL_RG_INTEGER: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(format) + } + } + switch (type) { + case GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_5_5_5_1, + GL_UNSIGNED_SHORT_5_6_5: { + // version 2.0 + } + case GL_BYTE, GL_FLOAT, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, GL_HALF_FLOAT, GL_INT, GL_SHORT, + GL_UNSIGNED_INT, GL_UNSIGNED_INT_10F_11F_11F_REV, GL_UNSIGNED_INT_24_8, + GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_INT_5_9_9_9_REV, GL_UNSIGNED_SHORT: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(type) + } + } + + ctx := GetContext() + // TODO: This does not consider xoffset or yoffset and completely replaces the level. + // FIX. + switch (target) { + case GL_TEXTURE_2D: { + id := ctx.TextureUnits[ctx.ActiveTextureUnit][GL_TEXTURE_2D] + t := ctx.Instances.Textures[id] + l := Image( + Width: width, + Height: height, + Size: imageSize(as!u32(width), as!u32(height), format, type), + Format: as!GLenum(format) /* TODO: Implicit cast? */, + ) + if (ctx.BoundBuffers[GL_PIXEL_UNPACK_BUFFER] == 0) && (data != null) { + l.Data = clone(as!u8*(data)[0:l.Size]) + } + t.Texture2D[level] = l + t.Kind = TEXTURE2D // TODO: Warning/Error if kind has changed? + // TODO: Warning/Error if format has changed + t.Format = as!GLenum(format) // TODO: Implicit cast? + } + case GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, + GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: { + id := ctx.TextureUnits[ctx.ActiveTextureUnit][GL_TEXTURE_CUBE_MAP] + t := ctx.Instances.Textures[id] + l := Image( + Width: width, + Height: height, + Size: imageSize(as!u32(width), as!u32(height), format, type), + Format: as!GLenum(format) /* TODO: Implicit cast? */, + ) + if (ctx.BoundBuffers[GL_PIXEL_UNPACK_BUFFER] == 0) && (data != null) { + l.Data = clone(as!u8*(data)[0:l.Size]) + } + cube := t.Cubemap[level] + cube.Faces[as!GLenum(target)] = l + t.Cubemap[level] = cube + t.Kind = CUBEMAP // TODO: Warning/Error if kind has changed? + // TODO: Warning/Error if format has changed + t.Format = as!GLenum(format) // TODO: Implicit cast? + } + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexSubImage3D.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexSubImage3D.xhtml","OpenGL ES 3.1") +cmd void glTexSubImage3D(GLenum target, + GLint level, + GLint xoffset, + GLint yoffset, + GLint zoffset, + GLsizei width, + GLsizei height, + GLsizei depth, + GLenum format, + GLenum type, + const void* pixels) { + minRequiredVersion(3, 0) + switch (target) { + case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + switch (format) { + case GL_ALPHA, GL_DEPTH_COMPONENT, GL_DEPTH_STENCIL, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RED, + GL_RED_INTEGER, GL_RG, GL_RGB, GL_RGBA, GL_RGBA_INTEGER, GL_RGB_INTEGER, GL_RG_INTEGER: { + // version 3.0 + } + default: { + glErrorInvalidEnum(format) + } + } + switch (type) { + case GL_BYTE, GL_FLOAT, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, GL_HALF_FLOAT, GL_INT, GL_SHORT, + GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, GL_UNSIGNED_INT_10F_11F_11F_REV, GL_UNSIGNED_INT_24_8, + GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_INT_5_9_9_9_REV, GL_UNSIGNED_SHORT, + GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_5_5_5_1, GL_UNSIGNED_SHORT_5_6_5: { + // version 3.0 + } + default: { + glErrorInvalidEnum(type) + } + } + // TODO +} + diff --git a/gfxapi/gles/api/transform_feedback.api b/gfxapi/gles/api/transform_feedback.api new file mode 100644 index 000000000..8fd03bdc9 --- /dev/null +++ b/gfxapi/gles/api/transform_feedback.api @@ -0,0 +1,118 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBeginTransformFeedback.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBeginTransformFeedback.xhtml","OpenGL ES 3.1") +cmd void glBeginTransformFeedback(GLenum primitiveMode) { + minRequiredVersion(3, 0) + switch (primitiveMode) { + case GL_LINES, GL_POINTS, GL_TRIANGLES: { + // version 3.0 + } + default: { + glErrorInvalidEnum(primitiveMode) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBindTransformFeedback.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindTransformFeedback.xhtml","OpenGL ES 3.1") +cmd void glBindTransformFeedback(GLenum target, TransformFeedbackId id) { + minRequiredVersion(3, 0) + switch (target) { + case GL_TRANSFORM_FEEDBACK: { + // version 3.0 + } + default: { + glErrorInvalidEnum(target) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteTransformFeedbacks.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDeleteTransformFeedbacks.xhtml","OpenGL ES 3.1") +cmd void glDeleteTransformFeedbacks(GLsizei n, const TransformFeedbackId* ids) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBeginTransformFeedback.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBeginTransformFeedback.xhtml","OpenGL ES 3.1") +cmd void glEndTransformFeedback() { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGenTransformFeedbacks.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGenTransformFeedbacks.xhtml","OpenGL ES 3.1") +cmd void glGenTransformFeedbacks(GLsizei n, TransformFeedbackId* ids) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetTransformFeedbackVarying.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetTransformFeedbackVarying.xhtml","OpenGL ES 3.1") +cmd void glGetTransformFeedbackVarying(ProgramId program, + GLuint index, + GLsizei bufSize, + GLsizei* length, + GLsizei* size, + GLenum* type, + GLchar* name) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glIsTransformFeedback.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glIsTransformFeedback.xhtml","OpenGL ES 3.1") +cmd bool glIsTransformFeedback(TransformFeedbackId id) { + minRequiredVersion(3, 0) + // TODO + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glPauseTransformFeedback.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glPauseTransformFeedback.xhtml","OpenGL ES 3.1") +cmd void glPauseTransformFeedback() { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glResumeTransformFeedback.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glResumeTransformFeedback.xhtml","OpenGL ES 3.1") +cmd void glResumeTransformFeedback() { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTransformFeedbackVaryings.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTransformFeedbackVaryings.xhtml","OpenGL ES 3.1") +cmd void glTransformFeedbackVaryings(ProgramId program, + GLsizei count, + const GLchar* const* varyings, + GLenum bufferMode) { + minRequiredVersion(3, 0) + switch (bufferMode) { + case GL_INTERLEAVED_ATTRIBS, GL_SEPARATE_ATTRIBS: { + // version 3.0 + } + default: { + glErrorInvalidEnum(bufferMode) + } + } + // TODO +} + diff --git a/gfxapi/gles/api/vertex_arrays.api b/gfxapi/gles/api/vertex_arrays.api new file mode 100644 index 000000000..5efa2ef1c --- /dev/null +++ b/gfxapi/gles/api/vertex_arrays.api @@ -0,0 +1,402 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBindVertexArray.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindVertexArray.xhtml","OpenGL ES 3.1") +cmd void glBindVertexArray(VertexArrayId array) { + minRequiredVersion(3, 0) + + ctx := GetContext() + if !(array in ctx.Instances.VertexArrays) { + ctx.Instances.VertexArrays[array] = new!VertexArray() + } + ctx.BoundVertexArray = array +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindVertexBuffer.xhtml","OpenGL ES 3.1") +cmd void glBindVertexBuffer(GLuint bindingindex, BufferId buffer, GLintptr offset, GLsizei stride) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteVertexArrays.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDeleteVertexArrays.xhtml","OpenGL ES 3.1") +cmd void glDeleteVertexArrays(GLsizei count, const VertexArrayId* arrays) { + minRequiredVersion(3, 0) + + ctx := GetContext() + a := arrays[0:count] + for i in (0 .. count) { + ctx.Instances.VertexArrays[a[i]] = null + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glEnableVertexAttribArray.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glEnableVertexAttribArray.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glEnableVertexAttribArray.xhtml","OpenGL ES 3.1") +cmd void glDisableVertexAttribArray(AttributeLocation location) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.VertexAttributeArrays[location].Enabled = false +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glEnableVertexAttribArray.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glEnableVertexAttribArray.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glEnableVertexAttribArray.xhtml","OpenGL ES 3.1") +cmd void glEnableVertexAttribArray(AttributeLocation location) { + minRequiredVersion(2, 0) + + ctx := GetContext() + ctx.VertexAttributeArrays[location].Enabled = true +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGenVertexArrays.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGenVertexArrays.xhtml","OpenGL ES 3.1") +cmd void glGenVertexArrays(GLsizei count, VertexArrayId* arrays) { + minRequiredVersion(3, 0) + + a := arrays[0:count] + ctx := GetContext() + for i in (0 .. count) { + id := as!VertexArrayId(?) + ctx.Instances.VertexArrays[id] = new!VertexArray() + a[i] = id + } +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetVertexAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetVertexAttrib.xhtml","OpenGL ES 3.1") +cmd void glGetVertexAttribIiv(AttributeLocation index, GLenum pname, GLint* params) { + minRequiredVersion(3, 0) + switch (pname) { + case GL_CURRENT_VERTEX_ATTRIB, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, + GL_VERTEX_ATTRIB_ARRAY_DIVISOR, GL_VERTEX_ATTRIB_ARRAY_ENABLED, + GL_VERTEX_ATTRIB_ARRAY_INTEGER, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, + GL_VERTEX_ATTRIB_ARRAY_SIZE, GL_VERTEX_ATTRIB_ARRAY_STRIDE, GL_VERTEX_ATTRIB_ARRAY_TYPE: { + // version 3.0 + } + case GL_VERTEX_ATTRIB_BINDING: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetVertexAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetVertexAttrib.xhtml","OpenGL ES 3.1") +cmd void glGetVertexAttribIuiv(AttributeLocation index, GLenum pname, GLuint* params) { + minRequiredVersion(3, 0) + switch (pname) { + case GL_CURRENT_VERTEX_ATTRIB, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, + GL_VERTEX_ATTRIB_ARRAY_DIVISOR, GL_VERTEX_ATTRIB_ARRAY_ENABLED, + GL_VERTEX_ATTRIB_ARRAY_INTEGER, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, + GL_VERTEX_ATTRIB_ARRAY_SIZE, GL_VERTEX_ATTRIB_ARRAY_STRIDE, GL_VERTEX_ATTRIB_ARRAY_TYPE: { + // version 3.0 + } + case GL_VERTEX_ATTRIB_BINDING: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetVertexAttribPointerv.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetVertexAttribPointerv.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetVertexAttribPointerv.xhtml","OpenGL ES 3.1") +cmd void glGetVertexAttribPointerv(AttributeLocation index, GLenum pname, void** pointer) { + minRequiredVersion(2, 0) + switch (pname) { + case GL_VERTEX_ATTRIB_ARRAY_POINTER: { + // version 2.0 + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetVertexAttrib.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetVertexAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetVertexAttrib.xhtml","OpenGL ES 3.1") +cmd void glGetVertexAttribfv(AttributeLocation index, GLenum pname, GLfloat* params) { + minRequiredVersion(2, 0) + switch (pname) { + case GL_CURRENT_VERTEX_ATTRIB, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, + GL_VERTEX_ATTRIB_ARRAY_ENABLED, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, + GL_VERTEX_ATTRIB_ARRAY_SIZE, GL_VERTEX_ATTRIB_ARRAY_STRIDE, GL_VERTEX_ATTRIB_ARRAY_TYPE: { + // version 2.0 + } + case GL_VERTEX_ATTRIB_ARRAY_DIVISOR, GL_VERTEX_ATTRIB_ARRAY_INTEGER: { + minRequiredVersion(3, 0) + } + case GL_VERTEX_ATTRIB_BINDING: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetVertexAttrib.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetVertexAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetVertexAttrib.xhtml","OpenGL ES 3.1") +cmd void glGetVertexAttribiv(AttributeLocation index, GLenum pname, GLint* params) { + minRequiredVersion(2, 0) + switch (pname) { + case GL_CURRENT_VERTEX_ATTRIB, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, + GL_VERTEX_ATTRIB_ARRAY_ENABLED, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, + GL_VERTEX_ATTRIB_ARRAY_SIZE, GL_VERTEX_ATTRIB_ARRAY_STRIDE, GL_VERTEX_ATTRIB_ARRAY_TYPE: { + // version 2.0 + } + case GL_VERTEX_ATTRIB_ARRAY_DIVISOR, GL_VERTEX_ATTRIB_ARRAY_INTEGER: { + minRequiredVersion(3, 0) + } + case GL_VERTEX_ATTRIB_BINDING: { + minRequiredVersion(3, 1) + } + default: { + glErrorInvalidEnum(pname) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glIsVertexArray.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glIsVertexArray.xhtml","OpenGL ES 3.1") +cmd bool glIsVertexArray(VertexArrayId array) { + minRequiredVersion(3, 0) + // TODO + return ? +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttrib.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1") +cmd void glVertexAttrib1f(AttributeLocation location, GLfloat value0) { + minRequiredVersion(2, 0) + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttrib.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1") +cmd void glVertexAttrib1fv(AttributeLocation location, const GLfloat* value) { + minRequiredVersion(2, 0) + + read(value[0:1]) +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttrib.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1") +cmd void glVertexAttrib2f(AttributeLocation location, GLfloat value0, GLfloat value1) { + minRequiredVersion(2, 0) + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttrib.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1") +cmd void glVertexAttrib2fv(AttributeLocation location, const GLfloat* value) { + minRequiredVersion(2, 0) + + read(value[0:2]) +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttrib.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1") +cmd void glVertexAttrib3f(AttributeLocation location, + GLfloat value0, + GLfloat value1, + GLfloat value2) { + minRequiredVersion(2, 0) + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttrib.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1") +cmd void glVertexAttrib3fv(AttributeLocation location, const GLfloat* value) { + minRequiredVersion(2, 0) + + read(value[0:3]) +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttrib.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1") +cmd void glVertexAttrib4f(AttributeLocation location, + GLfloat value0, + GLfloat value1, + GLfloat value2, + GLfloat value3) { + minRequiredVersion(2, 0) + +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttrib.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1") +cmd void glVertexAttrib4fv(AttributeLocation location, const GLfloat* value) { + minRequiredVersion(2, 0) + + read(value[0:4]) +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttribBinding.xhtml","OpenGL ES 3.1") +cmd void glVertexAttribBinding(GLuint attribindex, GLuint bindingindex) { + minRequiredVersion(3, 1) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttribDivisor.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttribDivisor.xhtml","OpenGL ES 3.1") +cmd void glVertexAttribDivisor(AttributeLocation index, GLuint divisor) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttribFormat.xhtml","OpenGL ES 3.1") +cmd void glVertexAttribFormat(GLuint attribindex, + GLint size, + GLenum type, + GLboolean normalized, + GLuint relativeoffset) { + minRequiredVersion(3, 1) + switch (type) { + case GL_BYTE, GL_FIXED, GL_FLOAT, GL_HALF_FLOAT, GL_INT, GL_INT_2_10_10_10_REV, GL_SHORT, + GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_SHORT: { + // version 3.1 + } + default: { + glErrorInvalidEnum(type) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1") +cmd void glVertexAttribI4i(AttributeLocation index, GLint x, GLint y, GLint z, GLint w) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1") +cmd void glVertexAttribI4iv(AttributeLocation index, const GLint* v) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1") +cmd void glVertexAttribI4ui(AttributeLocation index, GLuint x, GLuint y, GLuint z, GLuint w) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1") +cmd void glVertexAttribI4uiv(AttributeLocation index, const GLuint* v) { + minRequiredVersion(3, 0) + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttribFormat.xhtml","OpenGL ES 3.1") +cmd void glVertexAttribIFormat(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) { + minRequiredVersion(3, 1) + switch (type) { + case GL_BYTE, GL_FIXED, GL_FLOAT, GL_HALF_FLOAT, GL_INT, GL_INT_2_10_10_10_REV, GL_SHORT, + GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_SHORT: { + // version 3.1 + } + default: { + glErrorInvalidEnum(type) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttribPointer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttribPointer.xhtml","OpenGL ES 3.1") +cmd void glVertexAttribIPointer(AttributeLocation index, + GLint size, + GLenum type, + GLsizei stride, + const void* pointer) { + minRequiredVersion(3, 0) + switch (type) { + case GL_BYTE, GL_INT, GL_SHORT, GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, GL_UNSIGNED_SHORT: { + // version 3.0 + } + default: { + glErrorInvalidEnum(type) + } + } + // TODO +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttribPointer.xml","OpenGL ES 2.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttribPointer.xhtml","OpenGL ES 3.0") +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttribPointer.xhtml","OpenGL ES 3.1") +cmd void glVertexAttribPointer(AttributeLocation location, + GLint size, + GLenum type, + GLboolean normalized, + GLsizei stride, + VertexPointer data) { + minRequiredVersion(2, 0) + switch (type) { + case GL_BYTE, GL_FIXED, GL_FLOAT, GL_SHORT, GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT: { + // version 2.0 + } + case GL_HALF_FLOAT, GL_INT, GL_INT_2_10_10_10_REV, GL_UNSIGNED_INT, + GL_UNSIGNED_INT_2_10_10_10_REV: { + minRequiredVersion(3, 0) + } + default: { + glErrorInvalidEnum(type) + } + } + + assert((size >= 1) && (size <= 4)) + assert(stride >= 0) + ctx := GetContext() + a := ctx.VertexAttributeArrays[location] + a.Size = as!u32(size) + a.Type = type + a.Normalized = normalized + a.Stride = stride + a.Pointer = data + a.Buffer = ctx.BoundBuffers[GL_ARRAY_BUFFER] +} + +@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexBindingDivisor.xhtml","OpenGL ES 3.1") +cmd void glVertexBindingDivisor(GLuint bindingindex, GLuint divisor) { + minRequiredVersion(3, 1) + // TODO +} + diff --git a/tools/generate_gles_api/download.go b/tools/generate_gles_api/download.go new file mode 100644 index 000000000..b194f15ea --- /dev/null +++ b/tools/generate_gles_api/download.go @@ -0,0 +1,49 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "fmt" + "io/ioutil" + "net/http" + "os" +) + +// Download the given URL, optionally using disk cache +func Download(url string) []byte { + filename := *cacheDir + string(os.PathSeparator) + CompileRegexp(`[^\w\.]+`).ReplaceAllString(url, "-") + if *cacheDir != "" { + if bytes, err := ioutil.ReadFile(filename); err == nil { + return bytes + } + } + resp, err := http.Get(url) + if err != nil { + panic(err) + } + if resp.StatusCode != 200 { + panic(fmt.Errorf("%s: %s", url, resp.Status)) + } + bytes, err := ioutil.ReadAll(resp.Body) + if err != nil { + panic(err) + } + resp.Body.Close() + if *cacheDir != "" { + os.MkdirAll(*cacheDir, 0750) + ioutil.WriteFile(filename, bytes, 0666) + } + return bytes +} diff --git a/tools/generate_gles_api/download_doc.go b/tools/generate_gles_api/download_doc.go new file mode 100644 index 000000000..e512b7ece --- /dev/null +++ b/tools/generate_gles_api/download_doc.go @@ -0,0 +1,672 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "encoding/xml" + "fmt" + "regexp" + "sort" + "strings" +) + +// Download documentation from the khronos online man pages +func DownloadDoc(version Version, cmdName string) *CommandDoc { + url, manPage, paramSectionIndex, paramSectionCount := GetDocUrl(version, cmdName) + page := &html{} + if err := xml.Unmarshal(Download(url), page); err != nil { + panic(err) + } + summary := page.FindClass("refnamediv").FindTag("p").Text() + paramNameTags := page.FindOne(func(h *html) bool { + return h.Class == "funcprototype-table" && h.FindClass("fsfunc").Text() == cmdName + }).FindClasses("pdparam") + paramSections := page.FindAll(func(h *html) bool { + return h.Class == "refsect1" && strings.HasPrefix(h.FindTag("h2").Text(), "Parameters") + }) + paramDocs := make(map[string]string) // name -> doc + if len(paramSections) > 0 { + if len(paramSections) != paramSectionCount { + panic(fmt.Errorf("Expected %v parameter sections, but found %v", paramSectionCount, len(paramSections))) + } + dlTag := paramSections[paramSectionIndex].FindTag("dl").Children + for i := 0; i < len(dlTag); i += 2 { + for _, name := range dlTag[i].FindTags("code") { + paramDocs[name.Text()] = dlTag[i+1].XML + } + } + } + accpets, _ := getAcceptedValues(cmdName, "result", version) + params := map[int]ParamDoc{-1: ParamDoc{"result", summary, accpets}} + for paramIndex, paramNameTag := range paramNameTags { + if name := paramNameTag.Text(); name != "void" { + doc := parseParamDoc(name, paramDocs[name]) + doc.Name = renameParam(cmdName, doc.Name) + if accpets, ok := getAcceptedValues(cmdName, doc.Name, version); ok { + doc.Accepts = accpets + } + sort.Sort(sort.StringSlice(doc.Accepts)) + params[paramIndex] = doc + } + } + return &CommandDoc{ + ManPage: manPage, + Url: url, + Summary: summary, + Params: params, + } +} + +type CommandDoc struct { + ManPage string + Url string + Summary string + Params map[int]ParamDoc +} + +type ParamDoc struct { + Name string + Summary string + Accepts []string +} + +type html struct { + XMLName xml.Name + XML string `xml:",innerxml"` + Class string `xml:"class,attr"` + Children []*html `xml:",any"` +} + +func (h *html) FindAll(pred func(*html) bool) (res []*html) { + if pred(h) { + res = append(res, h) + } + for _, child := range h.Children { + res = append(res, child.FindAll(pred)...) + } + return +} + +func (h *html) FindOne(pred func(*html) bool) *html { + res := h.FindAll(pred) + if len(res) == 0 { + panic(fmt.Errorf("Could not find matching html element")) + } else if len(res) > 1 { + panic(fmt.Errorf("Found multiple matching html elements")) + } else { + return res[0] + } +} + +func (h *html) FindTags(tag string) []*html { + return h.FindAll(func(h *html) bool { return h.XMLName.Local == tag }) +} + +func (h *html) FindTag(tag string) *html { + return h.FindOne(func(h *html) bool { return h.XMLName.Local == tag }) +} + +func (h *html) FindClasses(class string) []*html { + return h.FindAll(func(h *html) bool { return h.Class == class }) +} + +func (h *html) FindClass(class string) *html { + return h.FindOne(func(h *html) bool { return h.Class == class }) +} + +// Remove html tags to obtain plain text +func htmlToText(page string) string { + page = strings.Replace(page, "<mml:msup><mml:mn>2</mml:mn>", "2^", -1) + page = CompileRegexp("<.*?>").ReplaceAllString(page, "") + page = strings.Replace(page, "<", "<", -1) + page = strings.Replace(page, ">", ">", -1) + page = CompileRegexp(`\s+`).ReplaceAllString(page, " ") + return strings.TrimSpace(page) +} + +func (h *html) Text() string { + return htmlToText(h.XML) +} + +// Get the full url for the given command, the page name (eg. "glUniform"), and the relevat section +func GetDocUrl(version Version, cmdName string) (url, manPage string, paramSectionIndex int, paramSectionCount int) { + + // Sometimes the man page is exactly the command name, + // however sometimes one page documents several command. + // (overload, enable/disable, begin/end) + // We use the following tables to find the relevat man page. + // We also sometimes have to specify which section of the page is relevat. + + type redirect struct { + oldName string // regexp + newName string // man page + paramSectionIndex int + paramSectionCount int // for verification + } + + var gles11redirects = []*redirect{ + {"glAlphaFunc(x)", "glAlphaFunc", 0, 1}, + {"glClearColor(x)", "glClearColor", 0, 1}, + {"glClearDepth(f|x)", "glClearDepth", 0, 1}, + {"glClipPlane(f|x)", "glClipPlane", 0, 1}, + {"glColor4(f|x|ub)", "glColor", 0, 1}, + {"glDepthRange(f|x)", "glDepthRange", 0, 1}, + {"glDisable", "glEnable", 0, 1}, + {"glDisableClientState", "glEnableClientState", 0, 1}, + {"glFog(f|x)", "glFog", 0, 2}, + {"glFog(f|x)v", "glFog", 1, 2}, + {"glFrustum(f|x)", "glFrustum", 0, 1}, + {"glGetBoolean(v)", "glGet", 0, 1}, + {"glGetClipPlane(f|x)", "glGetClipPlane", 0, 1}, + {"glGetFixed(v)", "glGet", 0, 1}, + {"glGetFloat(v)", "glGet", 0, 1}, + {"glGetInteger(v)", "glGet", 0, 1}, + {"glGetLight(f|x)v", "glGetLight", 0, 1}, + {"glGetMaterial(f|x)v", "glGetMaterial", 0, 1}, + {"glGetTexEnv(f|i|x)v", "glGetTexEnv", 0, 1}, + {"glGetTexParameter(f|i|x)v", "glGetTexParameter", 0, 1}, + {"glLight(f|x)", "glLight", 0, 2}, + {"glLight(f|x)v", "glLight", 1, 2}, + {"glLightModel(f|x)", "glLightModel", 0, 2}, + {"glLightModel(f|x)v", "glLightModel", 1, 2}, + {"glLineWidth(x)", "glLineWidth", 0, 1}, + {"glLoadMatrix(f|x)", "glLoadMatrix", 0, 1}, + {"glMaterial(f|x)", "glMaterial", 0, 2}, + {"glMaterial(f|x)v", "glMaterial", 1, 2}, + {"glMultMatrix(f|x)", "glMultMatrix", 0, 1}, + {"glMultiTexCoord4(f|x)", "glMultiTexCoord", 0, 1}, + {"glNormal3(f|x)", "glNormal", 0, 1}, + {"glOrtho(f|x)", "glOrtho", 0, 1}, + {"glPointParameter(f|x)", "glPointParameter", 0, 2}, + {"glPointParameter(f|x)v", "glPointParameter", 1, 2}, + {"glPointSize(x)", "glPointSize", 0, 1}, + {"glPolygonOffset(x)", "glPolygonOffset", 0, 1}, + {"glPopMatrix", "glPushMatrix", 0, 1}, + {"glRotate(f|x)", "glRotate", 0, 1}, + {"glSampleCoverage(x)", "glSampleCoverage", 0, 1}, + {"glScale(f|x)", "glScale", 0, 1}, + {"glTexEnv(f|i|x)", "glTexEnv", 0, 2}, + {"glTexEnv(f|i|x)v", "glTexEnv", 1, 2}, + {"glTexParameter(f|i|x)", "glTexParameter", 0, 2}, + {"glTexParameter(f|i|x)v", "glTexParameter", 1, 2}, + {"glTranslate(f|x)", "glTranslate", 0, 1}, + } + + var gles20redirects = []*redirect{ + {"glDisable", "glEnable", 1, 2}, + {"glDisableVertexAttribArray", "glEnableVertexAttribArray", 0, 1}, + {"glEnable", "glEnable", 0, 2}, + {"glGetBooleanv", "glGet", 0, 1}, + {"glGetFloatv", "glGet", 0, 1}, + {"glGetIntegerv", "glGet", 0, 1}, + {"glGetTexParameter(f|i)v", "glGetTexParameter", 0, 1}, + {"glGetUniform(f|i)v", "glGetUniform", 0, 1}, + {"glGetVertexAttrib(f|i)v", "glGetVertexAttrib", 0, 1}, + {"glTexParameter(f|i)", "glTexParameter", 0, 2}, + {"glTexParameter(f|i)v", "glTexParameter", 1, 2}, + {"glUniform(1|2|3|4)(f|i|ui)", "glUniform", 0, 3}, + {"glUniform(1|2|3|4)(f|i|ui)v", "glUniform", 1, 3}, + {"glUniformMatrix(2|3|4|2x3|3x2|2x4|4x2|3x4|4x3)fv", "glUniform", 2, 3}, + {"glVertexAttrib(1|2|3|4)f", "glVertexAttrib", 0, 2}, + {"glVertexAttrib(1|2|3|4)fv", "glVertexAttrib", 1, 2}, + } + + var gles30redirects = append([]*redirect{ + {"glBeginQuery", "glBeginQuery", 0, 2}, + {"glClearBuffer(fi|fv|iv|uiv)", "glClearBuffer", 0, 1}, + {"glDisable", "glEnable", 0, 1}, + {"glEnable", "glEnable", 0, 1}, + {"glEndQuery", "glBeginQuery", 1, 2}, + {"glEndTransformFeedback", "glBeginTransformFeedback", 0, 1}, + {"glGetBufferParameter(i)(|64)v", "glGetBufferParameter", 0, 1}, + {"glGetInteger(|64)(|i_)v", "glGet", 0, 1}, + {"glGetSamplerParameter(f|i)v", "glGetSamplerParameter", 0, 1}, + {"glGetString(|i)", "glGetString", 0, 1}, + {"glGetUniform(f|i|ui)v", "glGetUniform", 0, 1}, + {"glGetVertexAttrib(f|Ii|Iui|i)v", "glGetVertexAttrib", 0, 1}, + {"glMapBufferRange", "glMapBufferRange", 0, 2}, + {"glSamplerParameter(f|i)(|v)", "glSamplerParameter", 0, 1}, + {"glTexParameter(f|i)(|v)", "glTexParameter", 0, 1}, + {"glUniform(1|2|3|4)(f|i|ui)(|v)", "glUniform", 0, 1}, + {"glUniformMatrix(2|3|4|2x3|3x2|2x4|4x2|3x4|4x3)fv", "glUniform", 0, 1}, + {"glUnmapBuffer", "glMapBufferRange", 1, 2}, + {"glVertexAttrib(1f|2f|3f|4f|I4i|I4ui)(|v)", "glVertexAttrib", 0, 1}, + {"glVertexAttrib(|I)Pointer", "glVertexAttribPointer", 0, 1}, + }, gles20redirects...) + + var gles31redirects = append([]*redirect{ + {"glCreateShaderProgram(v)", "glCreateShaderProgram", 0, 1}, + {"glGetBoolean(|i_)v", "glGet", 0, 1}, + {"glGetProgramInterface(iv)", "glGetProgramInterface", 0, 1}, + {"glGetProgramPipeline(iv)", "glGetProgramPipeline", 0, 1}, + {"glGetProgramResource(iv)", "glGetProgramResource", 0, 1}, + {"glGetTexLevelParameter(f|i)v", "glGetTexLevelParameter", 0, 1}, + {"glMemoryBarrier(|ByRegion)", "glMemoryBarrier", 0, 1}, + {"glProgramUniform(1|2|3|4)(f|i|ui)(|v)", "glProgramUniform", 0, 1}, + {"glProgramUniformMatrix(2|3|4|2x3|3x2|2x4|4x2|3x4|4x3)fv", "glProgramUniform", 0, 1}, + {"glVertexAttrib(|I)Format", "glVertexAttribFormat", 0, 1}, + }, gles30redirects...) + + var redirects []*redirect + var urlFormat string + switch version { + case "1.1": + redirects, urlFormat = gles11redirects, "https://www.khronos.org/opengles/sdk/1.1/docs/man/%s.xml" + case "2.0": + redirects, urlFormat = gles20redirects, "https://www.khronos.org/opengles/sdk/docs/man/xhtml/%s.xml" + case "3.0": + redirects, urlFormat = gles30redirects, "https://www.khronos.org/opengles/sdk/docs/man3/html/%s.xhtml" + case "3.1": + redirects, urlFormat = gles31redirects, "https://www.khronos.org/opengles/sdk/docs/man31/html/%s.xhtml" + default: + panic(fmt.Errorf("Uknown api version: %v", version)) + } + + for _, redir := range redirects { + if CompileRegexp("^(?:" + redir.oldName + ")$").MatchString(cmdName) { + return fmt.Sprintf(urlFormat, redir.newName), redir.newName, redir.paramSectionIndex, redir.paramSectionCount + } + } + return fmt.Sprintf(urlFormat, cmdName), cmdName, 0, 1 +} + +func GetExtensionUrl(extension string) string { + match := CompileRegexp(`^GL_(([A-Z]+)_\w+)$`).FindStringSubmatch(extension) + vendor := match[2] + page := match[1] + `.txt` + // most of the time the page name includes the vendor prefix, but sometimes it does not + for _, rename := range []struct{ oldName, newName string }{ + {"AMD_performance_monitor.txt", "performance_monitor.txt"}, + {"APPLE_rgb_422.txt", "rgb_422.txt"}, + {"EXT_blend_minmax.txt", "blend_minmax.txt"}, + {"EXT_draw_instanced.txt", "draw_instanced.txt"}, + {"EXT_multi_draw_arrays.txt", "multi_draw_arrays.txt"}, + {"EXT_post_depth_coverage.txt", "post_depth_coverage.txt"}, + {"EXT_raster_multisample.txt", "raster_multisample.txt"}, + {"EXT_shader_integer_mix.txt", "shader_integer_mix.txt"}, + {"EXT_texture_compression_dxt1.txt", "texture_compression_dxt1.txt"}, + {"EXT_texture_compression_s3tc.txt", "texture_compression_s3tc.txt"}, + {"EXT_texture_filter_anisotropic.txt", "texture_filter_anisotropic.txt"}, + {"EXT_texture_filter_minmax.txt", "texture_filter_minmax.txt"}, + {"EXT_texture_lod_bias.txt", "texture_lod_bias.txt"}, + {"EXT_texture_sRGB_decode.txt", "texture_sRGB_decode.txt"}, + {"FJ_shader_binary_GCCSO.txt", "shader_binary_GCCSO.txt"}, + {"INTEL_performance_query.txt", "performance_query.txt"}, + {"KHR_blend_equation_advanced.txt", "blend_equation_advanced.txt"}, + {"KHR_context_flush_control.txt", "context_flush_control.txt"}, + {"KHR_debug.txt", "debug.txt"}, + {"KHR_robust_buffer_access_behavior.txt", "robust_buffer_access_behavior.txt"}, + {"KHR_robustness.txt", "robustness.txt"}, + {"KHR_texture_compression_astc_hdr.txt", "texture_compression_astc_hdr.txt"}, + {"NV_bindless_texture.txt", "bindless_texture.txt"}, + {"NV_blend_equation_advanced.txt", "blend_equation_advanced.txt"}, + {"NV_conditional_render.txt", "conditional_render.txt"}, + {"NV_conservative_raster.txt", "conservative_raster.txt"}, + {"NV_draw_texture.txt", "draw_texture.txt"}, + {"NV_coverage_sample.txt", "EGL_NV_coverage_sample.txt"}, + {"NV_depth_nonlinear.txt", "EGL_NV_depth_nonlinear.txt"}, + {"NV_fence.txt", "fence.txt"}, + {"NV_fill_rectangle.txt", "fill_rectangle.txt"}, + {"NV_fragment_coverage_to_color.txt", "fragment_coverage_to_color.txt"}, + {"NV_fragment_shader_interlock.txt", "fragment_shader_interlock.txt"}, + {"NV_framebuffer_mixed_samples.txt", "framebuffer_mixed_samples.txt"}, + {"NV_geometry_shader_passthrough.txt", "geometry_shader_passthrough.txt"}, + {"NV_internalformat_sample_query.txt", "internalformat_sample_query.txt"}, + {"NV_path_rendering.txt", "path_rendering.txt"}, + {"NV_path_rendering_shared_edge.txt", "path_rendering_shared_edge.txt"}, + {"NV_sample_locations.txt", "sample_locations.txt"}, + {"NV_sample_mask_override_coverage.txt", "sample_mask_override_coverage.txt"}, + {"NV_viewport_array2.txt", "viewport_array2.txt"}, + {"OVR_multiview.txt", "multiview.txt"}, + {"OVR_multiview2.txt", "multiview2.txt"}, + } { + if page == rename.oldName { + page = rename.newName + } + } + url := fmt.Sprintf("https://www.khronos.org/registry/gles/extensions/%s/%s", vendor, page) + Download(url) + return url +} + +// More often than not, the accpted GLenum values can be extracted using regexp. +func parseParamDoc(paramName, doc string) ParamDoc { + // Remove noise + for _, tag := range []string{"<span>", "</span>", "<p>", "</p>"} { + doc = strings.Replace(doc, tag, "", -1) + } + + // Regexp for enum value. Represented in phrases as $ + exprConst := `(?:<code class="constant">(\w+)</code>(?:,|\.|\s|and|or)*)` + + // Remove the default value doc + phrases := []string{ + "The initial value is $.", + "The intial value is $.", // typo in docs + } + for _, phrase := range phrases { + // Must follow sentence; relaxed whitespace; must be end of doc + expr := `\.\s*` + strings.Replace(regexp.QuoteMeta(phrase), ` `, `\s+`, -1) + `\s*$` + expr = strings.Replace(expr, `\$`, exprConst, -1) + if loc := CompileRegexp(expr).FindStringIndex(doc); loc != nil { + doc = doc[:loc[0]+1] + } + } + + // List of the common phrases which the man pages use + paramNameTag := `<em class="parameter"><code>` + paramName + `</code></em>` + phrases = []string{ + "$ are accepted", + "$ is accepted", + "Accepted symbolic names are $", + "Accepted values are $", + "Can be either $", + "Eight symbolic constants are accepted: $", + "Eight symbolic constants are valid: $", + "Eight tokens are valid: $", + "It must be $", + "May be $", + "May be either $", + "Must be $", + "Must be either $", + "Must be one of $", + "Must be one of the following symbolic constants: $", + "Six symbolic constants are accepted: $", + "Symbolic constants $ are accepted", + "The allowed flags are $", + "The following symbolic constants are accepted: $", + "The following symbolic values are accepted: $", + "The following symbols are accepted: $", + "The symbolic constant must be $", + "The symbolic constant must be one of $", + "The three masks are $", + "These values are accepted: $", + "These values are accepted: $", + "Three symbolic constants are valid: $", + "Valid masks are $", + "Which can be one of the following: $", + paramNameTag + " can be one of the following: $", + paramNameTag + " may be $", + paramNameTag + " must be $", + paramNameTag + " must be either $", + paramNameTag + " must be one of $", + } + var enumValues []string + for _, phrase := range phrases { + // Must follow sentence (dot); relaxed whitespace; must be end of doc + expr := `\.\s*` + strings.Replace(regexp.QuoteMeta(phrase), ` `, `\s+`, -1) + `(?:\.|,|\s)*$` + expr = strings.Replace(expr, `\$`, exprConst+`*`, -1) + if loc := CompileRegexp(expr).FindStringIndex(doc); loc != nil { + for _, match := range CompileRegexp(exprConst).FindAllStringSubmatch(doc[loc[0]:loc[1]], -1) { + enumValues = append(enumValues, match[1]) + } + // remove the enum list from the doc + doc = doc[:loc[0]+1] + break + } + } + return ParamDoc{ + Name: paramName, + Summary: htmlToText(doc), + Accepts: enumValues, + } +} + +// rename parameters so that they match names in the khronos registry +// this used to be important, but it is used just for verification now +func renameParam(cmdName, paramName string) string { + var renames = []struct { + cmdName string // regexp + newName string + oldName string + }{ + {"glBlendFuncSeparate", "dfactorAlpha", "dstAlpha"}, + {"glBlendFuncSeparate", "dfactorRGB", "dstRGB"}, + {"glBlendFuncSeparate", "sfactorAlpha", "srcAlpha"}, + {"glBlendFuncSeparate", "sfactorRGB", "srcRGB"}, + {"glClearBuffer(fi|fv|iv|uiv)", "drawbuffer", "drawBuffer"}, + {"glClearDepthf", "d", "depth"}, + {"glClipPlanef", "eqn", "equation"}, + {"glClipPlanef", "p", "plane"}, + {"glCopyBufferSubData", "readOffset", "readoffset"}, + {"glCopyBufferSubData", "readTarget", "readtarget"}, + {"glCopyBufferSubData", "writeOffset", "writeoffset"}, + {"glCopyBufferSubData", "writeTarget", "writetarget"}, + {"glCreateShader", "type", "shaderType"}, + {"glDeleteSamplers", "count", "n"}, + {"glDepthRange(f|x)", "f", "far"}, + {"glDepthRange(f|x)", "f", "farVal"}, + {"glDepthRange(f|x)", "n", "near"}, + {"glDepthRange(f|x)", "n", "nearVal"}, + {"glDrawArraysInstanced", "instancecount", "primcount"}, + {"glDrawElementsInstanced", "instancecount", "primcount"}, + {"glFogxv", "param", "params"}, + {"glFrustum(f|x)", "b", "bottom"}, + {"glFrustum(f|x)", "f", "far"}, + {"glFrustum(f|x)", "l", "left"}, + {"glFrustum(f|x)", "n", "near"}, + {"glFrustum(f|x)", "r", "right"}, + {"glFrustum(f|x)", "t", "top"}, + {"glGenSamplers", "count", "n"}, + {"glGetBooleanv", "data", "params"}, + {"glGetBufferParameteri(64|)v", "params", "data"}, + {"glGetBufferParameteri(64|)v", "pname", "value"}, + {"glGetFloatv", "data", "params"}, + {"glGetIntegerv", "data", "params"}, + {"glGetProgramBinary", "bufSize", "bufsize"}, + {"glGetProgramInfoLog", "bufSize", "maxLength"}, + {"glGetShaderInfoLog", "bufSize", "maxLength"}, + {"glGetShaderPrecisionFormat", "precisiontype", "precisionType"}, + {"glGetShaderPrecisionFormat", "shadertype", "shaderType"}, + {"glIsSampler", "sampler", "id"}, + {"glLightModelxv", "param", "params"}, + {"glMaterialxv", "param", "params"}, + {"glMultiTexCoord4x", "texture", "target"}, + {"glOrtho(f|x)", "b", "bottom"}, + {"glOrtho(f|x)", "f", "far"}, + {"glOrtho(f|x)", "l", "left"}, + {"glOrtho(f|x)", "n", "near"}, + {"glOrtho(f|x)", "r", "right"}, + {"glOrtho(f|x)", "t", "top"}, + {"glReadPixels", "pixels", "data"}, + {"glSamplerParameter(fv|iv)", "param", "params"}, + {"glShaderBinary", "binaryformat", "binaryFormat"}, + {"glShaderBinary", "count", "n"}, + {"glStencilOp", "fail", "sfail"}, + {"glStencilOp", "zfail", "dpfail"}, + {"glStencilOp", "zpass", "dppass"}, + {"glTex(Sub|)Image(2D|3D)", "pixels", "data"}, + {"glTexImage(2D|3D)", "internalformat", "internalFormat"}, + {"glVertexAttrib(1f|2f|3f|4f|I4i|I4ui)", "w", "v3"}, + {"glVertexAttrib(1f|2f|3f|4f|I4i|I4ui)", "x", "v0"}, + {"glVertexAttrib(1f|2f|3f|4f|I4i|I4ui)", "y", "v1"}, + {"glVertexAttrib(1f|2f|3f|4f|I4i|I4ui)", "z", "v2"}, + } + for _, rename := range renames { + if CompileRegexp("^(?:" + rename.cmdName + ")$").MatchString(cmdName) { + if rename.oldName == paramName { + return rename.newName + } + } + } + return paramName +} + +func listContains(commaSeparatedList, value string) bool { + if strings.Contains(commaSeparatedList, value) { + for _, v := range strings.Split(commaSeparatedList, ",") { + if v == value { + return true + } + } + } + return false +} + +// If the enum values can not be automatically extracted from the documentation, +// we use the hand-written table blow. (which can also be used for overrides) +func getAcceptedValues(cmdName, paramName string, apiVersion Version) ([]string, bool) { + + var GL_TEXTUREi = "GL_TEXTURE0,GL_TEXTURE1,GL_TEXTURE2,GL_TEXTURE3,GL_TEXTURE4,GL_TEXTURE5,GL_TEXTURE6,GL_TEXTURE7,GL_TEXTURE8,GL_TEXTURE9,GL_TEXTURE10,GL_TEXTURE11,GL_TEXTURE12,GL_TEXTURE13,GL_TEXTURE14,GL_TEXTURE15,GL_TEXTURE16,GL_TEXTURE17,GL_TEXTURE18,GL_TEXTURE19,GL_TEXTURE20,GL_TEXTURE21,GL_TEXTURE22,GL_TEXTURE23,GL_TEXTURE24,GL_TEXTURE25,GL_TEXTURE26,GL_TEXTURE27,GL_TEXTURE28,GL_TEXTURE29,GL_TEXTURE30,GL_TEXTURE31" + var GL_CLIP_PLANEi = "GL_CLIP_PLANE0,GL_CLIP_PLANE1,GL_CLIP_PLANE2,GL_CLIP_PLANE3,GL_CLIP_PLANE4,GL_CLIP_PLANE5" + var GL_LIGHTi = "GL_LIGHT0,GL_LIGHT1,GL_LIGHT2,GL_LIGHT3,GL_LIGHT4,GL_LIGHT5,GL_LIGHT6,GL_LIGHT7" + var GL_COLOR_ATTACHMENTi = "GL_COLOR_ATTACHMENT0,GL_COLOR_ATTACHMENT1,GL_COLOR_ATTACHMENT2,GL_COLOR_ATTACHMENT3,GL_COLOR_ATTACHMENT4,GL_COLOR_ATTACHMENT5,GL_COLOR_ATTACHMENT6,GL_COLOR_ATTACHMENT7,GL_COLOR_ATTACHMENT8,GL_COLOR_ATTACHMENT9,GL_COLOR_ATTACHMENT10,GL_COLOR_ATTACHMENT11,GL_COLOR_ATTACHMENT12,GL_COLOR_ATTACHMENT13,GL_COLOR_ATTACHMENT14,GL_COLOR_ATTACHMENT15" + + // TODO: When is GL_BACK,GL_DEPTH,GL_STENCIL valid for attachments? + // TODO: glGetProgramResourceiv - is GL_TRANSFORM_FEEDBACK_BUFFER supported or not? + // TODO: glGetActiveAttrib - accepts value of GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES + + var enumMetadata = []struct { + // all field are comma separated values + cmdName string + paramName string + apiVersion string + acceptedValues string + }{ + {"glActiveTexture", "texture", "1.1,2.0,3.0,3.1", GL_TEXTUREi}, + {"glBeginTransformFeedback", "primitiveMode", "3.0,3.1", "GL_POINTS,GL_LINES,GL_TRIANGLES"}, + {"glBindFramebuffer", "target", "3.0,3.1", "GL_DRAW_FRAMEBUFFER,GL_READ_FRAMEBUFFER,GL_FRAMEBUFFER"}, + {"glBindImageTexture", "access", "3.1", "GL_READ_ONLY,GL_WRITE_ONLY,GL_READ_WRITE"}, + {"glBindImageTexture", "format", "3.1", "GL_RGBA32F,GL_RGBA16F,GL_R32F,GL_RGBA32UI,GL_RGBA16UI,GL_RGBA8UI,GL_R32UI,GL_RGBA32I,GL_RGBA16I,GL_RGBA8I,GL_R32I,GL_RGBA8,GL_RGBA8_SNORM"}, + {"glBlendFunc,glBlendFuncSeparate", "dfactor,dfactorRGB,dfactorAlpha", "2.0,3.0,3.1", "GL_ZERO,GL_ONE,GL_SRC_COLOR,GL_ONE_MINUS_SRC_COLOR,GL_DST_COLOR,GL_ONE_MINUS_DST_COLOR,GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA,GL_DST_ALPHA,GL_ONE_MINUS_DST_ALPHA,GL_CONSTANT_COLOR,GL_ONE_MINUS_CONSTANT_COLOR,GL_CONSTANT_ALPHA,GL_ONE_MINUS_CONSTANT_ALPHA"}, + {"glBlendFunc,glBlendFuncSeparate", "sfactor,sfactorRGB,sfactorAlpha", "2.0,3.0,3.1", "GL_ZERO,GL_ONE,GL_SRC_COLOR,GL_ONE_MINUS_SRC_COLOR,GL_DST_COLOR,GL_ONE_MINUS_DST_COLOR,GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA,GL_DST_ALPHA,GL_ONE_MINUS_DST_ALPHA,GL_CONSTANT_COLOR,GL_ONE_MINUS_CONSTANT_COLOR,GL_CONSTANT_ALPHA,GL_ONE_MINUS_CONSTANT_ALPHA,GL_SRC_ALPHA_SATURATE"}, + {"glCheckFramebufferStatus", "result", "2.0", "GL_FRAMEBUFFER_COMPLETE,GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT,GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS,GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT,GL_FRAMEBUFFER_UNSUPPORTED"}, + {"glCheckFramebufferStatus", "result", "3.0,3.1", "GL_FRAMEBUFFER_COMPLETE,GL_FRAMEBUFFER_UNDEFINED,GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT,GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT,GL_FRAMEBUFFER_UNSUPPORTED,GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"}, + {"glCheckFramebufferStatus", "target", "3.0,3.1", "GL_DRAW_FRAMEBUFFER,GL_READ_FRAMEBUFFER,GL_FRAMEBUFFER"}, + {"glClearBufferfi", "buffer", "3.0,3.1", "GL_DEPTH_STENCIL"}, + {"glClearBufferfv", "buffer", "3.0,3.1", "GL_COLOR,GL_DEPTH"}, + {"glClearBufferiv", "buffer", "3.0,3.1", "GL_COLOR,GL_STENCIL"}, + {"glClearBufferuiv", "buffer", "3.0,3.1", "GL_COLOR"}, + {"glClientActiveTexture", "texture", "1.1", GL_TEXTUREi}, + {"glClientWaitSync", "result", "3.0,3.1", "GL_ALREADY_SIGNALED,GL_TIMEOUT_EXPIRED,GL_CONDITION_SATISFIED,GL_WAIT_FAILED"}, + {"glClipPlanef", "p", "1.1", GL_CLIP_PLANEi}, + {"glClipPlanex", "plane", "1.1", GL_CLIP_PLANEi}, + {"glColorPointer", "type", "1.1", "GL_UNSIGNED_BYTE,GL_FIXED,GL_FLOAT"}, // TODO + {"glCompressedTexImage2D", "internalformat", "2.0", ""}, // provided by extensions only + {"glCompressedTexImage2D,glCompressedTexImage3D,glCompressedTexSubImage2D,glCompressedTexSubImage3D", "internalformat,format", "3.0,3.1", "GL_COMPRESSED_R11_EAC,GL_COMPRESSED_SIGNED_R11_EAC,GL_COMPRESSED_RG11_EAC,GL_COMPRESSED_SIGNED_RG11_EAC,GL_COMPRESSED_RGB8_ETC2,GL_COMPRESSED_SRGB8_ETC2,GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,GL_COMPRESSED_RGBA8_ETC2_EAC,GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC"}, + {"glCompressedTexSubImage2D", "format", "1.1", "GL_PALETTE4_RGB8_OES,GL_PALETTE4_RGBA8_OES,GL_PALETTE4_R5_G6_B5_OES,GL_PALETTE4_RGBA4_OES,GL_PALETTE4_RGB5_A1_OES,GL_PALETTE8_RGB8_OES,GL_PALETTE8_RGBA8_OES,GL_PALETTE8_R5_G6_B5_OES,GL_PALETTE8_RGBA4_OES,GL_PALETTE8_RGB5_A1_OES"}, + {"glCompressedTexSubImage2D", "format", "2.0", ""}, + {"glCopyBufferSubData", "readTarget,writeTarget", "3.0,3.1", "GL_ARRAY_BUFFER,GL_COPY_READ_BUFFER,GL_COPY_WRITE_BUFFER,GL_ELEMENT_ARRAY_BUFFER,GL_PIXEL_PACK_BUFFER,GL_PIXEL_UNPACK_BUFFER,GL_TRANSFORM_FEEDBACK_BUFFER,GL_UNIFORM_BUFFER"}, + {"glCreateShader", "type", "3.1", "GL_VERTEX_SHADER,GL_FRAGMENT_SHADER,GL_COMPUTE_SHADER"}, + {"glCreateShaderProgramv", "type", "3.1", "GL_VERTEX_SHADER,GL_FRAGMENT_SHADER,GL_COMPUTE_SHADER"}, // TODO + {"glDrawBuffers", "bufs", "3.0,3.1", "GL_NONE,GL_BACK," + GL_COLOR_ATTACHMENTi}, + {"glDrawElementsIndirect", "type", "3.1", "GL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT,GL_UNSIGNED_INT"}, + {"glEnable,glDisable", "cap", "1.1", "GL_ALPHA_TEST,GL_BLEND,GL_COLOR_LOGIC_OP,GL_COLOR_MATERIAL,GL_CULL_FACE,GL_DEPTH_TEST,GL_DITHER,GL_FOG,GL_LIGHTING,GL_LINE_SMOOTH,GL_MULTISAMPLE,GL_NORMALIZE,GL_POINT_SMOOTH,GL_POINT_SPRITE_OES,GL_POLYGON_OFFSET_FILL,GL_RESCALE_NORMAL,GL_SAMPLE_ALPHA_TO_COVERAGE,GL_SAMPLE_ALPHA_TO_ONE,GL_SAMPLE_COVERAGE,GL_SCISSOR_TEST,GL_STENCIL_TEST,GL_TEXTURE_2D," + GL_CLIP_PLANEi + "," + GL_LIGHTi}, + {"glEnable,glDisable", "cap", "2.0", "GL_BLEND,GL_CULL_FACE,GL_DEPTH_TEST,GL_DITHER,GL_POLYGON_OFFSET_FILL,GL_SAMPLE_ALPHA_TO_COVERAGE,GL_SAMPLE_COVERAGE,GL_SCISSOR_TEST,GL_STENCIL_TEST"}, + {"glEnable,glDisable", "cap", "3.0", "GL_BLEND,GL_CULL_FACE,GL_DEPTH_TEST,GL_DITHER,GL_POLYGON_OFFSET_FILL,GL_PRIMITIVE_RESTART_FIXED_INDEX,GL_RASTERIZER_DISCARD,GL_SAMPLE_ALPHA_TO_COVERAGE,GL_SAMPLE_COVERAGE,GL_SCISSOR_TEST,GL_STENCIL_TEST"}, + {"glEnable,glDisable", "cap", "3.1", "GL_BLEND,GL_CULL_FACE,GL_DEPTH_TEST,GL_DITHER,GL_POLYGON_OFFSET_FILL,GL_PRIMITIVE_RESTART_FIXED_INDEX,GL_RASTERIZER_DISCARD,GL_SAMPLE_ALPHA_TO_COVERAGE,GL_SAMPLE_COVERAGE,GL_SAMPLE_MASK,GL_SCISSOR_TEST,GL_STENCIL_TEST"}, + {"glFramebufferParameteri", "pname", "3.1", "GL_FRAMEBUFFER_DEFAULT_WIDTH,GL_FRAMEBUFFER_DEFAULT_HEIGHT,GL_FRAMEBUFFER_DEFAULT_SAMPLES,GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS"}, + {"glFramebufferParameteri", "target", "3.1", "GL_READ_FRAMEBUFFER,GL_DRAW_FRAMEBUFFER,GL_FRAMEBUFFER"}, + {"glFramebufferRenderbuffer", "attachment", "3.0,3.1", "GL_DEPTH_ATTACHMENT,GL_STENCIL_ATTACHMENT,GL_DEPTH_STENCIL_ATTACHMENT," + GL_COLOR_ATTACHMENTi}, + {"glFramebufferRenderbuffer", "renderbuffertarget", "3.0,3.1", "GL_RENDERBUFFER"}, + {"glFramebufferRenderbuffer", "target", "3.0,3.1", "GL_DRAW_FRAMEBUFFER,GL_READ_FRAMEBUFFER,GL_FRAMEBUFFER"}, + {"glFramebufferTexture2D", "attachment", "3.0,3.1", "GL_DEPTH_ATTACHMENT,GL_STENCIL_ATTACHMENT,GL_DEPTH_STENCIL_ATTACHMENT," + GL_COLOR_ATTACHMENTi}, + {"glFramebufferTexture2D", "target", "3.0,3.1", "GL_DRAW_FRAMEBUFFER,GL_READ_FRAMEBUFFER,GL_FRAMEBUFFER"}, + {"glFramebufferTexture2D", "textarget", "3.0", "GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z,GL_TEXTURE_CUBE_MAP_NEGATIVE_Z"}, + {"glFramebufferTexture2D", "textarget", "3.1", "GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z,GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,GL_TEXTURE_2D_MULTISAMPLE"}, + {"glFramebufferTextureLayer", "attachment", "3.0,3.1", "GL_DEPTH_ATTACHMENT,GL_STENCIL_ATTACHMENT,GL_DEPTH_STENCIL_ATTACHMENT," + GL_COLOR_ATTACHMENTi}, + {"glFramebufferTextureLayer", "target", "3.0,3.1", "GL_DRAW_FRAMEBUFFER,GL_READ_FRAMEBUFFER,GL_FRAMEBUFFER"}, + {"glGetActiveAttrib", "type", "2.0", "GL_FLOAT,GL_FLOAT_VEC2,GL_FLOAT_VEC3,GL_FLOAT_VEC4,GL_FLOAT_MAT2,GL_FLOAT_MAT3,GL_FLOAT_MAT4"}, + {"glGetActiveAttrib,glGetTransformFeedbackVarying", "type", "3.0,3.1", "GL_FLOAT,GL_FLOAT_VEC2,GL_FLOAT_VEC3,GL_FLOAT_VEC4,GL_FLOAT_MAT2,GL_FLOAT_MAT3,GL_FLOAT_MAT4,GL_FLOAT_MAT2x3,GL_FLOAT_MAT2x4,GL_FLOAT_MAT3x2,GL_FLOAT_MAT3x4,GL_FLOAT_MAT4x2,GL_FLOAT_MAT4x3,GL_INT,GL_INT_VEC2,GL_INT_VEC3,GL_INT_VEC4,GL_UNSIGNED_INT,GL_UNSIGNED_INT_VEC2,GL_UNSIGNED_INT_VEC3,GL_UNSIGNED_INT_VEC4"}, + {"glGetActiveUniform", "type", "2.0", "GL_FLOAT,GL_FLOAT_VEC2,GL_FLOAT_VEC3,GL_FLOAT_VEC4,GL_INT,GL_INT_VEC2,GL_INT_VEC3,GL_INT_VEC4,GL_BOOL,GL_BOOL_VEC2,GL_BOOL_VEC3,GL_BOOL_VEC4,GL_FLOAT_MAT2,GL_FLOAT_MAT3,GL_FLOAT_MAT4,GL_SAMPLER_2D,GL_SAMPLER_CUBE"}, + {"glGetActiveUniform", "type", "3.0,3.1", "GL_FLOAT,GL_FLOAT_VEC2,GL_FLOAT_VEC3,GL_FLOAT_VEC4,GL_INT,GL_INT_VEC2,GL_INT_VEC3,GL_INT_VEC4,GL_UNSIGNED_INT,GL_UNSIGNED_INT_VEC2,GL_UNSIGNED_INT_VEC3,GL_UNSIGNED_INT_VEC4,GL_BOOL,GL_BOOL_VEC2,GL_BOOL_VEC3,GL_BOOL_VEC4,GL_FLOAT_MAT2,GL_FLOAT_MAT3,GL_FLOAT_MAT4,GL_FLOAT_MAT2x3,GL_FLOAT_MAT2x4,GL_FLOAT_MAT3x2,GL_FLOAT_MAT3x4,GL_FLOAT_MAT4x2,GL_FLOAT_MAT4x3,GL_SAMPLER_2D,GL_SAMPLER_3D,GL_SAMPLER_CUBE,GL_SAMPLER_2D_SHADOW,GL_SAMPLER_2D_ARRAY,GL_SAMPLER_2D_ARRAY_SHADOW,GL_SAMPLER_CUBE_SHADOW,GL_INT_SAMPLER_2D,GL_INT_SAMPLER_3D,GL_INT_SAMPLER_CUBE,GL_INT_SAMPLER_2D_ARRAY,GL_UNSIGNED_INT_SAMPLER_2D,GL_UNSIGNED_INT_SAMPLER_3D,GL_UNSIGNED_INT_SAMPLER_CUBE,GL_UNSIGNED_INT_SAMPLER_2D_ARRAY"}, + {"glGetActiveUniformBlockiv", "pname", "3.0,3.1", "GL_UNIFORM_BLOCK_BINDING,GL_UNIFORM_BLOCK_DATA_SIZE,GL_UNIFORM_BLOCK_NAME_LENGTH,GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS,GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES,GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER,GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER"}, + {"glGetActiveUniformsiv", "pname", "3.0,3.1", "GL_UNIFORM_TYPE,GL_UNIFORM_SIZE,GL_UNIFORM_NAME_LENGTH,GL_UNIFORM_BLOCK_INDEX,GL_UNIFORM_OFFSET,GL_UNIFORM_ARRAY_STRIDE,GL_UNIFORM_MATRIX_STRIDE,GL_UNIFORM_IS_ROW_MAJOR"}, + {"glGetBooleanv,glGetBooleani_v,glGetFloatv,glGetInteger64i_v,glGetInteger64v,glGetIntegeri_v,glGetIntegerv", "pname,target", "3.0", "GL_ACTIVE_TEXTURE,GL_ALIASED_LINE_WIDTH_RANGE,GL_ALIASED_POINT_SIZE_RANGE,GL_ALPHA_BITS,GL_ARRAY_BUFFER_BINDING,GL_BLEND,GL_BLEND_COLOR,GL_BLEND_DST_ALPHA,GL_BLEND_DST_RGB,GL_BLEND_EQUATION_ALPHA,GL_BLEND_EQUATION_RGB,GL_BLEND_SRC_ALPHA,GL_BLEND_SRC_RGB,GL_BLUE_BITS,GL_COLOR_CLEAR_VALUE,GL_COLOR_WRITEMASK,GL_COMPRESSED_TEXTURE_FORMATS,GL_COPY_READ_BUFFER_BINDING,GL_COPY_WRITE_BUFFER_BINDING,GL_CULL_FACE,GL_CULL_FACE_MODE,GL_CURRENT_PROGRAM,GL_DEPTH_BITS,GL_DEPTH_CLEAR_VALUE,GL_DEPTH_FUNC,GL_DEPTH_RANGE,GL_DEPTH_TEST,GL_DEPTH_WRITEMASK,GL_DITHER,GL_DRAW_BUFFER,GL_DRAW_FRAMEBUFFER_BINDING,GL_ELEMENT_ARRAY_BUFFER_BINDING,GL_FRAGMENT_SHADER_DERIVATIVE_HINT,GL_FRONT_FACE,GL_GENERATE_MIPMAP_HINT,GL_GREEN_BITS,GL_IMPLEMENTATION_COLOR_READ_FORMAT,GL_IMPLEMENTATION_COLOR_READ_TYPE,GL_LINE_WIDTH,GL_MAJOR_VERSION,GL_MAX_3D_TEXTURE_SIZE,GL_MAX_ARRAY_TEXTURE_LAYERS,GL_MAX_COLOR_ATTACHMENTS,GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS,GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,GL_MAX_COMBINED_UNIFORM_BLOCKS,GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS,GL_MAX_CUBE_MAP_TEXTURE_SIZE,GL_MAX_DRAW_BUFFERS,GL_MAX_ELEMENT_INDEX,GL_MAX_ELEMENTS_INDICES,GL_MAX_ELEMENTS_VERTICES,GL_MAX_FRAGMENT_INPUT_COMPONENTS,GL_MAX_FRAGMENT_UNIFORM_BLOCKS,GL_MAX_FRAGMENT_UNIFORM_COMPONENTS,GL_MAX_FRAGMENT_UNIFORM_VECTORS,GL_MAX_PROGRAM_TEXEL_OFFSET,GL_MAX_RENDERBUFFER_SIZE,GL_MAX_SAMPLES,GL_MAX_SERVER_WAIT_TIMEOUT,GL_MAX_TEXTURE_IMAGE_UNITS,GL_MAX_TEXTURE_LOD_BIAS,GL_MAX_TEXTURE_SIZE,GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS,GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS,GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS,GL_MAX_UNIFORM_BLOCK_SIZE,GL_MAX_UNIFORM_BUFFER_BINDINGS,GL_MAX_VARYING_COMPONENTS,GL_MAX_VARYING_VECTORS,GL_MAX_VERTEX_ATTRIBS,GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS,GL_MAX_VERTEX_OUTPUT_COMPONENTS,GL_MAX_VERTEX_UNIFORM_BLOCKS,GL_MAX_VERTEX_UNIFORM_COMPONENTS,GL_MAX_VERTEX_UNIFORM_VECTORS,GL_MAX_VIEWPORT_DIMS,GL_MIN_PROGRAM_TEXEL_OFFSET,GL_MINOR_VERSION,GL_NUM_COMPRESSED_TEXTURE_FORMATS,GL_NUM_EXTENSIONS,GL_NUM_PROGRAM_BINARY_FORMATS,GL_NUM_SHADER_BINARY_FORMATS,GL_PACK_ALIGNMENT,GL_PACK_ROW_LENGTH,GL_PACK_SKIP_PIXELS,GL_PACK_SKIP_ROWS,GL_PIXEL_PACK_BUFFER_BINDING,GL_PIXEL_UNPACK_BUFFER_BINDING,GL_POLYGON_OFFSET_FACTOR,GL_POLYGON_OFFSET_FILL,GL_POLYGON_OFFSET_UNITS,GL_PRIMITIVE_RESTART_FIXED_INDEX,GL_PROGRAM_BINARY_FORMATS,GL_RASTERIZER_DISCARD,GL_READ_BUFFER,GL_READ_FRAMEBUFFER_BINDING,GL_RED_BITS,GL_RENDERBUFFER_BINDING,GL_SAMPLE_ALPHA_TO_COVERAGE,GL_SAMPLE_BUFFERS,GL_SAMPLE_COVERAGE,GL_SAMPLE_COVERAGE_INVERT,GL_SAMPLE_COVERAGE_VALUE,GL_SAMPLER_BINDING,GL_SAMPLES,GL_SCISSOR_BOX,GL_SCISSOR_TEST,GL_SHADER_BINARY_FORMATS,GL_SHADER_COMPILER,GL_STENCIL_BACK_FAIL,GL_STENCIL_BACK_FUNC,GL_STENCIL_BACK_PASS_DEPTH_FAIL,GL_STENCIL_BACK_PASS_DEPTH_PASS,GL_STENCIL_BACK_REF,GL_STENCIL_BACK_VALUE_MASK,GL_STENCIL_BACK_WRITEMASK,GL_STENCIL_BITS,GL_STENCIL_CLEAR_VALUE,GL_STENCIL_FAIL,GL_STENCIL_FUNC,GL_STENCIL_PASS_DEPTH_FAIL,GL_STENCIL_PASS_DEPTH_PASS,GL_STENCIL_REF,GL_STENCIL_TEST,GL_STENCIL_VALUE_MASK,GL_STENCIL_WRITEMASK,GL_SUBPIXEL_BITS,GL_TEXTURE_BINDING_2D,GL_TEXTURE_BINDING_2D_ARRAY,GL_TEXTURE_BINDING_3D,GL_TEXTURE_BINDING_CUBE_MAP,GL_TRANSFORM_FEEDBACK_BINDING,GL_TRANSFORM_FEEDBACK_ACTIVE,GL_TRANSFORM_FEEDBACK_BUFFER_BINDING,GL_TRANSFORM_FEEDBACK_PAUSED,GL_TRANSFORM_FEEDBACK_BUFFER_SIZE,GL_TRANSFORM_FEEDBACK_BUFFER_START,GL_UNIFORM_BUFFER_BINDING,GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT,GL_UNIFORM_BUFFER_SIZE,GL_UNIFORM_BUFFER_START,GL_UNPACK_ALIGNMENT,GL_UNPACK_IMAGE_HEIGHT,GL_UNPACK_ROW_LENGTH,GL_UNPACK_SKIP_IMAGES,GL_UNPACK_SKIP_PIXELS,GL_UNPACK_SKIP_ROWS,GL_VERTEX_ARRAY_BINDING,GL_VIEWPORT"}, + {"glGetBooleanv,glGetBooleani_v,glGetFloatv,glGetInteger64i_v,glGetInteger64v,glGetIntegeri_v,glGetIntegerv", "pname,target", "3.1", "GL_ACTIVE_TEXTURE,GL_ALIASED_LINE_WIDTH_RANGE,GL_ALIASED_POINT_SIZE_RANGE,GL_ALPHA_BITS,GL_ARRAY_BUFFER_BINDING,GL_BLEND,GL_BLEND_COLOR,GL_BLEND_DST_ALPHA,GL_BLEND_DST_RGB,GL_BLEND_EQUATION_ALPHA,GL_BLEND_EQUATION_RGB,GL_BLEND_SRC_ALPHA,GL_BLEND_SRC_RGB,GL_BLUE_BITS,GL_COLOR_CLEAR_VALUE,GL_COLOR_WRITEMASK,GL_COMPRESSED_TEXTURE_FORMATS,GL_COPY_READ_BUFFER_BINDING,GL_COPY_WRITE_BUFFER_BINDING,GL_CULL_FACE,GL_CULL_FACE_MODE,GL_CURRENT_PROGRAM,GL_DEPTH_BITS,GL_DEPTH_CLEAR_VALUE,GL_DEPTH_FUNC,GL_DEPTH_RANGE,GL_DEPTH_TEST,GL_DEPTH_WRITEMASK,GL_DISPATCH_INDIRECT_BUFFER_BINDING,GL_DITHER,GL_DRAW_BUFFER,GL_DRAW_FRAMEBUFFER_BINDING,GL_ELEMENT_ARRAY_BUFFER_BINDING,GL_FRAGMENT_SHADER_DERIVATIVE_HINT,GL_FRONT_FACE,GL_GENERATE_MIPMAP_HINT,GL_GREEN_BITS,GL_IMAGE_BINDING_LAYERED,GL_IMPLEMENTATION_COLOR_READ_FORMAT,GL_IMPLEMENTATION_COLOR_READ_TYPE,GL_LINE_WIDTH,GL_MAJOR_VERSION,GL_MAX_3D_TEXTURE_SIZE,GL_MAX_ARRAY_TEXTURE_LAYERS,GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS,GL_MAX_COLOR_ATTACHMENTS,GL_MAX_COLOR_TEXTURE_SAMPLES,GL_MAX_COMBINED_ATOMIC_COUNTERS,GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS,GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS,GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS,GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,GL_MAX_COMBINED_UNIFORM_BLOCKS,GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS,GL_MAX_COMPUTE_ATOMIC_COUNTERS,GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS,GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS,GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS,GL_MAX_COMPUTE_UNIFORM_BLOCKS,GL_MAX_COMPUTE_UNIFORM_COMPONENTS,GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS,GL_MAX_COMPUTE_WORK_GROUP_COUNT,GL_MAX_COMPUTE_WORK_GROUP_SIZE,GL_MAX_CUBE_MAP_TEXTURE_SIZE,GL_MAX_DRAW_BUFFERS,GL_MAX_ELEMENT_INDEX,GL_MAX_ELEMENTS_INDICES,GL_MAX_ELEMENTS_VERTICES,GL_MAX_FRAGMENT_ATOMIC_COUNTERS,GL_MAX_FRAGMENT_INPUT_COMPONENTS,GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS,GL_MAX_FRAGMENT_UNIFORM_BLOCKS,GL_MAX_FRAGMENT_UNIFORM_COMPONENTS,GL_MAX_FRAGMENT_UNIFORM_VECTORS,GL_MAX_FRAMEBUFFER_HEIGHT,GL_MAX_FRAMEBUFFER_SAMPLES,GL_MAX_FRAMEBUFFER_WIDTH,GL_MAX_INTEGER_SAMPLES,GL_MAX_PROGRAM_TEXEL_OFFSET,GL_MAX_RENDERBUFFER_SIZE,GL_MAX_SAMPLE_MASK_WORDS,GL_MAX_SAMPLES,GL_MAX_SERVER_WAIT_TIMEOUT,GL_MAX_SHADER_STORAGE_BLOCK_SIZE,GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS,GL_MAX_TEXTURE_IMAGE_UNITS,GL_MAX_TEXTURE_LOD_BIAS,GL_MAX_TEXTURE_SIZE,GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS,GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS,GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS,GL_MAX_UNIFORM_BLOCK_SIZE,GL_MAX_UNIFORM_BUFFER_BINDINGS,GL_MAX_UNIFORM_LOCATIONS,GL_MAX_VARYING_COMPONENTS,GL_MAX_VARYING_VECTORS,GL_MAX_VERTEX_ATOMIC_COUNTERS,GL_MAX_VERTEX_ATTRIB_BINDINGS,GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET,GL_MAX_VERTEX_ATTRIBS,GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS,GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS,GL_MAX_VERTEX_OUTPUT_COMPONENTS,GL_MAX_VERTEX_UNIFORM_BLOCKS,GL_MAX_VERTEX_UNIFORM_COMPONENTS,GL_MAX_VERTEX_UNIFORM_VECTORS,GL_MAX_VIEWPORT_DIMS,GL_MIN_PROGRAM_TEXEL_OFFSET,GL_MINOR_VERSION,GL_NUM_COMPRESSED_TEXTURE_FORMATS,GL_NUM_EXTENSIONS,GL_NUM_PROGRAM_BINARY_FORMATS,GL_NUM_SHADER_BINARY_FORMATS,GL_PACK_ALIGNMENT,GL_PACK_ROW_LENGTH,GL_PACK_SKIP_PIXELS,GL_PACK_SKIP_ROWS,GL_PIXEL_PACK_BUFFER_BINDING,GL_PIXEL_UNPACK_BUFFER_BINDING,GL_POLYGON_OFFSET_FACTOR,GL_POLYGON_OFFSET_FILL,GL_POLYGON_OFFSET_UNITS,GL_PRIMITIVE_RESTART_FIXED_INDEX,GL_PROGRAM_BINARY_FORMATS,GL_PROGRAM_PIPELINE_BINDING,GL_RASTERIZER_DISCARD,GL_READ_BUFFER,GL_READ_FRAMEBUFFER_BINDING,GL_RED_BITS,GL_RENDERBUFFER_BINDING,GL_SAMPLE_ALPHA_TO_COVERAGE,GL_SAMPLE_BUFFERS,GL_SAMPLE_COVERAGE,GL_SAMPLE_COVERAGE_INVERT,GL_SAMPLE_COVERAGE_VALUE,GL_SAMPLER_BINDING,GL_SAMPLES,GL_SCISSOR_BOX,GL_SCISSOR_TEST,GL_SHADER_BINARY_FORMATS,GL_SHADER_COMPILER,GL_SHADER_STORAGE_BUFFER_BINDING,GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT,GL_SHADER_STORAGE_BUFFER_SIZE,GL_SHADER_STORAGE_BUFFER_START,GL_STENCIL_BACK_FAIL,GL_STENCIL_BACK_FUNC,GL_STENCIL_BACK_PASS_DEPTH_FAIL,GL_STENCIL_BACK_PASS_DEPTH_PASS,GL_STENCIL_BACK_REF,GL_STENCIL_BACK_VALUE_MASK,GL_STENCIL_BACK_WRITEMASK,GL_STENCIL_BITS,GL_STENCIL_CLEAR_VALUE,GL_STENCIL_FAIL,GL_STENCIL_FUNC,GL_STENCIL_PASS_DEPTH_FAIL,GL_STENCIL_PASS_DEPTH_PASS,GL_STENCIL_REF,GL_STENCIL_TEST,GL_STENCIL_VALUE_MASK,GL_STENCIL_WRITEMASK,GL_SUBPIXEL_BITS,GL_TEXTURE_BINDING_2D,GL_TEXTURE_BINDING_2D_ARRAY,GL_TEXTURE_BINDING_3D,GL_TEXTURE_BINDING_CUBE_MAP,GL_TEXTURE_BINDING_2D_MULTISAMPLE,GL_TRANSFORM_FEEDBACK_BINDING,GL_TRANSFORM_FEEDBACK_ACTIVE,GL_TRANSFORM_FEEDBACK_BUFFER_BINDING,GL_TRANSFORM_FEEDBACK_PAUSED,GL_TRANSFORM_FEEDBACK_BUFFER_SIZE,GL_TRANSFORM_FEEDBACK_BUFFER_START,GL_UNIFORM_BUFFER_BINDING,GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT,GL_UNIFORM_BUFFER_SIZE,GL_UNIFORM_BUFFER_START,GL_UNPACK_ALIGNMENT,GL_UNPACK_IMAGE_HEIGHT,GL_UNPACK_ROW_LENGTH,GL_UNPACK_SKIP_IMAGES,GL_UNPACK_SKIP_PIXELS,GL_UNPACK_SKIP_ROWS,GL_VERTEX_ARRAY_BINDING,GL_VERTEX_BINDING_DIVISOR,GL_VERTEX_BINDING_OFFSET,GL_VERTEX_BINDING_STRIDE,GL_VIEWPORT"}, + {"glGetBooleanv,glGetFloatv,glGetIntegerv", "pname", "2.0", "GL_ACTIVE_TEXTURE,GL_ALIASED_LINE_WIDTH_RANGE,GL_ALIASED_POINT_SIZE_RANGE,GL_ALPHA_BITS,GL_ARRAY_BUFFER_BINDING,GL_BLEND,GL_BLEND_COLOR,GL_BLEND_DST_ALPHA,GL_BLEND_DST_RGB,GL_BLEND_EQUATION_ALPHA,GL_BLEND_EQUATION_RGB,GL_BLEND_SRC_ALPHA,GL_BLEND_SRC_RGB,GL_BLUE_BITS,GL_COLOR_CLEAR_VALUE,GL_COLOR_WRITEMASK,GL_COMPRESSED_TEXTURE_FORMATS,GL_CULL_FACE,GL_CULL_FACE_MODE,GL_CURRENT_PROGRAM,GL_DEPTH_BITS,GL_DEPTH_CLEAR_VALUE,GL_DEPTH_FUNC,GL_DEPTH_RANGE,GL_DEPTH_TEST,GL_DEPTH_WRITEMASK,GL_DITHER,GL_ELEMENT_ARRAY_BUFFER_BINDING,GL_FRAMEBUFFER_BINDING,GL_FRONT_FACE,GL_GENERATE_MIPMAP_HINT,GL_GREEN_BITS,GL_IMPLEMENTATION_COLOR_READ_FORMAT,GL_IMPLEMENTATION_COLOR_READ_TYPE,GL_LINE_WIDTH,GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,GL_MAX_CUBE_MAP_TEXTURE_SIZE,GL_MAX_FRAGMENT_UNIFORM_VECTORS,GL_MAX_RENDERBUFFER_SIZE,GL_MAX_TEXTURE_IMAGE_UNITS,GL_MAX_TEXTURE_SIZE,GL_MAX_VARYING_VECTORS,GL_MAX_VERTEX_ATTRIBS,GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS,GL_MAX_VERTEX_UNIFORM_VECTORS,GL_MAX_VIEWPORT_DIMS,GL_NUM_COMPRESSED_TEXTURE_FORMATS,GL_NUM_SHADER_BINARY_FORMATS,GL_PACK_ALIGNMENT,GL_POLYGON_OFFSET_FACTOR,GL_POLYGON_OFFSET_FILL,GL_POLYGON_OFFSET_UNITS,GL_RED_BITS,GL_RENDERBUFFER_BINDING,GL_SAMPLE_ALPHA_TO_COVERAGE,GL_SAMPLE_BUFFERS,GL_SAMPLE_COVERAGE,GL_SAMPLE_COVERAGE_INVERT,GL_SAMPLE_COVERAGE_VALUE,GL_SAMPLES,GL_SCISSOR_BOX,GL_SCISSOR_TEST,GL_SHADER_BINARY_FORMATS,GL_SHADER_COMPILER,GL_STENCIL_BACK_FAIL,GL_STENCIL_BACK_FUNC,GL_STENCIL_BACK_PASS_DEPTH_FAIL,GL_STENCIL_BACK_PASS_DEPTH_PASS,GL_STENCIL_BACK_REF,GL_STENCIL_BACK_VALUE_MASK,GL_STENCIL_BACK_WRITEMASK,GL_STENCIL_BITS,GL_STENCIL_CLEAR_VALUE,GL_STENCIL_FAIL,GL_STENCIL_FUNC,GL_STENCIL_PASS_DEPTH_FAIL,GL_STENCIL_PASS_DEPTH_PASS,GL_STENCIL_REF,GL_STENCIL_TEST,GL_STENCIL_VALUE_MASK,GL_STENCIL_WRITEMASK,GL_SUBPIXEL_BITS,GL_TEXTURE_BINDING_2D,GL_TEXTURE_BINDING_CUBE_MAP,GL_UNPACK_ALIGNMENT,GL_VIEWPORT"}, + {"glGetBooleanv,glGetFloatv,glGetIntegerv,glGetFixedv", "pname", "1.1", "GL_ACTIVE_TEXTURE,GL_ALIASED_POINT_SIZE_RANGE,GL_ALIASED_LINE_WIDTH_RANGE,GL_ALPHA_BITS,GL_ALPHA_TEST,GL_ALPHA_TEST_FUNC,GL_ALPHA_TEST_REF,GL_ARRAY_BUFFER_BINDING,GL_BLEND,GL_BLEND_DST,GL_BLEND_SRC,GL_BLUE_BITS,GL_CLIENT_ACTIVE_TEXTURE,GL_COLOR_ARRAY,GL_COLOR_ARRAY_BUFFER_BINDING,GL_COLOR_ARRAY_SIZE,GL_COLOR_ARRAY_STRIDE,GL_COLOR_ARRAY_TYPE,GL_COLOR_CLEAR_VALUE,GL_COLOR_LOGIC_OP,GL_COLOR_MATERIAL,GL_COLOR_WRITEMASK,GL_COMPRESSED_TEXTURE_FORMATS,GL_CULL_FACE,GL_CULL_FACE_MODE,GL_CURRENT_COLOR,GL_CURRENT_NORMAL,GL_CURRENT_TEXTURE_COORDS,GL_DEPTH_BITS,GL_DEPTH_CLEAR_VALUE,GL_DEPTH_FUNC,GL_DEPTH_RANGE,GL_DEPTH_TEST,GL_DEPTH_WRITEMASK,GL_ELEMENT_ARRAY_BUFFER_BINDING,GL_FOG,GL_FOG_COLOR,GL_FOG_DENSITY,GL_FOG_END,GL_FOG_HINT,GL_FOG_MODE,GL_FOG_START,GL_FRONT_FACE,GL_GREEN_BITS,GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES,GL_IMPLEMENTATION_COLOR_READ_TYPE_OES,GL_LIGHT_MODEL_AMBIENT,GL_LIGHT_MODEL_TWO_SIDE,GL_LIGHTING,GL_LINE_SMOOTH,GL_LINE_SMOOTH_HINT,GL_LINE_WIDTH,GL_LOGIC_OP_MODE,GL_MATRIX_MODE,GL_MAX_CLIP_PLANES,GL_MAX_LIGHTS,GL_MAX_MODELVIEW_STACK_DEPTH,GL_MAX_PROJECTION_STACK_DEPTH,GL_MAX_TEXTURE_SIZE,GL_MAX_TEXTURE_STACK_DEPTH,GL_MAX_TEXTURE_UNITS,GL_MAX_VIEWPORT_DIMS,GL_MODELVIEW_MATRIX,GL_MODELVIEW_STACK_DEPTH,GL_MULTISAMPLE,GL_NORMAL_ARRAY,GL_NORMAL_ARRAY_BUFFER_BINDING,GL_NORMAL_ARRAY_STRIDE,GL_NORMAL_ARRAY_TYPE,GL_NORMALIZE,GL_NUM_COMPRESSED_TEXTURE_FORMATS,GL_PACK_ALIGNMENT,GL_PERSPECTIVE_CORRECTION_HINT,GL_POINT_DISTANCE_ATTENUATION,GL_POINT_FADE_THRESHOLD_SIZE,GL_POINT_SIZE,GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES,GL_POINT_SIZE_ARRAY_OES,GL_POINT_SIZE_ARRAY_STRIDE_OES,GL_POINT_SIZE_ARRAY_TYPE_OES,GL_POINT_SIZE_MAX,GL_POINT_SIZE_MIN,GL_POINT_SMOOTH,GL_POINT_SMOOTH_HINT,GL_POINT_SPRITE_OES,GL_POLYGON_OFFSET_FACTOR,GL_POLYGON_OFFSET_FILL,GL_POLYGON_OFFSET_UNITS,GL_PROJECTION_MATRIX,GL_PROJECTION_STACK_DEPTH,GL_RED_BITS,GL_RESCALE_NORMAL,GL_SAMPLE_ALPHA_TO_COVERAGE,GL_SAMPLE_ALPHA_TO_ONE,GL_SAMPLE_BUFFERS,GL_SAMPLE_COVERAGE,GL_SAMPLE_COVERAGE_INVERT,GL_SAMPLE_COVERAGE_VALUE,GL_SAMPLES,GL_SCISSOR_BOX,GL_SCISSOR_TEST,GL_SHADE_MODEL,GL_SMOOTH_LINE_WIDTH_RANGE,GL_SMOOTH_POINT_SIZE_RANGE,GL_STENCIL_BITS,GL_STENCIL_CLEAR_VALUE,GL_STENCIL_FAIL,GL_STENCIL_FUNC,GL_STENCIL_PASS_DEPTH_FAIL,GL_STENCIL_PASS_DEPTH_PASS,GL_STENCIL_REF,GL_STENCIL_TEST,GL_STENCIL_VALUE_MASK,GL_STENCIL_WRITEMASK,GL_SUBPIXEL_BITS,GL_TEXTURE_2D,GL_TEXTURE_BINDING_2D,GL_TEXTURE_COORD_ARRAY,GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING,GL_TEXTURE_COORD_ARRAY_SIZE,GL_TEXTURE_COORD_ARRAY_STRIDE,GL_TEXTURE_COORD_ARRAY_TYPE,GL_TEXTURE_MATRIX,GL_TEXTURE_STACK_DEPTH,GL_UNPACK_ALIGNMENT,GL_VIEWPORT,GL_VERTEX_ARRAY,GL_VERTEX_ARRAY_BUFFER_BINDING,GL_VERTEX_ARRAY_SIZE,GL_VERTEX_ARRAY_STRIDE,GL_VERTEX_ARRAY_TYPE," + GL_CLIP_PLANEi + "," + GL_LIGHTi}, + {"glGetClipPlanef,glGetClipPlanex", "plane", "1.1", GL_CLIP_PLANEi}, + {"glGetError", "result", "1.1", "GL_NO_ERROR,GL_INVALID_ENUM,GL_INVALID_VALUE,GL_INVALID_OPERATION,GL_STACK_OVERFLOW,GL_STACK_UNDERFLOW,GL_OUT_OF_MEMORY"}, + {"glGetError", "result", "2.0,3.0,3.1", "GL_NO_ERROR,GL_INVALID_ENUM,GL_INVALID_VALUE,GL_INVALID_OPERATION,GL_INVALID_FRAMEBUFFER_OPERATION,GL_OUT_OF_MEMORY"}, + {"glGetFramebufferAttachmentParameteriv", "attachment", "3.0,3.1", "GL_BACK,GL_DEPTH,GL_STENCIL,GL_DEPTH_ATTACHMENT,GL_STENCIL_ATTACHMENT,GL_DEPTH_STENCIL_ATTACHMENT," + GL_COLOR_ATTACHMENTi}, + {"glGetFramebufferAttachmentParameteriv", "pname", "3.0,3.1", "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE,GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE,GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE,GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE,GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE,GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE,GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE,GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING,GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL,GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE,GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER"}, + {"glGetFramebufferAttachmentParameteriv", "target", "3.0,3.1", "GL_DRAW_FRAMEBUFFER,GL_READ_FRAMEBUFFER,GL_FRAMEBUFFER"}, + {"glGetFramebufferParameteriv", "pname", "3.1", "GL_FRAMEBUFFER_DEFAULT_WIDTH,GL_FRAMEBUFFER_DEFAULT_HEIGHT,GL_FRAMEBUFFER_DEFAULT_SAMPLES,GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS"}, + {"glGetFramebufferParameteriv", "target", "3.1", "GL_READ_FRAMEBUFFER,GL_DRAW_FRAMEBUFFER,GL_FRAMEBUFFER"}, + {"glGetInternalformativ", "internalformat", "3.0,3.1", "GL_R8,GL_R8_SNORM,GL_R16F,GL_R32F,GL_R8UI,GL_R8I,GL_R16UI,GL_R16I,GL_R32UI,GL_R32I,GL_RG8,GL_RG8_SNORM,GL_RG16F,GL_RG32F,GL_RG8UI,GL_RG8I,GL_RG16UI,GL_RG16I,GL_RG32UI,GL_RG32I,GL_RGB8,GL_SRGB8,GL_RGB565,GL_RGB8_SNORM,GL_R11F_G11F_B10F,GL_RGB9_E5,GL_RGB16F,GL_RGB32F,GL_RGB8UI,GL_RGB8I,GL_RGB16UI,GL_RGB16I,GL_RGB32UI,GL_RGB32I,GL_RGBA8,GL_SRGB8_ALPHA8,GL_RGBA8_SNORM,GL_RGB5_A1,GL_RGBA4,GL_RGB10_A2,GL_RGBA16F,GL_RGBA32F,GL_RGBA8UI,GL_RGBA8I,GL_RGB10_A2UI,GL_RGBA16UI,GL_RGBA16I,GL_RGBA32I,GL_RGBA32UI,GL_DEPTH_COMPONENT16,GL_DEPTH_COMPONENT24,GL_DEPTH_COMPONENT32F,GL_DEPTH24_STENCIL8,GL_DEPTH32F_STENCIL8"}, + {"glGetInternalformativ", "pname", "3.0,3.1", "GL_NUM_SAMPLE_COUNTS,GL_SAMPLES"}, + {"glGetLightfv,glGetLightxv", "light", "1.1", GL_LIGHTi}, + {"glGetMaterialfv,glGetMaterialxv", "face", "1.1", "GL_FRONT,GL_BACK"}, + {"glGetProgramInterfaceiv", "pname", "3.1", "GL_ACTIVE_RESOURCES,GL_MAX_NAME_LENGTH,GL_MAX_NUM_ACTIVE_VARIABLES"}, + {"glGetProgramInterfaceiv", "programInterface", "3.1", "GL_UNIFORM,GL_UNIFORM_BLOCK,GL_ATOMIC_COUNTER_BUFFER,GL_PROGRAM_INPUT,GL_PROGRAM_OUTPUT,GL_TRANSFORM_FEEDBACK_VARYING,GL_BUFFER_VARIABLE,GL_SHADER_STORAGE_BLOCK,GL_TRANSFORM_FEEDBACK_BUFFER"}, + {"glGetProgramPipelineiv", "pname", "3.1", "GL_ACTIVE_PROGRAM,GL_VERTEX_SHADER,GL_FRAGMENT_SHADER,GL_COMPUTE_SHADER,GL_INFO_LOG_LENGTH,GL_VALIDATE_STATUS"}, + {"glGetProgramResourceIndex", "programInterface", "3.1", "GL_UNIFORM,GL_UNIFORM_BLOCK,GL_PROGRAM_INPUT,GL_PROGRAM_OUTPUT,GL_TRANSFORM_FEEDBACK_VARYING,GL_BUFFER_VARIABLE,GL_SHADER_STORAGE_BLOCK"}, + {"glGetProgramResourceLocation", "programInterface", "3.1", "GL_UNIFORM,GL_PROGRAM_INPUT,GL_PROGRAM_OUTPUT,GL_TRANSFORM_FEEDBACK_BUFFER"}, + {"glGetProgramResourceName", "programInterface", "3.1", "GL_UNIFORM,GL_UNIFORM_BLOCK,GL_PROGRAM_INPUT,GL_PROGRAM_OUTPUT,GL_TRANSFORM_FEEDBACK_VARYING,GL_BUFFER_VARIABLE,GL_SHADER_STORAGE_BLOCK"}, + {"glGetProgramResourceiv", "programInterface", "3.1", "GL_ATOMIC_COUNTER_BUFFER,GL_BUFFER_VARIABLE,GL_PROGRAM_INPUT,GL_PROGRAM_OUTPUT,GL_SHADER_STORAGE_BLOCK,GL_TRANSFORM_FEEDBACK_VARYING,GL_UNIFORM,GL_UNIFORM_BLOCK,GL_TRANSFORM_FEEDBACK_BUFFER"}, + {"glGetProgramResourceiv", "props", "3.1", "GL_NAME_LENGTH,GL_TYPE,GL_ARRAY_SIZE,GL_OFFSET,GL_BLOCK_INDEX,GL_ARRAY_STRIDE,GL_MATRIX_STRIDE,GL_IS_ROW_MAJOR,GL_ATOMIC_COUNTER_BUFFER_INDEX,GL_BUFFER_BINDING,GL_BUFFER_DATA_SIZE,GL_NUM_ACTIVE_VARIABLES,GL_ACTIVE_VARIABLES,GL_REFERENCED_BY_VERTEX_SHADER,GL_REFERENCED_BY_FRAGMENT_SHADER,GL_REFERENCED_BY_COMPUTE_SHADER,GL_TOP_LEVEL_ARRAY_SIZE,GL_TOP_LEVEL_ARRAY_STRIDE,GL_LOCATION,GL_LOCATION_INDEX,GL_LOCATION_COMPONENT"}, + {"glGetRenderbufferParameteriv", "pname", "3.0,3.1", "GL_RENDERBUFFER_WIDTH,GL_RENDERBUFFER_HEIGHT,GL_RENDERBUFFER_INTERNAL_FORMAT,GL_RENDERBUFFER_RED_SIZE,GL_RENDERBUFFER_GREEN_SIZE,GL_RENDERBUFFER_BLUE_SIZE,GL_RENDERBUFFER_ALPHA_SIZE,GL_RENDERBUFFER_DEPTH_SIZE,GL_RENDERBUFFER_STENCIL_SIZE,GL_RENDERBUFFER_SAMPLES"}, + {"glGetShaderPrecisionFormat", "precisiontype", "3.0,3.1", "GL_LOW_FLOAT,GL_MEDIUM_FLOAT,GL_HIGH_FLOAT,GL_LOW_INT,GL_MEDIUM_INT,GL_HIGH_INT"}, + {"glGetString", "name", "1.1", "GL_VENDOR,GL_RENDERER,GL_VERSION,GL_EXTENSIONS"}, + {"glGetString", "name", "2.0", "GL_VENDOR,GL_RENDERER,GL_VERSION,GL_SHADING_LANGUAGE_VERSION,GL_EXTENSIONS"}, + {"glGetString", "name", "3.0,3.1", "GL_EXTENSIONS,GL_RENDERER,GL_SHADING_LANGUAGE_VERSION,GL_VENDOR,GL_VERSION"}, + {"glGetStringi", "name", "3.0,3.1", "GL_EXTENSIONS"}, + {"glGetSynciv", "pname", "3.0,3.1", "GL_OBJECT_TYPE,GL_SYNC_STATUS,GL_SYNC_CONDITION,GL_SYNC_FLAGS"}, + {"glGetTexLevelParameterfv,glGetTexLevelParameteriv", "target", "3.1", "GL_TEXTURE_2D,GL_TEXTURE_3D,GL_TEXTURE_2D_ARRAY,GL_TEXTURE_2D_MULTISAMPLE,GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y,GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z,GL_TEXTURE_CUBE_MAP_NEGATIVE_Z"}, + {"glGetTexParameterfv,glGetTexParameteriv,glGetTexParameterxv", "target", "1.1", "GL_TEXTURE_2D"}, + {"glInvalidateFramebuffer,glInvalidateSubFramebuffer", "attachments", "3.0,3.1", "GL_DEPTH_ATTACHMENT,GL_STENCIL_ATTACHMENT,GL_DEPTH_STENCIL_ATTACHMENT," + GL_COLOR_ATTACHMENTi}, + {"glIsEnabled", "cap", "1.1", "GL_ALPHA_TEST,GL_BLEND,GL_COLOR_ARRAY,GL_COLOR_LOGIC_OP,GL_COLOR_MATERIAL,GL_CULL_FACE,GL_DEPTH_TEST,GL_DITHER,GL_FOG,GL_LIGHTING,GL_LINE_SMOOTH,GL_MULTISAMPLE,GL_NORMAL_ARRAY,GL_NORMALIZE,GL_POINT_SIZE_ARRAY_OES,GL_POINT_SMOOTH,GL_POINT_SPRITE_OES,GL_POLYGON_OFFSET_FILL,GL_RESCALE_NORMAL,GL_SAMPLE_ALPHA_TO_COVERAGE,GL_SAMPLE_ALPHA_TO_ONE,GL_SAMPLE_COVERAGE,GL_SCISSOR_TEST,GL_STENCIL_TEST,GL_TEXTURE_2D,GL_TEXTURE_COORD_ARRAY,GL_VERTEX_ARRAY," + GL_CLIP_PLANEi + "," + GL_LIGHTi}, + {"glIsEnabled", "cap", "2.0", "GL_BLEND,GL_CULL_FACE,GL_DEPTH_TEST,GL_DITHER,GL_POLYGON_OFFSET_FILL,GL_SAMPLE_ALPHA_TO_COVERAGE,GL_SAMPLE_COVERAGE,GL_SCISSOR_TEST,GL_STENCIL_TEST"}, + {"glIsEnabled", "cap", "3.0", "GL_BLEND,GL_CULL_FACE,GL_DEPTH_TEST,GL_DITHER,GL_POLYGON_OFFSET_FILL,GL_PRIMITIVE_RESTART_FIXED_INDEX,GL_RASTERIZER_DISCARD,GL_SAMPLE_ALPHA_TO_COVERAGE,GL_SAMPLE_COVERAGE,GL_SCISSOR_TEST,GL_STENCIL_TEST"}, + {"glIsEnabled", "cap", "3.1", "GL_BLEND,GL_CULL_FACE,GL_DEPTH_TEST,GL_DITHER,GL_POLYGON_OFFSET_FILL,GL_PRIMITIVE_RESTART_FIXED_INDEX,GL_RASTERIZER_DISCARD,GL_SAMPLE_ALPHA_TO_COVERAGE,GL_SAMPLE_COVERAGE,GL_SCISSOR_TEST,GL_STENCIL_TEST"}, + {"glLightf,glLightfv,glLightx,glLightxv", "light", "1.1", GL_LIGHTi}, + {"glMapBufferRange", "access", "3.0,3.1", "GL_MAP_READ_BIT,GL_MAP_WRITE_BIT,GL_MAP_INVALIDATE_RANGE_BIT,GL_MAP_INVALIDATE_BUFFER_BIT,GL_MAP_FLUSH_EXPLICIT_BIT,GL_MAP_UNSYNCHRONIZED_BIT"}, + {"glMapBufferRange,glUnmapBuffer", "target", "3.0", "GL_ARRAY_BUFFER,GL_COPY_READ_BUFFER,GL_COPY_WRITE_BUFFER,GL_ELEMENT_ARRAY_BUFFER,GL_PIXEL_PACK_BUFFER,GL_PIXEL_UNPACK_BUFFER,GL_TRANSFORM_FEEDBACK_BUFFER,GL_UNIFORM_BUFFER"}, + {"glMapBufferRange,glUnmapBuffer", "target", "3.1", "GL_ARRAY_BUFFER,GL_ATOMIC_COUNTER_BUFFER,GL_COPY_READ_BUFFER,GL_COPY_WRITE_BUFFER,GL_DISPATCH_INDIRECT_BUFFER,GL_DRAW_INDIRECT_BUFFER,GL_ELEMENT_ARRAY_BUFFER,GL_PIXEL_PACK_BUFFER,GL_PIXEL_UNPACK_BUFFER,GL_SHADER_STORAGE_BUFFER,GL_TRANSFORM_FEEDBACK_BUFFER,GL_UNIFORM_BUFFER"}, + {"glMemoryBarrier,glMemoryBarrierByRegion", "barriers", "3.1", "GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT,GL_ELEMENT_ARRAY_BARRIER_BIT,GL_UNIFORM_BARRIER_BIT,GL_TEXTURE_FETCH_BARRIER_BIT,GL_SHADER_IMAGE_ACCESS_BARRIER_BIT,GL_COMMAND_BARRIER_BIT,GL_PIXEL_BUFFER_BARRIER_BIT,GL_TEXTURE_UPDATE_BARRIER_BIT,GL_BUFFER_UPDATE_BARRIER_BIT,GL_FRAMEBUFFER_BARRIER_BIT,GL_TRANSFORM_FEEDBACK_BARRIER_BIT,GL_ATOMIC_COUNTER_BARRIER_BIT,GL_SHADER_STORAGE_BARRIER_BIT,GL_ALL_BARRIER_BITS"}, + {"glMultiTexCoord4f", "target", "1.1", GL_TEXTUREi}, + {"glMultiTexCoord4x", "texture", "1.1", GL_TEXTUREi}, + {"glPixelStorei", "pname", "1.1,2.0", "GL_PACK_ALIGNMENT,GL_UNPACK_ALIGNMENT"}, + {"glPixelStorei", "pname", "3.0,3.1", "GL_PACK_ROW_LENGTH,GL_PACK_IMAGE_HEIGHT,GL_PACK_SKIP_PIXELS,GL_PACK_SKIP_ROWS,GL_PACK_SKIP_IMAGES,GL_PACK_ALIGNMENT,GL_UNPACK_ROW_LENGTH,GL_UNPACK_IMAGE_HEIGHT,GL_UNPACK_SKIP_PIXELS,GL_UNPACK_SKIP_ROWS,GL_UNPACK_SKIP_IMAGES,GL_UNPACK_ALIGNMENT"}, + {"glProgramBinary", "binaryFormat", "3.0,3.1", ""}, // implementation dependent + {"glProgramParameteri", "pname", "3.0", "GL_PROGRAM_BINARY_RETRIEVABLE_HINT"}, + {"glProgramParameteri", "pname", "3.1", "GL_PROGRAM_BINARY_RETRIEVABLE_HINT,GL_PROGRAM_SEPARABLE"}, + {"glReadBuffer", "src", "3.0,3.1", "GL_BACK,GL_NONE," + GL_COLOR_ATTACHMENTi}, + {"glReadPixels", "format", "1.1", "GL_ALPHA,GL_RGB,GL_RGBA"}, + {"glReadPixels", "format", "3.0,3.1", "GL_RED,GL_RED_INTEGER,GL_RG,GL_RG_INTEGER,GL_RGB,GL_RGB_INTEGER,GL_RGBA,GL_RGBA_INTEGER,GL_LUMINANCE_ALPHA,GL_LUMINANCE,GL_ALPHA"}, + {"glReadPixels", "type", "1.1", "GL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT_5_6_5,GL_UNSIGNED_SHORT_4_4_4_4,GL_UNSIGNED_SHORT_5_5_5_1"}, + {"glReadPixels", "type", "3.0,3.1", "GL_UNSIGNED_BYTE,GL_BYTE,GL_HALF_FLOAT,GL_FLOAT,GL_UNSIGNED_SHORT_5_6_5,GL_UNSIGNED_SHORT_4_4_4_4,GL_UNSIGNED_SHORT_5_5_5_1,GL_UNSIGNED_INT_2_10_10_10_REV,GL_UNSIGNED_INT_10F_11F_11F_REV,GL_UNSIGNED_INT_5_9_9_9_REV,GL_UNSIGNED_INT,GL_INT,GL_FLOAT"}, + {"glRenderbufferStorage,glRenderbufferStorageMultisample", "internalformat", "3.0,3.1", "GL_R8,GL_R8UI,GL_R8I,GL_R16UI,GL_R16I,GL_R32UI,GL_R32I,GL_RG8,GL_RG8UI,GL_RG8I,GL_RG16UI,GL_RG16I,GL_RG32UI,GL_RG32I,GL_RGB8,GL_RGB565,GL_RGBA8,GL_SRGB8_ALPHA8,GL_RGB5_A1,GL_RGBA4,GL_RGB10_A2,GL_RGBA8UI,GL_RGBA8I,GL_RGB10_A2UI,GL_RGBA16UI,GL_RGBA16I,GL_RGBA32I,GL_RGBA32UI,GL_DEPTH_COMPONENT16,GL_DEPTH_COMPONENT24,GL_DEPTH_COMPONENT32F,GL_DEPTH24_STENCIL8,GL_DEPTH32F_STENCIL8,GL_STENCIL_INDEX8"}, + {"glRenderbufferStorage,glRenderbufferStorageMultisample", "target", "3.0,3.1", "GL_RENDERBUFFER"}, + {"glShaderBinary", "binaryformat", "2.0,3.0,3.1", ""}, // OpenGL ES defines no specific binary formats + {"glStencilOp", "fail,zfail,zpass", "1.1", "GL_KEEP,GL_ZERO,GL_REPLACE,GL_INCR,GL_DECR,GL_INVERT"}, + {"glStencilOp,glStencilOpSeparate", "fail,zfail,zpass,sfail,dpfail,dppass", "2.0,3.0,3.1", "GL_KEEP,GL_ZERO,GL_REPLACE,GL_INCR,GL_INCR_WRAP,GL_DECR,GL_DECR_WRAP,GL_INVERT"}, + {"glTexCoordPointer,glVertexPointer,glNormalPointer", "type", "1.1", "GL_BYTE,GL_SHORT,GL_FIXED,GL_FLOAT"}, // TODO: common profile? + {"glTexParameterf,glTexParameterfv,glTexParameteri,glTexParameteriv", "target", "1.1", "GL_TEXTURE_2D"}, + {"glTexParameterf,glTexParameterfv,glTexParameteri,glTexParameteriv", "target", "2.0", "GL_TEXTURE_2D,GL_TEXTURE_CUBE_MAP"}, + {"glTexParameterf,glTexParameterfv,glTexParameteri,glTexParameteriv", "target", "3.0", "GL_TEXTURE_2D,GL_TEXTURE_3D,GL_TEXTURE_2D_ARRAY,GL_TEXTURE_CUBE_MAP"}, + {"glTexParameterf,glTexParameterfv,glTexParameteri,glTexParameteriv", "target", "3.1", "GL_TEXTURE_2D,GL_TEXTURE_3D,GL_TEXTURE_2D_ARRAY,GL_TEXTURE_2D_MULTISAMPLE,GL_TEXTURE_CUBE_MAP"}, + {"glTexParameterx,glTexParameterxv", "target", "1.1", "GL_TEXTURE_2D"}, + {"glTexStorage2D,glTexStorage3D", "internalformat", "3.0,3.1", "GL_R8,GL_R8_SNORM,GL_R16F,GL_R32F,GL_R8UI,GL_R8I,GL_R16UI,GL_R16I,GL_R32UI,GL_R32I,GL_RG8,GL_RG8_SNORM,GL_RG16F,GL_RG32F,GL_RG8UI,GL_RG8I,GL_RG16UI,GL_RG16I,GL_RG32UI,GL_RG32I,GL_RGB8,GL_SRGB8,GL_RGB565,GL_RGB8_SNORM,GL_R11F_G11F_B10F,GL_RGB9_E5,GL_RGB16F,GL_RGB32F,GL_RGB8UI,GL_RGB8I,GL_RGB16UI,GL_RGB16I,GL_RGB32UI,GL_RGB32I,GL_RGBA8,GL_SRGB8_ALPHA8,GL_RGBA8_SNORM,GL_RGB5_A1,GL_RGBA4,GL_RGB10_A2,GL_RGBA16F,GL_RGBA32F,GL_RGBA8UI,GL_RGBA8I,GL_RGB10_A2UI,GL_RGBA16UI,GL_RGBA16I,GL_RGBA32I,GL_RGBA32UI,GL_DEPTH_COMPONENT16,GL_DEPTH_COMPONENT24,GL_DEPTH_COMPONENT32F,GL_DEPTH24_STENCIL8,GL_DEPTH32F_STENCIL8,GL_COMPRESSED_R11_EAC,GL_COMPRESSED_SIGNED_R11_EAC,GL_COMPRESSED_RG11_EAC,GL_COMPRESSED_SIGNED_RG11_EAC,GL_COMPRESSED_RGB8_ETC2,GL_COMPRESSED_SRGB8_ETC2,GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,GL_COMPRESSED_RGBA8_ETC2_EAC,GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC"}, + {"glTexStorage2DMultisample", "internalformat", "3.1", "GL_R8,GL_R8_SNORM,GL_R16F,GL_R32F,GL_R8UI,GL_R8I,GL_R16UI,GL_R16I,GL_R32UI,GL_R32I,GL_RG8,GL_RG8_SNORM,GL_RG16F,GL_RG32F,GL_RG8UI,GL_RG8I,GL_RG16UI,GL_RG16I,GL_RG32UI,GL_RG32I,GL_RGB8,GL_SRGB8,GL_RGB565,GL_RGB8_SNORM,GL_R11F_G11F_B10F,GL_RGB9_E5,GL_RGB16F,GL_RGB32F,GL_RGB8UI,GL_RGB8I,GL_RGB16UI,GL_RGB16I,GL_RGB32UI,GL_RGB32I,GL_RGBA8,GL_SRGB8_ALPHA8,GL_RGBA8_SNORM,GL_RGB5_A1,GL_RGBA4,GL_RGB10_A2,GL_RGBA16F,GL_RGBA32F,GL_RGBA8UI,GL_RGBA8I,GL_RGB10_A2UI,GL_RGBA16UI,GL_RGBA16I,GL_RGBA32I,GL_RGBA32UI,GL_DEPTH_COMPONENT16,GL_DEPTH_COMPONENT24,GL_DEPTH_COMPONENT32F,GL_DEPTH24_STENCIL8,GL_DEPTH32F_STENCIL8"}, + {"glUseProgramStages", "stages", "3.1", "GL_VERTEX_SHADER_BIT,GL_FRAGMENT_SHADER_BIT,GL_COMPUTE_SHADER_BIT,GL_ALL_SHADER_BITS"}, + {"glVertexAttribFormat,glVertexAttribIFormat", "type", "3.1", "GL_BYTE,GL_SHORT,GL_INT,GL_FIXED,GL_FLOAT,GL_HALF_FLOAT,GL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT,GL_UNSIGNED_INT,GL_INT_2_10_10_10_REV,GL_UNSIGNED_INT_2_10_10_10_REV"}, + {"glVertexAttribIPointer", "type", "3.0,3.1", "GL_BYTE,GL_UNSIGNED_BYTE,GL_SHORT,GL_UNSIGNED_SHORT,GL_INT,GL_UNSIGNED_INT"}, + {"glVertexAttribPointer", "type", "3.0,3.1", "GL_BYTE,GL_UNSIGNED_BYTE,GL_SHORT,GL_UNSIGNED_SHORT,GL_INT,GL_UNSIGNED_INT,GL_HALF_FLOAT,GL_FLOAT,GL_FIXED,GL_INT_2_10_10_10_REV,GL_UNSIGNED_INT_2_10_10_10_REV"}, + } + for _, row := range enumMetadata { + if listContains(row.cmdName, cmdName) && + listContains(row.paramName, paramName) && + listContains(row.apiVersion, string(apiVersion)) { + if row.acceptedValues != "" { + return strings.Split(row.acceptedValues, ","), true + } else { + return nil, true + } + } + } + return nil, false +} diff --git a/tools/generate_gles_api/download_reg.go b/tools/generate_gles_api/download_reg.go new file mode 100644 index 000000000..eeb399def --- /dev/null +++ b/tools/generate_gles_api/download_reg.go @@ -0,0 +1,228 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "encoding/xml" + "fmt" + "strings" +) + +const url = "https://cvs.khronos.org/svn/repos/ogl/trunk/doc/registry/public/api/gl.xml" + +// Download the khronos XML registry file +func DownloadReg() *Registry { + bytes := Download(url) + reg := &Registry{} + if err := xml.Unmarshal(bytes, reg); err != nil { + panic(err.Error()) + } + return reg +} + +type KhronosAPI string +type Version string + +const GLES1API = KhronosAPI("gles1") +const GLES2API = KhronosAPI("gles2") // Includes GLES 3.0 and later + +func (v Version) String() string { return fmt.Sprintf("%s", string(v)) } + +type Registry struct { + Group []Group `xml:"groups>group"` + Enums []Enums `xml:"enums"` + Command []Command `xml:"commands>command"` + Feature []Feature `xml:"feature"` + Extension []ExtensionElement `xml:"extensions>extension"` +} + +type NamedElementList []NamedElement +type NamedElement struct { + Name string `xml:"name,attr"` +} + +type Group struct { + NamedElement + Enum NamedElementList `xml:"enum"` +} + +type Enums struct { + Namespace string `xml:"namespace,attr"` + Group string `xml:"group,attr"` + Type string `xml:"type,attr"` // "bitmask" + Comment string `xml:"comment,attr"` + Enum []Enum `xml:"enum"` +} + +type Enum struct { + NamedElement + Value string `xml:"value,attr"` + Type string `xml:"type,attr"` // "u" or "ull" + API KhronosAPI `xml:"api,attr"` + Alias string `xml:"alias,attr"` +} + +type Command struct { + Proto ProtoOrParam `xml:"proto"` + Param []ProtoOrParam `xml:"param"` + Alias NamedElement `xml:"alias"` +} + +type ProtoOrParam struct { + InnerXML string `xml:",innerxml"` + Chardata string `xml:",chardata"` + Group string `xml:"group,attr"` + Length string `xml:"len,attr"` + Ptype string `xml:"ptype"` + Name string `xml:"name"` +} + +type Feature struct { + NamedElement + API KhronosAPI `xml:"api,attr"` + Number Version `xml:"number,attr"` + Require RequireOrRemoveList `xml:"require"` + Remove RequireOrRemoveList `xml:"remove"` +} + +type ExtensionElement struct { + NamedElement + Supported string `xml:"supported,attr"` + Require RequireOrRemoveList `xml:"require"` + Remove RequireOrRemoveList `xml:"remove"` +} + +type RequireOrRemoveList []RequireOrRemove +type RequireOrRemove struct { + API KhronosAPI `xml:"api,attr"` // for extensions only + Profile string `xml:"profile,attr"` + Comment string `xml:"comment,attr"` + Enum NamedElementList `xml:"enum"` + Command NamedElementList `xml:"command"` +} + +func (l NamedElementList) Contains(name string) bool { + for _, v := range l { + if v.Name == name { + return true + } + } + return false +} + +func (r *RequireOrRemove) Contains(name string) bool { + return r.Enum.Contains(name) || r.Command.Contains(name) +} + +func (l RequireOrRemoveList) Contains(name string) bool { + for _, v := range l { + if v.Contains(name) { + return true + } + } + return false +} + +func (e *ExtensionElement) IsSupported(api KhronosAPI) bool { + for _, v := range strings.Split(e.Supported, "|") { + if KhronosAPI(v) == api { + return true + } + } + return false +} + +func (c Command) Name() string { + return c.Proto.Name +} + +func (p ProtoOrParam) Type() string { + name := p.InnerXML + name = name[:strings.Index(name, "<name>")] + name = strings.Replace(name, "<ptype>", "", 1) + name = strings.Replace(name, "</ptype>", "", 1) + name = strings.TrimSpace(name) + return name +} + +// Add the return value as param "result" at slot -1 +func (cmd *Command) ParamsAndResult() map[int]ProtoOrParam { + result := cmd.Proto + result.Name = "result" + results := map[int]ProtoOrParam{-1: result} + for i, param := range cmd.Param { + results[i] = param + } + return results +} + +// Return sorted list of versions which support the given symbol +func (r *Registry) GetVersions(api KhronosAPI, name string) []Version { + version, found := Version(""), false + for _, feature := range r.Feature { + if feature.API == api { + if feature.Require.Contains(name) { + if found { + panic(fmt.Errorf("redefinition of %s", name)) + } + version, found = feature.Number, true + } + if feature.Remove != nil { + // not used in GLES + panic(fmt.Errorf("remove tag is not supported")) + } + } + } + if found { + switch version { + case "1.0": + return []Version{"1.0", "1.1"} + case "2.0": + return []Version{"2.0", "3.0", "3.1"} + case "3.0": + return []Version{"3.0", "3.1"} + case "3.1": + return []Version{"3.1"} + default: + panic(fmt.Errorf("Uknown GLES version: %v", version)) + } + } else { + return nil + } +} + +// Return extensions which define the given symbol +func (r *Registry) GetExtensions(api KhronosAPI, name string) []string { + var extensions []string +ExtensionLoop: + for _, extension := range r.Extension { + if extension.IsSupported(api) { + for _, require := range extension.Require { + if require.API == "" || require.API == api { + if require.Contains(name) { + extensions = append(extensions, extension.Name) + // sometimes the extension repeats definition - ignore + continue ExtensionLoop + } + } + } + if extension.Remove != nil { + // not used in GLES + panic(fmt.Errorf("remove tag is not supported")) + } + } + } + return extensions +} diff --git a/tools/generate_gles_api/generate_api.go b/tools/generate_gles_api/generate_api.go new file mode 100644 index 000000000..ee143b8d9 --- /dev/null +++ b/tools/generate_gles_api/generate_api.go @@ -0,0 +1,416 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "bytes" + "fmt" + "io" + "os" + "strconv" + "strings" +) + +const indent = " " + +// Generate the "gles.api" file from combined online and hand written data. +func GenerateApi(reg *Registry, api KhronosAPI) { + files := map[string]*os.File{} + printEnums(createFile(files, "glenum"), reg, api, false) + printEnums(createFile(files, "glbitfield"), reg, api, true) + for _, cmd := range reg.Command { + versions := reg.GetVersions(api, cmd.Name()) + extensions := reg.GetExtensions(api, cmd.Name()) + if versions != nil { + printCommand(createFile(files, getCategory(cmd.Name())), reg, &cmd, api) + } + if extensions != nil { + if isInAndroidExtensionPack(extensions) { + printCommand(createFile(files, "android_extension_pack"), reg, &cmd, api) + } else { + printCommand(createFile(files, "extensions"), reg, &cmd, api) + } + } + } + for _, file := range files { + if err := file.Close(); err != nil { + panic(err) + } + } +} + +func createFile(files map[string]*os.File, basename string) *os.File { + filename := *apiDir + string(os.PathSeparator) + basename + ".api" + if file, ok := files[filename]; ok { + return file + } + file, err := os.Create(filename) + if err != nil { + panic(err) + } + files[filename] = file + fmt.Fprint(file, `// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +`) + return file +} + +func getCategory(cmdName string) string { + var table = []struct { + category string + cmdName string // Regexp + }{ + {"asynchronous_queries", ".*(Query|Queries).*"}, + {"synchronization", ".*Sync.*"}, + {"programs_and_shaders", ".*(Program|Shader|Compute|Uniform|MemoryBarrier|GetFragDataLocation|glValidateProgram|AttribLocation|GetActiveAttrib).*"}, + {"framebuffer", ".*(Framebuffer|Renderbuffer).*|glReadBuffer|glReadPixels|gl(Color|Depth|Stencil)Mask|glClear.*|glInvalidate.*"}, + {"textures_and_samplers", ".*(Tex|Image|Sampler|PixelStorei|GenerateMipmap).*"}, + {"transform_feedback", "gl(.*TransformFeedback.*)"}, + {"vertex_arrays", ".*Vertex(Attrib|Buffer|Binding|Array).*"}, + {"draw_commands", "glDraw.*"}, + {"rasterization", "gl(GetMultisamplefv|LineWidth|FrontFace|CullFace|PolygonOffset|DepthRangef|Viewport)"}, + {"fragment_operations", "glScissor|glSample.*|glStencil.*|glDepthFunc|glBlend.*"}, + {"state_queries", "gl(GetBoolean|GetInteger|GetFloat|IsEnabled|GetString|GetInternalformativ).*"}, + {"other", "glEnable|glDisable|glIsEnabled|glHint|glGetError|glFlush|glFinish"}, + {"buffer_objects", ".*Buffer.*"}, + } + for _, row := range table { + if CompileRegexp("^(?:" + row.cmdName + ")").MatchString(cmdName) { + return row.category + } + } + panic(fmt.Errorf("Can not find category of %v", cmdName)) +} + +func isInAndroidExtensionPack(extensions []string) (result bool) { + aep := map[string]bool{ + "GL_KHR_debug": true, + "GL_KHR_texture_compression_astc_ldr": true, + "GL_KHR_blend_equation_advanced": true, + "GL_OES_sample_shading": true, + "GL_OES_sample_variables": true, + "GL_OES_shader_image_atomic": true, + "GL_OES_shader_multisample_interpolation": true, + "GL_OES_texture_stencil8": true, + "GL_OES_texture_storage_multisample_2d_array": true, + "GL_EXT_copy_image": true, + "GL_EXT_draw_buffers_indexed": true, + "GL_EXT_geometry_shader": true, + "GL_EXT_gpu_shader5": true, + "GL_EXT_primitive_bounding_box": true, + "GL_EXT_shader_io_blocks": true, + "GL_EXT_tessellation_shader": true, + "GL_EXT_texture_border_clamp": true, + "GL_EXT_texture_buffer": true, + "GL_EXT_texture_cube_map_array": true, + "GL_EXT_texture_sRGB_decode": true, + } + for _, extension := range extensions { + if aep[extension] { + return true + } + } + return false +} + +func wrap(text string, width int, linePrefix string) string { + if len(text) > width { + if idx := strings.LastIndex(text[0:width], " "); idx != -1 { + return text[0:idx] + "\n" + wrap(linePrefix+text[idx+1:], width, linePrefix) + } + } + return text +} + +func printEnums(out io.Writer, r *Registry, api KhronosAPI, bitfields bool) { + if bitfields { + fmt.Fprintf(out, "bitfield GLbitfield {\n") + } else { + fmt.Fprintf(out, "enum GLenum {\n") + } + for _, enums := range r.Enums { + if (enums.Type == "bitmask") == bitfields && enums.Namespace == "GL" && len(enums.Enum) > 0 { + for _, enum := range enums.Enum { + // The following 64bit values are not proper GLenum values. + if enum.Name == "GL_TIMEOUT_IGNORED" || enum.Name == "GL_TIMEOUT_IGNORED_APPLE" { + continue + } + if enum.API == "" || enum.API == api { + var value uint32 + if v, err := strconv.ParseUint(enum.Value, 0, 32); err == nil { + value = uint32(v) + } else if v, err := strconv.ParseInt(enum.Value, 0, 32); err == nil { + value = uint32(v) + } else { + panic(fmt.Errorf("Failed to parse enum value %v", enum.Value)) + } + fmt.Fprintf(out, indent+"%-64s = 0x%08X,\n", enum.Name, value) + } + } + } + } + fmt.Fprintf(out, "}\n\n") +} + +func renameType(cmdName string, paramIndex int, paramType, paramName string) string { + if paramType == "const void *" { + if oldType, ok := oldParamType(cmdName, paramIndex); ok { + if strings.Contains(oldType, "Pointer") { + return oldType + } + } + } + if paramType == "const GLchar *" { + if oldType, ok := oldParamType(cmdName, paramIndex); ok { + if oldType == "string" { + return oldType + } + } + } + + // Find the root GL type, ignoring any prefix or sufix + loc := CompileRegexp(`\bGL\w+\b`).FindStringIndex(paramType) + if loc == nil { + return paramType + } + glType := paramType[loc[0]:loc[1]] + + // Type substitution table + table := []struct { + oldType string + cmdName string // regexp + paramName string // regexp + newType string + }{ + {"GLboolean", "glIs.*", "result", "bool"}, + {"GLint", ".*Uniform.*", "location|result", "UniformLocation"}, + {"GLuint", ".*", "program(|s)", "ProgramId"}, + {"GLuint", ".*", "texture(|s)", "TextureId"}, + {"GLuint", ".*", "uniformBlockIndex", "UniformBlockId"}, + {"GLuint", ".*(Query|Queries).*", "id(|s)", "QueryId"}, + {"GLuint", ".*Buffer.*", "buffer(|s)", "BufferId"}, + {"GLuint", ".*Framebuffer.*", "framebuffer(|s)", "FramebufferId"}, + {"GLuint", ".*Program.*", "pipeline(|s)", "PipelineId"}, + {"GLuint", ".*Renderbuffer.*", "renderbuffer(|s)", "RenderbufferId"}, + {"GLuint", ".*Sampler.*", "sampler(|s)", "SamplerId"}, + {"GLuint", ".*Shader.*", "shader(|s)", "ShaderId"}, + {"GLuint", ".*TransformFeedback.*", "id(|s)", "TransformFeedbackId"}, + {"GLuint", ".*VertexArray.*", "array(|s)", "VertexArrayId"}, + {"GLuint", "glCreateProgram", "result", "ProgramId"}, + {"GLuint", "glCreateShader", "result", "ShaderId"}, + {"GLuint", "glCreateShaderProgramv", "result", "ProgramId"}, + {"GLuint", "glGetUniformBlockIndex", "result", "UniformBlockId"}, + {"GLuint", ".*Attrib.*", "result|index", "AttributeLocation"}, + } + for _, row := range table { + if row.oldType == glType && + CompileRegexp("^(?:"+row.paramName+")$").MatchString(paramName) && + CompileRegexp("^(?:"+row.cmdName+")$").MatchString(cmdName) { + // Replacte the GL type, but keep the original prefix and sufix + return paramType[:loc[0]] + row.newType + paramType[loc[1]:] + } + } + return paramType +} + +func printChecks(out io.Writer, cmd *Command, versions []Version) { + if versions == nil { + return + } + fmt.Fprintf(out, indent+"minRequiredVersion(%v)\n", strings.Replace(string(versions[0]), ".", ", ", -1)) + for paramIndex, param := range cmd.Param { + paramName := oldParamName(cmd.Name(), paramIndex, param.Name) + if param.Type() == "GLenum" { + fmt.Fprintf(out, indent+"switch (%s) {\n", paramName) + seen := map[string]Version{} + for _, version := range versions { + doc := DownloadDoc(version, cmd.Name()) + var newCases []string + for _, value := range doc.Params[paramIndex].Accepts { + if _, ok := seen[value]; !ok { + newCases = append(newCases, value) + } + seen[value] = version + } + // Check that the set of accepted values is increasing from verions to version. + for k, v := range seen { + if v != version { + fmt.Fprintf(out, indent+indent+"// TODO: %s seems to be removed in %v\n", k, version) + } + } + if newCases != nil { + line := fmt.Sprintf(indent+indent+"case %s: {\n", strings.Join(newCases, ", ")) + fmt.Fprint(out, wrap(line, 100, indent+indent+indent+indent)) + if version != versions[0] { + fmt.Fprintf(out, indent+indent+indent+"minRequiredVersion(%v)\n", strings.Replace(string(version), ".", ", ", -1)) + } else { + fmt.Fprintf(out, indent+indent+indent+"// version %v\n", version) + } + fmt.Fprint(out, indent+indent+"}\n") + } + } + fmt.Fprint(out, indent+indent+"default: {\n") + fmt.Fprintf(out, indent+indent+indent+"glErrorInvalidEnum(%s)\n", paramName) + fmt.Fprint(out, indent+indent+"}\n") + fmt.Fprintf(out, indent+"}\n") + } + if param.Type() == "GLbitfield" { + bits := []string{} + seen := map[string]Version{} // name -> min_version + for _, version := range versions { + doc := DownloadDoc(version, cmd.Name()) + for _, value := range doc.Params[paramIndex].Accepts { + if _, ok := seen[value]; !ok { + bits = append(bits, value) + seen[value] = version + } + } + } + if len(bits) > 0 { + fmt.Fprintf(out, indent+"supportsBits(%s, %s)\n", paramName, strings.Join(bits, "|")) + for _, bit := range bits { + version := seen[bit] + fmt.Fprintf(out, indent+"if (%s in %s) {\n", bit, paramName) + if version != versions[0] { + fmt.Fprintf(out, indent+indent+"minRequiredVersion(%v)\n", strings.Replace(string(version), ".", ", ", -1)) + } + fmt.Fprintf(out, indent+"}\n") + } + } + } + } +} + +func printCommand(out io.Writer, reg *Registry, cmd *Command, api KhronosAPI) { + versions := reg.GetVersions(api, cmd.Name()) + extensions := reg.GetExtensions(api, cmd.Name()) + if versions != nil && extensions != nil { + panic(fmt.Errorf("%s is both core feature and extension", cmd.Name())) + } + + // Print comments + for _, version := range versions { + url, _, _, _ := GetDocUrl(version, cmd.Name()) + fmt.Fprintf(out, `@Doc("%s","OpenGL ES %v")`+"\n", url, version) + } + for _, extension := range extensions { + url := GetExtensionUrl(extension) + fmt.Fprintf(out, `@Doc("%s","%v")`+"\n", url, extension) + } + + // Print function signature + sig := &bytes.Buffer{} + fmt.Fprintf(sig, "cmd %s %s(", renameType(cmd.Name(), -1, cmd.Proto.Type(), "result"), cmd.Name()) + leadWidth := sig.Len() + maxTypeWidth := 0 + paramTypes := []string{} + for paramIndex, param := range cmd.Param { + paramType := renameType(cmd.Name(), paramIndex, param.Type(), param.Name) + paramTypes = append(paramTypes, paramType) + if typeWidth := len(paramType); typeWidth > maxTypeWidth { + maxTypeWidth = typeWidth + } + } + for i, param := range cmd.Param { + if i > 0 { + fmt.Fprintf(sig, ",\n%s", strings.Repeat(" ", leadWidth)) + } + format := fmt.Sprintf("%%-%vs %%s", maxTypeWidth) + fmt.Fprintf(sig, format, paramTypes[i], oldParamName(cmd.Name(), i, param.Name)) + if oldType, ok := oldParamType(cmd.Name(), i); ok { + newType := strings.Replace(paramTypes[i], " *", "*", -1) + if newType != oldType { + // fmt.Printf("Changed type of %s:%s from %s to %s\n", cmd.Name(), param.Name, oldType, newType) + } + } + } + fmt.Fprintf(sig, ")") + longSig := string(sig.Bytes()) + shortSig := CompileRegexp(`\s+`).ReplaceAllString(longSig, " ") + if len(shortSig)+2 <= 100 { + fmt.Fprintf(out, "%s ", shortSig) + } else { + fmt.Fprintf(out, "%s ", longSig) + } + + // Print function body + fmt.Fprintf(out, "{\n") + for _, extension := range extensions { + fmt.Fprintf(out, indent+"requiresExtension(%s)\n", extension) + } + if len(extensions) > 1 { + fmt.Fprintf(out, indent+"// TODO: Multiple extensions\n") + } + printChecks(out, cmd, versions) + foundOldCode := false + if oldApi != nil { + // Try to add the old code + for _, apiCmd := range oldApi.Commands { + if apiCmd.Name.Value == cmd.Name() { + childs := apiCmd.Block.CST.Children + if len(childs) > 0 { + start := apiCmd.Block.CST.Children[0].Token() + end := apiCmd.Block.CST.Children[len(childs)-1].Token() + fmt.Fprintf(out, "%s", string(start.Runes[start.End:end.Start])) + foundOldCode = true + } + } + } + } + if !foundOldCode { + fmt.Fprintf(out, indent+"// TODO\n") + if cmd.Proto.Type() != "void" { + fmt.Fprint(out, indent+"return ?\n") + } + } + fmt.Fprintf(out, "}\n") + fmt.Fprintf(out, "\n") +} + +// Rename parameters so that they match our old api file +func oldParamName(cmdName string, paramIndex int, paramName string) string { + if oldApi != nil { + for _, cmd := range oldApi.Commands { + if cmd.Name.Value == cmdName { + return cmd.Parameters[paramIndex].Name.Value + } + } + } + return paramName +} + +func oldParamType(cmdName string, paramIndex int) (string, bool) { + if oldApi != nil { + for _, cmd := range oldApi.Commands { + if cmd.Name.Value == cmdName { + token := cmd.Parameters[paramIndex].Type.Node().Token() + return string(token.Runes[token.Start:token.End]), true + } + } + } + return "", false +} diff --git a/tools/generate_gles_api/generate_csv.go b/tools/generate_gles_api/generate_csv.go new file mode 100644 index 000000000..263a5589f --- /dev/null +++ b/tools/generate_gles_api/generate_csv.go @@ -0,0 +1,64 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "encoding/csv" + "fmt" + "os" + "strings" +) + +// Print most of our data to CSV file +func GenerateCsv(reg *Registry, api KhronosAPI) { + out, err := os.Create(*csvDir + string(os.PathSeparator) + "gles.csv") + if err != nil { + panic(err) + } + writer := csv.NewWriter(out) + writer.Write([]string{"command", "version", "paramIndex", "paramType", "paramName", "accepts"}) + for _, cmd := range reg.Command { + cmdName := cmd.Proto.Name + for _, version := range reg.GetVersions(api, cmdName) { + doc := DownloadDoc(version, cmdName) + if len(doc.Params)-1 /* result */ != len(cmd.Param) { + panic(fmt.Errorf("%s: param count mismatch: %v vs %v", cmdName, len(doc.Params), len(cmd.Param))) + } + printCsvCommand(writer, &cmd, string(version), doc) + } + for _, extension := range reg.GetExtensions(api, cmdName) { + printCsvCommand(writer, &cmd, extension, &CommandDoc{}) + } + } + writer.Flush() + if err := out.Close(); err != nil { + panic(err) + } +} + +func printCsvCommand(writer *csv.Writer, cmd *Command, definedBy string, doc *CommandDoc) { + for i := -1; i < len(cmd.Param); i++ { + param := cmd.ParamsAndResult()[i] + accepts := "" + if doc.Params != nil { + paramDoc := doc.Params[i] + if paramDoc.Name != param.Name { + panic(fmt.Errorf("%s: param name mismatch: %s vs %s\n", cmd.Proto.Name, param.Name, paramDoc.Name)) + } + accepts = strings.Join(paramDoc.Accepts, "|") + } + writer.Write([]string{cmd.Proto.Name, definedBy, fmt.Sprintf("%v", i), param.Type(), param.Name, accepts}) + } +} diff --git a/tools/generate_gles_api/main.go b/tools/generate_gles_api/main.go new file mode 100644 index 000000000..4771814cc --- /dev/null +++ b/tools/generate_gles_api/main.go @@ -0,0 +1,60 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "android.googlesource.com/platform/tools/gpu/api/ast" + "android.googlesource.com/platform/tools/gpu/api/parser" + "flag" + "fmt" + "io/ioutil" +) + +var ( + apiDir = flag.String("api", "", "Directory for the api output files") + csvDir = flag.String("csv", "", "Directory for the csv output file") + cacheDir = flag.String("cache", "", "Directory for caching downloaded files") + oldApiPath = flag.String("oldapi", "", "Filename of the old api file to use for reference") + oldApi *ast.API +) + +func main() { + flag.Parse() + if *apiDir == "" && *csvDir == "" { + flag.PrintDefaults() + return + } + if *oldApiPath != "" { + f, err := ioutil.ReadFile(*oldApiPath) + if err != nil { + panic(err) + } + api, errs := parser.Parse(string(f)) + if len(errs) > 0 { + for i, e := range errs { + fmt.Printf("%d: %v", i, e) + } + return + } + oldApi = api + } + reg := DownloadReg() + if *apiDir != "" { + GenerateApi(reg, GLES2API) + } + if *csvDir != "" { + GenerateCsv(reg, GLES2API) + } +} diff --git a/tools/generate_gles_api/util.go b/tools/generate_gles_api/util.go new file mode 100644 index 000000000..6fb6e20ec --- /dev/null +++ b/tools/generate_gles_api/util.go @@ -0,0 +1,30 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "regexp" +) + +var regexpCache = make(map[string]*regexp.Regexp) + +func CompileRegexp(exp string) *regexp.Regexp { + re, ok := regexpCache[exp] + if !ok { + re = regexp.MustCompile(exp) + regexpCache[exp] = re + } + return re +} |