// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// This file is auto-generated from
// ui/gl/generate_bindings.py
// It's formatted by clang-format using chromium coding style:
//    clang-format -i -style=chromium filename
// DO NOT EDIT!

// The following line silences a presubmit warning that would otherwise be
// triggered by this:
// no-include-guard-because-multiply-included

static void GL_BINDING_CALL Mock_glActiveShaderProgram(GLuint pipeline,
                                                       GLuint program);
static void GL_BINDING_CALL Mock_glActiveTexture(GLenum texture);
static void GL_BINDING_CALL Mock_glApplyFramebufferAttachmentCMAAINTEL(void);
static void GL_BINDING_CALL Mock_glAttachShader(GLuint program, GLuint shader);
static void GL_BINDING_CALL Mock_glBeginQuery(GLenum target, GLuint id);
static void GL_BINDING_CALL Mock_glBeginQueryARB(GLenum target, GLuint id);
static void GL_BINDING_CALL Mock_glBeginQueryEXT(GLenum target, GLuint id);
static void GL_BINDING_CALL Mock_glBeginTransformFeedback(GLenum primitiveMode);
static void GL_BINDING_CALL
Mock_glBeginTransformFeedbackEXT(GLenum primitiveMode);
static void GL_BINDING_CALL Mock_glBindAttribLocation(GLuint program,
                                                      GLuint index,
                                                      const char* name);
static void GL_BINDING_CALL Mock_glBindBuffer(GLenum target, GLuint buffer);
static void GL_BINDING_CALL Mock_glBindBufferBase(GLenum target,
                                                  GLuint index,
                                                  GLuint buffer);
static void GL_BINDING_CALL Mock_glBindBufferBaseEXT(GLenum target,
                                                     GLuint index,
                                                     GLuint buffer);
static void GL_BINDING_CALL Mock_glBindBufferRange(GLenum target,
                                                   GLuint index,
                                                   GLuint buffer,
                                                   GLintptr offset,
                                                   GLsizeiptr size);
static void GL_BINDING_CALL Mock_glBindBufferRangeEXT(GLenum target,
                                                      GLuint index,
                                                      GLuint buffer,
                                                      GLintptr offset,
                                                      GLsizeiptr size);
static void GL_BINDING_CALL Mock_glBindFragDataLocation(GLuint program,
                                                        GLuint colorNumber,
                                                        const char* name);
static void GL_BINDING_CALL Mock_glBindFragDataLocationEXT(GLuint program,
                                                           GLuint colorNumber,
                                                           const char* name);
static void GL_BINDING_CALL
Mock_glBindFragDataLocationIndexed(GLuint program,
                                   GLuint colorNumber,
                                   GLuint index,
                                   const char* name);
static void GL_BINDING_CALL
Mock_glBindFragDataLocationIndexedEXT(GLuint program,
                                      GLuint colorNumber,
                                      GLuint index,
                                      const char* name);
static void GL_BINDING_CALL
Mock_glBindFragmentInputLocationCHROMIUM(GLuint program,
                                         GLint location,
                                         const char* name);
static void GL_BINDING_CALL Mock_glBindFramebuffer(GLenum target,
                                                   GLuint framebuffer);
static void GL_BINDING_CALL Mock_glBindFramebufferEXT(GLenum target,
                                                      GLuint framebuffer);
static void GL_BINDING_CALL Mock_glBindImageTexture(GLuint index,
                                                    GLuint texture,
                                                    GLint level,
                                                    GLboolean layered,
                                                    GLint layer,
                                                    GLenum access,
                                                    GLint format);
static void GL_BINDING_CALL Mock_glBindImageTextureEXT(GLuint index,
                                                       GLuint texture,
                                                       GLint level,
                                                       GLboolean layered,
                                                       GLint layer,
                                                       GLenum access,
                                                       GLint format);
static void GL_BINDING_CALL Mock_glBindProgramPipeline(GLuint pipeline);
static void GL_BINDING_CALL Mock_glBindRenderbuffer(GLenum target,
                                                    GLuint renderbuffer);
static void GL_BINDING_CALL Mock_glBindRenderbufferEXT(GLenum target,
                                                       GLuint renderbuffer);
static void GL_BINDING_CALL Mock_glBindSampler(GLuint unit, GLuint sampler);
static void GL_BINDING_CALL Mock_glBindTexture(GLenum target, GLuint texture);
static void GL_BINDING_CALL Mock_glBindTransformFeedback(GLenum target,
                                                         GLuint id);
static void GL_BINDING_CALL
Mock_glBindUniformLocationCHROMIUM(GLuint program,
                                   GLint location,
                                   const char* name);
static void GL_BINDING_CALL Mock_glBindVertexArray(GLuint array);
static void GL_BINDING_CALL Mock_glBindVertexArrayAPPLE(GLuint array);
static void GL_BINDING_CALL Mock_glBindVertexArrayOES(GLuint array);
static void GL_BINDING_CALL Mock_glBindVertexBuffer(GLuint bindingindex,
                                                    GLuint buffer,
                                                    GLintptr offset,
                                                    GLsizei stride);
static void GL_BINDING_CALL Mock_glBlendBarrierKHR(void);
static void GL_BINDING_CALL Mock_glBlendBarrierNV(void);
static void GL_BINDING_CALL Mock_glBlendColor(GLclampf red,
                                              GLclampf green,
                                              GLclampf blue,
                                              GLclampf alpha);
static void GL_BINDING_CALL Mock_glBlendEquation(GLenum mode);
static void GL_BINDING_CALL Mock_glBlendEquationSeparate(GLenum modeRGB,
                                                         GLenum modeAlpha);
static void GL_BINDING_CALL Mock_glBlendFunc(GLenum sfactor, GLenum dfactor);
static void GL_BINDING_CALL Mock_glBlendFuncSeparate(GLenum srcRGB,
                                                     GLenum dstRGB,
                                                     GLenum srcAlpha,
                                                     GLenum dstAlpha);
static void GL_BINDING_CALL Mock_glBlitFramebuffer(GLint srcX0,
                                                   GLint srcY0,
                                                   GLint srcX1,
                                                   GLint srcY1,
                                                   GLint dstX0,
                                                   GLint dstY0,
                                                   GLint dstX1,
                                                   GLint dstY1,
                                                   GLbitfield mask,
                                                   GLenum filter);
static void GL_BINDING_CALL Mock_glBlitFramebufferANGLE(GLint srcX0,
                                                        GLint srcY0,
                                                        GLint srcX1,
                                                        GLint srcY1,
                                                        GLint dstX0,
                                                        GLint dstY0,
                                                        GLint dstX1,
                                                        GLint dstY1,
                                                        GLbitfield mask,
                                                        GLenum filter);
static void GL_BINDING_CALL Mock_glBlitFramebufferEXT(GLint srcX0,
                                                      GLint srcY0,
                                                      GLint srcX1,
                                                      GLint srcY1,
                                                      GLint dstX0,
                                                      GLint dstY0,
                                                      GLint dstX1,
                                                      GLint dstY1,
                                                      GLbitfield mask,
                                                      GLenum filter);
static void GL_BINDING_CALL Mock_glBufferData(GLenum target,
                                              GLsizeiptr size,
                                              const void* data,
                                              GLenum usage);
static void GL_BINDING_CALL Mock_glBufferSubData(GLenum target,
                                                 GLintptr offset,
                                                 GLsizeiptr size,
                                                 const void* data);
static GLenum GL_BINDING_CALL Mock_glCheckFramebufferStatus(GLenum target);
static GLenum GL_BINDING_CALL Mock_glCheckFramebufferStatusEXT(GLenum target);
static void GL_BINDING_CALL Mock_glClear(GLbitfield mask);
static void GL_BINDING_CALL Mock_glClearBufferfi(GLenum buffer,
                                                 GLint drawbuffer,
                                                 const GLfloat depth,
                                                 GLint stencil);
static void GL_BINDING_CALL Mock_glClearBufferfv(GLenum buffer,
                                                 GLint drawbuffer,
                                                 const GLfloat* value);
static void GL_BINDING_CALL Mock_glClearBufferiv(GLenum buffer,
                                                 GLint drawbuffer,
                                                 const GLint* value);
static void GL_BINDING_CALL Mock_glClearBufferuiv(GLenum buffer,
                                                  GLint drawbuffer,
                                                  const GLuint* value);
static void GL_BINDING_CALL Mock_glClearColor(GLclampf red,
                                              GLclampf green,
                                              GLclampf blue,
                                              GLclampf alpha);
static void GL_BINDING_CALL Mock_glClearDepth(GLclampd depth);
static void GL_BINDING_CALL Mock_glClearDepthf(GLclampf depth);
static void GL_BINDING_CALL Mock_glClearStencil(GLint s);
static GLenum GL_BINDING_CALL Mock_glClientWaitSync(GLsync sync,
                                                    GLbitfield flags,
                                                    GLuint64 timeout);
static void GL_BINDING_CALL Mock_glColorMask(GLboolean red,
                                             GLboolean green,
                                             GLboolean blue,
                                             GLboolean alpha);
static void GL_BINDING_CALL Mock_glCompileShader(GLuint shader);
static void GL_BINDING_CALL Mock_glCompressedTexImage2D(GLenum target,
                                                        GLint level,
                                                        GLenum internalformat,
                                                        GLsizei width,
                                                        GLsizei height,
                                                        GLint border,
                                                        GLsizei imageSize,
                                                        const void* data);
static void GL_BINDING_CALL
Mock_glCompressedTexImage2DRobustANGLE(GLenum target,
                                       GLint level,
                                       GLenum internalformat,
                                       GLsizei width,
                                       GLsizei height,
                                       GLint border,
                                       GLsizei imageSize,
                                       GLsizei dataSize,
                                       const void* data);
static void GL_BINDING_CALL Mock_glCompressedTexImage3D(GLenum target,
                                                        GLint level,
                                                        GLenum internalformat,
                                                        GLsizei width,
                                                        GLsizei height,
                                                        GLsizei depth,
                                                        GLint border,
                                                        GLsizei imageSize,
                                                        const void* data);
static void GL_BINDING_CALL
Mock_glCompressedTexImage3DRobustANGLE(GLenum target,
                                       GLint level,
                                       GLenum internalformat,
                                       GLsizei width,
                                       GLsizei height,
                                       GLsizei depth,
                                       GLint border,
                                       GLsizei imageSize,
                                       GLsizei dataSize,
                                       const void* data);
static void GL_BINDING_CALL Mock_glCompressedTexSubImage2D(GLenum target,
                                                           GLint level,
                                                           GLint xoffset,
                                                           GLint yoffset,
                                                           GLsizei width,
                                                           GLsizei height,
                                                           GLenum format,
                                                           GLsizei imageSize,
                                                           const void* data);
static void GL_BINDING_CALL
Mock_glCompressedTexSubImage2DRobustANGLE(GLenum target,
                                          GLint level,
                                          GLint xoffset,
                                          GLint yoffset,
                                          GLsizei width,
                                          GLsizei height,
                                          GLenum format,
                                          GLsizei imageSize,
                                          GLsizei dataSize,
                                          const void* data);
static void GL_BINDING_CALL Mock_glCompressedTexSubImage3D(GLenum target,
                                                           GLint level,
                                                           GLint xoffset,
                                                           GLint yoffset,
                                                           GLint zoffset,
                                                           GLsizei width,
                                                           GLsizei height,
                                                           GLsizei depth,
                                                           GLenum format,
                                                           GLsizei imageSize,
                                                           const void* data);
static void GL_BINDING_CALL
Mock_glCompressedTexSubImage3DRobustANGLE(GLenum target,
                                          GLint level,
                                          GLint xoffset,
                                          GLint yoffset,
                                          GLint zoffset,
                                          GLsizei width,
                                          GLsizei height,
                                          GLsizei depth,
                                          GLenum format,
                                          GLsizei imageSize,
                                          GLsizei dataSize,
                                          const void* data);
