Merge "Add gles.tweaker for temporarily tweaking things." into studio-1.4-dev
diff --git a/binary/any/any.go b/binary/any/any.go
index 3337711..313ab6b 100644
--- a/binary/any/any.go
+++ b/binary/any/any.go
@@ -24,6 +24,7 @@
 // binary: Schema = false
 // binary: java.source = base/rpclib/src/main/java
 // binary: java.package = com.android.tools.rpclib.any
+// binary: java.indent = "    "
 // binary: java.member_prefix = m
 
 // ErrUnboxable is returned when a non-boxable value type is passed to Box.
diff --git a/binary/schema/schema.go b/binary/schema/schema.go
index 1ef6519..cbd0db3 100644
--- a/binary/schema/schema.go
+++ b/binary/schema/schema.go
@@ -23,6 +23,7 @@
 // binary: Schema = false
 // binary: java.source = base/rpclib/src/main/java
 // binary: java.package = com.android.tools.rpclib.schema
+// binary: java.indent = "    "
 // binary: java.member_prefix = m
 
 // Type represents the common interface to all type objects in the schema.
diff --git a/binary/test/test.go b/binary/test/test.go
index 513f901..3fccba4 100644
--- a/binary/test/test.go
+++ b/binary/test/test.go
@@ -25,6 +25,7 @@
 
 // binary: java.source = base/rpclib/src/test/java
 // binary: java.package = com.android.tools.rpclib.binary