static void GL_BINDING_CALL Mock_glCopyBufferSubData(GLenum readTarget,
                                                     GLenum writeTarget,
                                                     GLintptr readOffset,
                                                     GLintptr writeOffset,
                                                     GLsizeiptr size);
static void GL_BINDING_CALL
Mock_glCopySubTextureCHROMIUM(GLuint sourceId,
                              GLint sourceLevel,
                              GLenum destTarget,
                              GLuint destId,
                              GLint destLevel,
                              GLint xoffset,
                              GLint yoffset,
                              GLint x,
                              GLint y,
                              GLsizei width,
                              GLsizei height,
                              GLboolean unpackFlipY,
                              GLboolean unpackPremultiplyAlpha,
                              GLboolean unpackUnmultiplyAlpha);
static void GL_BINDING_CALL Mock_glCopyTexImage2D(GLenum target,
                                                  GLint level,
                                                  GLenum internalformat,
                                                  GLint x,
                                                  GLint y,
                                                  GLsizei width,
                                                  GLsizei height,
                                                  GLint border);
static void GL_BINDING_CALL Mock_glCopyTexSubImage2D(GLenum target,
                                                     GLint level,
                                                     GLint xoffset,
                                                     GLint yoffset,
                                                     GLint x,
                                                     GLint y,
                                                     GLsizei width,
                                                     GLsizei height);
static void GL_BINDING_CALL Mock_glCopyTexSubImage3D(GLenum target,
                                                     GLint level,
                                                     GLint xoffset,
                                                     GLint yoffset,
                                                     GLint zoffset,
                                                     GLint x,
                                                     GLint y,
                                                     GLsizei width,
                                                     GLsizei height);
static void GL_BINDING_CALL
Mock_glCopyTextureCHROMIUM(GLuint sourceId,
                           GLint sourceLevel,
                           GLenum destTarget,
                           GLuint destId,
                           GLint destLevel,
                           GLint internalFormat,
                           GLenum destType,
                           GLboolean unpackFlipY,
                           GLboolean unpackPremultiplyAlpha,
                           GLboolean unpackUnmultiplyAlpha);
static void GL_BINDING_CALL Mock_glCoverFillPathCHROMIUM(GLuint path,
                                                         GLenum coverMode);
static void GL_BINDING_CALL
Mock_glCoverFillPathInstancedCHROMIUM(GLsizei numPaths,
                                      GLenum pathNameType,
                                      const void* paths,
                                      GLuint pathBase,
                                      GLenum coverMode,
                                      GLenum transformType,
                                      const GLfloat* transformValues);
static void GL_BINDING_CALL
Mock_glCoverFillPathInstancedNV(GLsizei numPaths,
                                GLenum pathNameType,
                                const void* paths,
                                GLuint pathBase,
                                GLenum coverMode,
                                GLenum transformType,
                                const GLfloat* transformValues);
static void GL_BINDING_CALL Mock_glCoverFillPathNV(GLuint path,
                                                   GLenum coverMode);
static void GL_BINDING_CALL Mock_glCoverStrokePathCHROMIUM(GLuint name,
                                                           GLenum coverMode);
static void GL_BINDING_CALL
Mock_glCoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
                                        GLenum pathNameType,
                                        const void* paths,
                                        GLuint pathBase,
                                        GLenum coverMode,
                                        GLenum transformType,
                                        const GLfloat* transformValues);
static void GL_BINDING_CALL
Mock_glCoverStrokePathInstancedNV(GLsizei numPaths,
                                  GLenum pathNameType,
                                  const void* paths,
                                  GLuint pathBase,
                                  GLenum coverMode,
                                  GLenum transformType,
                                  const GLfloat* transformValues);
static void GL_BINDING_CALL Mock_glCoverStrokePathNV(GLuint name,
                                                     GLenum coverMode);
static void GL_BINDING_CALL
Mock_glCoverageModulationCHROMIUM(GLenum components);
static void GL_BINDING_CALL Mock_glCoverageModulationNV(GLenum components);
static GLuint GL_BINDING_CALL Mock_glCreateProgram(void);
static GLuint GL_BINDING_CALL Mock_glCreateShader(GLenum type);
static GLuint GL_BINDING_CALL
Mock_glCreateShaderProgramv(GLenum type,
                            GLsizei count,
                            const char* const* strings);
static void GL_BINDING_CALL Mock_glCullFace(GLenum mode);
static void GL_BINDING_CALL Mock_glDebugMessageCallback(GLDEBUGPROC callback,
                                                        const void* userParam);
static void GL_BINDING_CALL
Mock_glDebugMessageCallbackKHR(GLDEBUGPROC callback, const void* userParam);
static void GL_BINDING_CALL Mock_glDebugMessageControl(GLenum source,
                                                       GLenum type,
                                                       GLenum severity,
                                                       GLsizei count,
                                                       const GLuint* ids,
                                                       GLboolean enabled);
static void GL_BINDING_CALL Mock_glDebugMessageControlKHR(GLenum source,
                                                          GLenum type,
                                                          GLenum severity,
                                                          GLsizei count,
                                                          const GLuint* ids,
                                                          GLboolean enabled);
static void GL_BINDING_CALL Mock_glDebugMessageInsert(GLenum source,
                                                      GLenum type,
                                                      GLuint id,
                                                      GLenum severity,
                                                      GLsizei length,
                                                      const char* buf);
static void GL_BINDING_CALL Mock_glDebugMessageInsertKHR(GLenum source,
                                                         GLenum type,
                                                         GLuint id,
                                                         GLenum severity,
                                                         GLsizei length,
                                                         const char* buf);
static void GL_BINDING_CALL Mock_glDeleteBuffers(GLsizei n,
                                                 const GLuint* buffers);
static void GL_BINDING_CALL Mock_glDeleteFencesAPPLE(GLsizei n,
                                                     const GLuint* fences);
static void GL_BINDING_CALL Mock_glDeleteFencesNV(GLsizei n,
                                                  const GLuint* fences);
static void GL_BINDING_CALL
Mock_glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers);
static void GL_BINDING_CALL
Mock_glDeleteFramebuffersEXT(GLsizei n, const GLuint* framebuffers);
static void GL_BINDING_CALL Mock_glDeletePathsCHROMIUM(GLuint path,
                                                       GLsizei range);
static void GL_BINDING_CALL Mock_glDeletePathsNV(GLuint path, GLsizei range);
static void GL_BINDING_CALL Mock_glDeleteProgram(GLuint program);
static void GL_BINDING_CALL
Mock_glDeleteProgramPipelines(GLsizei n, const GLuint* pipelines);
static void GL_BINDING_CALL Mock_glDeleteQueries(GLsizei n, const GLuint* ids);
static void GL_BINDING_CALL Mock_glDeleteQueriesARB(GLsizei n,
                                                    const GLuint* ids);
static void GL_BINDING_CALL Mock_glDeleteQueriesEXT(GLsizei n,
                                                    const GLuint* ids);
static void GL_BINDING_CALL
Mock_glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers);
static void GL_BINDING_CALL
Mock_glDeleteRenderbuffersEXT(GLsizei n, const GLuint* renderbuffers);
static void GL_BINDING_CALL Mock_glDeleteSamplers(GLsizei n,
                                                  const GLuint* samplers);
static void GL_BINDING_CALL Mock_glDeleteShader(GLuint shader);
static void GL_BINDING_CALL Mock_glDeleteSync(GLsync sync);
static void GL_BINDING_CALL Mock_glDeleteTextures(GLsizei n,
                                                  const GLuint* textures);
static void GL_BINDING_CALL Mock_glDeleteTransformFeedbacks(GLsizei n,
                                                            const GLuint* ids);
static void GL_BINDING_CALL Mock_glDeleteVertexArrays(GLsizei n,
                                                      const GLuint* arrays);
static void GL_BINDING_CALL
Mock_glDeleteVertexArraysAPPLE(GLsizei n, const GLuint* arrays);
static void GL_BINDING_CALL Mock_glDeleteVertexArraysOES(GLsizei n,
                                                         const GLuint* arrays);
static void GL_BINDING_CALL Mock_glDepthFunc(GLenum func);
static void GL_BINDING_CALL Mock_glDepthMask(GLboolean flag);
static void GL_BINDING_CALL Mock_glDepthRange(GLclampd zNear, GLclampd zFar);
static void GL_BINDING_CALL Mock_glDepthRangef(GLclampf zNear, GLclampf zFar);
static void GL_BINDING_CALL Mock_glDetachShader(GLuint program, GLuint shader);
static void GL_BINDING_CALL Mock_glDisable(GLenum cap);
static void GL_BINDING_CALL Mock_glDisableVertexAttribArray(GLuint index);
static void GL_BINDING_CALL
Mock_glDiscardFramebufferEXT(GLenum target,
                             GLsizei numAttachments,
                             const GLenum* attachments);
static void GL_BINDING_CALL Mock_glDispatchCompute(GLuint numGroupsX,
                                                   GLuint numGroupsY,
                                                   GLuint numGroupsZ);
static void GL_BINDING_CALL Mock_glDispatchComputeIndirect(GLintptr indirect);
static void GL_BINDING_CALL Mock_glDrawArrays(GLenum mode,
                                              GLint first,
                                              GLsizei count);
static void GL_BINDING_CALL Mock_glDrawArraysIndirect(GLenum mode,
                                                      const void* indirect);
static void GL_BINDING_CALL Mock_glDrawArraysInstanced(GLenum mode,
                                                       GLint first,
                                                       GLsizei count,
                                                       GLsizei primcount);
static void GL_BINDING_CALL Mock_glDrawArraysInstancedANGLE(GLenum mode,
                                                            GLint first,
                                                            GLsizei count,
                                                            GLsizei primcount);
static void GL_BINDING_CALL Mock_glDrawArraysInstancedARB(GLenum mode,
                                                          GLint first,
                                                          GLsizei count,
                                                          GLsizei primcount);
static void GL_BINDING_CALL Mock_glDrawBuffer(GLenum mode);
static void GL_BINDING_CALL Mock_glDrawBuffers(GLsizei n, const GLenum* bufs);
static void GL_BINDING_CALL Mock_glDrawBuffersARB(GLsizei n,
                                                  const GLenum* bufs);
static void GL_BINDING_CALL Mock_glDrawBuffersEXT(GLsizei n,
                                                  const GLenum* bufs);
static void GL_BINDING_CALL Mock_glDrawElements(GLenum mode,
                                                GLsizei count,
                                                GLenum type,
                                                const void* indices);
static void GL_BINDING_CALL Mock_glDrawElementsIndirect(GLenum mode,
                                                        GLenum type,
                                                        const void* indirect);
static void GL_BINDING_CALL Mock_glDrawElementsInstanced(GLenum mode,
                                                         GLsizei count,
                                                         GLenum type,
                                                         const void* indices,
                                                         GLsizei primcount);
static void GL_BINDING_CALL
Mock_glDrawElementsInstancedANGLE(GLenum mode,
                                  GLsizei count,
                                  GLenum type,
                                  const void* indices,
                                  GLsizei primcount);
static void GL_BINDING_CALL Mock_glDrawElementsInstancedARB(GLenum mode,
                                                            GLsizei count,
                                                            GLenum type,
                                                            const void* indices,
                                                            GLsizei primcount);
static void GL_BINDING_CALL Mock_glDrawRangeElements(GLenum mode,
                                                     GLuint start,
                                                     GLuint end,
                                                     GLsizei count,
                                                     GLenum type,
                                                     const void* indices);
static void GL_BINDING_CALL
Mock_glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);
static void GL_BINDING_CALL
Mock_glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image);
static void GL_BINDING_CALL Mock_glEnable(GLenum cap);
static void GL_BINDING_CALL Mock_glEnableVertexAttribArray(GLuint index);
static void GL_BINDING_CALL Mock_glEndQuery(GLenum target);
static void GL_BINDING_CALL Mock_glEndQueryARB(GLenum target);
static void GL_BINDING_CALL Mock_glEndQueryEXT(GLenum target);
static void GL_BINDING_CALL Mock_glEndTransformFeedback(void);
static void GL_BINDING_CALL Mock_glEndTransformFeedbackEXT(void);
static GLsync GL_BINDING_CALL Mock_glFenceSync(GLenum condition,
                                               GLbitfield flags);
static void GL_BINDING_CALL Mock_glFinish(void);
static void GL_BINDING_CALL Mock_glFinishFenceAPPLE(GLuint fence);
static void GL_BINDING_CALL Mock_glFinishFenceNV(GLuint fence);
static void GL_BINDING_CALL Mock_glFlush(void);
static void GL_BINDING_CALL Mock_glFlushMappedBufferRange(GLenum target,
                                                          GLintptr offset,
                                                          GLsizeiptr length);
static void GL_BINDING_CALL Mock_glFlushMappedBufferRangeEXT(GLenum target,
                                                             GLintptr offset,
                                                             GLsizeiptr length);
static void GL_BINDING_CALL Mock_glFramebufferParameteri(GLenum target,
                                                         GLenum pname,
                                                         GLint param);
static void GL_BINDING_CALL
Mock_glFramebufferRenderbuffer(GLenum target,
                               GLenum attachment,
                               GLenum renderbuffertarget,
                               GLuint renderbuffer);
static void GL_BINDING_CALL
Mock_glFramebufferRenderbufferEXT(GLenum target,
                                  GLenum attachment,
                                  GLenum renderbuffertarget,
                                  GLuint renderbuffer);
static void GL_BINDING_CALL Mock_glFramebufferTexture2D(GLenum target,
                                                        GLenum attachment,
                                                        GLenum textarget,
                                                        GLuint texture,
                                                        GLint level);
static void GL_BINDING_CALL Mock_glFramebufferTexture2DEXT(GLenum target,
                                                           GLenum attachment,
                                                           GLenum textarget,
                                                           GLuint texture,
                                                           GLint level);
static void GL_BINDING_CALL
Mock_glFramebufferTexture2DMultisampleEXT(GLenum target,
                                          GLenum attachment,
                                          GLenum textarget,
                                          GLuint texture,
                                          GLint level,
                                          GLsizei samples);
static void GL_BINDING_CALL
Mock_glFramebufferTexture2DMultisampleIMG(GLenum target,
                                          GLenum attachment,
                                          GLenum textarget,
                                          GLuint texture,
                                          GLint level,
                                          GLsizei samples);
static void GL_BINDING_CALL Mock_glFramebufferTextureLayer(GLenum target,
                                                           GLenum attachment,
                                                           GLuint texture,
                                                           GLint level,
                                                           GLint layer);
static void GL_BINDING_CALL
Mock_glFramebufferTextureMultiviewLayeredANGLE(GLenum target,
                                               GLenum attachment,
                                               GLuint texture,
                                               GLint level,
                                               GLint baseViewIndex,
                                               GLsizei numViews);
static void GL_BINDING_CALL Mock_glFrontFace(GLenum mode);
static void GL_BINDING_CALL Mock_glGenBuffers(GLsizei n, GLuint* buffers);
static void GL_BINDING_CALL Mock_glGenFencesAPPLE(GLsizei n, GLuint* fences);
static void GL_BINDING_CALL Mock_glGenFencesNV(GLsizei n, GLuint* fences);
static void GL_BINDING_CALL Mock_glGenFramebuffers(GLsizei n,
                                                   GLuint* framebuffers);
static void GL_BINDING_CALL Mock_glGenFramebuffersEXT(GLsizei n,
                                                      GLuint* framebuffers);
static GLuint GL_BINDING_CALL Mock_glGenPathsCHROMIUM(GLsizei range);
static GLuint GL_BINDING_CALL Mock_glGenPathsNV(GLsizei range);
static GLuint GL_BINDING_CALL Mock_glGenProgramPipelines(GLsizei n,
                                                         GLuint* pipelines);
static void GL_BINDING_CALL Mock_glGenQueries(GLsizei n, GLuint* ids);
static void GL_BINDING_CALL Mock_glGenQueriesARB(GLsizei n, GLuint* ids);
static void GL_BINDING_CALL Mock_glGenQueriesEXT(GLsizei n, GLuint* ids);
static void GL_BINDING_CALL Mock_glGenRenderbuffers(GLsizei n,
                                                    GLuint* renderbuffers);
static void GL_BINDING_CALL Mock_glGenRenderbuffersEXT(GLsizei n,
                                                       GLuint* renderbuffers);
static void GL_BINDING_CALL Mock_glGenSamplers(GLsizei n, GLuint* samplers);
static void GL_BINDING_CALL Mock_glGenTextures(GLsizei n, GLuint* textures);
static void GL_BINDING_CALL Mock_glGenTransformFeedbacks(GLsizei n,
                                                         GLuint* ids);
static void GL_BINDING_CALL Mock_glGenVertexArrays(GLsizei n, GLuint* arrays);
static void GL_BINDING_CALL Mock_glGenVertexArraysAPPLE(GLsizei n,
                                                        GLuint* arrays);
static void GL_BINDING_CALL Mock_glGenVertexArraysOES(GLsizei n,
                                                      GLuint* arrays);
static void GL_BINDING_CALL Mock_glGenerateMipmap(GLenum target);
static void GL_BINDING_CALL Mock_glGenerateMipmapEXT(GLenum target);
static void GL_BINDING_CALL Mock_glGetActiveAttrib(GLuint program,
                                                   GLuint index,
                                                   GLsizei bufsize,
                                                   GLsizei* length,
                                                   GLint* size,
                                                   GLenum* type,
                                                   char* name);
static void GL_BINDING_CALL Mock_glGetActiveUniform(GLuint program,
                                                    GLuint index,
                                                    GLsizei bufsize,
                                                    GLsizei* length,
                                                    GLint* size,
                                                    GLenum* type,
                                                    char* name);
static void GL_BINDING_CALL
Mock_glGetActiveUniformBlockName(GLuint program,
                                 GLuint uniformBlockIndex,
                                 GLsizei bufSize,
                                 GLsizei* length,
                                 char* uniformBlockName);
static void GL_BINDING_CALL
Mock_glGetActiveUniformBlockiv(GLuint program,
                               GLuint uniformBlockIndex,
                               GLenum pname,
                               GLint* params);
static void GL_BINDING_CALL
Mock_glGetActiveUniformBlockivRobustANGLE(GLuint program,
                                          GLuint uniformBlockIndex,
                                          GLenum pname,
                                          GLsizei bufSize,
                                          GLsizei* length,
                                          GLint* params);
static void GL_BINDING_CALL
Mock_glGetActiveUniformsiv(GLuint program,
                           GLsizei uniformCount,
                           const GLuint* uniformIndices,
                           GLenum pname,
                           GLint* params);
static void GL_BINDING_CALL Mock_glGetAttachedShaders(GLuint program,
                                                      GLsizei maxcount,
                                                      GLsizei* count,
                                                      GLuint* shaders);
static GLint GL_BINDING_CALL Mock_glGetAttribLocation(GLuint program,
                                                      const char* name);
static void GL_BINDING_CALL Mock_glGetBooleani_v(GLenum target,
                                                 GLuint index,
                                                 GLboolean* data);
static void GL_BINDING_CALL Mock_glGetBooleani_vRobustANGLE(GLenum target,
                                                            GLuint index,
                                                            GLsizei bufSize,
                                                            GLsizei* length,
                                                            GLboolean* data);
static void GL_BINDING_CALL Mock_glGetBooleanv(GLenum pname, GLboolean* params);
static void GL_BINDING_CALL Mock_glGetBooleanvRobustANGLE(GLenum pname,
                                                          GLsizei bufSize,
                                                          GLsizei* length,
                                                          GLboolean* data);
static void GL_BINDING_CALL
Mock_glGetBufferParameteri64vRobustANGLE(GLenum target,
                                         GLenum pname,
                                         GLsizei bufSize,
                                         GLsizei* length,
                                         GLint64* params);
static void GL_BINDING_CALL Mock_glGetBufferParameteriv(GLenum target,
                                                        GLenum pname,
                                                        GLint* params);
static void GL_BINDING_CALL
Mock_glGetBufferParameterivRobustANGLE(GLenum target,
                                       GLenum pname,
                                       GLsizei bufSize,
                                       GLsizei* length,
                                       GLint* params);
static void GL_BINDING_CALL Mock_glGetBufferPointervRobustANGLE(GLenum target,
                                                                GLenum pname,
                                                                GLsizei bufSize,
                                                                GLsizei* length,
                                                                void** params);
static GLuint GL_BINDING_CALL Mock_glGetDebugMessageLog(GLuint count,
                                                        GLsizei bufSize,
                                                        GLenum* sources,
                                                        GLenum* types,
                                                        GLuint* ids,
                                                        GLenum* severities,
                                                        GLsizei* lengths,
                                                        char* messageLog);
static GLuint GL_BINDING_CALL Mock_glGetDebugMessageLogKHR(GLuint count,
                                                           GLsizei bufSize,
                                                           GLenum* sources,
                                                           GLenum* types,
                                                           GLuint* ids,
                                                           GLenum* severities,
                                                           GLsizei* lengths,
                                                           char* messageLog);
static GLenum GL_BINDING_CALL Mock_glGetError(void);
static void GL_BINDING_CALL Mock_glGetFenceivNV(GLuint fence,
                                                GLenum pname,
                                                GLint* params);
static void GL_BINDING_CALL Mock_glGetFloatv(GLenum pname, GLfloat* params);
static void GL_BINDING_CALL Mock_glGetFloatvRobustANGLE(GLenum pname,
                                                        GLsizei bufSize,
                                                        GLsizei* length,
                                                        GLfloat* data);
static GLint GL_BINDING_CALL Mock_glGetFragDataIndex(GLuint program,
                                                     const char* name);
static GLint GL_BINDING_CALL Mock_glGetFragDataIndexEXT(GLuint program,
                                                        const char* name);
static GLint GL_BINDING_CALL Mock_glGetFragDataLocation(GLuint program,
                                                        const char* name);
static void GL_BINDING_CALL
Mock_glGetFramebufferAttachmentParameteriv(GLenum target,
                                           GLenum attachment,
                                           GLenum pname,
                                           GLint* params);
static void GL_BINDING_CALL
Mock_glGetFramebufferAttachmentParameterivEXT(GLenum target,
                                              GLenum attachment,
                                              GLenum pname,
                                              GLint* params);
static void GL_BINDING_CALL
Mock_glGetFramebufferAttachmentParameterivRobustANGLE(GLenum target,
                                                      GLenum attachment,
                                                      GLenum pname,
                                                      GLsizei bufSize,
                                                      GLsizei* length,
                                                      GLint* params);
static void GL_BINDING_CALL Mock_glGetFramebufferParameteriv(GLenum target,
                                                             GLenum pname,
                                                             GLint* params);
static void GL_BINDING_CALL
Mock_glGetFramebufferParameterivRobustANGLE(GLenum target,
                                            GLenum pname,
                                            GLsizei bufSize,
                                            GLsizei* length,
                                            GLint* params);
static GLenum GL_BINDING_CALL Mock_glGetGraphicsResetStatus(void);
static GLenum GL_BINDING_CALL Mock_glGetGraphicsResetStatusARB(void);
static GLenum GL_BINDING_CALL Mock_glGetGraphicsResetStatusEXT(void);
static GLenum GL_BINDING_CALL Mock_glGetGraphicsResetStatusKHR(void);
static void GL_BINDING_CALL Mock_glGetInteger64i_v(GLenum target,
                                                   GLuint index,
                                                   GLint64* data);
static void GL_BINDING_CALL Mock_glGetInteger64i_vRobustANGLE(GLenum target,
                                                              GLuint index,
                                                              GLsizei bufSize,
                                                              GLsizei* length,
                                                              GLint64* data);
static void GL_BINDING_CALL Mock_glGetInteger64v(GLenum pname, GLint64* params);
static void GL_BINDING_CALL Mock_glGetInteger64vRobustANGLE(GLenum pname,
                                                            GLsizei bufSize,
                                                            GLsizei* length,
                                                            GLint64* data);