+// binary: java.indent = "    "
 // binary: java.member_prefix = m
 
 type TypeA struct {
diff --git a/gfxapi/gles/api/android_extension_pack.api b/gfxapi/gles/api/android_extension_pack.api
new file mode 100644
index 0000000..c6b8b6b
--- /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 0000000..41ad05d
--- /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 0000000..594fa44
--- /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 0000000..8668485
--- /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 0000000..3e59541
--- /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 0000000..ce1f329
--- /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 0000000..3e7e900
--- /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 0000000..3e57ce9
--- /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 0000000..75f4bc1
--- /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 0000000..1438967
--- /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 0000000..7f4bbb5
--- /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 0000000..a8e0b95
--- /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 0000000..b818442
--- /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 0000000..cec6998
--- /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 0000000..1985353
--- /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 0000000..8fd03bd
--- /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 0000000..5efa2ef
--- /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/gfxapi/templates/go_common.tmpl b/gfxapi/templates/go_common.tmpl
index f8c49f2..d9b24ab 100644
--- a/gfxapi/templates/go_common.tmpl
+++ b/gfxapi/templates/go_common.tmpl
@@ -248,7 +248,7 @@
 {{define "Go.CmdName"}}
   {{AssertType $ "Function"}}
 
-  {{Template "Go.Public" (Macro "CmdName" $)}}
+  {{Macro "CmdName" $ | Title}}
 {{end}}
 
 
diff --git a/gfxapi/test/api.go b/gfxapi/test/api.go
index cf17e2c..8ff3fed 100644
--- a/gfxapi/test/api.go
+++ b/gfxapi/test/api.go
@@ -3111,7 +3111,7 @@
 }
 
 func (a *CmdClone) String() string {
-	return fmt.Sprintf("cmd_clone(src: %v, cnt: %v)", a.Src, a.Cnt)
+	return fmt.Sprintf("cmdClone(src: %v, cnt: %v)", a.Src, a.Cnt)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3143,7 +3143,7 @@
 }
 
 func (a *CmdMake) String() string {
-	return fmt.Sprintf("cmd_make(cnt: %v)", a.Cnt)
+	return fmt.Sprintf("cmdMake(cnt: %v)", a.Cnt)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3176,7 +3176,7 @@
 }
 
 func (a *CmdCopy) String() string {
-	return fmt.Sprintf("cmd_copy(src: %v, cnt: %v)", a.Src, a.Cnt)
+	return fmt.Sprintf("cmdCopy(src: %v, cnt: %v)", a.Src, a.Cnt)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3209,7 +3209,7 @@
 }
 
 func (a *CmdCharsliceToString) String() string {
-	return fmt.Sprintf("cmd_charslice_to_string(s: %v, len: %v)", a.S, a.Len)
+	return fmt.Sprintf("cmdCharsliceToString(s: %v, len: %v)", a.S, a.Len)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3241,7 +3241,7 @@
 }
 
 func (a *CmdCharptrToString) String() string {
-	return fmt.Sprintf("cmd_charptr_to_string(s: %v)", a.S)
+	return fmt.Sprintf("cmdCharptrToString(s: %v)", a.S)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3274,7 +3274,7 @@
 }
 
 func (a *CmdSliceCasts) String() string {
-	return fmt.Sprintf("cmd_slice_casts(s: %v, l: %v)", a.S, a.L)
+	return fmt.Sprintf("cmdSliceCasts(s: %v, l: %v)", a.S, a.L)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3305,7 +3305,7 @@
 }
 
 func (a *CmdVoid) String() string {
-	return fmt.Sprintf("cmd_void()")
+	return fmt.Sprintf("cmdVoid()")
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3337,7 +3337,7 @@
 }
 
 func (a *CmdUnknownRet) String() string {
-	return fmt.Sprintf("cmd_unknown_ret() → %v", a.Result)
+	return fmt.Sprintf("cmdUnknownRet() → %v", a.Result)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3369,7 +3369,7 @@
 }
 
 func (a *CmdUnknownWritePtr) String() string {
-	return fmt.Sprintf("cmd_unknown_write_ptr(p: %v)", a.P)
+	return fmt.Sprintf("cmdUnknownWritePtr(p: %v)", a.P)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3401,7 +3401,7 @@
 }
 
 func (a *CmdUnknownWriteSlice) String() string {
-	return fmt.Sprintf("cmd_unknown_write_slice(a: %v)", a.A)
+	return fmt.Sprintf("cmdUnknownWriteSlice(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3433,7 +3433,7 @@
 }
 
 func (a *CmdVoidU8) String() string {
-	return fmt.Sprintf("cmd_void_u8(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidU8(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3465,7 +3465,7 @@
 }
 
 func (a *CmdVoidS8) String() string {
-	return fmt.Sprintf("cmd_void_s8(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidS8(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3497,7 +3497,7 @@
 }
 
 func (a *CmdVoidU16) String() string {
-	return fmt.Sprintf("cmd_void_u16(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidU16(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3529,7 +3529,7 @@
 }
 
 func (a *CmdVoidS16) String() string {
-	return fmt.Sprintf("cmd_void_s16(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidS16(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3561,7 +3561,7 @@
 }
 
 func (a *CmdVoidF32) String() string {
-	return fmt.Sprintf("cmd_void_f32(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidF32(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3593,7 +3593,7 @@
 }
 
 func (a *CmdVoidU32) String() string {
-	return fmt.Sprintf("cmd_void_u32(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidU32(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3625,7 +3625,7 @@
 }
 
 func (a *CmdVoidS32) String() string {
-	return fmt.Sprintf("cmd_void_s32(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidS32(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3657,7 +3657,7 @@
 }
 
 func (a *CmdVoidF64) String() string {
-	return fmt.Sprintf("cmd_void_f64(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidF64(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3689,7 +3689,7 @@
 }
 
 func (a *CmdVoidU64) String() string {
-	return fmt.Sprintf("cmd_void_u64(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidU64(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3721,7 +3721,7 @@
 }
 
 func (a *CmdVoidS64) String() string {
-	return fmt.Sprintf("cmd_void_s64(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidS64(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3753,7 +3753,7 @@
 }
 
 func (a *CmdVoidBool) String() string {
-	return fmt.Sprintf("cmd_void_bool(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidBool(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3785,7 +3785,7 @@
 }
 
 func (a *CmdVoidString) String() string {
-	return fmt.Sprintf("cmd_void_string(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidString(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3819,7 +3819,7 @@
 }
 
 func (a *CmdVoid3Strings) String() string {
-	return fmt.Sprintf("cmd_void_3_strings(a: %v, b: %v, c: %v)", a.A, a.B, a.C)
+	return fmt.Sprintf("cmdVoid3Strings(a: %v, b: %v, c: %v)", a.A, a.B, a.C)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3853,7 +3853,7 @@
 }
 
 func (a *CmdVoid3InArrays) String() string {
-	return fmt.Sprintf("cmd_void_3_in_arrays(a: %v, b: %v, c: %v)", a.A, a.B, a.C)
+	return fmt.Sprintf("cmdVoid3InArrays(a: %v, b: %v, c: %v)", a.A, a.B, a.C)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3886,7 +3886,7 @@
 }
 
 func (a *CmdVoidInArrayOfPointers) String() string {
-	return fmt.Sprintf("cmd_void_in_array_of_pointers(a: %v, count: %v)", a.A, a.Count)
+	return fmt.Sprintf("cmdVoidInArrayOfPointers(a: %v, count: %v)", a.A, a.Count)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3918,7 +3918,7 @@
 }
 
 func (a *CmdVoidReadU8) String() string {
-	return fmt.Sprintf("cmd_void_read_u8(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidReadU8(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3950,7 +3950,7 @@
 }
 
 func (a *CmdVoidReadS8) String() string {
-	return fmt.Sprintf("cmd_void_read_s8(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidReadS8(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -3982,7 +3982,7 @@
 }
 
 func (a *CmdVoidReadU16) String() string {
-	return fmt.Sprintf("cmd_void_read_u16(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidReadU16(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4014,7 +4014,7 @@
 }
 
 func (a *CmdVoidReadS16) String() string {
-	return fmt.Sprintf("cmd_void_read_s16(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidReadS16(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4046,7 +4046,7 @@
 }
 
 func (a *CmdVoidReadF32) String() string {
-	return fmt.Sprintf("cmd_void_read_f32(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidReadF32(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4078,7 +4078,7 @@
 }
 
 func (a *CmdVoidReadU32) String() string {
-	return fmt.Sprintf("cmd_void_read_u32(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidReadU32(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4110,7 +4110,7 @@
 }
 
 func (a *CmdVoidReadS32) String() string {
-	return fmt.Sprintf("cmd_void_read_s32(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidReadS32(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4142,7 +4142,7 @@
 }
 
 func (a *CmdVoidReadF64) String() string {
-	return fmt.Sprintf("cmd_void_read_f64(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidReadF64(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4174,7 +4174,7 @@
 }
 
 func (a *CmdVoidReadU64) String() string {
-	return fmt.Sprintf("cmd_void_read_u64(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidReadU64(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4206,7 +4206,7 @@
 }
 
 func (a *CmdVoidReadS64) String() string {
-	return fmt.Sprintf("cmd_void_read_s64(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidReadS64(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4238,7 +4238,7 @@
 }
 
 func (a *CmdVoidReadBool) String() string {
-	return fmt.Sprintf("cmd_void_read_bool(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidReadBool(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4272,7 +4272,7 @@
 }
 
 func (a *CmdVoidReadPtrs) String() string {
-	return fmt.Sprintf("cmd_void_read_ptrs(a: %v, b: %v, c: %v)", a.A, a.B, a.C)
+	return fmt.Sprintf("cmdVoidReadPtrs(a: %v, b: %v, c: %v)", a.A, a.B, a.C)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4304,7 +4304,7 @@
 }
 
 func (a *CmdVoidWriteU8) String() string {
-	return fmt.Sprintf("cmd_void_write_u8(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidWriteU8(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4336,7 +4336,7 @@
 }
 
 func (a *CmdVoidWriteS8) String() string {
-	return fmt.Sprintf("cmd_void_write_s8(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidWriteS8(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4368,7 +4368,7 @@
 }
 
 func (a *CmdVoidWriteU16) String() string {
-	return fmt.Sprintf("cmd_void_write_u16(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidWriteU16(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4400,7 +4400,7 @@
 }
 
 func (a *CmdVoidWriteS16) String() string {
-	return fmt.Sprintf("cmd_void_write_s16(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidWriteS16(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4432,7 +4432,7 @@
 }
 
 func (a *CmdVoidWriteF32) String() string {
-	return fmt.Sprintf("cmd_void_write_f32(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidWriteF32(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4464,7 +4464,7 @@
 }
 
 func (a *CmdVoidWriteU32) String() string {
-	return fmt.Sprintf("cmd_void_write_u32(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidWriteU32(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4496,7 +4496,7 @@
 }
 
 func (a *CmdVoidWriteS32) String() string {
-	return fmt.Sprintf("cmd_void_write_s32(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidWriteS32(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4528,7 +4528,7 @@
 }
 
 func (a *CmdVoidWriteF64) String() string {
-	return fmt.Sprintf("cmd_void_write_f64(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidWriteF64(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4560,7 +4560,7 @@
 }
 
 func (a *CmdVoidWriteU64) String() string {
-	return fmt.Sprintf("cmd_void_write_u64(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidWriteU64(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4592,7 +4592,7 @@
 }
 
 func (a *CmdVoidWriteS64) String() string {
-	return fmt.Sprintf("cmd_void_write_s64(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidWriteS64(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4624,7 +4624,7 @@
 }
 
 func (a *CmdVoidWriteBool) String() string {
-	return fmt.Sprintf("cmd_void_write_bool(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidWriteBool(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4658,7 +4658,7 @@
 }
 
 func (a *CmdVoidWritePtrs) String() string {
-	return fmt.Sprintf("cmd_void_write_ptrs(a: %v, b: %v, c: %v)", a.A, a.B, a.C)
+	return fmt.Sprintf("cmdVoidWritePtrs(a: %v, b: %v, c: %v)", a.A, a.B, a.C)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4690,7 +4690,7 @@
 }
 
 func (a *CmdU8) String() string {
-	return fmt.Sprintf("cmd_u8() → %v", a.Result)
+	return fmt.Sprintf("cmdU8() → %v", a.Result)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4722,7 +4722,7 @@
 }
 
 func (a *CmdS8) String() string {
-	return fmt.Sprintf("cmd_s8() → %v", a.Result)
+	return fmt.Sprintf("cmdS8() → %v", a.Result)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4754,7 +4754,7 @@
 }
 
 func (a *CmdU16) String() string {
-	return fmt.Sprintf("cmd_u16() → %v", a.Result)
+	return fmt.Sprintf("cmdU16() → %v", a.Result)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4786,7 +4786,7 @@
 }
 
 func (a *CmdS16) String() string {
-	return fmt.Sprintf("cmd_s16() → %v", a.Result)
+	return fmt.Sprintf("cmdS16() → %v", a.Result)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4818,7 +4818,7 @@
 }
 
 func (a *CmdF32) String() string {
-	return fmt.Sprintf("cmd_f32() → %v", a.Result)
+	return fmt.Sprintf("cmdF32() → %v", a.Result)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4850,7 +4850,7 @@
 }
 
 func (a *CmdU32) String() string {
-	return fmt.Sprintf("cmd_u32() → %v", a.Result)
+	return fmt.Sprintf("cmdU32() → %v", a.Result)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4882,7 +4882,7 @@
 }
 
 func (a *CmdS32) String() string {
-	return fmt.Sprintf("cmd_s32() → %v", a.Result)
+	return fmt.Sprintf("cmdS32() → %v", a.Result)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4914,7 +4914,7 @@
 }
 
 func (a *CmdF64) String() string {
-	return fmt.Sprintf("cmd_f64() → %v", a.Result)
+	return fmt.Sprintf("cmdF64() → %v", a.Result)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4946,7 +4946,7 @@
 }
 
 func (a *CmdU64) String() string {
-	return fmt.Sprintf("cmd_u64() → %v", a.Result)
+	return fmt.Sprintf("cmdU64() → %v", a.Result)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -4978,7 +4978,7 @@
 }
 
 func (a *CmdS64) String() string {
-	return fmt.Sprintf("cmd_s64() → %v", a.Result)
+	return fmt.Sprintf("cmdS64() → %v", a.Result)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -5010,7 +5010,7 @@
 }
 
 func (a *CmdBool) String() string {
-	return fmt.Sprintf("cmd_bool() → %v", a.Result)
+	return fmt.Sprintf("cmdBool() → %v", a.Result)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -5042,7 +5042,7 @@
 }
 
 func (a *CmdString) String() string {
-	return fmt.Sprintf("cmd_string() → %v", a.Result)
+	return fmt.Sprintf("cmdString() → %v", a.Result)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -5074,7 +5074,7 @@
 }
 
 func (a *CmdPointer) String() string {
-	return fmt.Sprintf("cmd_pointer() → %v", a.Result)
+	return fmt.Sprintf("cmdPointer() → %v", a.Result)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -5108,7 +5108,7 @@
 }
 
 func (a *CmdVoid3Remapped) String() string {
-	return fmt.Sprintf("cmd_void_3_remapped(a: %v, b: %v, c: %v)", a.A, a.B, a.C)
+	return fmt.Sprintf("cmdVoid3Remapped(a: %v, b: %v, c: %v)", a.A, a.B, a.C)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -5140,7 +5140,7 @@
 }
 
 func (a *CmdVoidInArrayOfRemapped) String() string {
-	return fmt.Sprintf("cmd_void_in_array_of_remapped(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidInArrayOfRemapped(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -5172,7 +5172,7 @@
 }
 
 func (a *CmdVoidOutArrayOfRemapped) String() string {
-	return fmt.Sprintf("cmd_void_out_array_of_remapped(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidOutArrayOfRemapped(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -5204,7 +5204,7 @@
 }
 
 func (a *CmdVoidOutArrayOfUnknownRemapped) String() string {
-	return fmt.Sprintf("cmd_void_out_array_of_unknown_remapped(a: %v)", a.A)
+	return fmt.Sprintf("cmdVoidOutArrayOfUnknownRemapped(a: %v)", a.A)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
@@ -5236,7 +5236,7 @@
 }
 
 func (a *CmdRemapped) String() string {
-	return fmt.Sprintf("cmd_remapped() → %v", a.Result)
+	return fmt.Sprintf("cmdRemapped() → %v", a.Result)
 }
 
 // AddRead appends a new read observation to the atom of the range rng with
diff --git a/gfxapi/test/gfxapi_test.api b/gfxapi/test/gfxapi_test.api
index 72696ed..b65e1c1 100644
--- a/gfxapi/test/gfxapi_test.api
+++ b/gfxapi/test/gfxapi_test.api
@@ -29,28 +29,28 @@
 int[]  ints
 string str
 
-cmd void cmd_clone(u8* src, u32 cnt) {
+cmd void cmdClone(u8* src, u32 cnt) {
   u8s = clone(src[0:cnt])
 }
 
-cmd void cmd_make(u32 cnt) {
+cmd void cmdMake(u32 cnt) {
   u8s = make!u8(cnt)
 }
 
-cmd void cmd_copy(u8* src, u32 cnt) {
+cmd void cmdCopy(u8* src, u32 cnt) {
   u8s = make!u8(cnt)
   copy(u8s, src[0:cnt])
 }
 
-cmd void cmd_charslice_to_string(char* s, u32 len) {
+cmd void cmdCharsliceToString(char* s, u32 len) {
   str = as!string(s[0:len])
 }
 
-cmd void cmd_charptr_to_string(char* s) {
+cmd void cmdCharptrToString(char* s) {
   str = as!string(s)
 }
 
-cmd void cmd_slice_casts(u16* s, u32 l) {
+cmd void cmdSliceCasts(u16* s, u32 l) {
   u8s  = as!u8[](s[0:l])
   u16s = as!u16[](s[0:l])
   u32s = as!u32[](s[0:l])
@@ -60,7 +60,7 @@
 ////////////////////////////////////////////////////////////////
 // Void, no args
 ////////////////////////////////////////////////////////////////
-cmd void cmd_void() {}
+cmd void cmdVoid() {}
 
 ////////////////////////////////////////////////////////////////
 // Unknown tests
@@ -68,27 +68,27 @@
 // TODO: These do not currently compile
 // int unk
 //
-// cmd int cmd_unknown_ret() {
+// cmd int cmdUnknownRet() {
 //   i := ?
 //   unk = i
 //   return i
 // }
 //
-// cmd void cmd_unknown_ptr(int* p) {
+// cmd void cmdUnknownPtr(int* p) {
 //   i := ?
 //   unk = i
 //   p[0] = i
 // }
 
-cmd int cmd_unknown_ret() {
+cmd int cmdUnknownRet() {
   return ?
 }
 
-cmd void cmd_unknown_write_ptr(int* p) {
+cmd void cmdUnknownWritePtr(int* p) {
   p[0] = ?
 }
 
-cmd void cmd_unknown_write_slice(int* a) {
+cmd void cmdUnknownWriteSlice(int* a) {
   count := 5
   slice := a[0:count]
   for i in (0 .. count) {
@@ -100,28 +100,28 @@
 ////////////////////////////////////////////////////////////////
 // Commands with a single input argument
 ////////////////////////////////////////////////////////////////
-cmd void cmd_void_u8(u8 a)         {}
-cmd void cmd_void_s8(s8 a)         {}
-cmd void cmd_void_u16(u16 a)       {}
-cmd void cmd_void_s16(s16 a)       {}
-cmd void cmd_void_f32(f32 a)       {}
-cmd void cmd_void_u32(u32 a)       {}
-cmd void cmd_void_s32(s32 a)       {}
-cmd void cmd_void_f64(f64 a)       {}
-cmd void cmd_void_u64(u64 a)       {}
-cmd void cmd_void_s64(s64 a)       {}
-cmd void cmd_void_bool(bool a)     {}
-cmd void cmd_void_string(string a) {}
+cmd void cmdVoidU8(u8 a)         {}
+cmd void cmdVoidS8(s8 a)         {}
+cmd void cmdVoidU16(u16 a)       {}
+cmd void cmdVoidS16(s16 a)       {}
+cmd void cmdVoidF32(f32 a)       {}
+cmd void cmdVoidU32(u32 a)       {}
+cmd void cmdVoidS32(s32 a)       {}
+cmd void cmdVoidF64(f64 a)       {}
+cmd void cmdVoidU64(u64 a)       {}
+cmd void cmdVoidS64(s64 a)       {}
+cmd void cmdVoidBool(bool a)     {}
+cmd void cmdVoidString(string a) {}
 
 ////////////////////////////////////////////////////////////////
 // Commands with more than one input
 ////////////////////////////////////////////////////////////////
-cmd void cmd_void_3_strings(string a, string b, string c) {}
+cmd void cmdVoid3Strings(string a, string b, string c) {}
 
 ////////////////////////////////////////////////////////////////
 // Commands with input arrays
 ////////////////////////////////////////////////////////////////
-cmd void cmd_void_3_in_arrays(u8* a, u32* b, int* c) {
+cmd void cmdVoid3InArrays(u8* a, u32* b, int* c) {
   u8s = make!u8(10)
   read(b[5:15])
 	read(c[5:15])
@@ -131,7 +131,7 @@
 ////////////////////////////////////////////////////////////////
 // Commands with input of arrays of pointers
 ////////////////////////////////////////////////////////////////
-cmd void cmd_void_in_array_of_pointers(char** a, s32 count) {
+cmd void cmdVoidInArrayOfPointers(char** a, s32 count) {
   slice := a[0:count]
   for i in (0 .. count) {
     x := slice[i][0]
@@ -141,22 +141,22 @@
 ////////////////////////////////////////////////////////////////
 // Commands with a single pointer element read
 ////////////////////////////////////////////////////////////////
-cmd void cmd_void_read_u8(u8* a)     { x := a[0] }
-cmd void cmd_void_read_s8(s8* a)     { x := a[0] }
-cmd void cmd_void_read_u16(u16* a)   { x := a[0] }
-cmd void cmd_void_read_s16(s16* a)   { x := a[0] }
-cmd void cmd_void_read_f32(f32* a)   { x := a[0] }
-cmd void cmd_void_read_u32(u32* a)   { x := a[0] }
-cmd void cmd_void_read_s32(s32* a)   { x := a[0] }
-cmd void cmd_void_read_f64(f64* a)   { x := a[0] }
-cmd void cmd_void_read_u64(u64* a)   { x := a[0] }
-cmd void cmd_void_read_s64(s64* a)   { x := a[0] }
-cmd void cmd_void_read_bool(bool* a) { x := a[0] }
+cmd void cmdVoidReadU8(u8* a)     { x := a[0] }
+cmd void cmdVoidReadS8(s8* a)     { x := a[0] }
+cmd void cmdVoidReadU16(u16* a)   { x := a[0] }
+cmd void cmdVoidReadS16(s16* a)   { x := a[0] }
+cmd void cmdVoidReadF32(f32* a)   { x := a[0] }
+cmd void cmdVoidReadU32(u32* a)   { x := a[0] }
+cmd void cmdVoidReadS32(s32* a)   { x := a[0] }
+cmd void cmdVoidReadF64(f64* a)   { x := a[0] }
+cmd void cmdVoidReadU64(u64* a)   { x := a[0] }
+cmd void cmdVoidReadS64(s64* a)   { x := a[0] }
+cmd void cmdVoidReadBool(bool* a) { x := a[0] }
 
 ////////////////////////////////////////////////////////////////
 // Commands with multiple pointer element reads
 ////////////////////////////////////////////////////////////////
-cmd void cmd_void_read_ptrs(f32* a, u16* b, bool* c) {
+cmd void cmdVoidReadPtrs(f32* a, u16* b, bool* c) {
   x := a[0]
   y := b[0]
   z := c[0]
@@ -165,22 +165,22 @@
 ////////////////////////////////////////////////////////////////
 // Commands with a single pointer element write
 ////////////////////////////////////////////////////////////////
-cmd void cmd_void_write_u8(u8* a)     { a[0] = 1 }
-cmd void cmd_void_write_s8(s8* a)     { a[0] = 1 }
-cmd void cmd_void_write_u16(u16* a)   { a[0] = 1 }
-cmd void cmd_void_write_s16(s16* a)   { a[0] = 1 }
-cmd void cmd_void_write_f32(f32* a)   { a[0] = 1 }
-cmd void cmd_void_write_u32(u32* a)   { a[0] = 1 }
-cmd void cmd_void_write_s32(s32* a)   { a[0] = 1 }
-cmd void cmd_void_write_f64(f64* a)   { a[0] = 1 }
-cmd void cmd_void_write_u64(u64* a)   { a[0] = 1 }
-cmd void cmd_void_write_s64(s64* a)   { a[0] = 1 }
-cmd void cmd_void_write_bool(bool* a) { a[0] = true }
+cmd void cmdVoidWriteU8(u8* a)     { a[0] = 1 }
+cmd void cmdVoidWriteS8(s8* a)     { a[0] = 1 }
+cmd void cmdVoidWriteU16(u16* a)   { a[0] = 1 }
+cmd void cmdVoidWriteS16(s16* a)   { a[0] = 1 }
+cmd void cmdVoidWriteF32(f32* a)   { a[0] = 1 }
+cmd void cmdVoidWriteU32(u32* a)   { a[0] = 1 }
+cmd void cmdVoidWriteS32(s32* a)   { a[0] = 1 }
+cmd void cmdVoidWriteF64(f64* a)   { a[0] = 1 }
+cmd void cmdVoidWriteU64(u64* a)   { a[0] = 1 }
+cmd void cmdVoidWriteS64(s64* a)   { a[0] = 1 }
+cmd void cmdVoidWriteBool(bool* a) { a[0] = true }
 
 ////////////////////////////////////////////////////////////////
 // Commands with multiple pointer element writes
 ////////////////////////////////////////////////////////////////
-cmd void cmd_void_write_ptrs(f32* a, u16* b, bool* c) {
+cmd void cmdVoidWritePtrs(f32* a, u16* b, bool* c) {
   a[0] = 10
   b[0] = 20
   c[0] = false
@@ -189,30 +189,30 @@
 ////////////////////////////////////////////////////////////////
 // Commands with a return value
 ////////////////////////////////////////////////////////////////
-cmd u8     cmd_u8()      { return 0 }
-cmd s8     cmd_s8()      { return 0 }
-cmd u16    cmd_u16()     { return 0 }
-cmd s16    cmd_s16()     { return 0 }
-cmd f32    cmd_f32()     { return 0 }
-cmd u32    cmd_u32()     { return 0 }
-cmd s32    cmd_s32()     { return 0 }
-cmd f64    cmd_f64()     { return 0 }
-cmd u64    cmd_u64()     { return 0 }
-cmd s64    cmd_s64()     { return 0 }
-cmd bool   cmd_bool()    { return false }
-cmd string cmd_string()  { return "" }
-cmd void*  cmd_pointer() { return ? }
+cmd u8     cmdU8()      { return 0 }
+cmd s8     cmdS8()      { return 0 }
+cmd u16    cmdU16()     { return 0 }
+cmd s16    cmdS16()     { return 0 }
+cmd f32    cmdF32()     { return 0 }
+cmd u32    cmdU32()     { return 0 }
+cmd s32    cmdS32()     { return 0 }
+cmd f64    cmdF64()     { return 0 }
+cmd u64    cmdU64()     { return 0 }
+cmd s64    cmdS64()     { return 0 }
+cmd bool   cmdBool()    { return false }
+cmd string cmdString()  { return "" }
+cmd void*  cmdPointer() { return ? }
 
 ////////////////////////////////////////////////////////////////
 // Commands with remapped arguments
 ////////////////////////////////////////////////////////////////
-cmd void cmd_void_3_remapped(remapped a, remapped b, remapped c) {}
+cmd void cmdVoid3Remapped(remapped a, remapped b, remapped c) {}
 
-cmd void cmd_void_in_array_of_remapped(remapped* a) { read(a[0:5]) }
+cmd void cmdVoidInArrayOfRemapped(remapped* a) { read(a[0:5]) }
 
-cmd void cmd_void_out_array_of_remapped(remapped* a) { write(a[0:5]) }
+cmd void cmdVoidOutArrayOfRemapped(remapped* a) { write(a[0:5]) }
 
-cmd void cmd_void_out_array_of_unknown_remapped(remapped* a) {
+cmd void cmdVoidOutArrayOfUnknownRemapped(remapped* a) {
   count := 5
   slice := a[0:count]
   for i in (0 .. count) {
@@ -221,4 +221,4 @@
   }
 }
 
-cmd remapped cmd_remapped() { return ? }
+cmd remapped cmdRemapped() { return ? }
diff --git a/gfxapi/test/schema.go b/gfxapi/test/schema.go
index a0538a4..b49c02f 100644
--- a/gfxapi/test/schema.go
+++ b/gfxapi/test/schema.go
@@ -13,7 +13,7 @@
 	sc_CmdClone := schema.Of((*CmdClone)(nil).Class())
 	sc_CmdClone.Metadata = append(sc_CmdClone.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_clone",
+		DisplayName:      "cmdClone",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -21,7 +21,7 @@
 	sc_CmdMake := schema.Of((*CmdMake)(nil).Class())
 	sc_CmdMake.Metadata = append(sc_CmdMake.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_make",
+		DisplayName:      "cmdMake",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -29,7 +29,7 @@
 	sc_CmdCopy := schema.Of((*CmdCopy)(nil).Class())
 	sc_CmdCopy.Metadata = append(sc_CmdCopy.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_copy",
+		DisplayName:      "cmdCopy",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -37,7 +37,7 @@
 	sc_CmdCharsliceToString := schema.Of((*CmdCharsliceToString)(nil).Class())
 	sc_CmdCharsliceToString.Metadata = append(sc_CmdCharsliceToString.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_charslice_to_string",
+		DisplayName:      "cmdCharsliceToString",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -45,7 +45,7 @@
 	sc_CmdCharptrToString := schema.Of((*CmdCharptrToString)(nil).Class())
 	sc_CmdCharptrToString.Metadata = append(sc_CmdCharptrToString.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_charptr_to_string",
+		DisplayName:      "cmdCharptrToString",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -53,7 +53,7 @@
 	sc_CmdSliceCasts := schema.Of((*CmdSliceCasts)(nil).Class())
 	sc_CmdSliceCasts.Metadata = append(sc_CmdSliceCasts.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_slice_casts",
+		DisplayName:      "cmdSliceCasts",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -61,7 +61,7 @@
 	sc_CmdVoid := schema.Of((*CmdVoid)(nil).Class())
 	sc_CmdVoid.Metadata = append(sc_CmdVoid.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void",
+		DisplayName:      "cmdVoid",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -69,7 +69,7 @@
 	sc_CmdUnknownRet := schema.Of((*CmdUnknownRet)(nil).Class())
 	sc_CmdUnknownRet.Metadata = append(sc_CmdUnknownRet.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_unknown_ret",
+		DisplayName:      "cmdUnknownRet",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -77,7 +77,7 @@
 	sc_CmdUnknownWritePtr := schema.Of((*CmdUnknownWritePtr)(nil).Class())
 	sc_CmdUnknownWritePtr.Metadata = append(sc_CmdUnknownWritePtr.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_unknown_write_ptr",
+		DisplayName:      "cmdUnknownWritePtr",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -85,7 +85,7 @@
 	sc_CmdUnknownWriteSlice := schema.Of((*CmdUnknownWriteSlice)(nil).Class())
 	sc_CmdUnknownWriteSlice.Metadata = append(sc_CmdUnknownWriteSlice.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_unknown_write_slice",
+		DisplayName:      "cmdUnknownWriteSlice",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -93,7 +93,7 @@
 	sc_CmdVoidU8 := schema.Of((*CmdVoidU8)(nil).Class())
 	sc_CmdVoidU8.Metadata = append(sc_CmdVoidU8.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_u8",
+		DisplayName:      "cmdVoidU8",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -101,7 +101,7 @@
 	sc_CmdVoidS8 := schema.Of((*CmdVoidS8)(nil).Class())
 	sc_CmdVoidS8.Metadata = append(sc_CmdVoidS8.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_s8",
+		DisplayName:      "cmdVoidS8",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -109,7 +109,7 @@
 	sc_CmdVoidU16 := schema.Of((*CmdVoidU16)(nil).Class())
 	sc_CmdVoidU16.Metadata = append(sc_CmdVoidU16.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_u16",
+		DisplayName:      "cmdVoidU16",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -117,7 +117,7 @@
 	sc_CmdVoidS16 := schema.Of((*CmdVoidS16)(nil).Class())
 	sc_CmdVoidS16.Metadata = append(sc_CmdVoidS16.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_s16",
+		DisplayName:      "cmdVoidS16",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -125,7 +125,7 @@
 	sc_CmdVoidF32 := schema.Of((*CmdVoidF32)(nil).Class())
 	sc_CmdVoidF32.Metadata = append(sc_CmdVoidF32.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_f32",
+		DisplayName:      "cmdVoidF32",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -133,7 +133,7 @@
 	sc_CmdVoidU32 := schema.Of((*CmdVoidU32)(nil).Class())
 	sc_CmdVoidU32.Metadata = append(sc_CmdVoidU32.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_u32",
+		DisplayName:      "cmdVoidU32",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -141,7 +141,7 @@
 	sc_CmdVoidS32 := schema.Of((*CmdVoidS32)(nil).Class())
 	sc_CmdVoidS32.Metadata = append(sc_CmdVoidS32.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_s32",
+		DisplayName:      "cmdVoidS32",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -149,7 +149,7 @@
 	sc_CmdVoidF64 := schema.Of((*CmdVoidF64)(nil).Class())
 	sc_CmdVoidF64.Metadata = append(sc_CmdVoidF64.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_f64",
+		DisplayName:      "cmdVoidF64",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -157,7 +157,7 @@
 	sc_CmdVoidU64 := schema.Of((*CmdVoidU64)(nil).Class())
 	sc_CmdVoidU64.Metadata = append(sc_CmdVoidU64.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_u64",
+		DisplayName:      "cmdVoidU64",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -165,7 +165,7 @@
 	sc_CmdVoidS64 := schema.Of((*CmdVoidS64)(nil).Class())
 	sc_CmdVoidS64.Metadata = append(sc_CmdVoidS64.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_s64",
+		DisplayName:      "cmdVoidS64",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -173,7 +173,7 @@
 	sc_CmdVoidBool := schema.Of((*CmdVoidBool)(nil).Class())
 	sc_CmdVoidBool.Metadata = append(sc_CmdVoidBool.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_bool",
+		DisplayName:      "cmdVoidBool",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -181,7 +181,7 @@
 	sc_CmdVoidString := schema.Of((*CmdVoidString)(nil).Class())
 	sc_CmdVoidString.Metadata = append(sc_CmdVoidString.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_string",
+		DisplayName:      "cmdVoidString",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -189,7 +189,7 @@
 	sc_CmdVoid3Strings := schema.Of((*CmdVoid3Strings)(nil).Class())
 	sc_CmdVoid3Strings.Metadata = append(sc_CmdVoid3Strings.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_3_strings",
+		DisplayName:      "cmdVoid3Strings",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -197,7 +197,7 @@
 	sc_CmdVoid3InArrays := schema.Of((*CmdVoid3InArrays)(nil).Class())
 	sc_CmdVoid3InArrays.Metadata = append(sc_CmdVoid3InArrays.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_3_in_arrays",
+		DisplayName:      "cmdVoid3InArrays",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -205,7 +205,7 @@
 	sc_CmdVoidInArrayOfPointers := schema.Of((*CmdVoidInArrayOfPointers)(nil).Class())
 	sc_CmdVoidInArrayOfPointers.Metadata = append(sc_CmdVoidInArrayOfPointers.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_in_array_of_pointers",
+		DisplayName:      "cmdVoidInArrayOfPointers",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -213,7 +213,7 @@
 	sc_CmdVoidReadU8 := schema.Of((*CmdVoidReadU8)(nil).Class())
 	sc_CmdVoidReadU8.Metadata = append(sc_CmdVoidReadU8.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_read_u8",
+		DisplayName:      "cmdVoidReadU8",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -221,7 +221,7 @@
 	sc_CmdVoidReadS8 := schema.Of((*CmdVoidReadS8)(nil).Class())
 	sc_CmdVoidReadS8.Metadata = append(sc_CmdVoidReadS8.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_read_s8",
+		DisplayName:      "cmdVoidReadS8",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -229,7 +229,7 @@
 	sc_CmdVoidReadU16 := schema.Of((*CmdVoidReadU16)(nil).Class())
 	sc_CmdVoidReadU16.Metadata = append(sc_CmdVoidReadU16.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_read_u16",
+		DisplayName:      "cmdVoidReadU16",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -237,7 +237,7 @@
 	sc_CmdVoidReadS16 := schema.Of((*CmdVoidReadS16)(nil).Class())
 	sc_CmdVoidReadS16.Metadata = append(sc_CmdVoidReadS16.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_read_s16",
+		DisplayName:      "cmdVoidReadS16",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -245,7 +245,7 @@
 	sc_CmdVoidReadF32 := schema.Of((*CmdVoidReadF32)(nil).Class())
 	sc_CmdVoidReadF32.Metadata = append(sc_CmdVoidReadF32.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_read_f32",
+		DisplayName:      "cmdVoidReadF32",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -253,7 +253,7 @@
 	sc_CmdVoidReadU32 := schema.Of((*CmdVoidReadU32)(nil).Class())
 	sc_CmdVoidReadU32.Metadata = append(sc_CmdVoidReadU32.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_read_u32",
+		DisplayName:      "cmdVoidReadU32",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -261,7 +261,7 @@
 	sc_CmdVoidReadS32 := schema.Of((*CmdVoidReadS32)(nil).Class())
 	sc_CmdVoidReadS32.Metadata = append(sc_CmdVoidReadS32.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_read_s32",
+		DisplayName:      "cmdVoidReadS32",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -269,7 +269,7 @@
 	sc_CmdVoidReadF64 := schema.Of((*CmdVoidReadF64)(nil).Class())
 	sc_CmdVoidReadF64.Metadata = append(sc_CmdVoidReadF64.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_read_f64",
+		DisplayName:      "cmdVoidReadF64",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -277,7 +277,7 @@
 	sc_CmdVoidReadU64 := schema.Of((*CmdVoidReadU64)(nil).Class())
 	sc_CmdVoidReadU64.Metadata = append(sc_CmdVoidReadU64.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_read_u64",
+		DisplayName:      "cmdVoidReadU64",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -285,7 +285,7 @@
 	sc_CmdVoidReadS64 := schema.Of((*CmdVoidReadS64)(nil).Class())
 	sc_CmdVoidReadS64.Metadata = append(sc_CmdVoidReadS64.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_read_s64",
+		DisplayName:      "cmdVoidReadS64",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -293,7 +293,7 @@
 	sc_CmdVoidReadBool := schema.Of((*CmdVoidReadBool)(nil).Class())
 	sc_CmdVoidReadBool.Metadata = append(sc_CmdVoidReadBool.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_read_bool",
+		DisplayName:      "cmdVoidReadBool",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -301,7 +301,7 @@
 	sc_CmdVoidReadPtrs := schema.Of((*CmdVoidReadPtrs)(nil).Class())
 	sc_CmdVoidReadPtrs.Metadata = append(sc_CmdVoidReadPtrs.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_read_ptrs",
+		DisplayName:      "cmdVoidReadPtrs",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -309,7 +309,7 @@
 	sc_CmdVoidWriteU8 := schema.Of((*CmdVoidWriteU8)(nil).Class())
 	sc_CmdVoidWriteU8.Metadata = append(sc_CmdVoidWriteU8.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_write_u8",
+		DisplayName:      "cmdVoidWriteU8",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -317,7 +317,7 @@
 	sc_CmdVoidWriteS8 := schema.Of((*CmdVoidWriteS8)(nil).Class())
 	sc_CmdVoidWriteS8.Metadata = append(sc_CmdVoidWriteS8.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_write_s8",
+		DisplayName:      "cmdVoidWriteS8",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -325,7 +325,7 @@
 	sc_CmdVoidWriteU16 := schema.Of((*CmdVoidWriteU16)(nil).Class())
 	sc_CmdVoidWriteU16.Metadata = append(sc_CmdVoidWriteU16.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_write_u16",
+		DisplayName:      "cmdVoidWriteU16",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -333,7 +333,7 @@
 	sc_CmdVoidWriteS16 := schema.Of((*CmdVoidWriteS16)(nil).Class())
 	sc_CmdVoidWriteS16.Metadata = append(sc_CmdVoidWriteS16.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_write_s16",
+		DisplayName:      "cmdVoidWriteS16",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -341,7 +341,7 @@
 	sc_CmdVoidWriteF32 := schema.Of((*CmdVoidWriteF32)(nil).Class())
 	sc_CmdVoidWriteF32.Metadata = append(sc_CmdVoidWriteF32.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_write_f32",
+		DisplayName:      "cmdVoidWriteF32",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -349,7 +349,7 @@
 	sc_CmdVoidWriteU32 := schema.Of((*CmdVoidWriteU32)(nil).Class())
 	sc_CmdVoidWriteU32.Metadata = append(sc_CmdVoidWriteU32.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_write_u32",
+		DisplayName:      "cmdVoidWriteU32",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -357,7 +357,7 @@
 	sc_CmdVoidWriteS32 := schema.Of((*CmdVoidWriteS32)(nil).Class())
 	sc_CmdVoidWriteS32.Metadata = append(sc_CmdVoidWriteS32.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_write_s32",
+		DisplayName:      "cmdVoidWriteS32",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -365,7 +365,7 @@
 	sc_CmdVoidWriteF64 := schema.Of((*CmdVoidWriteF64)(nil).Class())
 	sc_CmdVoidWriteF64.Metadata = append(sc_CmdVoidWriteF64.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_write_f64",
+		DisplayName:      "cmdVoidWriteF64",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -373,7 +373,7 @@
 	sc_CmdVoidWriteU64 := schema.Of((*CmdVoidWriteU64)(nil).Class())
 	sc_CmdVoidWriteU64.Metadata = append(sc_CmdVoidWriteU64.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_write_u64",
+		DisplayName:      "cmdVoidWriteU64",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -381,7 +381,7 @@
 	sc_CmdVoidWriteS64 := schema.Of((*CmdVoidWriteS64)(nil).Class())
 	sc_CmdVoidWriteS64.Metadata = append(sc_CmdVoidWriteS64.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_write_s64",
+		DisplayName:      "cmdVoidWriteS64",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -389,7 +389,7 @@
 	sc_CmdVoidWriteBool := schema.Of((*CmdVoidWriteBool)(nil).Class())
 	sc_CmdVoidWriteBool.Metadata = append(sc_CmdVoidWriteBool.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_write_bool",
+		DisplayName:      "cmdVoidWriteBool",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -397,7 +397,7 @@
 	sc_CmdVoidWritePtrs := schema.Of((*CmdVoidWritePtrs)(nil).Class())
 	sc_CmdVoidWritePtrs.Metadata = append(sc_CmdVoidWritePtrs.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_write_ptrs",
+		DisplayName:      "cmdVoidWritePtrs",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -405,7 +405,7 @@
 	sc_CmdU8 := schema.Of((*CmdU8)(nil).Class())
 	sc_CmdU8.Metadata = append(sc_CmdU8.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_u8",
+		DisplayName:      "cmdU8",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -413,7 +413,7 @@
 	sc_CmdS8 := schema.Of((*CmdS8)(nil).Class())
 	sc_CmdS8.Metadata = append(sc_CmdS8.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_s8",
+		DisplayName:      "cmdS8",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -421,7 +421,7 @@
 	sc_CmdU16 := schema.Of((*CmdU16)(nil).Class())
 	sc_CmdU16.Metadata = append(sc_CmdU16.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_u16",
+		DisplayName:      "cmdU16",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -429,7 +429,7 @@
 	sc_CmdS16 := schema.Of((*CmdS16)(nil).Class())
 	sc_CmdS16.Metadata = append(sc_CmdS16.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_s16",
+		DisplayName:      "cmdS16",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -437,7 +437,7 @@
 	sc_CmdF32 := schema.Of((*CmdF32)(nil).Class())
 	sc_CmdF32.Metadata = append(sc_CmdF32.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_f32",
+		DisplayName:      "cmdF32",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -445,7 +445,7 @@
 	sc_CmdU32 := schema.Of((*CmdU32)(nil).Class())
 	sc_CmdU32.Metadata = append(sc_CmdU32.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_u32",
+		DisplayName:      "cmdU32",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -453,7 +453,7 @@
 	sc_CmdS32 := schema.Of((*CmdS32)(nil).Class())
 	sc_CmdS32.Metadata = append(sc_CmdS32.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_s32",
+		DisplayName:      "cmdS32",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -461,7 +461,7 @@
 	sc_CmdF64 := schema.Of((*CmdF64)(nil).Class())
 	sc_CmdF64.Metadata = append(sc_CmdF64.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_f64",
+		DisplayName:      "cmdF64",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -469,7 +469,7 @@
 	sc_CmdU64 := schema.Of((*CmdU64)(nil).Class())
 	sc_CmdU64.Metadata = append(sc_CmdU64.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_u64",
+		DisplayName:      "cmdU64",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -477,7 +477,7 @@
 	sc_CmdS64 := schema.Of((*CmdS64)(nil).Class())
 	sc_CmdS64.Metadata = append(sc_CmdS64.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_s64",
+		DisplayName:      "cmdS64",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -485,7 +485,7 @@
 	sc_CmdBool := schema.Of((*CmdBool)(nil).Class())
 	sc_CmdBool.Metadata = append(sc_CmdBool.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_bool",
+		DisplayName:      "cmdBool",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -493,7 +493,7 @@
 	sc_CmdString := schema.Of((*CmdString)(nil).Class())
 	sc_CmdString.Metadata = append(sc_CmdString.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_string",
+		DisplayName:      "cmdString",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -501,7 +501,7 @@
 	sc_CmdPointer := schema.Of((*CmdPointer)(nil).Class())
 	sc_CmdPointer.Metadata = append(sc_CmdPointer.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_pointer",
+		DisplayName:      "cmdPointer",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -509,7 +509,7 @@
 	sc_CmdVoid3Remapped := schema.Of((*CmdVoid3Remapped)(nil).Class())
 	sc_CmdVoid3Remapped.Metadata = append(sc_CmdVoid3Remapped.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_3_remapped",
+		DisplayName:      "cmdVoid3Remapped",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -517,7 +517,7 @@
 	sc_CmdVoidInArrayOfRemapped := schema.Of((*CmdVoidInArrayOfRemapped)(nil).Class())
 	sc_CmdVoidInArrayOfRemapped.Metadata = append(sc_CmdVoidInArrayOfRemapped.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_in_array_of_remapped",
+		DisplayName:      "cmdVoidInArrayOfRemapped",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -525,7 +525,7 @@
 	sc_CmdVoidOutArrayOfRemapped := schema.Of((*CmdVoidOutArrayOfRemapped)(nil).Class())
 	sc_CmdVoidOutArrayOfRemapped.Metadata = append(sc_CmdVoidOutArrayOfRemapped.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_out_array_of_remapped",
+		DisplayName:      "cmdVoidOutArrayOfRemapped",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -533,7 +533,7 @@
 	sc_CmdVoidOutArrayOfUnknownRemapped := schema.Of((*CmdVoidOutArrayOfUnknownRemapped)(nil).Class())
 	sc_CmdVoidOutArrayOfUnknownRemapped.Metadata = append(sc_CmdVoidOutArrayOfUnknownRemapped.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_void_out_array_of_unknown_remapped",
+		DisplayName:      "cmdVoidOutArrayOfUnknownRemapped",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
@@ -541,7 +541,7 @@
 	sc_CmdRemapped := schema.Of((*CmdRemapped)(nil).Class())
 	sc_CmdRemapped.Metadata = append(sc_CmdRemapped.Metadata, &atom.Metadata{
 		API:              apiID,
-		DisplayName:      "cmd_remapped",
+		DisplayName:      "cmdRemapped",
 		Flags:            0,
 		DocumentationUrl: "[]",
 	})
diff --git a/tools/codergen/format/writer.go b/reflow/writer.go
similarity index 71%
rename from tools/codergen/format/writer.go
rename to reflow/writer.go
index dbcff05..5efd2b6 100644
--- a/tools/codergen/format/writer.go
+++ b/reflow/writer.go
@@ -12,7 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package format
+// Package reflow supports rewriting the whitespace in a stream of runes.
+package reflow
 
 import (
 	"bytes"
@@ -31,6 +32,7 @@
 	Flush    = 'ø' // flushes text, resets column detection
 )
 
+// New constructs a new reflow Writer with the default indent of 2 spaces.
 func New(w io.Writer) *Writer {
 	return &Writer{
 		out:    tabwriter.NewWriter(w, 1, 2, 1, ' ', tabwriter.StripEscape),
@@ -38,10 +40,19 @@
 	}
 }
 
+// Writer is an io.Writer that uses unicode markup to reflow the text passing
+// through it.
+// Whitespace at the start and end of input lines, along with the newline
+// characters themselves will be stripped.
+// ¶ Will be replaced by a newline.
+// • Will be converted to a space.
+// It will attempt to line up columns indicated by â•‘ in adjacent lines using a tabwriter.
+// The indent level can be increased by » and decreased by «.
+// § can be used to disable the reflow behaviours, and reenable them again.
 type Writer struct {
-	Depth     int
-	Indent    string
-	Disabled  bool
+	Depth     int    // The current indentation depth.
+	Indent    string // The string to repeat as the indentation.
+	Disabled  bool   // The current disabled state of the writer.
 	out       *tabwriter.Writer
 	space     bytes.Buffer
 	lastDepth int
@@ -50,6 +61,7 @@
 	runeBuf   [4]byte
 }
 
+// Write implements io.Writer with the reflow logic.
 func (w *Writer) Write(data []byte) (n int, err error) {
 	n = len(data)
 	for _, r := range string(data) {
@@ -118,12 +130,15 @@
 	return n, err
 }
 
+// WriteRune writes the UTF-8 encoding of Unicode code point r, returning an error if it cannot.
 func (w *Writer) WriteRune(r rune) error {
 	n := utf8.EncodeRune(w.runeBuf[:], r)
 	_, err := w.out.Write(w.runeBuf[:n])
 	return err
 }
 
+// Flush causes any cached bytes to be flushed to the underlying stream.
+// This has the side effect of forcing a reset of column detection.
 func (w *Writer) Flush() {
 	w.out.Flush()
 }
diff --git a/rpc/rpc.go b/rpc/rpc.go
index 103c7a6..708df67 100644
--- a/rpc/rpc.go
+++ b/rpc/rpc.go
@@ -20,6 +20,7 @@
 
 // binary: java.source = base/rpclib/src/main/java
 // binary: java.package = com.android.tools.rpclib.rpccore
+// binary: java.indent = "    "
 // binary: java.member_prefix = m
 
 import (
diff --git a/tools/clean_generated/main.go b/tools/clean_generated/main.go
index 8421fdf..f17b947 100644
--- a/tools/clean_generated/main.go
+++ b/tools/clean_generated/main.go
@@ -22,6 +22,7 @@
 	"os"
 	"path/filepath"
 
+	"android.googlesource.com/platform/tools/gpu/tools/codergen/template"
 	"android.googlesource.com/platform/tools/gpu/tools/copyright"
 )
 
@@ -32,6 +33,8 @@
 options:`
 	noactions = flag.Bool("n", false,
 		"don't perform any actions, just print information")
+	sectionfiles = flag.Bool("sectionfiles", false,
+		"disable section processing, will delete whole files")
 	usage_footer = `
 The search is rooted at the current working directory.
 It finds files with a known extension and a known generated file header comment.
@@ -68,9 +71,45 @@
 			if copyright.MatchGenerated(file) == 0 {
 				return nil
 			}
-			fmt.Printf("rm %s\n", path)
-			if !*noactions {
-				os.Remove(path)
+			var sections []template.Section
+			if !*sectionfiles {
+				sections, err = template.SectionSplit(file)
+				if err != nil {
+					return err
+				}
+			}
+			if len(sections) > 0 {
+				fmt.Printf("rewrite %s\n", path)
+				if !*noactions {
+					out, err := os.Create(path)
+					if err != nil {
+						return err
+					}
+					for _, s := range sections {
+						if s.Name == "" {
+							// copy the non template section back to the file
+							_, err = out.Write(s.Body)
+							if err != nil {
+								return err
+							}
+						} else {
+							// copy the markers but drop the body
+							_, err = out.Write(s.StartMarker)
+							if err != nil {
+								return err
+							}
+							_, err = out.Write(s.EndMarker)
+							if err != nil {
+								return err
+							}
+						}
+					}
+				}
+			} else {
+				fmt.Printf("rm %s\n", path)
+				if !*noactions {
+					os.Remove(path)
+				}
 			}
 			return nil
 		})
diff --git a/tools/codergen/template/embed.go b/tools/codergen/template/embed.go
index d0357c5..7978191 100644
--- a/tools/codergen/template/embed.go
+++ b/tools/codergen/template/embed.go
@@ -1005,6 +1005,50 @@
   «}¶
 {{end}}
 
+{{define "Java.ClassBody"}}
+  ¶{{/*Newline after section marker*/}}
+  {{range .Struct.Fields}}{{template "Java.Field" .}}{{end}}
+  ¶
+  // Constructs a default-initialized {@link {{File.ClassName .Struct}}}.¶
+  public {{File.ClassName .Struct}}() {Ȧ
+  «}¶
+  ¶
+  // Constructs and decodes a {@link {{File.ClassName .Struct}}} from the {@link Decoder} d.¶
+  public {{File.ClassName .Struct}}(Decoder d) throws IOException {Ȧ
+    Klass.INSTANCE.decode(d, this);¶
+  «}¶
+  {{range .Struct.Fields}}{{template "Java.Accessors" .}}{{end}}
+  ¶
+  @Override @NotNull¶
+  public BinaryClass klass() { return Klass.INSTANCE; }¶
+  ¶
+  public static byte[] IDBytes = {
+    {{range .Struct.ID}}{{ToS8 .}}, {{end}}
+  •};¶
+  public static BinaryID ID = new BinaryID(IDBytes);¶
+  ¶
+  static {Ȧ
+    Namespace.register(ID, Klass.INSTANCE);¶
+  «}¶
+  //{{/*Comment the following section marker*/}}
+{{end}}
+
+{{define "Java.KlassBody"}}
+  ¶{{/*Newline after section marker*/}}
+  INSTANCE;¶
+  ¶
+  @Override @NotNull¶
+  public BinaryID id() { return ID; }¶
+  ¶
+  @Override @NotNull¶
+  public BinaryObject create() { return new {{File.ClassName .Struct}}(); }¶
+  ¶
+  {{template "Java.Encoder" .Struct}}
+  ¶
+  {{template "Java.Decoder" .Struct}}
+  //{{/*Comment the following section marker*/}}
+{{end}}
+
 {{define "Java.File"}}
   §{{$.Copyright}}§¶
   package {{.JavaPackage}};¶
@@ -1023,40 +1067,9 @@

   {{if .Struct.Exported}}public•{{end}}
   final class {{File.ClassName .Struct}}{{if $e := .Struct.Tags.Get  "implements"}} extends {{File.ClassName $e}}{{end}} implements BinaryObject {Ȧ
-    {{range .Struct.Fields}}{{template "Java.Field" .}}{{end}}
-    ¶
-    // Constructs a default-initialized {@link {{File.ClassName .Struct}}}.¶
-    public {{File.ClassName .Struct}}() {Ȧ
-    «}¶
-    ¶
-    // Constructs and decodes a {@link {{File.ClassName .Struct}}} from the {@link Decoder} d.¶
-    public {{File.ClassName .Struct}}(Decoder d) throws IOException {Ȧ
-      Klass.INSTANCE.decode(d, this);¶
-    «}¶
-    {{range .Struct.Fields}}{{template "Java.Accessors" .}}{{end}}
-    ¶
-    @Override @NotNull¶
-    public BinaryClass klass() { return Klass.INSTANCE; }¶
-    ¶
-    public static byte[] IDBytes = {
-      {{range .Struct.ID}}{{ToS8 .}}, {{end}}
-    •};¶
-    public static BinaryID ID = new BinaryID(IDBytes);¶
+    //{{Section "Java.ClassBody"}}¶
     public enum Klass implements BinaryClass {Ȧ
-      INSTANCE;¶
-      ¶
-      @Override @NotNull¶
-      public BinaryID id() { return ID; }¶
-      ¶
-      @Override @NotNull¶
-      public BinaryObject create() { return new {{File.ClassName .Struct}}(); }¶
-      ¶
-      {{template "Java.Encoder" .Struct}}
-      ¶
-      {{template "Java.Decoder" .Struct}}
-    «}¶
-    static {Ȧ
-      Namespace.register(ID, Klass.INSTANCE);¶
+      //{{Section "Java.KlassBody"}}¶
     «}¶
   «}¶
 {{end}}
diff --git a/tools/codergen/template/functions.go b/tools/codergen/template/functions.go
index 0f9fd8c..1771817 100644
--- a/tools/codergen/template/functions.go
+++ b/tools/codergen/template/functions.go
@@ -16,12 +16,9 @@
 
 import (
 	"fmt"
-	"io"
-	"strconv"
 	"strings"
 
 	"android.googlesource.com/platform/tools/gpu/binary/schema"
-	"android.googlesource.com/platform/tools/gpu/tools/codergen/format"
 )
 
 type variable struct {
@@ -44,18 +41,6 @@
 	return "", tmpl.Execute(t.writer, arg)
 }
 
-func (t *Templates) Section(name string) (string, error) {
-	w, ok := t.writer.(*format.Writer)
-	if !ok {
-		return "", fmt.Errorf("Section called inside nested writer")
-	}
-	depth := strconv.Itoa(w.Depth)
-	io.WriteString(t.writer, fmt.Sprintf(sectionMarker, sectionStart, name, depth))
-	err := t.execute(name, t.writer, t.File)
-	io.WriteString(t.writer, fmt.Sprintf(sectionMarker, sectionEnd, name, depth))
-	return "", err
-}
-
 func (*Templates) Lower(s interface{}) string {
 	return strings.ToLower(fmt.Sprint(s))
 }
diff --git a/tools/codergen/template/java_binary.tmpl b/tools/codergen/template/java_binary.tmpl
index bc1a08a..163bad5 100644
--- a/tools/codergen/template/java_binary.tmpl
+++ b/tools/codergen/template/java_binary.tmpl
@@ -95,6 +95,50 @@
   «}¶
 {{end}}
 
+{{define "Java.ClassBody"}}
+  ¶{{/*Newline after section marker*/}}
+  {{range .Struct.Fields}}{{template "Java.Field" .}}{{end}}
+  ¶
+  // Constructs a default-initialized {@link {{File.ClassName .Struct}}}.¶
+  public {{File.ClassName .Struct}}() {Ȧ
+  «}¶
+  ¶
+  // Constructs and decodes a {@link {{File.ClassName .Struct}}} from the {@link Decoder} d.¶
+  public {{File.ClassName .Struct}}(Decoder d) throws IOException {Ȧ
+    Klass.INSTANCE.decode(d, this);¶
+  «}¶
+  {{range .Struct.Fields}}{{template "Java.Accessors" .}}{{end}}
+  ¶
+  @Override @NotNull¶
+  public BinaryClass klass() { return Klass.INSTANCE; }¶
+  ¶
+  public static byte[] IDBytes = {
+    {{range .Struct.ID}}{{ToS8 .}}, {{end}}
+  •};¶
+  public static BinaryID ID = new BinaryID(IDBytes);¶
+  ¶
+  static {Ȧ
+    Namespace.register(ID, Klass.INSTANCE);¶
+  «}¶
+  //{{/*Comment the following section marker*/}}
+{{end}}
+
+{{define "Java.KlassBody"}}
+  ¶{{/*Newline after section marker*/}}
+  INSTANCE;¶
+  ¶
+  @Override @NotNull¶
+  public BinaryID id() { return ID; }¶
+  ¶
+  @Override @NotNull¶
+  public BinaryObject create() { return new {{File.ClassName .Struct}}(); }¶
+  ¶
+  {{template "Java.Encoder" .Struct}}
+  ¶
+  {{template "Java.Decoder" .Struct}}
+  //{{/*Comment the following section marker*/}}
+{{end}}
+
 {{define "Java.File"}}
   §{{$.Copyright}}§¶
   package {{.JavaPackage}};¶
@@ -113,40 +157,9 @@

   {{if .Struct.Exported}}public•{{end}}
   final class {{File.ClassName .Struct}}{{if $e := .Struct.Tags.Get  "implements"}} extends {{File.ClassName $e}}{{end}} implements BinaryObject {Ȧ
-    {{range .Struct.Fields}}{{template "Java.Field" .}}{{end}}
-    ¶
-    // Constructs a default-initialized {@link {{File.ClassName .Struct}}}.¶
-    public {{File.ClassName .Struct}}() {Ȧ
-    «}¶
-    ¶
-    // Constructs and decodes a {@link {{File.ClassName .Struct}}} from the {@link Decoder} d.¶
-    public {{File.ClassName .Struct}}(Decoder d) throws IOException {Ȧ
-      Klass.INSTANCE.decode(d, this);¶
-    «}¶
-    {{range .Struct.Fields}}{{template "Java.Accessors" .}}{{end}}
-    ¶
-    @Override @NotNull¶
-    public BinaryClass klass() { return Klass.INSTANCE; }¶
-    ¶
-    public static byte[] IDBytes = {
-      {{range .Struct.ID}}{{ToS8 .}}, {{end}}
-    •};¶
-    public static BinaryID ID = new BinaryID(IDBytes);¶
+    //{{Section "Java.ClassBody"}}¶
     public enum Klass implements BinaryClass {Ȧ
-      INSTANCE;¶
-      ¶
-      @Override @NotNull¶
-      public BinaryID id() { return ID; }¶
-      ¶
-      @Override @NotNull¶
-      public BinaryObject create() { return new {{File.ClassName .Struct}}(); }¶
-      ¶
-      {{template "Java.Encoder" .Struct}}
-      ¶
-      {{template "Java.Decoder" .Struct}}
-    «}¶
-    static {Ȧ
-      Namespace.register(ID, Klass.INSTANCE);¶
+      //{{Section "Java.KlassBody"}}¶
     «}¶
   «}¶
 {{end}}
diff --git a/tools/codergen/template/section.go b/tools/codergen/template/section.go
new file mode 100644
index 0000000..b62e7b0
--- /dev/null
+++ b/tools/codergen/template/section.go
@@ -0,0 +1,123 @@
+// Copyright (C) 2014 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 template
+
+import (
+	"fmt"
+	"io"
+	"regexp"
+	"strconv"
+
+	"android.googlesource.com/platform/tools/gpu/reflow"
+)
+
+const (
+	sectionMarker    = `<<<%s:%s:%s>>>`
+	sectionStart     = `Start`
+	sectionEnd       = `End`
+	sectionParameter = `([^\:>]+)`
+)
+
+var (
+	section = regexp.MustCompile(fmt.Sprintf(sectionMarker, sectionParameter, sectionParameter, sectionParameter))
+)
+
+// Section writes a new file section with associated templates.
+// It takes the name of the template to use to fill the section in, and wraps it
+// in the section markers.
+func (t *Templates) Section(name string) (string, error) {
+	w, ok := t.writer.(*reflow.Writer)
+	if !ok {
+		return "", fmt.Errorf("Section called inside nested writer")
+	}
+	depth := strconv.Itoa(w.Depth)
+	io.WriteString(t.writer, fmt.Sprintf(sectionMarker, sectionStart, name, depth))
+	err := t.execute(name, t.writer, t.File)
+	io.WriteString(t.writer, fmt.Sprintf(sectionMarker, sectionEnd, name, depth))
+	return "", err
+}
+
+// Section represents a span of text in a file, segmented using SectionSplit.
+// If the section has a Name it will also have a StartMarker and EndMarker, otherwise
+// they will be empty.
+type Section struct {
+	Name        string // The name the section was given.
+	Indentation int    // The indentation level of the section.
+	StartMarker []byte // The bytes that marked the start of the section.
+	Body        []byte // The content of the section.
+	EndMarker   []byte // The bytes that marked the end of the section.
+}
+
+// SectionSplit breaks a file up into it's sections, and returns the slices with
+// the section header.
+// Named sections are delimited by <<<Start:name:depth>>> to <<<End:name:depth>>>
+// markers, areas between named sections are returned as unnamed sections.
+func SectionSplit(data []byte) ([]Section, error) {
+	matches := section.FindAllSubmatchIndex(data, -1)
+	if len(matches) == 0 {
+		return nil, nil
+	}
+	s := Section{}
+	sections := make([]Section, 0, len(matches)+1)
+	last := 0
+	// we are doing a partial update...
+	for _, match := range matches {
+		marker := data[match[0]:match[1]]
+		mode := string(data[match[2]:match[3]])
+		name := string(data[match[4]:match[5]])
+		level := string(data[match[6]:match[7]])
+		depth, err := strconv.Atoi(string(data[match[6]:match[7]]))
+		if err != nil {
+			return nil, fmt.Errorf("Indentation depth malformed, got %s in %s", level, name)
+		}
+		switch mode {
+		case sectionStart:
+			if s.Name != "" {
+				return nil, fmt.Errorf("Overlapping template %s found starting %s", s.Name, name)
+			}
+			// section start, add the prefix section
+			if last != match[0] {
+				s.Body = data[last:match[0]]
+				sections = append(sections, s)
+			}
+			// And prepare the section itself
+			s = Section{Name: name, Indentation: depth, StartMarker: marker}
+			last = match[1]
+		case sectionEnd:
+			// section end marker, check it matches
+			if name != s.Name {
+				return nil, fmt.Errorf("Invalid end %s found, expected %s", name, s.Name)
+			}
+			// write the end marker out throught the formatting writer
+			s.Body = data[last:match[0]]
+			s.EndMarker = marker
+			sections = append(sections, s)
+			// prepare for the next section
+			s = Section{}
+			last = match[1]
+		default:
+			return nil, fmt.Errorf("Invalid section marker %q", mode)
+		}
+	}
+	if s.Name != "" {
+		return nil, fmt.Errorf("Unclosed template %s found", s.Name)
+	}
+	// section start, add the prefix section
+	if last != len(data) {
+		s.Body = data[last:]
+		sections = append(sections, s)
+	}
+	return sections, nil
+}
diff --git a/tools/codergen/template/template.go b/tools/codergen/template/template.go
index 29538aa..e5dd907 100644
--- a/tools/codergen/template/template.go
+++ b/tools/codergen/template/template.go
@@ -22,15 +22,13 @@
 	"os"
 	"path/filepath"
 	"reflect"
-	"regexp"
-	"strconv"
 	"strings"
 	"text/template"
 	"unicode"
 	"unicode/utf8"
 
 	"android.googlesource.com/platform/tools/gpu/binary/schema"
-	"android.googlesource.com/platform/tools/gpu/tools/codergen/format"
+	"android.googlesource.com/platform/tools/gpu/reflow"
 	"android.googlesource.com/platform/tools/gpu/tools/codergen/generate"
 )
 
@@ -92,67 +90,38 @@
 	return f
 }
 
-var (
-	sectionMarker = "<<<%s:%s:%s>>>"
-	sectionStart  = "Start"
-	sectionEnd    = "End"
-	section       = regexp.MustCompile(fmt.Sprintf(sectionMarker, "(.+)", "(.+)", "(.+)"))
-)
-
 // Generate is an implementation of generate.Generator
 func (t *Templates) Generate(g generate.Generate) (bool, error) {
 	t.File = g.Arg
 	defer func() { t.File = nil }()
 	old, _ := ioutil.ReadFile(g.Output)
 	buf := &bytes.Buffer{}
-	out := format.New(buf)
+	out := reflow.New(buf)
 	out.Indent = g.Indent
-	matches := section.FindAllSubmatchIndex(old, -1)
-	if len(matches) > 0 {
-		last := 0
-		tmpl := ""
+
+	sections, err := SectionSplit(old)
+	if err != nil {
+		return false, err
+	}
+	if len(sections) > 0 {
 		// we are doing a partial update...
-		for _, match := range matches {
-			mode := string(old[match[2]:match[3]])
-			name := string(old[match[4]:match[5]])
-			level := string(old[match[6]:match[7]])
-			depth, err := strconv.Atoi(string(old[match[6]:match[7]]))
-			if err != nil {
-				return false, fmt.Errorf("Indentation depth malformed, got %s in %s", level, name)
-			}
-			switch mode {
-			case sectionStart:
-				if tmpl != "" {
-					return false, fmt.Errorf("Overlapping template %s found starting %s", tmpl, name)
-				}
-				// section start, write the prefix
-				buf.Write(old[last:match[1]])
-				// now run the template
-				tmpl = name
-				out.Depth = depth
-				if err := t.execute(tmpl, out, g.Arg); err != nil {
+		for _, s := range sections {
+			if s.Name == "" {
+				// copy the non template section straight to the underlying buf
+				buf.Write(s.Body)
+			} else {
+				// Write the start marker straight to the underlying buf
+				buf.Write(s.StartMarker)
+				out.Depth = s.Indentation
+				// Execute the template to generate a new body
+				if err := t.execute(s.Name, out, g.Arg); err != nil {
 					return false, err
 				}
-			case sectionEnd:
-				// section end marker, check it matches
-				if name != tmpl {
-					return false, fmt.Errorf("Invalid end %s found, expected %s", name, tmpl)
-				}
-				// write the end marker out throught the formatting writer
-				out.Write(old[match[0]:match[1]])
+				// write the end marker out through the formatting writer
+				out.Write(s.EndMarker)
 				out.Flush()
-				// set the markers ready for the next write
-				tmpl = ""
-				last = match[1]
-			default:
-				return false, fmt.Errorf("Invalid section marker %s:%s", mode, name)
 			}
 		}
-		if tmpl != "" {
-			return false, fmt.Errorf("Unclosed template %s found", tmpl)
-		}
-		// write the prefix
-		buf.Write(old[last:])
 	} else {
 		if err := t.execute(g.Name, out, g.Arg); err != nil {
 			return false, err
diff --git a/tools/generate_gles_api/download.go b/tools/generate_gles_api/download.go
new file mode 100644
index 0000000..b194f15
--- /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 0000000..e512b7e
--- /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, "&lt;", "<", -1)
+	page = strings.Replace(page, "&gt;", ">", -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 0000000..eeb399d
--- /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 0000000..ee143b8
--- /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 0000000..263a558
--- /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 0000000..4771814
--- /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 0000000..6fb6e20
--- /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
+}