static void GL_BINDING_CALL Mock_glGetIntegeri_v(GLenum target,
                                                 GLuint index,
                                                 GLint* data);
static void GL_BINDING_CALL Mock_glGetIntegeri_vRobustANGLE(GLenum target,
                                                            GLuint index,
                                                            GLsizei bufSize,
                                                            GLsizei* length,
                                                            GLint* data);
static void GL_BINDING_CALL Mock_glGetIntegerv(GLenum pname, GLint* params);
static void GL_BINDING_CALL Mock_glGetIntegervRobustANGLE(GLenum pname,
                                                          GLsizei bufSize,
                                                          GLsizei* length,
                                                          GLint* data);
static void GL_BINDING_CALL Mock_glGetInternalformativ(GLenum target,
                                                       GLenum internalformat,
                                                       GLenum pname,
                                                       GLsizei bufSize,
                                                       GLint* params);
static void GL_BINDING_CALL
Mock_glGetInternalformativRobustANGLE(GLenum target,
                                      GLenum internalformat,
                                      GLenum pname,
                                      GLsizei bufSize,
                                      GLsizei* length,
                                      GLint* params);
static void GL_BINDING_CALL Mock_glGetMultisamplefv(GLenum pname,
                                                    GLuint index,
                                                    GLfloat* val);
static void GL_BINDING_CALL Mock_glGetMultisamplefvRobustANGLE(GLenum pname,
                                                               GLuint index,
                                                               GLsizei bufSize,
                                                               GLsizei* length,
                                                               GLfloat* val);
static void GL_BINDING_CALL Mock_glGetObjectLabel(GLenum identifier,
                                                  GLuint name,
                                                  GLsizei bufSize,
                                                  GLsizei* length,
                                                  char* label);
static void GL_BINDING_CALL Mock_glGetObjectLabelKHR(GLenum identifier,
                                                     GLuint name,
                                                     GLsizei bufSize,
                                                     GLsizei* length,
                                                     char* label);
static void GL_BINDING_CALL Mock_glGetObjectPtrLabel(void* ptr,
                                                     GLsizei bufSize,
                                                     GLsizei* length,
                                                     char* label);
static void GL_BINDING_CALL Mock_glGetObjectPtrLabelKHR(void* ptr,
                                                        GLsizei bufSize,
                                                        GLsizei* length,
                                                        char* label);
static void GL_BINDING_CALL Mock_glGetPointerv(GLenum pname, void** params);
static void GL_BINDING_CALL Mock_glGetPointervKHR(GLenum pname, void** params);
static void GL_BINDING_CALL
Mock_glGetPointervRobustANGLERobustANGLE(GLenum pname,
                                         GLsizei bufSize,
                                         GLsizei* length,
                                         void** params);
static void GL_BINDING_CALL Mock_glGetProgramBinary(GLuint program,
                                                    GLsizei bufSize,
                                                    GLsizei* length,
                                                    GLenum* binaryFormat,
                                                    GLvoid* binary);
static void GL_BINDING_CALL Mock_glGetProgramBinaryOES(GLuint program,
                                                       GLsizei bufSize,
                                                       GLsizei* length,
                                                       GLenum* binaryFormat,
                                                       GLvoid* binary);
static void GL_BINDING_CALL Mock_glGetProgramInfoLog(GLuint program,
                                                     GLsizei bufsize,
                                                     GLsizei* length,
                                                     char* infolog);
static void GL_BINDING_CALL
Mock_glGetProgramInterfaceiv(GLuint program,
                             GLenum programInterface,
                             GLenum pname,
                             GLint* params);
static void GL_BINDING_CALL
Mock_glGetProgramInterfaceivRobustANGLE(GLuint program,
                                        GLenum programInterface,
                                        GLenum pname,
                                        GLsizei bufSize,
                                        GLsizei* length,
                                        GLint* params);
static void GL_BINDING_CALL Mock_glGetProgramPipelineInfoLog(GLuint pipeline,
                                                             GLsizei bufSize,
                                                             GLsizei* length,
                                                             GLchar* infoLog);
static void GL_BINDING_CALL Mock_glGetProgramPipelineiv(GLuint pipeline,
                                                        GLenum pname,
                                                        GLint* params);
static GLuint GL_BINDING_CALL
Mock_glGetProgramResourceIndex(GLuint program,
                               GLenum programInterface,
                               const GLchar* name);
static GLint GL_BINDING_CALL
Mock_glGetProgramResourceLocation(GLuint program,
                                  GLenum programInterface,
                                  const char* name);
static void GL_BINDING_CALL
Mock_glGetProgramResourceName(GLuint program,
                              GLenum programInterface,
                              GLuint index,
                              GLsizei bufSize,
                              GLsizei* length,
                              GLchar* name);
static void GL_BINDING_CALL Mock_glGetProgramResourceiv(GLuint program,
                                                        GLenum programInterface,
                                                        GLuint index,
                                                        GLsizei propCount,
                                                        const GLenum* props,
                                                        GLsizei bufSize,
                                                        GLsizei* length,
                                                        GLint* params);
static void GL_BINDING_CALL Mock_glGetProgramiv(GLuint program,
                                                GLenum pname,
                                                GLint* params);
static void GL_BINDING_CALL Mock_glGetProgramivRobustANGLE(GLuint program,
                                                           GLenum pname,
                                                           GLsizei bufSize,
                                                           GLsizei* length,
                                                           GLint* params);
static void GL_BINDING_CALL Mock_glGetQueryObjecti64v(GLuint id,
                                                      GLenum pname,
                                                      GLint64* params);
static void GL_BINDING_CALL Mock_glGetQueryObjecti64vEXT(GLuint id,
                                                         GLenum pname,
                                                         GLint64* params);
static void GL_BINDING_CALL
Mock_glGetQueryObjecti64vRobustANGLE(GLuint id,
                                     GLenum pname,
                                     GLsizei bufSize,
                                     GLsizei* length,
                                     GLint64* params);
static void GL_BINDING_CALL Mock_glGetQueryObjectiv(GLuint id,
                                                    GLenum pname,
                                                    GLint* params);
static void GL_BINDING_CALL Mock_glGetQueryObjectivARB(GLuint id,
                                                       GLenum pname,
                                                       GLint* params);
static void GL_BINDING_CALL Mock_glGetQueryObjectivEXT(GLuint id,
                                                       GLenum pname,
                                                       GLint* params);
static void GL_BINDING_CALL Mock_glGetQueryObjectivRobustANGLE(GLuint id,
                                                               GLenum pname,
                                                               GLsizei bufSize,
                                                               GLsizei* length,
                                                               GLint* params);
static void GL_BINDING_CALL Mock_glGetQueryObjectui64v(GLuint id,
                                                       GLenum pname,
                                                       GLuint64* params);
static void GL_BINDING_CALL Mock_glGetQueryObjectui64vEXT(GLuint id,
                                                          GLenum pname,
                                                          GLuint64* params);
static void GL_BINDING_CALL
Mock_glGetQueryObjectui64vRobustANGLE(GLuint id,
                                      GLenum pname,
                                      GLsizei bufSize,
                                      GLsizei* length,
                                      GLuint64* params);
static void GL_BINDING_CALL Mock_glGetQueryObjectuiv(GLuint id,
                                                     GLenum pname,
                                                     GLuint* params);
static void GL_BINDING_CALL Mock_glGetQueryObjectuivARB(GLuint id,
                                                        GLenum pname,
                                                        GLuint* params);
static void GL_BINDING_CALL Mock_glGetQueryObjectuivEXT(GLuint id,
                                                        GLenum pname,
                                                        GLuint* params);
static void GL_BINDING_CALL Mock_glGetQueryObjectuivRobustANGLE(GLuint id,
                                                                GLenum pname,
                                                                GLsizei bufSize,
                                                                GLsizei* length,
                                                                GLuint* params);
static void GL_BINDING_CALL Mock_glGetQueryiv(GLenum target,
                                              GLenum pname,
                                              GLint* params);
static void GL_BINDING_CALL Mock_glGetQueryivARB(GLenum target,
                                                 GLenum pname,
                                                 GLint* params);
static void GL_BINDING_CALL Mock_glGetQueryivEXT(GLenum target,
                                                 GLenum pname,
                                                 GLint* params);
static void GL_BINDING_CALL Mock_glGetQueryivRobustANGLE(GLenum target,
                                                         GLenum pname,
                                                         GLsizei bufSize,
                                                         GLsizei* length,
                                                         GLint* params);
static void GL_BINDING_CALL Mock_glGetRenderbufferParameteriv(GLenum target,
                                                              GLenum pname,
                                                              GLint* params);
static void GL_BINDING_CALL Mock_glGetRenderbufferParameterivEXT(GLenum target,
                                                                 GLenum pname,
                                                                 GLint* params);
static void GL_BINDING_CALL
Mock_glGetRenderbufferParameterivRobustANGLE(GLenum target,
                                             GLenum pname,
                                             GLsizei bufSize,
                                             GLsizei* length,
                                             GLint* params);
static void GL_BINDING_CALL
Mock_glGetSamplerParameterIivRobustANGLE(GLuint sampler,
                                         GLenum pname,
                                         GLsizei bufSize,
                                         GLsizei* length,
                                         GLint* params);
static void GL_BINDING_CALL
Mock_glGetSamplerParameterIuivRobustANGLE(GLuint sampler,
                                          GLenum pname,
                                          GLsizei bufSize,
                                          GLsizei* length,
                                          GLuint* params);
static void GL_BINDING_CALL Mock_glGetSamplerParameterfv(GLuint sampler,
                                                         GLenum pname,
                                                         GLfloat* params);
static void GL_BINDING_CALL
Mock_glGetSamplerParameterfvRobustANGLE(GLuint sampler,
                                        GLenum pname,
                                        GLsizei bufSize,
                                        GLsizei* length,
                                        GLfloat* params);
static void GL_BINDING_CALL Mock_glGetSamplerParameteriv(GLuint sampler,
                                                         GLenum pname,
                                                         GLint* params);
static void GL_BINDING_CALL
Mock_glGetSamplerParameterivRobustANGLE(GLuint sampler,
                                        GLenum pname,
                                        GLsizei bufSize,
                                        GLsizei* length,
                                        GLint* params);
static void GL_BINDING_CALL Mock_glGetShaderInfoLog(GLuint shader,
                                                    GLsizei bufsize,
                                                    GLsizei* length,
                                                    char* infolog);
static void GL_BINDING_CALL
Mock_glGetShaderPrecisionFormat(GLenum shadertype,
                                GLenum precisiontype,
                                GLint* range,
                                GLint* precision);
static void GL_BINDING_CALL Mock_glGetShaderSource(GLuint shader,
                                                   GLsizei bufsize,
                                                   GLsizei* length,
                                                   char* source);
static void GL_BINDING_CALL Mock_glGetShaderiv(GLuint shader,
                                               GLenum pname,
                                               GLint* params);
static void GL_BINDING_CALL Mock_glGetShaderivRobustANGLE(GLuint shader,
                                                          GLenum pname,
                                                          GLsizei bufSize,
                                                          GLsizei* length,
                                                          GLint* params);
static const GLubyte* GL_BINDING_CALL Mock_glGetString(GLenum name);
static const GLubyte* GL_BINDING_CALL Mock_glGetStringi(GLenum name,
                                                        GLuint index);
static void GL_BINDING_CALL Mock_glGetSynciv(GLsync sync,
                                             GLenum pname,
                                             GLsizei bufSize,
                                             GLsizei* length,
                                             GLint* values);
static void GL_BINDING_CALL Mock_glGetTexLevelParameterfv(GLenum target,
                                                          GLint level,
                                                          GLenum pname,
                                                          GLfloat* params);
static void GL_BINDING_CALL
Mock_glGetTexLevelParameterfvRobustANGLE(GLenum target,
                                         GLint level,
                                         GLenum pname,
                                         GLsizei bufSize,
                                         GLsizei* length,
                                         GLfloat* params);
static void GL_BINDING_CALL Mock_glGetTexLevelParameteriv(GLenum target,
                                                          GLint level,
                                                          GLenum pname,
                                                          GLint* params);
static void GL_BINDING_CALL
Mock_glGetTexLevelParameterivRobustANGLE(GLenum target,
                                         GLint level,
                                         GLenum pname,
                                         GLsizei bufSize,
                                         GLsizei* length,
                                         GLint* params);
static void GL_BINDING_CALL
Mock_glGetTexParameterIivRobustANGLE(GLenum target,
                                     GLenum pname,
                                     GLsizei bufSize,
                                     GLsizei* length,
                                     GLint* params);
static void GL_BINDING_CALL
Mock_glGetTexParameterIuivRobustANGLE(GLenum target,
                                      GLenum pname,
                                      GLsizei bufSize,
                                      GLsizei* length,
                                      GLuint* params);
static void GL_BINDING_CALL Mock_glGetTexParameterfv(GLenum target,
                                                     GLenum pname,
                                                     GLfloat* params);
static void GL_BINDING_CALL
Mock_glGetTexParameterfvRobustANGLE(GLenum target,
                                    GLenum pname,
                                    GLsizei bufSize,
                                    GLsizei* length,
                                    GLfloat* params);
static void GL_BINDING_CALL Mock_glGetTexParameteriv(GLenum target,
                                                     GLenum pname,
                                                     GLint* params);
static void GL_BINDING_CALL Mock_glGetTexParameterivRobustANGLE(GLenum target,
                                                                GLenum pname,
                                                                GLsizei bufSize,
                                                                GLsizei* length,
                                                                GLint* params);
static void GL_BINDING_CALL Mock_glGetTransformFeedbackVarying(GLuint program,
                                                               GLuint index,
                                                               GLsizei bufSize,
                                                               GLsizei* length,
                                                               GLsizei* size,
                                                               GLenum* type,
                                                               char* name);
static void GL_BINDING_CALL
Mock_glGetTransformFeedbackVaryingEXT(GLuint program,
                                      GLuint index,
                                      GLsizei bufSize,
                                      GLsizei* length,
                                      GLsizei* size,
                                      GLenum* type,
                                      char* name);
static void GL_BINDING_CALL
Mock_glGetTranslatedShaderSourceANGLE(GLuint shader,
                                      GLsizei bufsize,
                                      GLsizei* length,
                                      char* source);
static GLuint GL_BINDING_CALL
Mock_glGetUniformBlockIndex(GLuint program, const char* uniformBlockName);
static void GL_BINDING_CALL
Mock_glGetUniformIndices(GLuint program,
                         GLsizei uniformCount,
                         const char* const* uniformNames,
                         GLuint* uniformIndices);
static GLint GL_BINDING_CALL Mock_glGetUniformLocation(GLuint program,
                                                       const char* name);
static void GL_BINDING_CALL Mock_glGetUniformfv(GLuint program,
                                                GLint location,
                                                GLfloat* params);
static void GL_BINDING_CALL Mock_glGetUniformfvRobustANGLE(GLuint program,
                                                           GLint location,
                                                           GLsizei bufSize,
                                                           GLsizei* length,
                                                           GLfloat* params);
static void GL_BINDING_CALL Mock_glGetUniformiv(GLuint program,
                                                GLint location,
                                                GLint* params);
static void GL_BINDING_CALL Mock_glGetUniformivRobustANGLE(GLuint program,
                                                           GLint location,
                                                           GLsizei bufSize,
                                                           GLsizei* length,
                                                           GLint* params);
static void GL_BINDING_CALL Mock_glGetUniformuiv(GLuint program,
                                                 GLint location,
                                                 GLuint* params);
static void GL_BINDING_CALL Mock_glGetUniformuivRobustANGLE(GLuint program,
                                                            GLint location,
                                                            GLsizei bufSize,
                                                            GLsizei* length,
                                                            GLuint* params);
static void GL_BINDING_CALL
Mock_glGetVertexAttribIivRobustANGLE(GLuint index,
                                     GLenum pname,
                                     GLsizei bufSize,
                                     GLsizei* length,
                                     GLint* params);
static void GL_BINDING_CALL
Mock_glGetVertexAttribIuivRobustANGLE(GLuint index,
                                      GLenum pname,
                                      GLsizei bufSize,
                                      GLsizei* length,
                                      GLuint* params);
static void GL_BINDING_CALL Mock_glGetVertexAttribPointerv(GLuint index,
                                                           GLenum pname,
                                                           void** pointer);
static void GL_BINDING_CALL
Mock_glGetVertexAttribPointervRobustANGLE(GLuint index,
                                          GLenum pname,
                                          GLsizei bufSize,
                                          GLsizei* length,
                                          void** pointer);
static void GL_BINDING_CALL Mock_glGetVertexAttribfv(GLuint index,
                                                     GLenum pname,
                                                     GLfloat* params);
static void GL_BINDING_CALL
Mock_glGetVertexAttribfvRobustANGLE(GLuint index,
                                    GLenum pname,
                                    GLsizei bufSize,
                                    GLsizei* length,
                                    GLfloat* params);
static void GL_BINDING_CALL Mock_glGetVertexAttribiv(GLuint index,
                                                     GLenum pname,
                                                     GLint* params);
static void GL_BINDING_CALL Mock_glGetVertexAttribivRobustANGLE(GLuint index,
                                                                GLenum pname,
                                                                GLsizei bufSize,
                                                                GLsizei* length,
                                                                GLint* params);
static void GL_BINDING_CALL Mock_glGetnUniformfvRobustANGLE(GLuint program,
                                                            GLint location,
                                                            GLsizei bufSize,
                                                            GLsizei* length,
                                                            GLfloat* params);
static void GL_BINDING_CALL Mock_glGetnUniformivRobustANGLE(GLuint program,
                                                            GLint location,
                                                            GLsizei bufSize,
                                                            GLsizei* length,
                                                            GLint* params);
static void GL_BINDING_CALL Mock_glGetnUniformuivRobustANGLE(GLuint program,
                                                             GLint location,
                                                             GLsizei bufSize,
                                                             GLsizei* length,
                                                             GLuint* params);
static void GL_BINDING_CALL Mock_glHint(GLenum target, GLenum mode);
static void GL_BINDING_CALL Mock_glInsertEventMarkerEXT(GLsizei length,
                                                        const char* marker);
static void GL_BINDING_CALL
Mock_glInvalidateFramebuffer(GLenum target,
                             GLsizei numAttachments,
                             const GLenum* attachments);
static void GL_BINDING_CALL
Mock_glInvalidateSubFramebuffer(GLenum target,
                                GLsizei numAttachments,
                                const GLenum* attachments,
                                GLint x,
                                GLint y,
                                GLint width,
                                GLint height);
static GLboolean GL_BINDING_CALL Mock_glIsBuffer(GLuint buffer);
static GLboolean GL_BINDING_CALL Mock_glIsEnabled(GLenum cap);
static GLboolean GL_BINDING_CALL Mock_glIsFenceAPPLE(GLuint fence);
static GLboolean GL_BINDING_CALL Mock_glIsFenceNV(GLuint fence);
static GLboolean GL_BINDING_CALL Mock_glIsFramebuffer(GLuint framebuffer);
static GLboolean GL_BINDING_CALL Mock_glIsFramebufferEXT(GLuint framebuffer);
static GLboolean GL_BINDING_CALL Mock_glIsPathCHROMIUM(GLuint path);
static GLboolean GL_BINDING_CALL Mock_glIsPathNV(GLuint path);
static GLboolean GL_BINDING_CALL Mock_glIsProgram(GLuint program);
static GLboolean GL_BINDING_CALL Mock_glIsProgramPipeline(GLuint pipeline);
static GLboolean GL_BINDING_CALL Mock_glIsQuery(GLuint query);
static GLboolean GL_BINDING_CALL Mock_glIsQueryARB(GLuint query);
static GLboolean GL_BINDING_CALL Mock_glIsQueryEXT(GLuint query);
static GLboolean GL_BINDING_CALL Mock_glIsRenderbuffer(GLuint renderbuffer);
static GLboolean GL_BINDING_CALL Mock_glIsRenderbufferEXT(GLuint renderbuffer);
static GLboolean GL_BINDING_CALL Mock_glIsSampler(GLuint sampler);
static GLboolean GL_BINDING_CALL Mock_glIsShader(GLuint shader);
static GLboolean GL_BINDING_CALL Mock_glIsSync(GLsync sync);
static GLboolean GL_BINDING_CALL Mock_glIsTexture(GLuint texture);
static GLboolean GL_BINDING_CALL Mock_glIsTransformFeedback(GLuint id);
static GLboolean GL_BINDING_CALL Mock_glIsVertexArray(GLuint array);
static GLboolean GL_BINDING_CALL Mock_glIsVertexArrayAPPLE(GLuint array);
static GLboolean GL_BINDING_CALL Mock_glIsVertexArrayOES(GLuint array);
static void GL_BINDING_CALL Mock_glLineWidth(GLfloat width);
static void GL_BINDING_CALL Mock_glLinkProgram(GLuint program);
static void* GL_BINDING_CALL Mock_glMapBuffer(GLenum target, GLenum access);
static void* GL_BINDING_CALL Mock_glMapBufferOES(GLenum target, GLenum access);
static void* GL_BINDING_CALL Mock_glMapBufferRange(GLenum target,
                                                   GLintptr offset,
                                                   GLsizeiptr length,
                                                   GLbitfield access);
static void* GL_BINDING_CALL Mock_glMapBufferRangeEXT(GLenum target,
                                                      GLintptr offset,
                                                      GLsizeiptr length,
                                                      GLbitfield access);
static void GL_BINDING_CALL
Mock_glMatrixLoadIdentityCHROMIUM(GLenum matrixMode);
static void GL_BINDING_CALL Mock_glMatrixLoadIdentityEXT(GLenum matrixMode);
static void GL_BINDING_CALL Mock_glMatrixLoadfCHROMIUM(GLenum matrixMode,
                                                       const GLfloat* m);
static void GL_BINDING_CALL Mock_glMatrixLoadfEXT(GLenum matrixMode,
                                                  const GLfloat* m);
static void GL_BINDING_CALL Mock_glMaxShaderCompilerThreadsKHR(GLuint count);
static void GL_BINDING_CALL Mock_glMemoryBarrier(GLbitfield barriers);
static void GL_BINDING_CALL Mock_glMemoryBarrierByRegion(GLbitfield barriers);
static void GL_BINDING_CALL Mock_glMemoryBarrierEXT(GLbitfield barriers);
static void GL_BINDING_CALL Mock_glMinSampleShading(GLfloat value);
static void GL_BINDING_CALL Mock_glMultiDrawArraysANGLE(GLenum mode,
                                                        const GLint* firsts,
                                                        const GLsizei* counts,
                                                        GLsizei drawcount);
static void GL_BINDING_CALL
Mock_glMultiDrawArraysInstancedANGLE(GLenum mode,
                                     const GLint* firsts,
                                     const GLsizei* counts,
                                     const GLsizei* instanceCounts,
                                     GLsizei drawcount);
static void GL_BINDING_CALL
Mock_glMultiDrawElementsANGLE(GLenum mode,
                              const GLsizei* counts,
                              GLenum type,
                              const GLvoid* const* indices,
                              GLsizei drawcount);
static void GL_BINDING_CALL
Mock_glMultiDrawElementsInstancedANGLE(GLenum mode,
                                       const GLsizei* counts,
                                       GLenum type,
                                       const GLvoid* const* indices,
                                       const GLsizei* instanceCounts,
                                       GLsizei drawcount);
static void GL_BINDING_CALL Mock_glObjectLabel(GLenum identifier,
                                               GLuint name,
                                               GLsizei length,
                                               const char* label);
static void GL_BINDING_CALL Mock_glObjectLabelKHR(GLenum identifier,
                                                  GLuint name,
                                                  GLsizei length,
                                                  const char* label);
static void GL_BINDING_CALL Mock_glObjectPtrLabel(void* ptr,
                                                  GLsizei length,
                                                  const char* label);
static void GL_BINDING_CALL Mock_glObjectPtrLabelKHR(void* ptr,
                                                     GLsizei length,
                                                     const char* label);
static void GL_BINDING_CALL Mock_glPathCommandsCHROMIUM(GLuint path,
                                                        GLsizei numCommands,
                                                        const GLubyte* commands,
                                                        GLsizei numCoords,
                                                        GLenum coordType,
                                                        const GLvoid* coords);
static void GL_BINDING_CALL Mock_glPathCommandsNV(GLuint path,
                                                  GLsizei numCommands,
                                                  const GLubyte* commands,
                                                  GLsizei numCoords,
                                                  GLenum coordType,
                                                  const GLvoid* coords);
static void GL_BINDING_CALL Mock_glPathParameterfCHROMIUM(GLuint path,
                                                          GLenum pname,
                                                          GLfloat value);
static void GL_BINDING_CALL Mock_glPathParameterfNV(GLuint path,
                                                    GLenum pname,
                                                    GLfloat value);
static void GL_BINDING_CALL Mock_glPathParameteriCHROMIUM(GLuint path,
                                                          GLenum pname,
                                                          GLint value);
static void GL_BINDING_CALL Mock_glPathParameteriNV(GLuint path,
                                                    GLenum pname,
                                                    GLint value);
static void GL_BINDING_CALL Mock_glPathStencilFuncCHROMIUM(GLenum func,
                                                           GLint ref,
                                                           GLuint mask);
static void GL_BINDING_CALL Mock_glPathStencilFuncNV(GLenum func,
                                                     GLint ref,
                                                     GLuint mask);
static void GL_BINDING_CALL Mock_glPauseTransformFeedback(void);
static void GL_BINDING_CALL Mock_glPixelStorei(GLenum pname, GLint param);
static void GL_BINDING_CALL Mock_glPointParameteri(GLenum pname, GLint param);
static void GL_BINDING_CALL Mock_glPolygonMode(GLenum face, GLenum mode);
static void GL_BINDING_CALL Mock_glPolygonOffset(GLfloat factor, GLfloat units);
static void GL_BINDING_CALL Mock_glPopDebugGroup();
static void GL_BINDING_CALL Mock_glPopDebugGroupKHR();
static void GL_BINDING_CALL Mock_glPopGroupMarkerEXT(void);
static void GL_BINDING_CALL Mock_glPrimitiveRestartIndex(GLuint index);
static void GL_BINDING_CALL Mock_glProgramBinary(GLuint program,
                                                 GLenum binaryFormat,
                                                 const GLvoid* binary,
                                                 GLsizei length);
static void GL_BINDING_CALL Mock_glProgramBinaryOES(GLuint program,
                                                    GLenum binaryFormat,
                                                    const GLvoid* binary,
                                                    GLsizei length);
static void GL_BINDING_CALL Mock_glProgramParameteri(GLuint program,
                                                     GLenum pname,
                                                     GLint value);
static void GL_BINDING_CALL
Mock_glProgramPathFragmentInputGenCHROMIUM(GLuint program,
                                           GLint location,
                                           GLenum genMode,
                                           GLint components,
                                           const GLfloat* coeffs);
static void GL_BINDING_CALL
Mock_glProgramPathFragmentInputGenNV(GLuint program,
                                     GLint location,
                                     GLenum genMode,
                                     GLint components,
                                     const GLfloat* coeffs);
static void GL_BINDING_CALL Mock_glProgramUniform1f(GLuint program,
                                                    GLint location,
                                                    GLfloat v0);
static void GL_BINDING_CALL Mock_glProgramUniform1fv(GLuint program,
                                                     GLint location,
                                                     GLsizei count,
                                                     const GLfloat* value);
static void GL_BINDING_CALL Mock_glProgramUniform1i(GLuint program,
                                                    GLint location,
                                                    GLint v0);
static void GL_BINDING_CALL Mock_glProgramUniform1iv(GLuint program,
                                                     GLint location,
                                                     GLsizei count,
                                                     const GLint* value);
static void GL_BINDING_CALL Mock_glProgramUniform1ui(GLuint program,
                                                     GLint location,
                                                     GLuint v0);
static void GL_BINDING_CALL Mock_glProgramUniform1uiv(GLuint program,
                                                      GLint location,
                                                      GLsizei count,
                                                      const GLuint* value);
static void GL_BINDING_CALL Mock_glProgramUniform2f(GLuint program,
                                                    GLint location,
                                                    GLfloat v0,
                                                    GLfloat v1);
static void GL_BINDING_CALL Mock_glProgramUniform2fv(GLuint program,
                                                     GLint location,
                                                     GLsizei count,
                                                     const GLfloat* value);
static void GL_BINDING_CALL Mock_glProgramUniform2i(GLuint program,
                                                    GLint location,
                                                    GLint v0,
                                                    GLint v1);
static void GL_BINDING_CALL Mock_glProgramUniform2iv(GLuint program,
                                                     GLint location,
                                                     GLsizei count,
                                                     const GLint* value);
static void GL_BINDING_CALL Mock_glProgramUniform2ui(GLuint program,
                                                     GLint location,
                                                     GLuint v0,
                                                     GLuint v1);
static void GL_BINDING_CALL Mock_glProgramUniform2uiv(GLuint program,
                                                      GLint location,
                                                      GLsizei count,
                                                      const GLuint* value);
static void GL_BINDING_CALL Mock_glProgramUniform3f(GLuint program,
                                                    GLint location,
                                                    GLfloat v0,
                                                    GLfloat v1,
                                                    GLfloat v2);
static void GL_BINDING_CALL Mock_glProgramUniform3fv(GLuint program,
                                                     GLint location,
                                                     GLsizei count,
                                                     const GLfloat* value);
static void GL_BINDING_CALL Mock_glProgramUniform3i(GLuint program,
                                                    GLint location,
                                                    GLint v0,
                                                    GLint v1,
                                                    GLint v2);
static void GL_BINDING_CALL Mock_glProgramUniform3iv(GLuint program,
                                                     GLint location,
                                                     GLsizei count,
                                                     const GLint* value);
static void GL_BINDING_CALL Mock_glProgramUniform3ui(GLuint program,
                                                     GLint location,
                                                     GLuint v0,
                                                     GLuint v1,
                                                     GLuint v2);
static void GL_BINDING_CALL Mock_glProgramUniform3uiv(GLuint program,
                                                      GLint location,
                                                      GLsizei count,
                                                      const GLuint* value);
static void GL_BINDING_CALL Mock_glProgramUniform4f(GLuint program,
                                                    GLint location,
                                                    GLfloat v0,
                                                    GLfloat v1,
                                                    GLfloat v2,
                                                    GLfloat v3);
static void GL_BINDING_CALL Mock_glProgramUniform4fv(GLuint program,
                                                     GLint location,
                                                     GLsizei count,
                                                     const GLfloat* value);
static void GL_BINDING_CALL Mock_glProgramUniform4i(GLuint program,
                                                    GLint location,
                                                    GLint v0,
                                                    GLint v1,
                                                    GLint v2,
                                                    GLint v3);
static void GL_BINDING_CALL Mock_glProgramUniform4iv(GLuint program,
                                                     GLint location,
                                                     GLsizei count,
                                                     const GLint* value);
static void GL_BINDING_CALL Mock_glProgramUniform4ui(GLuint program,
                                                     GLint location,
                                                     GLuint v0,
                                                     GLuint v1,
                                                     GLuint v2,
                                                     GLuint v3);
static void GL_BINDING_CALL Mock_glProgramUniform4uiv(GLuint program,
                                                      GLint location,
                                                      GLsizei count,
                                                      const GLuint* value);
static void GL_BINDING_CALL
Mock_glProgramUniformMatrix2fv(GLuint program,
                               GLint location,
                               GLsizei count,
                               GLboolean transpose,
                               const GLfloat* value);
static void GL_BINDING_CALL
Mock_glProgramUniformMatrix2x3fv(GLuint program,
                                 GLint location,
                                 GLsizei count,
                                 GLboolean transpose,
                                 const GLfloat* value);
static void GL_BINDING_CALL
Mock_glProgramUniformMatrix2x4fv(GLuint program,
                                 GLint location,
                                 GLsizei count,
                                 GLboolean transpose,
                                 const GLfloat* value);
static void GL_BINDING_CALL
Mock_glProgramUniformMatrix3fv(GLuint program,
                               GLint location,
                               GLsizei count,
                               GLboolean transpose,
                               const GLfloat* value);
static void GL_BINDING_CALL
Mock_glProgramUniformMatrix3x2fv(GLuint program,
                                 GLint location,
                                 GLsizei count,
                                 GLboolean transpose,
                                 const GLfloat* value);
static void GL_BINDING_CALL
Mock_glProgramUniformMatrix3x4fv(GLuint program,
                                 GLint location,
                                 GLsizei count,
                                 GLboolean transpose,
                                 const GLfloat* value);
static void GL_BINDING_CALL
Mock_glProgramUniformMatrix4fv(GLuint program,
                               GLint location,
                               GLsizei count,
                               GLboolean transpose,
                               const GLfloat* value);
static void GL_BINDING_CALL
Mock_glProgramUniformMatrix4x2fv(GLuint program,
                                 GLint location,
                                 GLsizei count,
                                 GLboolean transpose,
                                 const GLfloat* value);
static void GL_BINDING_CALL
Mock_glProgramUniformMatrix4x3fv(GLuint program,
                                 GLint location,
                                 GLsizei count,
                                 GLboolean transpose,
                                 const GLfloat* value);
static void GL_BINDING_CALL Mock_glPushDebugGroup(GLenum source,
                                                  GLuint id,
                                                  GLsizei length,
                                                  const char* message);
static void GL_BINDING_CALL Mock_glPushDebugGroupKHR(GLenum source,
                                                     GLuint id,
                                                     GLsizei length,
                                                     const char* message);
static void GL_BINDING_CALL Mock_glPushGroupMarkerEXT(GLsizei length,
                                                      const char* marker);
static void GL_BINDING_CALL Mock_glQueryCounter(GLuint id, GLenum target);
static void GL_BINDING_CALL Mock_glQueryCounterEXT(GLuint id, GLenum target);
static void GL_BINDING_CALL Mock_glReadBuffer(GLenum src);
static void GL_BINDING_CALL Mock_glReadPixels(GLint x,
                                              GLint y,
                                              GLsizei width,
                                              GLsizei height,
                                              GLenum format,
                                              GLenum type,
                                              void* pixels);
static void GL_BINDING_CALL Mock_glReadPixelsRobustANGLE(GLint x,
                                                         GLint y,
                                                         GLsizei width,
                                                         GLsizei height,
                                                         GLenum format,
                                                         GLenum type,
                                                         GLsizei bufSize,
                                                         GLsizei* length,
                                                         GLsizei* columns,
                                                         GLsizei* rows,
                                                         void* pixels);
static void GL_BINDING_CALL Mock_glReadnPixelsRobustANGLE(GLint x,
                                                          GLint y,
                                                          GLsizei width,
                                                          GLsizei height,
                                                          GLenum format,
                                                          GLenum type,
                                                          GLsizei bufSize,
                                                          GLsizei* length,
                                                          GLsizei* columns,
                                                          GLsizei* rows,
                                                          void* data);
static void GL_BINDING_CALL Mock_glReleaseShaderCompiler(void);
static void GL_BINDING_CALL Mock_glRenderbufferStorage(GLenum target,
                                                       GLenum internalformat,
                                                       GLsizei width,
                                                       GLsizei height);
static void GL_BINDING_CALL Mock_glRenderbufferStorageEXT(GLenum target,
                                                          GLenum internalformat,
                                                          GLsizei width,
                                                          GLsizei height);
static void GL_BINDING_CALL
Mock_glRenderbufferStorageMultisample(GLenum target,
                                      GLsizei samples,
                                      GLenum internalformat,
                                      GLsizei width,
                                      GLsizei height);
static void GL_BINDING_CALL
Mock_glRenderbufferStorageMultisampleANGLE(GLenum target,
                                           GLsizei samples,
                                           GLenum internalformat,
                                           GLsizei width,
                                           GLsizei height);
static void GL_BINDING_CALL
Mock_glRenderbufferStorageMultisampleEXT(GLenum target,
                                         GLsizei samples,
                                         GLenum internalformat,
                                         GLsizei width,
                                         GLsizei height);
static void GL_BINDING_CALL
Mock_glRenderbufferStorageMultisampleIMG(GLenum target,
                                         GLsizei samples,
                                         GLenum internalformat,
                                         GLsizei width,
                                         GLsizei height);
static void GL_BINDING_CALL Mock_glRequestExtensionANGLE(const char* name);
static void GL_BINDING_CALL Mock_glResumeTransformFeedback(void);
static void GL_BINDING_CALL Mock_glSampleCoverage(GLclampf value,
                                                  GLboolean invert);
static void GL_BINDING_CALL Mock_glSampleMaski(GLuint maskNumber,
                                               GLbitfield mask);
static void GL_BINDING_CALL
Mock_glSamplerParameterIivRobustANGLE(GLuint sampler,
                                      GLenum pname,
                                      GLsizei bufSize,
                                      const GLint* param);
static void GL_BINDING_CALL
Mock_glSamplerParameterIuivRobustANGLE(GLuint sampler,
                                       GLenum pname,
                                       GLsizei bufSize,
                                       const GLuint* param);
static void GL_BINDING_CALL Mock_glSamplerParameterf(GLuint sampler,
                                                     GLenum pname,
                                                     GLfloat param);
static void GL_BINDING_CALL Mock_glSamplerParameterfv(GLuint sampler,
                                                      GLenum pname,
                                                      const GLfloat* params);
static void GL_BINDING_CALL
Mock_glSamplerParameterfvRobustANGLE(GLuint sampler,
                                     GLenum pname,
                                     GLsizei bufSize,
                                     const GLfloat* param);
static void GL_BINDING_CALL Mock_glSamplerParameteri(GLuint sampler,
                                                     GLenum pname,
                                                     GLint param);
static void GL_BINDING_CALL Mock_glSamplerParameteriv(GLuint sampler,
                                                      GLenum pname,
                                                      const GLint* params);
static void GL_BINDING_CALL
Mock_glSamplerParameterivRobustANGLE(GLuint sampler,
                                     GLenum pname,
                                     GLsizei bufSize,
                                     const GLint* param);
static void GL_BINDING_CALL Mock_glScissor(GLint x,
                                           GLint y,
                                           GLsizei width,
                                           GLsizei height);
static void GL_BINDING_CALL Mock_glSetFenceAPPLE(GLuint fence);
static void GL_BINDING_CALL Mock_glSetFenceNV(GLuint fence, GLenum condition);
static void GL_BINDING_CALL Mock_glShaderBinary(GLsizei n,
                                                const GLuint* shaders,
                                                GLenum binaryformat,
                                                const void* binary,
                                                GLsizei length);
static void GL_BINDING_CALL Mock_glShaderSource(GLuint shader,
                                                GLsizei count,
                                                const char* const* str,
                                                const GLint* length);
static void GL_BINDING_CALL Mock_glStencilFillPathCHROMIUM(GLuint path,
                                                           GLenum fillMode,
                                                           GLuint mask);
static void GL_BINDING_CALL
Mock_glStencilFillPathInstancedCHROMIUM(GLsizei numPaths,
                                        GLenum pathNameType,
                                        const void* paths,
                                        GLuint pathBase,
                                        GLenum fillMode,
                                        GLuint mask,
                                        GLenum transformType,
                                        const GLfloat* transformValues);
static void GL_BINDING_CALL
Mock_glStencilFillPathInstancedNV(GLsizei numPaths,
                                  GLenum pathNameType,
                                  const void* paths,
                                  GLuint pathBase,
                                  GLenum fillMode,
                                  GLuint mask,
                                  GLenum transformType,
                                  const GLfloat* transformValues);
static void GL_BINDING_CALL Mock_glStencilFillPathNV(GLuint path,
                                                     GLenum fillMode,
                                                     GLuint mask);
static void GL_BINDING_CALL Mock_glStencilFunc(GLenum func,
                                               GLint ref,
                                               GLuint mask);
static void GL_BINDING_CALL Mock_glStencilFuncSeparate(GLenum face,
                                                       GLenum func,
                                                       GLint ref,
                                                       GLuint mask);
static void GL_BINDING_CALL Mock_glStencilMask(GLuint mask);
static void GL_BINDING_CALL Mock_glStencilMaskSeparate(GLenum face,
                                                       GLuint mask);
static void GL_BINDING_CALL Mock_glStencilOp(GLenum fail,
                                             GLenum zfail,
                                             GLenum zpass);
static void GL_BINDING_CALL Mock_glStencilOpSeparate(GLenum face,
                                                     GLenum fail,
                                                     GLenum zfail,
                                                     GLenum zpass);
static void GL_BINDING_CALL Mock_glStencilStrokePathCHROMIUM(GLuint path,
                                                             GLint reference,
                                                             GLuint mask);
static void GL_BINDING_CALL
Mock_glStencilStrokePathInstancedCHROMIUM(GLsizei numPaths,
                                          GLenum pathNameType,
                                          const void* paths,
                                          GLuint pathBase,
                                          GLint ref,
                                          GLuint mask,
                                          GLenum transformType,
                                          const GLfloat* transformValues);
static void GL_BINDING_CALL
Mock_glStencilStrokePathInstancedNV(GLsizei numPaths,
                                    GLenum pathNameType,
                                    const void* paths,
                                    GLuint pathBase,
                                    GLint ref,
                                    GLuint mask,
                                    GLenum transformType,
                                    const GLfloat* transformValues);
static void GL_BINDING_CALL Mock_glStencilStrokePathNV(GLuint path,
                                                       GLint reference,
                                                       GLuint mask);
static void GL_BINDING_CALL
Mock_glStencilThenCoverFillPathCHROMIUM(GLuint path,
                                        GLenum fillMode,
                                        GLuint mask,
                                        GLenum coverMode);
static void GL_BINDING_CALL Mock_glStencilThenCoverFillPathInstancedCHROMIUM(
    GLsizei numPaths,
    GLenum pathNameType,
    const void* paths,
    GLuint pathBase,
    GLenum fillMode,
    GLuint mask,
    GLenum coverMode,
    GLenum transformType,
    const GLfloat* transformValues);
static void GL_BINDING_CALL
Mock_glStencilThenCoverFillPathInstancedNV(GLsizei numPaths,
                                           GLenum pathNameType,
                                           const void* paths,
                                           GLuint pathBase,
                                           GLenum fillMode,
                                           GLuint mask,
                                           GLenum coverMode,
                                           GLenum transformType,
                                           const GLfloat* transformValues);
static void GL_BINDING_CALL Mock_glStencilThenCoverFillPathNV(GLuint path,
                                                              GLenum fillMode,
                                                              GLuint mask,
                                                              GLenum coverMode);
static void GL_BINDING_CALL
Mock_glStencilThenCoverStrokePathCHROMIUM(GLuint path,
                                          GLint reference,
                                          GLuint mask,
                                          GLenum coverMode);
static void GL_BINDING_CALL Mock_glStencilThenCoverStrokePathInstancedCHROMIUM(
    GLsizei numPaths,
    GLenum pathNameType,
    const void* paths,
    GLuint pathBase,
    GLint ref,
    GLuint mask,
    GLenum coverMode,
    GLenum transformType,
    const GLfloat* transformValues);
static void GL_BINDING_CALL
Mock_glStencilThenCoverStrokePathInstancedNV(GLsizei numPaths,
                                             GLenum pathNameType,
                                             const void* paths,
                                             GLuint pathBase,
                                             GLint ref,
                                             GLuint mask,
                                             GLenum coverMode,
                                             GLenum transformType,
                                             const GLfloat* transformValues);
static void GL_BINDING_CALL
Mock_glStencilThenCoverStrokePathNV(GLuint path,
                                    GLint reference,
                                    GLuint mask,
                                    GLenum coverMode);
static GLboolean GL_BINDING_CALL Mock_glTestFenceAPPLE(GLuint fence);
static GLboolean GL_BINDING_CALL Mock_glTestFenceNV(GLuint fence);
static void GL_BINDING_CALL Mock_glTexBuffer(GLenum target,
                                             GLenum internalformat,
                                             GLuint buffer);
static void GL_BINDING_CALL Mock_glTexBufferEXT(GLenum target,
                                                GLenum internalformat,
                                                GLuint buffer);
static void GL_BINDING_CALL Mock_glTexBufferOES(GLenum target,
                                                GLenum internalformat,
                                                GLuint buffer);
static void GL_BINDING_CALL Mock_glTexBufferRange(GLenum target,
                                                  GLenum internalformat,
                                                  GLuint buffer,
                                                  GLintptr offset,
                                                  GLsizeiptr size);
static void GL_BINDING_CALL Mock_glTexBufferRangeEXT(GLenum target,
                                                     GLenum internalformat,
                                                     GLuint buffer,
                                                     GLintptr offset,
                                                     GLsizeiptr size);
static void GL_BINDING_CALL Mock_glTexBufferRangeOES(GLenum target,
                                                     GLenum internalformat,
                                                     GLuint buffer,
                                                     GLintptr offset,
                                                     GLsizeiptr size);
static void GL_BINDING_CALL Mock_glTexImage2D(GLenum target,
                                              GLint level,
                                              GLint internalformat,
                                              GLsizei width,
                                              GLsizei height,
                                              GLint border,
                                              GLenum format,
                                              GLenum type,
                                              const void* pixels);
static void GL_BINDING_CALL Mock_glTexImage2DRobustANGLE(GLenum target,
                                                         GLint level,
                                                         GLint internalformat,
                                                         GLsizei width,
                                                         GLsizei height,
                                                         GLint border,
                                                         GLenum format,
                                                         GLenum type,
                                                         GLsizei bufSize,
                                                         const void* pixels);
static void GL_BINDING_CALL Mock_glTexImage3D(GLenum target,
                                              GLint level,
                                              GLint internalformat,
                                              GLsizei width,
                                              GLsizei height,
                                              GLsizei depth,
                                              GLint border,
                                              GLenum format,
                                              GLenum type,
                                              const void* pixels);
static void GL_BINDING_CALL Mock_glTexImage3DRobustANGLE(GLenum target,
                                                         GLint level,
                                                         GLint internalformat,
                                                         GLsizei width,
                                                         GLsizei height,
                                                         GLsizei depth,
                                                         GLint border,
                                                         GLenum format,
                                                         GLenum type,
                                                         GLsizei bufSize,
                                                         const void* pixels);
static void GL_BINDING_CALL
Mock_glTexParameterIivRobustANGLE(GLenum target,
                                  GLenum pname,
                                  GLsizei bufSize,
                                  const GLint* params);
static void GL_BINDING_CALL
Mock_glTexParameterIuivRobustANGLE(GLenum target,
                                   GLenum pname,
                                   GLsizei bufSize,
                                   const GLuint* params);
static void GL_BINDING_CALL Mock_glTexParameterf(GLenum target,
                                                 GLenum pname,
                                                 GLfloat param);
static void GL_BINDING_CALL Mock_glTexParameterfv(GLenum target,
                                                  GLenum pname,
                                                  const GLfloat* params);
static void GL_BINDING_CALL
Mock_glTexParameterfvRobustANGLE(GLenum target,
                                 GLenum pname,
                                 GLsizei bufSize,
                                 const GLfloat* params);
static void GL_BINDING_CALL Mock_glTexParameteri(GLenum target,
                                                 GLenum pname,
                                                 GLint param);
static void GL_BINDING_CALL Mock_glTexParameteriv(GLenum target,
                                                  GLenum pname,
                                                  const GLint* params);
static void GL_BINDING_CALL
Mock_glTexParameterivRobustANGLE(GLenum target,
                                 GLenum pname,
                                 GLsizei bufSize,
                                 const GLint* params);
static void GL_BINDING_CALL Mock_glTexStorage2D(GLenum target,
                                                GLsizei levels,
                                                GLenum internalformat,
                                                GLsizei width,
                                                GLsizei height);
static void GL_BINDING_CALL Mock_glTexStorage2DEXT(GLenum target,
                                                   GLsizei levels,
                                                   GLenum internalformat,
                                                   GLsizei width,
                                                   GLsizei height);
static void GL_BINDING_CALL
Mock_glTexStorage2DMultisample(GLenum target,
                               GLsizei samples,
                               GLenum internalformat,
                               GLsizei width,
                               GLsizei height,
                               GLboolean fixedsamplelocations);
static void GL_BINDING_CALL Mock_glTexStorage3D(GLenum target,
                                                GLsizei levels,
                                                GLenum internalformat,
                                                GLsizei width,
                                                GLsizei height,
                                                GLsizei depth);
static void GL_BINDING_CALL Mock_glTexSubImage2D(GLenum target,
                                                 GLint level,
                                                 GLint xoffset,
                                                 GLint yoffset,
                                                 GLsizei width,
                                                 GLsizei height,
                                                 GLenum format,
                                                 GLenum type,
                                                 const void* pixels);
static void GL_BINDING_CALL Mock_glTexSubImage2DRobustANGLE(GLenum target,
                                                            GLint level,
                                                            GLint xoffset,
                                                            GLint yoffset,
                                                            GLsizei width,
                                                            GLsizei height,
                                                            GLenum format,
                                                            GLenum type,
                                                            GLsizei bufSize,
                                                            const void* pixels);
static void GL_BINDING_CALL Mock_glTexSubImage3D(GLenum target,
                                                 GLint level,
                                                 GLint xoffset,
                                                 GLint yoffset,
                                                 GLint zoffset,
                                                 GLsizei width,
                                                 GLsizei height,
                                                 GLsizei depth,
                                                 GLenum format,
                                                 GLenum type,
                                                 const void* pixels);
static void GL_BINDING_CALL Mock_glTexSubImage3DRobustANGLE(GLenum target,
                                                            GLint level,
                                                            GLint xoffset,
                                                            GLint yoffset,
                                                            GLint zoffset,
                                                            GLsizei width,
                                                            GLsizei height,
                                                            GLsizei depth,
                                                            GLenum format,
                                                            GLenum type,
                                                            GLsizei bufSize,
                                                            const void* pixels);
static void GL_BINDING_CALL
Mock_glTransformFeedbackVaryings(GLuint program,
                                 GLsizei count,
                                 const char* const* varyings,
                                 GLenum bufferMode);
static void GL_BINDING_CALL
Mock_glTransformFeedbackVaryingsEXT(GLuint program,
                                    GLsizei count,
                                    const char* const* varyings,
                                    GLenum bufferMode);
static void GL_BINDING_CALL Mock_glUniform1f(GLint location, GLfloat x);
static void GL_BINDING_CALL Mock_glUniform1fv(GLint location,
                                              GLsizei count,
                                              const GLfloat* v);
static void GL_BINDING_CALL Mock_glUniform1i(GLint location, GLint x);
static void GL_BINDING_CALL Mock_glUniform1iv(GLint location,
                                              GLsizei count,
                                              const GLint* v);
static void GL_BINDING_CALL Mock_glUniform1ui(GLint location, GLuint v0);
static void GL_BINDING_CALL Mock_glUniform1uiv(GLint location,
                                               GLsizei count,
                                               const GLuint* v);
static void GL_BINDING_CALL Mock_glUniform2f(GLint location,
                                             GLfloat x,
                                             GLfloat y);
static void GL_BINDING_CALL Mock_glUniform2fv(GLint location,
                                              GLsizei count,
                                              const GLfloat* v);
static void GL_BINDING_CALL Mock_glUniform2i(GLint location, GLint x, GLint y);
static void GL_BINDING_CALL Mock_glUniform2iv(GLint location,
                                              GLsizei count,
                                              const GLint* v);
static void GL_BINDING_CALL Mock_glUniform2ui(GLint location,
                                              GLuint v0,
                                              GLuint v1);
static void GL_BINDING_CALL Mock_glUniform2uiv(GLint location,
                                               GLsizei count,
                                               const GLuint* v);
static void GL_BINDING_CALL Mock_glUniform3f(GLint location,
                                             GLfloat x,
                                             GLfloat y,
                                             GLfloat z);
static void GL_BINDING_CALL Mock_glUniform3fv(GLint location,
                                              GLsizei count,
                                              const GLfloat* v);
static void GL_BINDING_CALL Mock_glUniform3i(GLint location,
                                             GLint x,
                                             GLint y,
                                             GLint z);
static void GL_BINDING_CALL Mock_glUniform3iv(GLint location,
                                              GLsizei count,
                                              const GLint* v);
static void GL_BINDING_CALL Mock_glUniform3ui(GLint location,
                                              GLuint v0,
                                              GLuint v1,
                                              GLuint v2);
static void GL_BINDING_CALL Mock_glUniform3uiv(GLint location,
                                               GLsizei count,
                                               const GLuint* v);
static void GL_BINDING_CALL
Mock_glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
static void GL_BINDING_CALL Mock_glUniform4fv(GLint location,
                                              GLsizei count,
                                              const GLfloat* v);
static void GL_BINDING_CALL
Mock_glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w);
static void GL_BINDING_CALL Mock_glUniform4iv(GLint location,
                                              GLsizei count,
                                              const GLint* v);
static void GL_BINDING_CALL
Mock_glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
static void GL_BINDING_CALL Mock_glUniform4uiv(GLint location,
                                               GLsizei count,
                                               const GLuint* v);
static void GL_BINDING_CALL
Mock_glUniformBlockBinding(GLuint program,
                           GLuint uniformBlockIndex,
                           GLuint uniformBlockBinding);
static void GL_BINDING_CALL Mock_glUniformMatrix2fv(GLint location,
                                                    GLsizei count,
                                                    GLboolean transpose,
                                                    const GLfloat* value);
static void GL_BINDING_CALL Mock_glUniformMatrix2x3fv(GLint location,
                                                      GLsizei count,
                                                      GLboolean transpose,
                                                      const GLfloat* value);
static void GL_BINDING_CALL Mock_glUniformMatrix2x4fv(GLint location,
                                                      GLsizei count,
                                                      GLboolean transpose,
                                                      const GLfloat* value);
static void GL_BINDING_CALL Mock_glUniformMatrix3fv(GLint location,
                                                    GLsizei count,
                                                    GLboolean transpose,
                                                    const GLfloat* value);
static void GL_BINDING_CALL Mock_glUniformMatrix3x2fv(GLint location,
                                                      GLsizei count,
                                                      GLboolean transpose,
                                                      const GLfloat* value);
static void GL_BINDING_CALL Mock_glUniformMatrix3x4fv(GLint location,
                                                      GLsizei count,
                                                      GLboolean transpose,
                                                      const GLfloat* value);
static void GL_BINDING_CALL Mock_glUniformMatrix4fv(GLint location,
                                                    GLsizei count,
                                                    GLboolean transpose,
                                                    const GLfloat* value);
static void GL_BINDING_CALL Mock_glUniformMatrix4x2fv(GLint location,
                                                      GLsizei count,
                                                      GLboolean transpose,
                                                      const GLfloat* value);
static void GL_BINDING_CALL Mock_glUniformMatrix4x3fv(GLint location,
                                                      GLsizei count,
                                                      GLboolean transpose,
                                                      const GLfloat* value);
static GLboolean GL_BINDING_CALL Mock_glUnmapBuffer(GLenum target);
static GLboolean GL_BINDING_CALL Mock_glUnmapBufferOES(GLenum target);
static void GL_BINDING_CALL Mock_glUseProgram(GLuint program);
static void GL_BINDING_CALL Mock_glUseProgramStages(GLuint pipeline,
                                                    GLbitfield stages,
                                                    GLuint program);
static void GL_BINDING_CALL Mock_glValidateProgram(GLuint program);
static void GL_BINDING_CALL Mock_glValidateProgramPipeline(GLuint pipeline);
static void GL_BINDING_CALL Mock_glVertexAttrib1f(GLuint indx, GLfloat x);
static void GL_BINDING_CALL Mock_glVertexAttrib1fv(GLuint indx,
                                                   const GLfloat* values);
static void GL_BINDING_CALL Mock_glVertexAttrib2f(GLuint indx,
                                                  GLfloat x,
                                                  GLfloat y);
static void GL_BINDING_CALL Mock_glVertexAttrib2fv(GLuint indx,
                                                   const GLfloat* values);
static void GL_BINDING_CALL Mock_glVertexAttrib3f(GLuint indx,
                                                  GLfloat x,
                                                  GLfloat y,
                                                  GLfloat z);
static void GL_BINDING_CALL Mock_glVertexAttrib3fv(GLuint indx,
                                                   const GLfloat* values);
static void GL_BINDING_CALL
Mock_glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
static void GL_BINDING_CALL Mock_glVertexAttrib4fv(GLuint indx,
                                                   const GLfloat* values);
static void GL_BINDING_CALL Mock_glVertexAttribBinding(GLuint attribindex,
                                                       GLuint bindingindex);
static void GL_BINDING_CALL Mock_glVertexAttribDivisor(GLuint index,
                                                       GLuint divisor);
static void GL_BINDING_CALL Mock_glVertexAttribDivisorANGLE(GLuint index,
                                                            GLuint divisor);
static void GL_BINDING_CALL Mock_glVertexAttribDivisorARB(GLuint index,
                                                          GLuint divisor);
static void GL_BINDING_CALL Mock_glVertexAttribDivisorEXT(GLuint index,
                                                          GLuint divisor);
static void GL_BINDING_CALL Mock_glVertexAttribFormat(GLuint attribindex,
                                                      GLint size,
                                                      GLenum type,
                                                      GLboolean normalized,
                                                      GLuint relativeoffset);
static void GL_BINDING_CALL
Mock_glVertexAttribI4i(GLuint indx, GLint x, GLint y, GLint z, GLint w);
static void GL_BINDING_CALL Mock_glVertexAttribI4iv(GLuint indx,
                                                    const GLint* values);
static void GL_BINDING_CALL
Mock_glVertexAttribI4ui(GLuint indx, GLuint x, GLuint y, GLuint z, GLuint w);
static void GL_BINDING_CALL Mock_glVertexAttribI4uiv(GLuint indx,
                                                     const GLuint* values);
static void GL_BINDING_CALL Mock_glVertexAttribIFormat(GLuint attribindex,
                                                       GLint size,
                                                       GLenum type,
                                                       GLuint relativeoffset);
static void GL_BINDING_CALL Mock_glVertexAttribIPointer(GLuint indx,
                                                        GLint size,
                                                        GLenum type,
                                                        GLsizei stride,
                                                        const void* ptr);
static void GL_BINDING_CALL Mock_glVertexAttribPointer(GLuint indx,
                                                       GLint size,
                                                       GLenum type,
                                                       GLboolean normalized,
                                                       GLsizei stride,
                                                       const void* ptr);
static void GL_BINDING_CALL Mock_glVertexBindingDivisor(GLuint bindingindex,
                                                        GLuint divisor);
static void GL_BINDING_CALL Mock_glViewport(GLint x,
                                            GLint y,
                                            GLsizei width,
                                            GLsizei height);
static void GL_BINDING_CALL Mock_glWaitSync(GLsync sync,
                                            GLbitfield flags,
                                            GLuint64 timeout);
static void GL_BINDING_CALL Mock_glWindowRectanglesEXT(GLenum mode,
                                                       GLsizei n,
                                                       const GLint* box);
