// GENERATED FILE - DO NOT EDIT.
// Generated by generate_gl_dispatch_table.py using data from gl_bindings_data.json and gl.xml.
//
// Copyright 2019 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// null_functions.h:
//   Declares the NULL/Stub bindings for the OpenGL back-end.

#ifndef LIBGLESV2_RENDERER_GL_NULL_GL_FUNCTIONS_AUTOGEN_H_
#define LIBGLESV2_RENDERER_GL_NULL_GL_FUNCTIONS_AUTOGEN_H_

#include "libANGLE/renderer/gl/functionsgl_typedefs.h"

namespace rx
{
void INTERNAL_GL_APIENTRY glActiveShaderProgramNULL(GLuint pipeline, GLuint program);
void INTERNAL_GL_APIENTRY glActiveTextureNULL(GLenum texture);
void INTERNAL_GL_APIENTRY glAttachShaderNULL(GLuint program, GLuint shader);
void INTERNAL_GL_APIENTRY glBeginConditionalRenderNULL(GLuint id, GLenum mode);
void INTERNAL_GL_APIENTRY glBeginQueryNULL(GLenum target, GLuint id);
void INTERNAL_GL_APIENTRY glBeginQueryIndexedNULL(GLenum target, GLuint index, GLuint id);
void INTERNAL_GL_APIENTRY glBeginTransformFeedbackNULL(GLenum primitiveMode);
void INTERNAL_GL_APIENTRY glBindAttribLocationNULL(GLuint program,
                                                   GLuint index,
                                                   const GLchar *name);
void INTERNAL_GL_APIENTRY glBindBufferNULL(GLenum target, GLuint buffer);
void INTERNAL_GL_APIENTRY glBindBufferBaseNULL(GLenum target, GLuint index, GLuint buffer);
void INTERNAL_GL_APIENTRY
glBindBufferRangeNULL(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
void INTERNAL_GL_APIENTRY glBindBuffersBaseNULL(GLenum target,
                                                GLuint first,
                                                GLsizei count,
                                                const GLuint *buffers);
void INTERNAL_GL_APIENTRY glBindBuffersRangeNULL(GLenum target,
                                                 GLuint first,
                                                 GLsizei count,
                                                 const GLuint *buffers,
                                                 const GLintptr *offsets,
                                                 const GLsizeiptr *sizes);
void INTERNAL_GL_APIENTRY glBindFragDataLocationNULL(GLuint program,
                                                     GLuint color,
                                                     const GLchar *name);
void INTERNAL_GL_APIENTRY glBindFragDataLocationIndexedNULL(GLuint program,
                                                            GLuint colorNumber,
                                                            GLuint index,
                                                            const GLchar *name);
void INTERNAL_GL_APIENTRY glBindFramebufferNULL(GLenum target, GLuint framebuffer);
void INTERNAL_GL_APIENTRY glBindImageTextureNULL(GLuint unit,
                                                 GLuint texture,
                                                 GLint level,
                                                 GLboolean layered,
                                                 GLint layer,
                                                 GLenum access,
                                                 GLenum format);
void INTERNAL_GL_APIENTRY glBindImageTexturesNULL(GLuint first,
                                                  GLsizei count,
                                                  const GLuint *textures);
void INTERNAL_GL_APIENTRY glBindProgramPipelineNULL(GLuint pipeline);
void INTERNAL_GL_APIENTRY glBindRenderbufferNULL(GLenum target, GLuint renderbuffer);
void INTERNAL_GL_APIENTRY glBindSamplerNULL(GLuint unit, GLuint sampler);
void INTERNAL_GL_APIENTRY glBindSamplersNULL(GLuint first, GLsizei count, const GLuint *samplers);
void INTERNAL_GL_APIENTRY glBindTextureNULL(GLenum target, GLuint texture);
void INTERNAL_GL_APIENTRY glBindTextureUnitNULL(GLuint unit, GLuint texture);
void INTERNAL_GL_APIENTRY glBindTexturesNULL(GLuint first, GLsizei count, const GLuint *textures);
void INTERNAL_GL_APIENTRY glBindTransformFeedbackNULL(GLenum target, GLuint id);
void INTERNAL_GL_APIENTRY glBindVertexArrayNULL(GLuint array);
void INTERNAL_GL_APIENTRY glBindVertexBufferNULL(GLuint bindingindex,
                                                 GLuint buffer,
                                                 GLintptr offset,
                                                 GLsizei stride);
void INTERNAL_GL_APIENTRY glBindVertexBuffersNULL(GLuint first,
                                                  GLsizei count,
                                                  const GLuint *buffers,
                                                  const GLintptr *offsets,
                                                  const GLsizei *strides);
void INTERNAL_GL_APIENTRY glBlendBarrierNULL();
void INTERNAL_GL_APIENTRY glBlendColorNULL(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
void INTERNAL_GL_APIENTRY glBlendEquationNULL(GLenum mode);
void INTERNAL_GL_APIENTRY glBlendEquationSeparateNULL(GLenum modeRGB, GLenum modeAlpha);
void INTERNAL_GL_APIENTRY glBlendEquationSeparateiNULL(GLuint buf,
                                                       GLenum modeRGB,
                                                       GLenum modeAlpha);
void INTERNAL_GL_APIENTRY glBlendEquationiNULL(GLuint buf, GLenum mode);
void INTERNAL_GL_APIENTRY glBlendFuncNULL(GLenum sfactor, GLenum dfactor);
void INTERNAL_GL_APIENTRY glBlendFuncSeparateNULL(GLenum sfactorRGB,
                                                  GLenum dfactorRGB,
                                                  GLenum sfactorAlpha,
                                                  GLenum dfactorAlpha);
void INTERNAL_GL_APIENTRY glBlendFuncSeparateiNULL(GLuint buf,
                                                   GLenum srcRGB,
                                                   GLenum dstRGB,
                                                   GLenum srcAlpha,
                                                   GLenum dstAlpha);
void INTERNAL_GL_APIENTRY glBlendFunciNULL(GLuint buf, GLenum src, GLenum dst);
void INTERNAL_GL_APIENTRY glBlitFramebufferNULL(GLint srcX0,
                                                GLint srcY0,
                                                GLint srcX1,
                                                GLint srcY1,
                                                GLint dstX0,
                                                GLint dstY0,
                                                GLint dstX1,
                                                GLint dstY1,
                                                GLbitfield mask,
                                                GLenum filter);
void INTERNAL_GL_APIENTRY glBlitNamedFramebufferNULL(GLuint readFramebuffer,
                                                     GLuint drawFramebuffer,
                                                     GLint srcX0,
                                                     GLint srcY0,
                                                     GLint srcX1,
                                                     GLint srcY1,
                                                     GLint dstX0,
                                                     GLint dstY0,
                                                     GLint dstX1,
                                                     GLint dstY1,
                                                     GLbitfield mask,
                                                     GLenum filter);
void INTERNAL_GL_APIENTRY glBufferDataNULL(GLenum target,
                                           GLsizeiptr size,
                                           const void *data,
                                           GLenum usage);
void INTERNAL_GL_APIENTRY glBufferStorageNULL(GLenum target,
                                              GLsizeiptr size,
                                              const void *data,
                                              GLbitfield flags);
void INTERNAL_GL_APIENTRY glBufferStorageMemEXTNULL(GLenum target,
                                                    GLsizeiptr size,
                                                    GLuint memory,
                                                    GLuint64 offset);
void INTERNAL_GL_APIENTRY glBufferSubDataNULL(GLenum target,
                                              GLintptr offset,
                                              GLsizeiptr size,
                                              const void *data);
GLenum INTERNAL_GL_APIENTRY glCheckFramebufferStatusNULL(GLenum target);
GLenum INTERNAL_GL_APIENTRY glCheckNamedFramebufferStatusNULL(GLuint framebuffer, GLenum target);
void INTERNAL_GL_APIENTRY glClampColorNULL(GLenum target, GLenum clamp);
void INTERNAL_GL_APIENTRY glClearNULL(GLbitfield mask);
void INTERNAL_GL_APIENTRY glClearBufferDataNULL(GLenum target,
                                                GLenum internalformat,
                                                GLenum format,
                                                GLenum type,
                                                const void *data);
void INTERNAL_GL_APIENTRY glClearBufferSubDataNULL(GLenum target,
                                                   GLenum internalformat,
                                                   GLintptr offset,
                                                   GLsizeiptr size,
                                                   GLenum format,
                                                   GLenum type,
                                                   const void *data);
void INTERNAL_GL_APIENTRY glClearBufferfiNULL(GLenum buffer,
                                              GLint drawbuffer,
                                              GLfloat depth,
                                              GLint stencil);
void INTERNAL_GL_APIENTRY glClearBufferfvNULL(GLenum buffer,
                                              GLint drawbuffer,
                                              const GLfloat *value);
void INTERNAL_GL_APIENTRY glClearBufferivNULL(GLenum buffer, GLint drawbuffer, const GLint *value);
void INTERNAL_GL_APIENTRY glClearBufferuivNULL(GLenum buffer,
                                               GLint drawbuffer,
                                               const GLuint *value);
void INTERNAL_GL_APIENTRY glClearColorNULL(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
void INTERNAL_GL_APIENTRY glClearDepthNULL(GLdouble depth);
void INTERNAL_GL_APIENTRY glClearDepthfNULL(GLfloat d);
void INTERNAL_GL_APIENTRY glClearNamedBufferDataNULL(GLuint buffer,
                                                     GLenum internalformat,
                                                     GLenum format,
                                                     GLenum type,
                                                     const void *data);
void INTERNAL_GL_APIENTRY glClearNamedBufferSubDataNULL(GLuint buffer,
                                                        GLenum internalformat,
                                                        GLintptr offset,
                                                        GLsizeiptr size,
                                                        GLenum format,
                                                        GLenum type,
                                                        const void *data);
void INTERNAL_GL_APIENTRY glClearNamedFramebufferfiNULL(GLuint framebuffer,
                                                        GLenum buffer,
                                                        GLint drawbuffer,
                                                        GLfloat depth,
                                                        GLint stencil);
void INTERNAL_GL_APIENTRY glClearNamedFramebufferfvNULL(GLuint framebuffer,
                                                        GLenum buffer,
                                                        GLint drawbuffer,
                                                        const GLfloat *value);
void INTERNAL_GL_APIENTRY glClearNamedFramebufferivNULL(GLuint framebuffer,
                                                        GLenum buffer,
                                                        GLint drawbuffer,
                                                        const GLint *value);
void INTERNAL_GL_APIENTRY glClearNamedFramebufferuivNULL(GLuint framebuffer,
                                                         GLenum buffer,
                                                         GLint drawbuffer,
                                                         const GLuint *value);
void INTERNAL_GL_APIENTRY glClearStencilNULL(GLint s);
void INTERNAL_GL_APIENTRY
glClearTexImageNULL(GLuint texture, GLint level, GLenum format, GLenum type, const void *data);
void INTERNAL_GL_APIENTRY glClearTexSubImageNULL(GLuint texture,
                                                 GLint level,
                                                 GLint xoffset,
                                                 GLint yoffset,
                                                 GLint zoffset,
                                                 GLsizei width,
                                                 GLsizei height,
                                                 GLsizei depth,
                                                 GLenum format,
                                                 GLenum type,
                                                 const void *data);
GLenum INTERNAL_GL_APIENTRY glClientWaitSyncNULL(GLsync sync, GLbitfield flags, GLuint64 timeout);
void INTERNAL_GL_APIENTRY glClipControlNULL(GLenum origin, GLenum depth);
void INTERNAL_GL_APIENTRY glColorMaskNULL(GLboolean red,
                                          GLboolean green,
                                          GLboolean blue,
                                          GLboolean alpha);
void INTERNAL_GL_APIENTRY
glColorMaskiNULL(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
void INTERNAL_GL_APIENTRY glCompileShaderNULL(GLuint shader);
void INTERNAL_GL_APIENTRY glCompressedTexImage1DNULL(GLenum target,
                                                     GLint level,
                                                     GLenum internalformat,
                                                     GLsizei width,
                                                     GLint border,
                                                     GLsizei imageSize,
                                                     const void *data);
void INTERNAL_GL_APIENTRY glCompressedTexImage2DNULL(GLenum target,
                                                     GLint level,
                                                     GLenum internalformat,
                                                     GLsizei width,
                                                     GLsizei height,
                                                     GLint border,
                                                     GLsizei imageSize,
                                                     const void *data);
void INTERNAL_GL_APIENTRY glCompressedTexImage3DNULL(GLenum target,
                                                     GLint level,
                                                     GLenum internalformat,
                                                     GLsizei width,
                                                     GLsizei height,
                                                     GLsizei depth,
                                                     GLint border,
                                                     GLsizei imageSize,
                                                     const void *data);
void INTERNAL_GL_APIENTRY glCompressedTexSubImage1DNULL(GLenum target,
                                                        GLint level,
                                                        GLint xoffset,
                                                        GLsizei width,
                                                        GLenum format,
                                                        GLsizei imageSize,
                                                        const void *data);
void INTERNAL_GL_APIENTRY glCompressedTexSubImage2DNULL(GLenum target,
                                                        GLint level,
                                                        GLint xoffset,
                                                        GLint yoffset,
                                                        GLsizei width,
                                                        GLsizei height,
                                                        GLenum format,
                                                        GLsizei imageSize,
                                                        const void *data);
void INTERNAL_GL_APIENTRY glCompressedTexSubImage3DNULL(GLenum target,
                                                        GLint level,
                                                        GLint xoffset,
                                                        GLint yoffset,
                                                        GLint zoffset,
                                                        GLsizei width,
                                                        GLsizei height,
                                                        GLsizei depth,
                                                        GLenum format,
                                                        GLsizei imageSize,
                                                        const void *data);
void INTERNAL_GL_APIENTRY glCompressedTextureSubImage1DNULL(GLuint texture,
                                                            GLint level,
                                                            GLint xoffset,
                                                            GLsizei width,
                                                            GLenum format,
                                                            GLsizei imageSize,
                                                            const void *data);
void INTERNAL_GL_APIENTRY glCompressedTextureSubImage2DNULL(GLuint texture,
                                                            GLint level,
                                                            GLint xoffset,
                                                            GLint yoffset,
                                                            GLsizei width,
                                                            GLsizei height,
                                                            GLenum format,
                                                            GLsizei imageSize,
                                                            const void *data);
void INTERNAL_GL_APIENTRY glCompressedTextureSubImage3DNULL(GLuint texture,
                                                            GLint level,
                                                            GLint xoffset,
                                                            GLint yoffset,
                                                            GLint zoffset,
                                                            GLsizei width,
                                                            GLsizei height,
                                                            GLsizei depth,
                                                            GLenum format,
                                                            GLsizei imageSize,
                                                            const void *data);
void INTERNAL_GL_APIENTRY glCopyBufferSubDataNULL(GLenum readTarget,
                                                  GLenum writeTarget,
                                                  GLintptr readOffset,
                                                  GLintptr writeOffset,
                                                  GLsizeiptr size);
void INTERNAL_GL_APIENTRY glCopyImageSubDataNULL(GLuint srcName,
                                                 GLenum srcTarget,
                                                 GLint srcLevel,
                                                 GLint srcX,
                                                 GLint srcY,
                                                 GLint srcZ,
                                                 GLuint dstName,
                                                 GLenum dstTarget,
                                                 GLint dstLevel,
                                                 GLint dstX,
                                                 GLint dstY,
                                                 GLint dstZ,
                                                 GLsizei srcWidth,
                                                 GLsizei srcHeight,
                                                 GLsizei srcDepth);
void INTERNAL_GL_APIENTRY glCopyNamedBufferSubDataNULL(GLuint readBuffer,
                                                       GLuint writeBuffer,
                                                       GLintptr readOffset,
                                                       GLintptr writeOffset,
                                                       GLsizeiptr size);
void INTERNAL_GL_APIENTRY glCopyTexImage1DNULL(GLenum target,
                                               GLint level,
                                               GLenum internalformat,
                                               GLint x,
                                               GLint y,
                                               GLsizei width,
                                               GLint border);
void INTERNAL_GL_APIENTRY glCopyTexImage2DNULL(GLenum target,
                                               GLint level,
                                               GLenum internalformat,
                                               GLint x,
                                               GLint y,
                                               GLsizei width,
                                               GLsizei height,
                                               GLint border);
void INTERNAL_GL_APIENTRY
glCopyTexSubImage1DNULL(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
void INTERNAL_GL_APIENTRY glCopyTexSubImage2DNULL(GLenum target,
                                                  GLint level,
                                                  GLint xoffset,
                                                  GLint yoffset,
                                                  GLint x,
                                                  GLint y,
                                                  GLsizei width,
                                                  GLsizei height);
void INTERNAL_GL_APIENTRY glCopyTexSubImage3DNULL(GLenum target,
                                                  GLint level,
                                                  GLint xoffset,
                                                  GLint yoffset,
                                                  GLint zoffset,
                                                  GLint x,
                                                  GLint y,
                                                  GLsizei width,
                                                  GLsizei height);
void INTERNAL_GL_APIENTRY glCopyTextureSubImage1DNULL(GLuint texture,
                                                      GLint level,
                                                      GLint xoffset,
                                                      GLint x,
                                                      GLint y,
                                                      GLsizei width);
void INTERNAL_GL_APIENTRY glCopyTextureSubImage2DNULL(GLuint texture,
                                                      GLint level,
                                                      GLint xoffset,
                                                      GLint yoffset,
                                                      GLint x,
                                                      GLint y,
                                                      GLsizei width,
                                                      GLsizei height);
void INTERNAL_GL_APIENTRY glCopyTextureSubImage3DNULL(GLuint texture,
                                                      GLint level,
                                                      GLint xoffset,
                                                      GLint yoffset,
                                                      GLint zoffset,
                                                      GLint x,
                                                      GLint y,
                                                      GLsizei width,
                                                      GLsizei height);
void INTERNAL_GL_APIENTRY glCoverFillPathInstancedNVNULL(GLsizei numPaths,
                                                         GLenum pathNameType,
                                                         const void *paths,
                                                         GLuint pathBase,
                                                         GLenum coverMode,
                                                         GLenum transformType,
                                                         const GLfloat *transformValues);
void INTERNAL_GL_APIENTRY glCoverFillPathNVNULL(GLuint path, GLenum coverMode);
void INTERNAL_GL_APIENTRY glCoverStrokePathInstancedNVNULL(GLsizei numPaths,
                                                           GLenum pathNameType,
                                                           const void *paths,
                                                           GLuint pathBase,
                                                           GLenum coverMode,
                                                           GLenum transformType,
                                                           const GLfloat *transformValues);
void INTERNAL_GL_APIENTRY glCoverStrokePathNVNULL(GLuint path, GLenum coverMode);
void INTERNAL_GL_APIENTRY glCoverageModulationNVNULL(GLenum components);
void INTERNAL_GL_APIENTRY glCreateBuffersNULL(GLsizei n, GLuint *buffers);
void INTERNAL_GL_APIENTRY glCreateFramebuffersNULL(GLsizei n, GLuint *framebuffers);
void INTERNAL_GL_APIENTRY glCreateMemoryObjectsEXTNULL(GLsizei n, GLuint *memoryObjects);
GLuint INTERNAL_GL_APIENTRY glCreateProgramNULL();
void INTERNAL_GL_APIENTRY glCreateProgramPipelinesNULL(GLsizei n, GLuint *pipelines);
void INTERNAL_GL_APIENTRY glCreateQueriesNULL(GLenum target, GLsizei n, GLuint *ids);
void INTERNAL_GL_APIENTRY glCreateRenderbuffersNULL(GLsizei n, GLuint *renderbuffers);
void INTERNAL_GL_APIENTRY glCreateSamplersNULL(GLsizei n, GLuint *samplers);
GLuint INTERNAL_GL_APIENTRY glCreateShaderNULL(GLenum type);
GLuint INTERNAL_GL_APIENTRY glCreateShaderProgramvNULL(GLenum type,
                                                       GLsizei count,
                                                       const GLchar *const *strings);
void INTERNAL_GL_APIENTRY glCreateTexturesNULL(GLenum target, GLsizei n, GLuint *textures);
void INTERNAL_GL_APIENTRY glCreateTransformFeedbacksNULL(GLsizei n, GLuint *ids);
void INTERNAL_GL_APIENTRY glCreateVertexArraysNULL(GLsizei n, GLuint *arrays);
void INTERNAL_GL_APIENTRY glCullFaceNULL(GLenum mode);
void INTERNAL_GL_APIENTRY glDebugMessageCallbackNULL(GLDEBUGPROC callback, const void *userParam);
void INTERNAL_GL_APIENTRY glDebugMessageControlNULL(GLenum source,
                                                    GLenum type,
                                                    GLenum severity,
                                                    GLsizei count,
                                                    const GLuint *ids,
                                                    GLboolean enabled);
void INTERNAL_GL_APIENTRY glDebugMessageInsertNULL(GLenum source,
                                                   GLenum type,
                                                   GLuint id,
                                                   GLenum severity,
                                                   GLsizei length,
                                                   const GLchar *buf);
void INTERNAL_GL_APIENTRY glDeleteBuffersNULL(GLsizei n, const GLuint *buffers);
void INTERNAL_GL_APIENTRY glDeleteFencesNVNULL(GLsizei n, const GLuint *fences);
void INTERNAL_GL_APIENTRY glDeleteFramebuffersNULL(GLsizei n, const GLuint *framebuffers);
void INTERNAL_GL_APIENTRY glDeleteMemoryObjectsEXTNULL(GLsizei n, const GLuint *memoryObjects);
void INTERNAL_GL_APIENTRY glDeletePathsNVNULL(GLuint path, GLsizei range);
void INTERNAL_GL_APIENTRY glDeleteProgramNULL(GLuint program);
void INTERNAL_GL_APIENTRY glDeleteProgramPipelinesNULL(GLsizei n, const GLuint *pipelines);
void INTERNAL_GL_APIENTRY glDeleteQueriesNULL(GLsizei n, const GLuint *ids);
void INTERNAL_GL_APIENTRY glDeleteRenderbuffersNULL(GLsizei n, const GLuint *renderbuffers);
void INTERNAL_GL_APIENTRY glDeleteSamplersNULL(GLsizei count, const GLuint *samplers);
void INTERNAL_GL_APIENTRY glDeleteSemaphoresEXTNULL(GLsizei n, const GLuint *semaphores);
void INTERNAL_GL_APIENTRY glDeleteShaderNULL(GLuint shader);
void INTERNAL_GL_APIENTRY glDeleteSyncNULL(GLsync sync);
void INTERNAL_GL_APIENTRY glDeleteTexturesNULL(GLsizei n, const GLuint *textures);
void INTERNAL_GL_APIENTRY glDeleteTransformFeedbacksNULL(GLsizei n, const GLuint *ids);
void INTERNAL_GL_APIENTRY glDeleteVertexArraysNULL(GLsizei n, const GLuint *arrays);
void INTERNAL_GL_APIENTRY glDepthFuncNULL(GLenum func);
void INTERNAL_GL_APIENTRY glDepthMaskNULL(GLboolean flag);
void INTERNAL_GL_APIENTRY glDepthRangeNULL(GLdouble n, GLdouble f);
void INTERNAL_GL_APIENTRY glDepthRangeArrayvNULL(GLuint first, GLsizei count, const GLdouble *v);
void INTERNAL_GL_APIENTRY glDepthRangeIndexedNULL(GLuint index, GLdouble n, GLdouble f);
void INTERNAL_GL_APIENTRY glDepthRangefNULL(GLfloat n, GLfloat f);
void INTERNAL_GL_APIENTRY glDetachShaderNULL(GLuint program, GLuint shader);
void INTERNAL_GL_APIENTRY glDisableNULL(GLenum cap);
void INTERNAL_GL_APIENTRY glDisableVertexArrayAttribNULL(GLuint vaobj, GLuint index);
void INTERNAL_GL_APIENTRY glDisableVertexAttribArrayNULL(GLuint index);
void INTERNAL_GL_APIENTRY glDisableiNULL(GLenum target, GLuint index);
void INTERNAL_GL_APIENTRY glDiscardFramebufferEXTNULL(GLenum target,
                                                      GLsizei numAttachments,
                                                      const GLenum *attachments);
void INTERNAL_GL_APIENTRY glDispatchComputeNULL(GLuint num_groups_x,
                                                GLuint num_groups_y,
                                                GLuint num_groups_z);
void INTERNAL_GL_APIENTRY glDispatchComputeIndirectNULL(GLintptr indirect);
void INTERNAL_GL_APIENTRY glDrawArraysNULL(GLenum mode, GLint first, GLsizei count);
void INTERNAL_GL_APIENTRY glDrawArraysIndirectNULL(GLenum mode, const void *indirect);
void INTERNAL_GL_APIENTRY glDrawArraysInstancedNULL(GLenum mode,
                                                    GLint first,
                                                    GLsizei count,
                                                    GLsizei instancecount);
void INTERNAL_GL_APIENTRY glDrawArraysInstancedBaseInstanceNULL(GLenum mode,
                                                                GLint first,
                                                                GLsizei count,
                                                                GLsizei instancecount,
                                                                GLuint baseinstance);
void INTERNAL_GL_APIENTRY glDrawBufferNULL(GLenum buf);
void INTERNAL_GL_APIENTRY glDrawBuffersNULL(GLsizei n, const GLenum *bufs);
void INTERNAL_GL_APIENTRY glDrawElementsNULL(GLenum mode,
                                             GLsizei count,
                                             GLenum type,
                                             const void *indices);
void INTERNAL_GL_APIENTRY glDrawElementsBaseVertexNULL(GLenum mode,
                                                       GLsizei count,
                                                       GLenum type,
                                                       const void *indices,
                                                       GLint basevertex);
void INTERNAL_GL_APIENTRY glDrawElementsIndirectNULL(GLenum mode,
                                                     GLenum type,
                                                     const void *indirect);
void INTERNAL_GL_APIENTRY glDrawElementsInstancedNULL(GLenum mode,
                                                      GLsizei count,
                                                      GLenum type,
                                                      const void *indices,
                                                      GLsizei instancecount);
void INTERNAL_GL_APIENTRY glDrawElementsInstancedBaseInstanceNULL(GLenum mode,
                                                                  GLsizei count,
                                                                  GLenum type,
                                                                  const void *indices,
                                                                  GLsizei instancecount,
                                                                  GLuint baseinstance);
void INTERNAL_GL_APIENTRY glDrawElementsInstancedBaseVertexNULL(GLenum mode,
                                                                GLsizei count,
                                                                GLenum type,
                                                                const void *indices,
                                                                GLsizei instancecount,
                                                                GLint basevertex);
void INTERNAL_GL_APIENTRY glDrawElementsInstancedBaseVertexBaseInstanceNULL(GLenum mode,
                                                                            GLsizei count,
                                                                            GLenum type,
                                                                            const void *indices,
                                                                            GLsizei instancecount,
                                                                            GLint basevertex,
                                                                            GLuint baseinstance);
void INTERNAL_GL_APIENTRY glDrawRangeElementsNULL(GLenum mode,
                                                  GLuint start,
                                                  GLuint end,
                                                  GLsizei count,
                                                  GLenum type,
                                                  const void *indices);
void INTERNAL_GL_APIENTRY glDrawRangeElementsBaseVertexNULL(GLenum mode,
                                                            GLuint start,
                                                            GLuint end,
                                                            GLsizei count,
                                                            GLenum type,
                                                            const void *indices,
                                                            GLint basevertex);
void INTERNAL_GL_APIENTRY glDrawTransformFeedbackNULL(GLenum mode, GLuint id);
void INTERNAL_GL_APIENTRY glDrawTransformFeedbackInstancedNULL(GLenum mode,
                                                               GLuint id,
                                                               GLsizei instancecount);
void INTERNAL_GL_APIENTRY glDrawTransformFeedbackStreamNULL(GLenum mode, GLuint id, GLuint stream);
void INTERNAL_GL_APIENTRY glDrawTransformFeedbackStreamInstancedNULL(GLenum mode,
                                                                     GLuint id,
                                                                     GLuint stream,
                                                                     GLsizei instancecount);
void INTERNAL_GL_APIENTRY glEGLImageTargetRenderbufferStorageOESNULL(GLenum target,
                                                                     GLeglImageOES image);
void INTERNAL_GL_APIENTRY glEGLImageTargetTexture2DOESNULL(GLenum target, GLeglImageOES image);
void INTERNAL_GL_APIENTRY glEnableNULL(GLenum cap);
void INTERNAL_GL_APIENTRY glEnableVertexArrayAttribNULL(GLuint vaobj, GLuint index);
void INTERNAL_GL_APIENTRY glEnableVertexAttribArrayNULL(GLuint index);
void INTERNAL_GL_APIENTRY glEnableiNULL(GLenum target, GLuint index);
void INTERNAL_GL_APIENTRY glEndConditionalRenderNULL();
void INTERNAL_GL_APIENTRY glEndQueryNULL(GLenum target);
void INTERNAL_GL_APIENTRY glEndQueryIndexedNULL(GLenum target, GLuint index);
void INTERNAL_GL_APIENTRY glEndTransformFeedbackNULL();
GLsync INTERNAL_GL_APIENTRY glFenceSyncNULL(GLenum condition, GLbitfield flags);
void INTERNAL_GL_APIENTRY glFinishNULL();
void INTERNAL_GL_APIENTRY glFinishFenceNVNULL(GLuint fence);
void INTERNAL_GL_APIENTRY glFlushNULL();
void INTERNAL_GL_APIENTRY glFlushMappedBufferRangeNULL(GLenum target,
                                                       GLintptr offset,
                                                       GLsizeiptr length);
void INTERNAL_GL_APIENTRY glFlushMappedNamedBufferRangeNULL(GLuint buffer,
                                                            GLintptr offset,
                                                            GLsizeiptr length);
void INTERNAL_GL_APIENTRY glFramebufferParameteriNULL(GLenum target, GLenum pname, GLint param);
void INTERNAL_GL_APIENTRY glFramebufferRenderbufferNULL(GLenum target,
                                                        GLenum attachment,
                                                        GLenum renderbuffertarget,
                                                        GLuint renderbuffer);
void INTERNAL_GL_APIENTRY glFramebufferTextureNULL(GLenum target,
                                                   GLenum attachment,
                                                   GLuint texture,
                                                   GLint level);
void INTERNAL_GL_APIENTRY glFramebufferTexture1DNULL(GLenum target,
                                                     GLenum attachment,
                                                     GLenum textarget,
                                                     GLuint texture,
                                                     GLint level);
void INTERNAL_GL_APIENTRY glFramebufferTexture2DNULL(GLenum target,
                                                     GLenum attachment,
                                                     GLenum textarget,
                                                     GLuint texture,
                                                     GLint level);
void INTERNAL_GL_APIENTRY glFramebufferTexture3DNULL(GLenum target,
                                                     GLenum attachment,
                                                     GLenum textarget,
                                                     GLuint texture,
                                                     GLint level,
                                                     GLint zoffset);
void INTERNAL_GL_APIENTRY glFramebufferTextureLayerNULL(GLenum target,
                                                        GLenum attachment,
                                                        GLuint texture,
                                                        GLint level,
                                                        GLint layer);
void INTERNAL_GL_APIENTRY glFramebufferTextureMultiviewOVRNULL(GLenum target,
                                                               GLenum attachment,
                                                               GLuint texture,
                                                               GLint level,
                                                               GLint baseViewIndex,
                                                               GLsizei numViews);
void INTERNAL_GL_APIENTRY glFrontFaceNULL(GLenum mode);
void INTERNAL_GL_APIENTRY glGenBuffersNULL(GLsizei n, GLuint *buffers);
void INTERNAL_GL_APIENTRY glGenFencesNVNULL(GLsizei n, GLuint *fences);
void INTERNAL_GL_APIENTRY glGenFramebuffersNULL(GLsizei n, GLuint *framebuffers);
GLuint INTERNAL_GL_APIENTRY glGenPathsNVNULL(GLsizei range);
void INTERNAL_GL_APIENTRY glGenProgramPipelinesNULL(GLsizei n, GLuint *pipelines);
void INTERNAL_GL_APIENTRY glGenQueriesNULL(GLsizei n, GLuint *ids);
void INTERNAL_GL_APIENTRY glGenRenderbuffersNULL(GLsizei n, GLuint *renderbuffers);
void INTERNAL_GL_APIENTRY glGenSamplersNULL(GLsizei count, GLuint *samplers);
void INTERNAL_GL_APIENTRY glGenSemaphoresEXTNULL(GLsizei n, GLuint *semaphores);
void INTERNAL_GL_APIENTRY glGenTexturesNULL(GLsizei n, GLuint *textures);
void INTERNAL_GL_APIENTRY glGenTransformFeedbacksNULL(GLsizei n, GLuint *ids);
void INTERNAL_GL_APIENTRY glGenVertexArraysNULL(GLsizei n, GLuint *arrays);
void INTERNAL_GL_APIENTRY glGenerateMipmapNULL(GLenum target);
void INTERNAL_GL_APIENTRY glGenerateTextureMipmapNULL(GLuint texture);
void INTERNAL_GL_APIENTRY glGetActiveAtomicCounterBufferivNULL(GLuint program,
                                                               GLuint bufferIndex,
                                                               GLenum pname,
                                                               GLint *params);
void INTERNAL_GL_APIENTRY glGetActiveAttribNULL(GLuint program,
                                                GLuint index,
                                                GLsizei bufSize,
                                                GLsizei *length,
                                                GLint *size,
                                                GLenum *type,
                                                GLchar *name);
void INTERNAL_GL_APIENTRY glGetActiveSubroutineNameNULL(GLuint program,
                                                        GLenum shadertype,
                                                        GLuint index,
                                                        GLsizei bufsize,
                                                        GLsizei *length,
                                                        GLchar *name);
void INTERNAL_GL_APIENTRY glGetActiveSubroutineUniformNameNULL(GLuint program,
                                                               GLenum shadertype,
                                                               GLuint index,
                                                               GLsizei bufsize,
                                                               GLsizei *length,
                                                               GLchar *name);
void INTERNAL_GL_APIENTRY glGetActiveSubroutineUniformivNULL(GLuint program,
                                                             GLenum shadertype,
                                                             GLuint index,
                                                             GLenum pname,
                                                             GLint *values);
void INTERNAL_GL_APIENTRY glGetActiveUniformNULL(GLuint program,
                                                 GLuint index,
                                                 GLsizei bufSize,
                                                 GLsizei *length,
                                                 GLint *size,
                                                 GLenum *type,
                                                 GLchar *name);
void INTERNAL_GL_APIENTRY glGetActiveUniformBlockNameNULL(GLuint program,
                                                          GLuint uniformBlockIndex,
                                                          GLsizei bufSize,
                                                          GLsizei *length,
                                                          GLchar *uniformBlockName);
void INTERNAL_GL_APIENTRY glGetActiveUniformBlockivNULL(GLuint program,
                                                        GLuint uniformBlockIndex,
                                                        GLenum pname,
                                                        GLint *params);
void INTERNAL_GL_APIENTRY glGetActiveUniformNameNULL(GLuint program,
                                                     GLuint uniformIndex,
                                                     GLsizei bufSize,
                                                     GLsizei *length,
                                                     GLchar *uniformName);
void INTERNAL_GL_APIENTRY glGetActiveUniformsivNULL(GLuint program,
                                                    GLsizei uniformCount,
                                                    const GLuint *uniformIndices,
                                                    GLenum pname,
                                                    GLint *params);
void INTERNAL_GL_APIENTRY glGetAttachedShadersNULL(GLuint program,
                                                   GLsizei maxCount,
                                                   GLsizei *count,
                                                   GLuint *shaders);
GLint INTERNAL_GL_APIENTRY glGetAttribLocationNULL(GLuint program, const GLchar *name);
void INTERNAL_GL_APIENTRY glGetBooleani_vNULL(GLenum target, GLuint index, GLboolean *data);
void INTERNAL_GL_APIENTRY glGetBooleanvNULL(GLenum pname, GLboolean *data);
void INTERNAL_GL_APIENTRY glGetBufferParameteri64vNULL(GLenum target,
                                                       GLenum pname,
                                                       GLint64 *params);
void INTERNAL_GL_APIENTRY glGetBufferParameterivNULL(GLenum target, GLenum pname, GLint *params);
void INTERNAL_GL_APIENTRY glGetBufferPointervNULL(GLenum target, GLenum pname, void **params);
void INTERNAL_GL_APIENTRY glGetBufferSubDataNULL(GLenum target,
                                                 GLintptr offset,
                                                 GLsizeiptr size,
                                                 void *data);
void INTERNAL_GL_APIENTRY glGetCompressedTexImageNULL(GLenum target, GLint level, void *img);
void INTERNAL_GL_APIENTRY glGetCompressedTextureImageNULL(GLuint texture,
                                                          GLint level,
                                                          GLsizei bufSize,
                                                          void *pixels);
void INTERNAL_GL_APIENTRY glGetCompressedTextureSubImageNULL(GLuint texture,
                                                             GLint level,
                                                             GLint xoffset,
                                                             GLint yoffset,
                                                             GLint zoffset,
                                                             GLsizei width,
                                                             GLsizei height,
                                                             GLsizei depth,
                                                             GLsizei bufSize,
                                                             void *pixels);
GLuint INTERNAL_GL_APIENTRY glGetDebugMessageLogNULL(GLuint count,
                                                     GLsizei bufSize,
                                                     GLenum *sources,
                                                     GLenum *types,
                                                     GLuint *ids,
                                                     GLenum *severities,
                                                     GLsizei *lengths,
                                                     GLchar *messageLog);
void INTERNAL_GL_APIENTRY glGetDoublei_vNULL(GLenum target, GLuint index, GLdouble *data);
void INTERNAL_GL_APIENTRY glGetDoublevNULL(GLenum pname, GLdouble *data);
GLenum INTERNAL_GL_APIENTRY glGetErrorNULL();
void INTERNAL_GL_APIENTRY glGetFenceivNVNULL(GLuint fence, GLenum pname, GLint *params);
void INTERNAL_GL_APIENTRY glGetFloati_vNULL(GLenum target, GLuint index, GLfloat *data);
void INTERNAL_GL_APIENTRY glGetFloatvNULL(GLenum pname, GLfloat *data);
GLint INTERNAL_GL_APIENTRY glGetFragDataIndexNULL(GLuint program, const GLchar *name);
GLint INTERNAL_GL_APIENTRY glGetFragDataLocationNULL(GLuint program, const GLchar *name);
void INTERNAL_GL_APIENTRY glGetFramebufferAttachmentParameterivNULL(GLenum target,
                                                                    GLenum attachment,
                                                                    GLenum pname,
                                                                    GLint *params);
void INTERNAL_GL_APIENTRY glGetFramebufferParameterivNULL(GLenum target,
                                                          GLenum pname,
                                                          GLint *params);
GLenum INTERNAL_GL_APIENTRY glGetGraphicsResetStatusNULL();
void INTERNAL_GL_APIENTRY glGetInteger64i_vNULL(GLenum target, GLuint index, GLint64 *data);
void INTERNAL_GL_APIENTRY glGetInteger64vNULL(GLenum pname, GLint64 *data);
void INTERNAL_GL_APIENTRY glGetIntegeri_vNULL(GLenum target, GLuint index, GLint *data);
void INTERNAL_GL_APIENTRY glGetIntegervNULL(GLenum pname, GLint *data);
void INTERNAL_GL_APIENTRY glGetInternalformatSampleivNVNULL(GLenum target,
                                                            GLenum internalformat,
                                                            GLsizei samples,
                                                            GLenum pname,
                                                            GLsizei bufSize,
                                                            GLint *params);
void INTERNAL_GL_APIENTRY glGetInternalformati64vNULL(GLenum target,
                                                      GLenum internalformat,
                                                      GLenum pname,
                                                      GLsizei bufSize,
                                                      GLint64 *params);
void INTERNAL_GL_APIENTRY glGetInternalformativNULL(GLenum target,
                                                    GLenum internalformat,
                                                    GLenum pname,
                                                    GLsizei bufSize,
                                                    GLint *params);
void INTERNAL_GL_APIENTRY glGetMemoryObjectParameterivEXTNULL(GLuint memoryObject,
                                                              GLenum pname,
                                                              GLint *params);
void INTERNAL_GL_APIENTRY glGetMultisamplefvNULL(GLenum pname, GLuint index, GLfloat *val);
void INTERNAL_GL_APIENTRY glGetNamedBufferParameteri64vNULL(GLuint buffer,
                                                            GLenum pname,
                                                            GLint64 *params);
void INTERNAL_GL_APIENTRY glGetNamedBufferParameterivNULL(GLuint buffer,
                                                          GLenum pname,
                                                          GLint *params);
void INTERNAL_GL_APIENTRY glGetNamedBufferPointervNULL(GLuint buffer, GLenum pname, void **params);
void INTERNAL_GL_APIENTRY glGetNamedBufferSubDataNULL(GLuint buffer,
                                                      GLintptr offset,
                                                      GLsizeiptr size,
                                                      void *data);
void INTERNAL_GL_APIENTRY glGetNamedFramebufferAttachmentParameterivNULL(GLuint framebuffer,
                                                                         GLenum attachment,
                                                                         GLenum pname,
                                                                         GLint *params);
void INTERNAL_GL_APIENTRY glGetNamedFramebufferParameterivNULL(GLuint framebuffer,
                                                               GLenum pname,
                                                               GLint *param);
void INTERNAL_GL_APIENTRY glGetNamedRenderbufferParameterivNULL(GLuint renderbuffer,
                                                                GLenum pname,
                                                                GLint *params);
void INTERNAL_GL_APIENTRY glGetObjectLabelNULL(GLenum identifier,
                                               GLuint name,
                                               GLsizei bufSize,
                                               GLsizei *length,
                                               GLchar *label);
void INTERNAL_GL_APIENTRY glGetObjectPtrLabelNULL(const void *ptr,
                                                  GLsizei bufSize,
                                                  GLsizei *length,
                                                  GLchar *label);
void INTERNAL_GL_APIENTRY glGetPathParameterfvNVNULL(GLuint path, GLenum pname, GLfloat *value);
void INTERNAL_GL_APIENTRY glGetPathParameterivNVNULL(GLuint path, GLenum pname, GLint *value);
void INTERNAL_GL_APIENTRY glGetPointervNULL(GLenum pname, void **params);
void INTERNAL_GL_APIENTRY glGetProgramBinaryNULL(GLuint program,
                                                 GLsizei bufSize,
                                                 GLsizei *length,
                                                 GLenum *binaryFormat,
                                                 void *binary);
void INTERNAL_GL_APIENTRY glGetProgramInfoLogNULL(GLuint program,
                                                  GLsizei bufSize,
                                                  GLsizei *length,
                                                  GLchar *infoLog);
void INTERNAL_GL_APIENTRY glGetProgramInterfaceivNULL(GLuint program,
                                                      GLenum programInterface,
                                                      GLenum pname,
                                                      GLint *params);
void INTERNAL_GL_APIENTRY glGetProgramPipelineInfoLogNULL(GLuint pipeline,
                                                          GLsizei bufSize,
                                                          GLsizei *length,
                                                          GLchar *infoLog);
void INTERNAL_GL_APIENTRY glGetProgramPipelineivNULL(GLuint pipeline, GLenum pname, GLint *params);
GLuint INTERNAL_GL_APIENTRY glGetProgramResourceIndexNULL(GLuint program,
                                                          GLenum programInterface,
                                                          const GLchar *name);
GLint INTERNAL_GL_APIENTRY glGetProgramResourceLocationNULL(GLuint program,
                                                            GLenum programInterface,
                                                            const GLchar *name);
GLint INTERNAL_GL_APIENTRY glGetProgramResourceLocationIndexNULL(GLuint program,
                                                                 GLenum programInterface,
                                                                 const GLchar *name);
void INTERNAL_GL_APIENTRY glGetProgramResourceNameNULL(GLuint program,
                                                       GLenum programInterface,
                                                       GLuint index,
                                                       GLsizei bufSize,
                                                       GLsizei *length,
                                                       GLchar *name);
void INTERNAL_GL_APIENTRY glGetProgramResourceivNULL(GLuint program,
                                                     GLenum programInterface,
                                                     GLuint index,
                                                     GLsizei propCount,
                                                     const GLenum *props,
                                                     GLsizei bufSize,
                                                     GLsizei *length,
                                                     GLint *params);
void INTERNAL_GL_APIENTRY glGetProgramStageivNULL(GLuint program,
                                                  GLenum shadertype,
                                                  GLenum pname,
                                                  GLint *values);
void INTERNAL_GL_APIENTRY glGetProgramivNULL(GLuint program, GLenum pname, GLint *params);
void INTERNAL_GL_APIENTRY glGetQueryBufferObjecti64vNULL(GLuint id,
                                                         GLuint buffer,
                                                         GLenum pname,
                                                         GLintptr offset);
void INTERNAL_GL_APIENTRY glGetQueryBufferObjectivNULL(GLuint id,
                                                       GLuint buffer,
                                                       GLenum pname,
                                                       GLintptr offset);
void INTERNAL_GL_APIENTRY glGetQueryBufferObjectui64vNULL(GLuint id,
                                                          GLuint buffer,
                                                          GLenum pname,
                                                          GLintptr offset);
void INTERNAL_GL_APIENTRY glGetQueryBufferObjectuivNULL(GLuint id,
                                                        GLuint buffer,
                                                        GLenum pname,
                                                        GLintptr offset);
void INTERNAL_GL_APIENTRY glGetQueryIndexedivNULL(GLenum target,
                                                  GLuint index,
                                                  GLenum pname,
                                                  GLint *params);
void INTERNAL_GL_APIENTRY glGetQueryObjecti64vNULL(GLuint id, GLenum pname, GLint64 *params);
void INTERNAL_GL_APIENTRY glGetQueryObjectivNULL(GLuint id, GLenum pname, GLint *params);
void INTERNAL_GL_APIENTRY glGetQueryObjectui64vNULL(GLuint id, GLenum pname, GLuint64 *params);
void INTERNAL_GL_APIENTRY glGetQueryObjectuivNULL(GLuint id, GLenum pname, GLuint *params);
void INTERNAL_GL_APIENTRY glGetQueryivNULL(GLenum target, GLenum pname, GLint *params);
void INTERNAL_GL_APIENTRY glGetRenderbufferParameterivNULL(GLenum target,
                                                           GLenum pname,
                                                           GLint *params);
void INTERNAL_GL_APIENTRY glGetSamplerParameterIivNULL(GLuint sampler, GLenum pname, GLint *params);
void INTERNAL_GL_APIENTRY glGetSamplerParameterIuivNULL(GLuint sampler,
                                                        GLenum pname,
                                                        GLuint *params);
void INTERNAL_GL_APIENTRY glGetSamplerParameterfvNULL(GLuint sampler,
                                                      GLenum pname,
                                                      GLfloat *params);
void INTERNAL_GL_APIENTRY glGetSamplerParameterivNULL(GLuint sampler, GLenum pname, GLint *params);
void INTERNAL_GL_APIENTRY glGetSemaphoreParameterui64vEXTNULL(GLuint semaphore,
                                                              GLenum pname,
                                                              GLuint64 *params);
void INTERNAL_GL_APIENTRY glGetShaderInfoLogNULL(GLuint shader,
                                                 GLsizei bufSize,
                                                 GLsizei *length,
                                                 GLchar *infoLog);
void INTERNAL_GL_APIENTRY glGetShaderPrecisionFormatNULL(GLenum shadertype,
                                                         GLenum precisiontype,
                                                         GLint *range,
                                                         GLint *precision);
void INTERNAL_GL_APIENTRY glGetShaderSourceNULL(GLuint shader,
                                                GLsizei bufSize,
                                                GLsizei *length,
                                                GLchar *source);
void INTERNAL_GL_APIENTRY glGetShaderivNULL(GLuint shader, GLenum pname, GLint *params);
const GLubyte *INTERNAL_GL_APIENTRY glGetStringNULL(GLenum name);
const GLubyte *INTERNAL_GL_APIENTRY glGetStringiNULL(GLenum name, GLuint index);
GLuint INTERNAL_GL_APIENTRY glGetSubroutineIndexNULL(GLuint program,
                                                     GLenum shadertype,
                                                     const GLchar *name);
GLint INTERNAL_GL_APIENTRY glGetSubroutineUniformLocationNULL(GLuint program,
                                                              GLenum shadertype,
                                                              const GLchar *name);
void INTERNAL_GL_APIENTRY
glGetSyncivNULL(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
void INTERNAL_GL_APIENTRY
glGetTexImageNULL(GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
void INTERNAL_GL_APIENTRY glGetTexLevelParameterfvNULL(GLenum target,
                                                       GLint level,
                                                       GLenum pname,
                                                       GLfloat *params);
void INTERNAL_GL_APIENTRY glGetTexLevelParameterivNULL(GLenum target,
                                                       GLint level,
                                                       GLenum pname,
                                                       GLint *params);
void INTERNAL_GL_APIENTRY glGetTexParameterIivNULL(GLenum target, GLenum pname, GLint *params);
void INTERNAL_GL_APIENTRY glGetTexParameterIuivNULL(GLenum target, GLenum pname, GLuint *params);
void INTERNAL_GL_APIENTRY glGetTexParameterfvNULL(GLenum target, GLenum pname, GLfloat *params);
void INTERNAL_GL_APIENTRY glGetTexParameterivNULL(GLenum target, GLenum pname, GLint *params);
void INTERNAL_GL_APIENTRY glGetTextureImageNULL(GLuint texture,
                                                GLint level,
                                                GLenum format,
                                                GLenum type,
                                                GLsizei bufSize,
                                                void *pixels);
void INTERNAL_GL_APIENTRY glGetTextureLevelParameterfvNULL(GLuint texture,
                                                           GLint level,
                                                           GLenum pname,
                                                           GLfloat *params);
void INTERNAL_GL_APIENTRY glGetTextureLevelParameterivNULL(GLuint texture,
                                                           GLint level,
                                                           GLenum pname,
                                                           GLint *params);
void INTERNAL_GL_APIENTRY glGetTextureParameterIivNULL(GLuint texture, GLenum pname, GLint *params);
void INTERNAL_GL_APIENTRY glGetTextureParameterIuivNULL(GLuint texture,
                                                        GLenum pname,
                                                        GLuint *params);
void INTERNAL_GL_APIENTRY glGetTextureParameterfvNULL(GLuint texture,
                                                      GLenum pname,
                                                      GLfloat *params);
void INTERNAL_GL_APIENTRY glGetTextureParameterivNULL(GLuint texture, GLenum pname, GLint *params);
void INTERNAL_GL_APIENTRY glGetTextureSubImageNULL(GLuint texture,
                                                   GLint level,
                                                   GLint xoffset,
                                                   GLint yoffset,
                                                   GLint zoffset,
                                                   GLsizei width,
                                                   GLsizei height,
                                                   GLsizei depth,
                                                   GLenum format,
                                                   GLenum type,
                                                   GLsizei bufSize,
                                                   void *pixels);
void INTERNAL_GL_APIENTRY glGetTransformFeedbackVaryingNULL(GLuint program,
                                                            GLuint index,
                                                            GLsizei bufSize,
                                                            GLsizei *length,
                                                            GLsizei *size,
                                                            GLenum *type,
                                                            GLchar *name);
void INTERNAL_GL_APIENTRY glGetTransformFeedbacki64_vNULL(GLuint xfb,
                                                          GLenum pname,
                                                          GLuint index,
                                                          GLint64 *param);
void INTERNAL_GL_APIENTRY glGetTransformFeedbacki_vNULL(GLuint xfb,
                                                        GLenum pname,
                                                        GLuint index,
                                                        GLint *param);
void INTERNAL_GL_APIENTRY glGetTransformFeedbackivNULL(GLuint xfb, GLenum pname, GLint *param);
GLuint INTERNAL_GL_APIENTRY glGetUniformBlockIndexNULL(GLuint program,
                                                       const GLchar *uniformBlockName);
void INTERNAL_GL_APIENTRY glGetUniformIndicesNULL(GLuint program,
                                                  GLsizei uniformCount,
                                                  const GLchar *const *uniformNames,
                                                  GLuint *uniformIndices);
GLint INTERNAL_GL_APIENTRY glGetUniformLocationNULL(GLuint program, const GLchar *name);
void INTERNAL_GL_APIENTRY glGetUniformSubroutineuivNULL(GLenum shadertype,
                                                        GLint location,
                                                        GLuint *params);
void INTERNAL_GL_APIENTRY glGetUniformdvNULL(GLuint program, GLint location, GLdouble *params);
void INTERNAL_GL_APIENTRY glGetUniformfvNULL(GLuint program, GLint location, GLfloat *params);
void INTERNAL_GL_APIENTRY glGetUniformivNULL(GLuint program, GLint location, GLint *params);
void INTERNAL_GL_APIENTRY glGetUniformuivNULL(GLuint program, GLint location, GLuint *params);
void INTERNAL_GL_APIENTRY glGetUnsignedBytei_vEXTNULL(GLenum target, GLuint index, GLubyte *data);
void INTERNAL_GL_APIENTRY glGetUnsignedBytevEXTNULL(GLenum pname, GLubyte *data);
void INTERNAL_GL_APIENTRY glGetVertexArrayIndexed64ivNULL(GLuint vaobj,
                                                          GLuint index,
                                                          GLenum pname,
                                                          GLint64 *param);
void INTERNAL_GL_APIENTRY glGetVertexArrayIndexedivNULL(GLuint vaobj,
                                                        GLuint index,
                                                        GLenum pname,
                                                        GLint *param);
void INTERNAL_GL_APIENTRY glGetVertexArrayivNULL(GLuint vaobj, GLenum pname, GLint *param);
void INTERNAL_GL_APIENTRY glGetVertexAttribIivNULL(GLuint index, GLenum pname, GLint *params);
void INTERNAL_GL_APIENTRY glGetVertexAttribIuivNULL(GLuint index, GLenum pname, GLuint *params);
void INTERNAL_GL_APIENTRY glGetVertexAttribLdvNULL(GLuint index, GLenum pname, GLdouble *params);
void INTERNAL_GL_APIENTRY glGetVertexAttribPointervNULL(GLuint index, GLenum pname, void **pointer);
void INTERNAL_GL_APIENTRY glGetVertexAttribdvNULL(GLuint index, GLenum pname, GLdouble *params);
void INTERNAL_GL_APIENTRY glGetVertexAttribfvNULL(GLuint index, GLenum pname, GLfloat *params);
void INTERNAL_GL_APIENTRY glGetVertexAttribivNULL(GLuint index, GLenum pname, GLint *params);
void INTERNAL_GL_APIENTRY glGetnCompressedTexImageNULL(GLenum target,
                                                       GLint lod,
                                                       GLsizei bufSize,
                                                       void *pixels);
void INTERNAL_GL_APIENTRY glGetnTexImageNULL(GLenum target,
                                             GLint level,
                                             GLenum format,
                                             GLenum type,
                                             GLsizei bufSize,
                                             void *pixels);
void INTERNAL_GL_APIENTRY glGetnUniformdvNULL(GLuint program,
                                              GLint location,
                                              GLsizei bufSize,
                                              GLdouble *params);
void INTERNAL_GL_APIENTRY glGetnUniformfvNULL(GLuint program,
                                              GLint location,
                                              GLsizei bufSize,
                                              GLfloat *params);
void INTERNAL_GL_APIENTRY glGetnUniformivNULL(GLuint program,
                                              GLint location,
                                              GLsizei bufSize,
                                              GLint *params);
void INTERNAL_GL_APIENTRY glGetnUniformuivNULL(GLuint program,
                                               GLint location,
                                               GLsizei bufSize,
                                               GLuint *params);
void INTERNAL_GL_APIENTRY glHintNULL(GLenum target, GLenum mode);
void INTERNAL_GL_APIENTRY glImportMemoryFdEXTNULL(GLuint memory,
                                                  GLuint64 size,
                                                  GLenum handleType,
                                                  GLint fd);
void INTERNAL_GL_APIENTRY glImportMemoryWin32HandleEXTNULL(GLuint memory,
                                                           GLuint64 size,
                                                           GLenum handleType,
                                                           void *handle);
void INTERNAL_GL_APIENTRY glImportMemoryWin32NameEXTNULL(GLuint memory,
                                                         GLuint64 size,
                                                         GLenum handleType,
                                                         const void *name);
void INTERNAL_GL_APIENTRY glImportSemaphoreFdEXTNULL(GLuint semaphore, GLenum handleType, GLint fd);
void INTERNAL_GL_APIENTRY glImportSemaphoreWin32HandleEXTNULL(GLuint semaphore,
                                                              GLenum handleType,
                                                              void *handle);
void INTERNAL_GL_APIENTRY glImportSemaphoreWin32NameEXTNULL(GLuint semaphore,
                                                            GLenum handleType,
                                                            const void *name);
void INTERNAL_GL_APIENTRY glInsertEventMarkerEXTNULL(GLsizei length, const GLchar *marker);
void INTERNAL_GL_APIENTRY glInvalidateBufferDataNULL(GLuint buffer);
void INTERNAL_GL_APIENTRY glInvalidateBufferSubDataNULL(GLuint buffer,
                                                        GLintptr offset,
                                                        GLsizeiptr length);
void INTERNAL_GL_APIENTRY glInvalidateFramebufferNULL(GLenum target,
                                                      GLsizei numAttachments,
                                                      const GLenum *attachments);
void INTERNAL_GL_APIENTRY glInvalidateNamedFramebufferDataNULL(GLuint framebuffer,
                                                               GLsizei numAttachments,
                                                               const GLenum *attachments);
void INTERNAL_GL_APIENTRY glInvalidateNamedFramebufferSubDataNULL(GLuint framebuffer,
                                                                  GLsizei numAttachments,
                                                                  const GLenum *attachments,
                                                                  GLint x,
                                                                  GLint y,
                                                                  GLsizei width,
                                                                  GLsizei height);
void INTERNAL_GL_APIENTRY glInvalidateSubFramebufferNULL(GLenum target,
                                                         GLsizei numAttachments,
                                                         const GLenum *attachments,
                                                         GLint x,
                                                         GLint y,
                                                         GLsizei width,
                                                         GLsizei height);
void INTERNAL_GL_APIENTRY glInvalidateTexImageNULL(GLuint texture, GLint level);
void INTERNAL_GL_APIENTRY glInvalidateTexSubImageNULL(GLuint texture,
                                                      GLint level,
                                                      GLint xoffset,
                                                      GLint yoffset,
                                                      GLint zoffset,
                                                      GLsizei width,
                                                      GLsizei height,
                                                      GLsizei depth);
GLboolean INTERNAL_GL_APIENTRY glIsBufferNULL(GLuint buffer);
GLboolean INTERNAL_GL_APIENTRY glIsEnabledNULL(GLenum cap);
GLboolean INTERNAL_GL_APIENTRY glIsEnablediNULL(GLenum target, GLuint index);
GLboolean INTERNAL_GL_APIENTRY glIsFenceNVNULL(GLuint fence);
GLboolean INTERNAL_GL_APIENTRY glIsFramebufferNULL(GLuint framebuffer);
GLboolean INTERNAL_GL_APIENTRY glIsMemoryObjectEXTNULL(GLuint memoryObject);
GLboolean INTERNAL_GL_APIENTRY glIsPathNVNULL(GLuint path);
GLboolean INTERNAL_GL_APIENTRY glIsProgramNULL(GLuint program);
GLboolean INTERNAL_GL_APIENTRY glIsProgramPipelineNULL(GLuint pipeline);
GLboolean INTERNAL_GL_APIENTRY glIsQueryNULL(GLuint id);
GLboolean INTERNAL_GL_APIENTRY glIsRenderbufferNULL(GLuint renderbuffer);
GLboolean INTERNAL_GL_APIENTRY glIsSamplerNULL(GLuint sampler);
GLboolean INTERNAL_GL_APIENTRY glIsSemaphoreEXTNULL(GLuint semaphore);
GLboolean INTERNAL_GL_APIENTRY glIsShaderNULL(GLuint shader);
GLboolean INTERNAL_GL_APIENTRY glIsSyncNULL(GLsync sync);
GLboolean INTERNAL_GL_APIENTRY glIsTextureNULL(GLuint texture);
GLboolean INTERNAL_GL_APIENTRY glIsTransformFeedbackNULL(GLuint id);
GLboolean INTERNAL_GL_APIENTRY glIsVertexArrayNULL(GLuint array);
void INTERNAL_GL_APIENTRY glLineWidthNULL(GLfloat width);
void INTERNAL_GL_APIENTRY glLinkProgramNULL(GLuint program);
void INTERNAL_GL_APIENTRY glLogicOpNULL(GLenum opcode);
void *INTERNAL_GL_APIENTRY glMapBufferNULL(GLenum target, GLenum access);
void *INTERNAL_GL_APIENTRY glMapBufferRangeNULL(GLenum target,
                                                GLintptr offset,
                                                GLsizeiptr length,
                                                GLbitfield access);
void *INTERNAL_GL_APIENTRY glMapNamedBufferNULL(GLuint buffer, GLenum access);
void *INTERNAL_GL_APIENTRY glMapNamedBufferRangeNULL(GLuint buffer,
                                                     GLintptr offset,
                                                     GLsizeiptr length,
                                                     GLbitfield access);
void INTERNAL_GL_APIENTRY glMatrixLoadfEXTNULL(GLenum mode, const GLfloat *m);
void INTERNAL_GL_APIENTRY glMaxShaderCompilerThreadsARBNULL(GLuint count);
void INTERNAL_GL_APIENTRY glMaxShaderCompilerThreadsKHRNULL(GLuint count);
void INTERNAL_GL_APIENTRY glMemoryBarrierNULL(GLbitfield barriers);
void INTERNAL_GL_APIENTRY glMemoryBarrierByRegionNULL(GLbitfield barriers);
void INTERNAL_GL_APIENTRY glMemoryObjectParameterivEXTNULL(GLuint memoryObject,
                                                           GLenum pname,
                                                           const GLint *params);
void INTERNAL_GL_APIENTRY glMinSampleShadingNULL(GLfloat value);
void INTERNAL_GL_APIENTRY glMultiDrawArraysNULL(GLenum mode,
                                                const GLint *first,
                                                const GLsizei *count,
                                                GLsizei drawcount);
void INTERNAL_GL_APIENTRY glMultiDrawArraysIndirectNULL(GLenum mode,
                                                        const void *indirect,
                                                        GLsizei drawcount,
                                                        GLsizei stride);
void INTERNAL_GL_APIENTRY glMultiDrawElementsNULL(GLenum mode,
                                                  const GLsizei *count,
                                                  GLenum type,
                                                  const void *const *indices,
                                                  GLsizei drawcount);
void INTERNAL_GL_APIENTRY glMultiDrawElementsBaseVertexNULL(GLenum mode,
                                                            const GLsizei *count,
                                                            GLenum type,
                                                            const void *const *indices,
                                                            GLsizei drawcount,
                                                            const GLint *basevertex);
void INTERNAL_GL_APIENTRY glMultiDrawElementsIndirectNULL(GLenum mode,
                                                          GLenum type,
                                                          const void *indirect,
                                                          GLsizei drawcount,
                                                          GLsizei stride);
void INTERNAL_GL_APIENTRY glNamedBufferDataNULL(GLuint buffer,
                                                GLsizeiptr size,
                                                const void *data,
                                                GLenum usage);
void INTERNAL_GL_APIENTRY glNamedBufferStorageNULL(GLuint buffer,
                                                   GLsizeiptr size,
                                                   const void *data,
                                                   GLbitfield flags);
void INTERNAL_GL_APIENTRY glNamedBufferStorageMemEXTNULL(GLuint buffer,
                                                         GLsizeiptr size,
                                                         GLuint memory,
                                                         GLuint64 offset);
void INTERNAL_GL_APIENTRY glNamedBufferSubDataNULL(GLuint buffer,
                                                   GLintptr offset,
                                                   GLsizeiptr size,
                                                   const void *data);
void INTERNAL_GL_APIENTRY glNamedFramebufferDrawBufferNULL(GLuint framebuffer, GLenum buf);
void INTERNAL_GL_APIENTRY glNamedFramebufferDrawBuffersNULL(GLuint framebuffer,
                                                            GLsizei n,
                                                            const GLenum *bufs);
void INTERNAL_GL_APIENTRY glNamedFramebufferParameteriNULL(GLuint framebuffer,
                                                           GLenum pname,
                                                           GLint param);
void INTERNAL_GL_APIENTRY glNamedFramebufferReadBufferNULL(GLuint framebuffer, GLenum src);
void INTERNAL_GL_APIENTRY glNamedFramebufferRenderbufferNULL(GLuint framebuffer,
                                                             GLenum attachment,
                                                             GLenum renderbuffertarget,
                                                             GLuint renderbuffer);
void INTERNAL_GL_APIENTRY glNamedFramebufferTextureNULL(GLuint framebuffer,
                                                        GLenum attachment,
                                                        GLuint texture,
                                                        GLint level);
void INTERNAL_GL_APIENTRY glNamedFramebufferTextureLayerNULL(GLuint framebuffer,
                                                             GLenum attachment,
                                                             GLuint texture,
                                                             GLint level,
                                                             GLint layer);
void INTERNAL_GL_APIENTRY glNamedRenderbufferStorageNULL(GLuint renderbuffer,
                                                         GLenum internalformat,
                                                         GLsizei width,
                                                         GLsizei height);
void INTERNAL_GL_APIENTRY glNamedRenderbufferStorageMultisampleNULL(GLuint renderbuffer,
                                                                    GLsizei samples,
                                                                    GLenum internalformat,
                                                                    GLsizei width,
                                                                    GLsizei height);
void INTERNAL_GL_APIENTRY glObjectLabelNULL(GLenum identifier,
                                            GLuint name,
                                            GLsizei length,
                                            const GLchar *label);
void INTERNAL_GL_APIENTRY glObjectPtrLabelNULL(const void *ptr,
                                               GLsizei length,
                                               const GLchar *label);
void INTERNAL_GL_APIENTRY glPatchParameterfvNULL(GLenum pname, const GLfloat *values);
void INTERNAL_GL_APIENTRY glPatchParameteriNULL(GLenum pname, GLint value);
void INTERNAL_GL_APIENTRY glPathCommandsNVNULL(GLuint path,
                                               GLsizei numCommands,
                                               const GLubyte *commands,
                                               GLsizei numCoords,
                                               GLenum coordType,
                                               const void *coords);
void INTERNAL_GL_APIENTRY glPathParameterfNVNULL(GLuint path, GLenum pname, GLfloat value);
void INTERNAL_GL_APIENTRY glPathParameteriNVNULL(GLuint path, GLenum pname, GLint value);
void INTERNAL_GL_APIENTRY glPathStencilFuncNVNULL(GLenum func, GLint ref, GLuint mask);
void INTERNAL_GL_APIENTRY glPauseTransformFeedbackNULL();
void INTERNAL_GL_APIENTRY glPixelStorefNULL(GLenum pname, GLfloat param);
void INTERNAL_GL_APIENTRY glPixelStoreiNULL(GLenum pname, GLint param);
void INTERNAL_GL_APIENTRY glPointParameterfNULL(GLenum pname, GLfloat param);
void INTERNAL_GL_APIENTRY glPointParameterfvNULL(GLenum pname, const GLfloat *params);
void INTERNAL_GL_APIENTRY glPointParameteriNULL(GLenum pname, GLint param);
void INTERNAL_GL_APIENTRY glPointParameterivNULL(GLenum pname, const GLint *params);
void INTERNAL_GL_APIENTRY glPointSizeNULL(GLfloat size);
void INTERNAL_GL_APIENTRY glPolygonModeNULL(GLenum face, GLenum mode);
void INTERNAL_GL_APIENTRY glPolygonOffsetNULL(GLfloat factor, GLfloat units);
void INTERNAL_GL_APIENTRY glPopDebugGroupNULL();
void INTERNAL_GL_APIENTRY glPopGroupMarkerEXTNULL();
void INTERNAL_GL_APIENTRY glPrimitiveBoundingBoxNULL(GLfloat minX,
                                                     GLfloat minY,
                                                     GLfloat minZ,
                                                     GLfloat minW,
                                                     GLfloat maxX,
                                                     GLfloat maxY,
                                                     GLfloat maxZ,
                                                     GLfloat maxW);
void INTERNAL_GL_APIENTRY glPrimitiveRestartIndexNULL(GLuint index);
void INTERNAL_GL_APIENTRY glProgramBinaryNULL(GLuint program,
                                              GLenum binaryFormat,
                                              const void *binary,
                                              GLsizei length);
void INTERNAL_GL_APIENTRY glProgramParameteriNULL(GLuint program, GLenum pname, GLint value);
void INTERNAL_GL_APIENTRY glProgramPathFragmentInputGenNVNULL(GLuint program,
                                                              GLint location,
                                                              GLenum genMode,
                                                              GLint components,
                                                              const GLfloat *coeffs);
void INTERNAL_GL_APIENTRY glProgramUniform1dNULL(GLuint program, GLint location, GLdouble v0);
void INTERNAL_GL_APIENTRY glProgramUniform1dvNULL(GLuint program,
                                                  GLint location,
                                                  GLsizei count,
                                                  const GLdouble *value);
void INTERNAL_GL_APIENTRY glProgramUniform1fNULL(GLuint program, GLint location, GLfloat v0);
void INTERNAL_GL_APIENTRY glProgramUniform1fvNULL(GLuint program,
                                                  GLint location,
                                                  GLsizei count,
                                                  const GLfloat *value);
void INTERNAL_GL_APIENTRY glProgramUniform1iNULL(GLuint program, GLint location, GLint v0);
void INTERNAL_GL_APIENTRY glProgramUniform1ivNULL(GLuint program,
                                                  GLint location,
                                                  GLsizei count,
                                                  const GLint *value);
void INTERNAL_GL_APIENTRY glProgramUniform1uiNULL(GLuint program, GLint location, GLuint v0);
void INTERNAL_GL_APIENTRY glProgramUniform1uivNULL(GLuint program,
                                                   GLint location,
                                                   GLsizei count,
                                                   const GLuint *value);
void INTERNAL_GL_APIENTRY glProgramUniform2dNULL(GLuint program,
                                                 GLint location,
                                                 GLdouble v0,
                                                 GLdouble v1);
void INTERNAL_GL_APIENTRY glProgramUniform2dvNULL(GLuint program,
                                                  GLint location,
                                                  GLsizei count,
                                                  const GLdouble *value);
void INTERNAL_GL_APIENTRY glProgramUniform2fNULL(GLuint program,
                                                 GLint location,
                                                 GLfloat v0,
                                                 GLfloat v1);
void INTERNAL_GL_APIENTRY glProgramUniform2fvNULL(GLuint program,
                                                  GLint location,
                                                  GLsizei count,
                                                  const GLfloat *value);
void INTERNAL_GL_APIENTRY glProgramUniform2iNULL(GLuint program,
                                                 GLint location,
                                                 GLint v0,
                                                 GLint v1);
void INTERNAL_GL_APIENTRY glProgramUniform2ivNULL(GLuint program,
                                                  GLint location,
                                                  GLsizei count,
                                                  const GLint *value);
void INTERNAL_GL_APIENTRY glProgramUniform2uiNULL(GLuint program,
                                                  GLint location,
                                                  GLuint v0,
                                                  GLuint v1);
void INTERNAL_GL_APIENTRY glProgramUniform2uivNULL(GLuint program,
                                                   GLint location,
                                                   GLsizei count,
                                                   const GLuint *value);
void INTERNAL_GL_APIENTRY
glProgramUniform3dNULL(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2);
void INTERNAL_GL_APIENTRY glProgramUniform3dvNULL(GLuint program,
                                                  GLint location,
                                                  GLsizei count,
                                                  const GLdouble *value);
void INTERNAL_GL_APIENTRY
glProgramUniform3fNULL(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
void INTERNAL_GL_APIENTRY glProgramUniform3fvNULL(GLuint program,
                                                  GLint location,
                                                  GLsizei count,
                                                  const GLfloat *value);
void INTERNAL_GL_APIENTRY
glProgramUniform3iNULL(GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
void INTERNAL_GL_APIENTRY glProgramUniform3ivNULL(GLuint program,
                                                  GLint location,
                                                  GLsizei count,
                                                  const GLint *value);
void INTERNAL_GL_APIENTRY
glProgramUniform3uiNULL(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
void INTERNAL_GL_APIENTRY glProgramUniform3uivNULL(GLuint program,
                                                   GLint location,
                                                   GLsizei count,
                                                   const GLuint *value);
void INTERNAL_GL_APIENTRY glProgramUniform4dNULL(GLuint program,
                                                 GLint location,
                                                 GLdouble v0,
                                                 GLdouble v1,
                                                 GLdouble v2,
                                                 GLdouble v3);
void INTERNAL_GL_APIENTRY glProgramUniform4dvNULL(GLuint program,
                                                  GLint location,
                                                  GLsizei count,
                                                  const GLdouble *value);
void INTERNAL_GL_APIENTRY glProgramUniform4fNULL(GLuint program,
                                                 GLint location,
                                                 GLfloat v0,
                                                 GLfloat v1,
                                                 GLfloat v2,
                                                 GLfloat v3);
void INTERNAL_GL_APIENTRY glProgramUniform4fvNULL(GLuint program,
                                                  GLint location,
                                                  GLsizei count,
                                                  const GLfloat *value);
void INTERNAL_GL_APIENTRY
glProgramUniform4iNULL(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
void INTERNAL_GL_APIENTRY glProgramUniform4ivNULL(GLuint program,
                                                  GLint location,
                                                  GLsizei count,
                                                  const GLint *value);
void INTERNAL_GL_APIENTRY
glProgramUniform4uiNULL(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
void INTERNAL_GL_APIENTRY glProgramUniform4uivNULL(GLuint program,
                                                   GLint location,
                                                   GLsizei count,
                                                   const GLuint *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix2dvNULL(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLdouble *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix2fvNULL(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLfloat *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix2x3dvNULL(GLuint program,
                                                          GLint location,
                                                          GLsizei count,
                                                          GLboolean transpose,
                                                          const GLdouble *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix2x3fvNULL(GLuint program,
                                                          GLint location,
                                                          GLsizei count,
                                                          GLboolean transpose,
                                                          const GLfloat *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix2x4dvNULL(GLuint program,
                                                          GLint location,
                                                          GLsizei count,
                                                          GLboolean transpose,
                                                          const GLdouble *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix2x4fvNULL(GLuint program,
                                                          GLint location,
                                                          GLsizei count,
                                                          GLboolean transpose,
                                                          const GLfloat *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix3dvNULL(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLdouble *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix3fvNULL(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLfloat *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix3x2dvNULL(GLuint program,
                                                          GLint location,
                                                          GLsizei count,
                                                          GLboolean transpose,
                                                          const GLdouble *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix3x2fvNULL(GLuint program,
                                                          GLint location,
                                                          GLsizei count,
                                                          GLboolean transpose,
                                                          const GLfloat *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix3x4dvNULL(GLuint program,
                                                          GLint location,
                                                          GLsizei count,
                                                          GLboolean transpose,
                                                          const GLdouble *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix3x4fvNULL(GLuint program,
                                                          GLint location,
                                                          GLsizei count,
                                                          GLboolean transpose,
                                                          const GLfloat *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix4dvNULL(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLdouble *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix4fvNULL(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLfloat *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix4x2dvNULL(GLuint program,
                                                          GLint location,
                                                          GLsizei count,
                                                          GLboolean transpose,
                                                          const GLdouble *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix4x2fvNULL(GLuint program,
                                                          GLint location,
                                                          GLsizei count,
                                                          GLboolean transpose,
                                                          const GLfloat *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix4x3dvNULL(GLuint program,
                                                          GLint location,
                                                          GLsizei count,
                                                          GLboolean transpose,
                                                          const GLdouble *value);
void INTERNAL_GL_APIENTRY glProgramUniformMatrix4x3fvNULL(GLuint program,
                                                          GLint location,
                                                          GLsizei count,
                                                          GLboolean transpose,
                                                          const GLfloat *value);
void INTERNAL_GL_APIENTRY glProvokingVertexNULL(GLenum mode);
void INTERNAL_GL_APIENTRY glPushDebugGroupNULL(GLenum source,
                                               GLuint id,
                                               GLsizei length,
                                               const GLchar *message);
void INTERNAL_GL_APIENTRY glPushGroupMarkerEXTNULL(GLsizei length, const GLchar *marker);
void INTERNAL_GL_APIENTRY glQueryCounterNULL(GLuint id, GLenum target);
void INTERNAL_GL_APIENTRY glReadBufferNULL(GLenum src);
void INTERNAL_GL_APIENTRY glReadPixelsNULL(GLint x,
                                           GLint y,
                                           GLsizei width,
                                           GLsizei height,
                                           GLenum format,
                                           GLenum type,
                                           void *pixels);
void INTERNAL_GL_APIENTRY glReadnPixelsNULL(GLint x,
                                            GLint y,
                                            GLsizei width,
                                            GLsizei height,
                                            GLenum format,
                                            GLenum type,
                                            GLsizei bufSize,
                                            void *data);
void INTERNAL_GL_APIENTRY glReleaseShaderCompilerNULL();
void INTERNAL_GL_APIENTRY glRenderbufferStorageNULL(GLenum target,
                                                    GLenum internalformat,
                                                    GLsizei width,
                                                    GLsizei height);
void INTERNAL_GL_APIENTRY glRenderbufferStorageMultisampleNULL(GLenum target,
                                                               GLsizei samples,
                                                               GLenum internalformat,
                                                               GLsizei width,
                                                               GLsizei height);
void INTERNAL_GL_APIENTRY glResumeTransformFeedbackNULL();
void INTERNAL_GL_APIENTRY glSampleCoverageNULL(GLfloat value, GLboolean invert);
void INTERNAL_GL_APIENTRY glSampleMaskiNULL(GLuint maskNumber, GLbitfield mask);
void INTERNAL_GL_APIENTRY glSamplerParameterIivNULL(GLuint sampler,
                                                    GLenum pname,
                                                    const GLint *param);
void INTERNAL_GL_APIENTRY glSamplerParameterIuivNULL(GLuint sampler,
                                                     GLenum pname,
                                                     const GLuint *param);
void INTERNAL_GL_APIENTRY glSamplerParameterfNULL(GLuint sampler, GLenum pname, GLfloat param);
void INTERNAL_GL_APIENTRY glSamplerParameterfvNULL(GLuint sampler,
                                                   GLenum pname,
                                                   const GLfloat *param);
void INTERNAL_GL_APIENTRY glSamplerParameteriNULL(GLuint sampler, GLenum pname, GLint param);
void INTERNAL_GL_APIENTRY glSamplerParameterivNULL(GLuint sampler,
                                                   GLenum pname,
                                                   const GLint *param);
void INTERNAL_GL_APIENTRY glScissorNULL(GLint x, GLint y, GLsizei width, GLsizei height);
void INTERNAL_GL_APIENTRY glScissorArrayvNULL(GLuint first, GLsizei count, const GLint *v);
void INTERNAL_GL_APIENTRY
glScissorIndexedNULL(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
void INTERNAL_GL_APIENTRY glScissorIndexedvNULL(GLuint index, const GLint *v);
void INTERNAL_GL_APIENTRY glSemaphoreParameterui64vEXTNULL(GLuint semaphore,
                                                           GLenum pname,
                                                           const GLuint64 *params);
void INTERNAL_GL_APIENTRY glSetFenceNVNULL(GLuint fence, GLenum condition);
void INTERNAL_GL_APIENTRY glShaderBinaryNULL(GLsizei count,
                                             const GLuint *shaders,
                                             GLenum binaryformat,
                                             const void *binary,
                                             GLsizei length);
void INTERNAL_GL_APIENTRY glShaderSourceNULL(GLuint shader,
                                             GLsizei count,
                                             const GLchar *const *string,
                                             const GLint *length);
void INTERNAL_GL_APIENTRY glShaderStorageBlockBindingNULL(GLuint program,
                                                          GLuint storageBlockIndex,
                                                          GLuint storageBlockBinding);
void INTERNAL_GL_APIENTRY glSignalSemaphoreEXTNULL(GLuint semaphore,
                                                   GLuint numBufferBarriers,
                                                   const GLuint *buffers,
                                                   GLuint numTextureBarriers,
                                                   const GLuint *textures,
                                                   const GLenum *dstLayouts);
void INTERNAL_GL_APIENTRY glStencilFillPathInstancedNVNULL(GLsizei numPaths,
                                                           GLenum pathNameType,
                                                           const void *paths,
                                                           GLuint pathBase,
                                                           GLenum fillMode,
                                                           GLuint mask,
                                                           GLenum transformType,
                                                           const GLfloat *transformValues);
void INTERNAL_GL_APIENTRY glStencilFillPathNVNULL(GLuint path, GLenum fillMode, GLuint mask);
void INTERNAL_GL_APIENTRY glStencilFuncNULL(GLenum func, GLint ref, GLuint mask);
void INTERNAL_GL_APIENTRY glStencilFuncSeparateNULL(GLenum face,
                                                    GLenum func,
                                                    GLint ref,
                                                    GLuint mask);
void INTERNAL_GL_APIENTRY glStencilMaskNULL(GLuint mask);
void INTERNAL_GL_APIENTRY glStencilMaskSeparateNULL(GLenum face, GLuint mask);
void INTERNAL_GL_APIENTRY glStencilOpNULL(GLenum fail, GLenum zfail, GLenum zpass);
void INTERNAL_GL_APIENTRY glStencilOpSeparateNULL(GLenum face,
                                                  GLenum sfail,
                                                  GLenum dpfail,
                                                  GLenum dppass);
void INTERNAL_GL_APIENTRY glStencilStrokePathInstancedNVNULL(GLsizei numPaths,
                                                             GLenum pathNameType,
                                                             const void *paths,
                                                             GLuint pathBase,
                                                             GLint reference,
                                                             GLuint mask,
                                                             GLenum transformType,
                                                             const GLfloat *transformValues);
void INTERNAL_GL_APIENTRY glStencilStrokePathNVNULL(GLuint path, GLint reference, GLuint mask);
void INTERNAL_GL_APIENTRY glStencilThenCoverFillPathInstancedNVNULL(GLsizei numPaths,
                                                                    GLenum pathNameType,
                                                                    const void *paths,
                                                                    GLuint pathBase,
                                                                    GLenum fillMode,
                                                                    GLuint mask,
                                                                    GLenum coverMode,
                                                                    GLenum transformType,
                                                                    const GLfloat *transformValues);
void INTERNAL_GL_APIENTRY glStencilThenCoverFillPathNVNULL(GLuint path,
                                                           GLenum fillMode,
                                                           GLuint mask,
                                                           GLenum coverMode);
void INTERNAL_GL_APIENTRY
glStencilThenCoverStrokePathInstancedNVNULL(GLsizei numPaths,
                                            GLenum pathNameType,
                                            const void *paths,
                                            GLuint pathBase,
                                            GLint reference,
                                            GLuint mask,
                                            GLenum coverMode,
                                            GLenum transformType,
                                            const GLfloat *transformValues);
void INTERNAL_GL_APIENTRY glStencilThenCoverStrokePathNVNULL(GLuint path,
                                                             GLint reference,
                                                             GLuint mask,
                                                             GLenum coverMode);
GLboolean INTERNAL_GL_APIENTRY glTestFenceNVNULL(GLuint fence);
void INTERNAL_GL_APIENTRY glTexBufferNULL(GLenum target, GLenum internalformat, GLuint buffer);
void INTERNAL_GL_APIENTRY glTexBufferRangeNULL(GLenum target,
                                               GLenum internalformat,
                                               GLuint buffer,
                                               GLintptr offset,
                                               GLsizeiptr size);
void INTERNAL_GL_APIENTRY glTexImage1DNULL(GLenum target,
                                           GLint level,
                                           GLint internalformat,
                                           GLsizei width,
                                           GLint border,
                                           GLenum format,
                                           GLenum type,
                                           const void *pixels);
void INTERNAL_GL_APIENTRY glTexImage2DNULL(GLenum target,
                                           GLint level,
                                           GLint internalformat,
                                           GLsizei width,
                                           GLsizei height,
                                           GLint border,
                                           GLenum format,
                                           GLenum type,
                                           const void *pixels);
void INTERNAL_GL_APIENTRY glTexImage2DMultisampleNULL(GLenum target,
                                                      GLsizei samples,
                                                      GLenum internalformat,
                                                      GLsizei width,
                                                      GLsizei height,
                                                      GLboolean fixedsamplelocations);
void INTERNAL_GL_APIENTRY glTexImage3DNULL(GLenum target,
                                           GLint level,
                                           GLint internalformat,
                                           GLsizei width,
                                           GLsizei height,
                                           GLsizei depth,
                                           GLint border,
                                           GLenum format,
                                           GLenum type,
                                           const void *pixels);
void INTERNAL_GL_APIENTRY glTexImage3DMultisampleNULL(GLenum target,
                                                      GLsizei samples,
                                                      GLenum internalformat,
                                                      GLsizei width,
                                                      GLsizei height,
                                                      GLsizei depth,
                                                      GLboolean fixedsamplelocations);
void INTERNAL_GL_APIENTRY glTexParameterIivNULL(GLenum target, GLenum pname, const GLint *params);
void INTERNAL_GL_APIENTRY glTexParameterIuivNULL(GLenum target, GLenum pname, const GLuint *params);
void INTERNAL_GL_APIENTRY glTexParameterfNULL(GLenum target, GLenum pname, GLfloat param);
void INTERNAL_GL_APIENTRY glTexParameterfvNULL(GLenum target, GLenum pname, const GLfloat *params);
void INTERNAL_GL_APIENTRY glTexParameteriNULL(GLenum target, GLenum pname, GLint param);
void INTERNAL_GL_APIENTRY glTexParameterivNULL(GLenum target, GLenum pname, const GLint *params);
void INTERNAL_GL_APIENTRY glTexStorage1DNULL(GLenum target,
                                             GLsizei levels,
                                             GLenum internalformat,
                                             GLsizei width);
void INTERNAL_GL_APIENTRY glTexStorage2DNULL(GLenum target,
                                             GLsizei levels,
                                             GLenum internalformat,
                                             GLsizei width,
                                             GLsizei height);
void INTERNAL_GL_APIENTRY glTexStorage2DMultisampleNULL(GLenum target,
                                                        GLsizei samples,
                                                        GLenum internalformat,
                                                        GLsizei width,
                                                        GLsizei height,
                                                        GLboolean fixedsamplelocations);
void INTERNAL_GL_APIENTRY glTexStorage3DNULL(GLenum target,
                                             GLsizei levels,
                                             GLenum internalformat,
                                             GLsizei width,
                                             GLsizei height,
                                             GLsizei depth);
void INTERNAL_GL_APIENTRY glTexStorage3DMultisampleNULL(GLenum target,
                                                        GLsizei samples,
                                                        GLenum internalformat,
                                                        GLsizei width,
                                                        GLsizei height,
                                                        GLsizei depth,
                                                        GLboolean fixedsamplelocations);
void INTERNAL_GL_APIENTRY glTexStorageMem2DEXTNULL(GLenum target,
                                                   GLsizei levels,
                                                   GLenum internalFormat,
                                                   GLsizei width,
                                                   GLsizei height,
                                                   GLuint memory,
                                                   GLuint64 offset);
void INTERNAL_GL_APIENTRY glTexStorageMem2DMultisampleEXTNULL(GLenum target,
                                                              GLsizei samples,
                                                              GLenum internalFormat,
                                                              GLsizei width,
                                                              GLsizei height,
                                                              GLboolean fixedSampleLocations,
                                                              GLuint memory,
                                                              GLuint64 offset);
void INTERNAL_GL_APIENTRY glTexStorageMem3DEXTNULL(GLenum target,
                                                   GLsizei levels,
                                                   GLenum internalFormat,
                                                   GLsizei width,
                                                   GLsizei height,
                                                   GLsizei depth,
                                                   GLuint memory,
                                                   GLuint64 offset);
void INTERNAL_GL_APIENTRY glTexStorageMem3DMultisampleEXTNULL(GLenum target,
                                                              GLsizei samples,
                                                              GLenum internalFormat,
                                                              GLsizei width,
                                                              GLsizei height,
                                                              GLsizei depth,
                                                              GLboolean fixedSampleLocations,
                                                              GLuint memory,
                                                              GLuint64 offset);
void INTERNAL_GL_APIENTRY glTexSubImage1DNULL(GLenum target,
                                              GLint level,
                                              GLint xoffset,
                                              GLsizei width,
                                              GLenum format,
                                              GLenum type,
                                              const void *pixels);
void INTERNAL_GL_APIENTRY glTexSubImage2DNULL(GLenum target,
                                              GLint level,
                                              GLint xoffset,
                                              GLint yoffset,
                                              GLsizei width,
                                              GLsizei height,
                                              GLenum format,
                                              GLenum type,
                                              const void *pixels);
void INTERNAL_GL_APIENTRY glTexSubImage3DNULL(GLenum target,
                                              GLint level,
                                              GLint xoffset,
                                              GLint yoffset,
                                              GLint zoffset,
                                              GLsizei width,
                                              GLsizei height,
                                              GLsizei depth,
                                              GLenum format,
                                              GLenum type,
                                              const void *pixels);
void INTERNAL_GL_APIENTRY glTextureBarrierNULL();
void INTERNAL_GL_APIENTRY glTextureBufferNULL(GLuint texture, GLenum internalformat, GLuint buffer);
void INTERNAL_GL_APIENTRY glTextureBufferRangeNULL(GLuint texture,
                                                   GLenum internalformat,
                                                   GLuint buffer,
                                                   GLintptr offset,
                                                   GLsizeiptr size);
void INTERNAL_GL_APIENTRY glTextureParameterIivNULL(GLuint texture,
                                                    GLenum pname,
                                                    const GLint *params);
void INTERNAL_GL_APIENTRY glTextureParameterIuivNULL(GLuint texture,
                                                     GLenum pname,
                                                     const GLuint *params);
void INTERNAL_GL_APIENTRY glTextureParameterfNULL(GLuint texture, GLenum pname, GLfloat param);
void INTERNAL_GL_APIENTRY glTextureParameterfvNULL(GLuint texture,
                                                   GLenum pname,
                                                   const GLfloat *param);
void INTERNAL_GL_APIENTRY glTextureParameteriNULL(GLuint texture, GLenum pname, GLint param);
void INTERNAL_GL_APIENTRY glTextureParameterivNULL(GLuint texture,
                                                   GLenum pname,
                                                   const GLint *param);
void INTERNAL_GL_APIENTRY glTextureStorage1DNULL(GLuint texture,
                                                 GLsizei levels,
                                                 GLenum internalformat,
                                                 GLsizei width);
void INTERNAL_GL_APIENTRY glTextureStorage2DNULL(GLuint texture,
                                                 GLsizei levels,
                                                 GLenum internalformat,
                                                 GLsizei width,
                                                 GLsizei height);
void INTERNAL_GL_APIENTRY glTextureStorage2DMultisampleNULL(GLuint texture,
                                                            GLsizei samples,
                                                            GLenum internalformat,
                                                            GLsizei width,
                                                            GLsizei height,
                                                            GLboolean fixedsamplelocations);
void INTERNAL_GL_APIENTRY glTextureStorage3DNULL(GLuint texture,
                                                 GLsizei levels,
                                                 GLenum internalformat,
                                                 GLsizei width,
                                                 GLsizei height,
                                                 GLsizei depth);
void INTERNAL_GL_APIENTRY glTextureStorage3DMultisampleNULL(GLuint texture,
                                                            GLsizei samples,
                                                            GLenum internalformat,
                                                            GLsizei width,
                                                            GLsizei height,
                                                            GLsizei depth,
                                                            GLboolean fixedsamplelocations);
void INTERNAL_GL_APIENTRY glTextureStorageMem2DEXTNULL(GLuint texture,
                                                       GLsizei levels,
                                                       GLenum internalFormat,
                                                       GLsizei width,
                                                       GLsizei height,
                                                       GLuint memory,
                                                       GLuint64 offset);
void INTERNAL_GL_APIENTRY glTextureStorageMem2DMultisampleEXTNULL(GLuint texture,
                                                                  GLsizei samples,
                                                                  GLenum internalFormat,
                                                                  GLsizei width,
                                                                  GLsizei height,
                                                                  GLboolean fixedSampleLocations,
                                                                  GLuint memory,
                                                                  GLuint64 offset);
void INTERNAL_GL_APIENTRY glTextureStorageMem3DEXTNULL(GLuint texture,
                                                       GLsizei levels,
                                                       GLenum internalFormat,
                                                       GLsizei width,
                                                       GLsizei height,
                                                       GLsizei depth,
                                                       GLuint memory,
                                                       GLuint64 offset);
void INTERNAL_GL_APIENTRY glTextureStorageMem3DMultisampleEXTNULL(GLuint texture,
                                                                  GLsizei samples,
                                                                  GLenum internalFormat,
                                                                  GLsizei width,
                                                                  GLsizei height,
                                                                  GLsizei depth,
                                                                  GLboolean fixedSampleLocations,
                                                                  GLuint memory,
                                                                  GLuint64 offset);
void INTERNAL_GL_APIENTRY glTextureSubImage1DNULL(GLuint texture,
                                                  GLint level,
                                                  GLint xoffset,
                                                  GLsizei width,
                                                  GLenum format,
                                                  GLenum type,
                                                  const void *pixels);
void INTERNAL_GL_APIENTRY glTextureSubImage2DNULL(GLuint texture,
                                                  GLint level,
                                                  GLint xoffset,
                                                  GLint yoffset,
                                                  GLsizei width,
                                                  GLsizei height,
                                                  GLenum format,
                                                  GLenum type,
                                                  const void *pixels);
void INTERNAL_GL_APIENTRY glTextureSubImage3DNULL(GLuint texture,
                                                  GLint level,
                                                  GLint xoffset,
                                                  GLint yoffset,
                                                  GLint zoffset,
                                                  GLsizei width,
                                                  GLsizei height,
                                                  GLsizei depth,
                                                  GLenum format,
                                                  GLenum type,
                                                  const void *pixels);
void INTERNAL_GL_APIENTRY glTextureViewNULL(GLuint texture,
                                            GLenum target,
                                            GLuint origtexture,
                                            GLenum internalformat,
                                            GLuint minlevel,
                                            GLuint numlevels,
                                            GLuint minlayer,
                                            GLuint numlayers);
void INTERNAL_GL_APIENTRY glTransformFeedbackBufferBaseNULL(GLuint xfb,
                                                            GLuint index,
                                                            GLuint buffer);
void INTERNAL_GL_APIENTRY glTransformFeedbackBufferRangeNULL(GLuint xfb,
                                                             GLuint index,
                                                             GLuint buffer,
                                                             GLintptr offset,
                                                             GLsizeiptr size);
void INTERNAL_GL_APIENTRY glTransformFeedbackVaryingsNULL(GLuint program,
                                                          GLsizei count,
                                                          const GLchar *const *varyings,
                                                          GLenum bufferMode);
void INTERNAL_GL_APIENTRY glUniform1dNULL(GLint location, GLdouble x);
void INTERNAL_GL_APIENTRY glUniform1dvNULL(GLint location, GLsizei count, const GLdouble *value);
void INTERNAL_GL_APIENTRY glUniform1fNULL(GLint location, GLfloat v0);
void INTERNAL_GL_APIENTRY glUniform1fvNULL(GLint location, GLsizei count, const GLfloat *value);
void INTERNAL_GL_APIENTRY glUniform1iNULL(GLint location, GLint v0);
void INTERNAL_GL_APIENTRY glUniform1ivNULL(GLint location, GLsizei count, const GLint *value);
void INTERNAL_GL_APIENTRY glUniform1uiNULL(GLint location, GLuint v0);
void INTERNAL_GL_APIENTRY glUniform1uivNULL(GLint location, GLsizei count, const GLuint *value);
void INTERNAL_GL_APIENTRY glUniform2dNULL(GLint location, GLdouble x, GLdouble y);
void INTERNAL_GL_APIENTRY glUniform2dvNULL(GLint location, GLsizei count, const GLdouble *value);
void INTERNAL_GL_APIENTRY glUniform2fNULL(GLint location, GLfloat v0, GLfloat v1);
void INTERNAL_GL_APIENTRY glUniform2fvNULL(GLint location, GLsizei count, const GLfloat *value);
void INTERNAL_GL_APIENTRY glUniform2iNULL(GLint location, GLint v0, GLint v1);
void INTERNAL_GL_APIENTRY glUniform2ivNULL(GLint location, GLsizei count, const GLint *value);
void INTERNAL_GL_APIENTRY glUniform2uiNULL(GLint location, GLuint v0, GLuint v1);
void INTERNAL_GL_APIENTRY glUniform2uivNULL(GLint location, GLsizei count, const GLuint *value);
void INTERNAL_GL_APIENTRY glUniform3dNULL(GLint location, GLdouble x, GLdouble y, GLdouble z);
void INTERNAL_GL_APIENTRY glUniform3dvNULL(GLint location, GLsizei count, const GLdouble *value);
void INTERNAL_GL_APIENTRY glUniform3fNULL(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
void INTERNAL_GL_APIENTRY glUniform3fvNULL(GLint location, GLsizei count, const GLfloat *value);
void INTERNAL_GL_APIENTRY glUniform3iNULL(GLint location, GLint v0, GLint v1, GLint v2);
void INTERNAL_GL_APIENTRY glUniform3ivNULL(GLint location, GLsizei count, const GLint *value);
void INTERNAL_GL_APIENTRY glUniform3uiNULL(GLint location, GLuint v0, GLuint v1, GLuint v2);
void INTERNAL_GL_APIENTRY glUniform3uivNULL(GLint location, GLsizei count, const GLuint *value);
void INTERNAL_GL_APIENTRY
glUniform4dNULL(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
void INTERNAL_GL_APIENTRY glUniform4dvNULL(GLint location, GLsizei count, const GLdouble *value);
void INTERNAL_GL_APIENTRY
glUniform4fNULL(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
void INTERNAL_GL_APIENTRY glUniform4fvNULL(GLint location, GLsizei count, const GLfloat *value);
void INTERNAL_GL_APIENTRY glUniform4iNULL(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
void INTERNAL_GL_APIENTRY glUniform4ivNULL(GLint location, GLsizei count, const GLint *value);
void INTERNAL_GL_APIENTRY
glUniform4uiNULL(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
void INTERNAL_GL_APIENTRY glUniform4uivNULL(GLint location, GLsizei count, const GLuint *value);
void INTERNAL_GL_APIENTRY glUniformBlockBindingNULL(GLuint program,
                                                    GLuint uniformBlockIndex,
                                                    GLuint uniformBlockBinding);
void INTERNAL_GL_APIENTRY glUniformMatrix2dvNULL(GLint location,
                                                 GLsizei count,
                                                 GLboolean transpose,
                                                 const GLdouble *value);
void INTERNAL_GL_APIENTRY glUniformMatrix2fvNULL(GLint location,
                                                 GLsizei count,
                                                 GLboolean transpose,
                                                 const GLfloat *value);
void INTERNAL_GL_APIENTRY glUniformMatrix2x3dvNULL(GLint location,
                                                   GLsizei count,
                                                   GLboolean transpose,
                                                   const GLdouble *value);
void INTERNAL_GL_APIENTRY glUniformMatrix2x3fvNULL(GLint location,
                                                   GLsizei count,
                                                   GLboolean transpose,
                                                   const GLfloat *value);
void INTERNAL_GL_APIENTRY glUniformMatrix2x4dvNULL(GLint location,
                                                   GLsizei count,
                                                   GLboolean transpose,
                                                   const GLdouble *value);
void INTERNAL_GL_APIENTRY glUniformMatrix2x4fvNULL(GLint location,
                                                   GLsizei count,
                                                   GLboolean transpose,
                                                   const GLfloat *value);
void INTERNAL_GL_APIENTRY glUniformMatrix3dvNULL(GLint location,
                                                 GLsizei count,
                                                 GLboolean transpose,
                                                 const GLdouble *value);
void INTERNAL_GL_APIENTRY glUniformMatrix3fvNULL(GLint location,
                                                 GLsizei count,
                                                 GLboolean transpose,
                                                 const GLfloat *value);
void INTERNAL_GL_APIENTRY glUniformMatrix3x2dvNULL(GLint location,
                                                   GLsizei count,
                                                   GLboolean transpose,
                                                   const GLdouble *value);
void INTERNAL_GL_APIENTRY glUniformMatrix3x2fvNULL(GLint location,
                                                   GLsizei count,
                                                   GLboolean transpose,
                                                   const GLfloat *value);
void INTERNAL_GL_APIENTRY glUniformMatrix3x4dvNULL(GLint location,
                                                   GLsizei count,
                                                   GLboolean transpose,
                                                   const GLdouble *value);
void INTERNAL_GL_APIENTRY glUniformMatrix3x4fvNULL(GLint location,
                                                   GLsizei count,
                                                   GLboolean transpose,
                                                   const GLfloat *value);
void INTERNAL_GL_APIENTRY glUniformMatrix4dvNULL(GLint location,
                                                 GLsizei count,
                                                 GLboolean transpose,
                                                 const GLdouble *value);
void INTERNAL_GL_APIENTRY glUniformMatrix4fvNULL(GLint location,
                                                 GLsizei count,
                                                 GLboolean transpose,
                                                 const GLfloat *value);
void INTERNAL_GL_APIENTRY glUniformMatrix4x2dvNULL(GLint location,
                                                   GLsizei count,
                                                   GLboolean transpose,
                                                   const GLdouble *value);
void INTERNAL_GL_APIENTRY glUniformMatrix4x2fvNULL(GLint location,
                                                   GLsizei count,
                                                   GLboolean transpose,
                                                   const GLfloat *value);
void INTERNAL_GL_APIENTRY glUniformMatrix4x3dvNULL(GLint location,
                                                   GLsizei count,
                                                   GLboolean transpose,
                                                   const GLdouble *value);
void INTERNAL_GL_APIENTRY glUniformMatrix4x3fvNULL(GLint location,
                                                   GLsizei count,
                                                   GLboolean transpose,
                                                   const GLfloat *value);
void INTERNAL_GL_APIENTRY glUniformSubroutinesuivNULL(GLenum shadertype,
                                                      GLsizei count,
                                                      const GLuint *indices);
GLboolean INTERNAL_GL_APIENTRY glUnmapBufferNULL(GLenum target);
GLboolean INTERNAL_GL_APIENTRY glUnmapNamedBufferNULL(GLuint buffer);
void INTERNAL_GL_APIENTRY glUseProgramNULL(GLuint program);
void INTERNAL_GL_APIENTRY glUseProgramStagesNULL(GLuint pipeline,
                                                 GLbitfield stages,
                                                 GLuint program);
void INTERNAL_GL_APIENTRY glValidateProgramNULL(GLuint program);
void INTERNAL_GL_APIENTRY glValidateProgramPipelineNULL(GLuint pipeline);
void INTERNAL_GL_APIENTRY glVertexArrayAttribBindingNULL(GLuint vaobj,
                                                         GLuint attribindex,
                                                         GLuint bindingindex);
void INTERNAL_GL_APIENTRY glVertexArrayAttribFormatNULL(GLuint vaobj,
                                                        GLuint attribindex,
                                                        GLint size,
                                                        GLenum type,
                                                        GLboolean normalized,
                                                        GLuint relativeoffset);
void INTERNAL_GL_APIENTRY glVertexArrayAttribIFormatNULL(GLuint vaobj,
                                                         GLuint attribindex,
                                                         GLint size,
                                                         GLenum type,
                                                         GLuint relativeoffset);
void INTERNAL_GL_APIENTRY glVertexArrayAttribLFormatNULL(GLuint vaobj,
                                                         GLuint attribindex,
                                                         GLint size,
                                                         GLenum type,
                                                         GLuint relativeoffset);
void INTERNAL_GL_APIENTRY glVertexArrayBindingDivisorNULL(GLuint vaobj,
                                                          GLuint bindingindex,
                                                          GLuint divisor);
void INTERNAL_GL_APIENTRY glVertexArrayElementBufferNULL(GLuint vaobj, GLuint buffer);
void INTERNAL_GL_APIENTRY glVertexArrayVertexBufferNULL(GLuint vaobj,
                                                        GLuint bindingindex,
                                                        GLuint buffer,
                                                        GLintptr offset,
                                                        GLsizei stride);
void INTERNAL_GL_APIENTRY glVertexArrayVertexBuffersNULL(GLuint vaobj,
                                                         GLuint first,
                                                         GLsizei count,
                                                         const GLuint *buffers,
                                                         const GLintptr *offsets,
                                                         const GLsizei *strides);
void INTERNAL_GL_APIENTRY glVertexAttrib1dNULL(GLuint index, GLdouble x);
void INTERNAL_GL_APIENTRY glVertexAttrib1dvNULL(GLuint index, const GLdouble *v);
void INTERNAL_GL_APIENTRY glVertexAttrib1fNULL(GLuint index, GLfloat x);
void INTERNAL_GL_APIENTRY glVertexAttrib1fvNULL(GLuint index, const GLfloat *v);
void INTERNAL_GL_APIENTRY glVertexAttrib1sNULL(GLuint index, GLshort x);
void INTERNAL_GL_APIENTRY glVertexAttrib1svNULL(GLuint index, const GLshort *v);
void INTERNAL_GL_APIENTRY glVertexAttrib2dNULL(GLuint index, GLdouble x, GLdouble y);
void INTERNAL_GL_APIENTRY glVertexAttrib2dvNULL(GLuint index, const GLdouble *v);
void INTERNAL_GL_APIENTRY glVertexAttrib2fNULL(GLuint index, GLfloat x, GLfloat y);
void INTERNAL_GL_APIENTRY glVertexAttrib2fvNULL(GLuint index, const GLfloat *v);
void INTERNAL_GL_APIENTRY glVertexAttrib2sNULL(GLuint index, GLshort x, GLshort y);
void INTERNAL_GL_APIENTRY glVertexAttrib2svNULL(GLuint index, const GLshort *v);
void INTERNAL_GL_APIENTRY glVertexAttrib3dNULL(GLuint index, GLdouble x, GLdouble y, GLdouble z);
void INTERNAL_GL_APIENTRY glVertexAttrib3dvNULL(GLuint index, const GLdouble *v);
void INTERNAL_GL_APIENTRY glVertexAttrib3fNULL(GLuint index, GLfloat x, GLfloat y, GLfloat z);
void INTERNAL_GL_APIENTRY glVertexAttrib3fvNULL(GLuint index, const GLfloat *v);
void INTERNAL_GL_APIENTRY glVertexAttrib3sNULL(GLuint index, GLshort x, GLshort y, GLshort z);
void INTERNAL_GL_APIENTRY glVertexAttrib3svNULL(GLuint index, const GLshort *v);
void INTERNAL_GL_APIENTRY glVertexAttrib4NbvNULL(GLuint index, const GLbyte *v);
void INTERNAL_GL_APIENTRY glVertexAttrib4NivNULL(GLuint index, const GLint *v);
void INTERNAL_GL_APIENTRY glVertexAttrib4NsvNULL(GLuint index, const GLshort *v);
void INTERNAL_GL_APIENTRY
glVertexAttrib4NubNULL(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
void INTERNAL_GL_APIENTRY glVertexAttrib4NubvNULL(GLuint index, const GLubyte *v);
void INTERNAL_GL_APIENTRY glVertexAttrib4NuivNULL(GLuint index, const GLuint *v);
void INTERNAL_GL_APIENTRY glVertexAttrib4NusvNULL(GLuint index, const GLushort *v);
void INTERNAL_GL_APIENTRY glVertexAttrib4bvNULL(GLuint index, const GLbyte *v);
void INTERNAL_GL_APIENTRY
glVertexAttrib4dNULL(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
void INTERNAL_GL_APIENTRY glVertexAttrib4dvNULL(GLuint index, const GLdouble *v);
void INTERNAL_GL_APIENTRY
glVertexAttrib4fNULL(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
void INTERNAL_GL_APIENTRY glVertexAttrib4fvNULL(GLuint index, const GLfloat *v);
void INTERNAL_GL_APIENTRY glVertexAttrib4ivNULL(GLuint index, const GLint *v);
void INTERNAL_GL_APIENTRY
glVertexAttrib4sNULL(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
void INTERNAL_GL_APIENTRY glVertexAttrib4svNULL(GLuint index, const GLshort *v);
void INTERNAL_GL_APIENTRY glVertexAttrib4ubvNULL(GLuint index, const GLubyte *v);
void INTERNAL_GL_APIENTRY glVertexAttrib4uivNULL(GLuint index, const GLuint *v);
void INTERNAL_GL_APIENTRY glVertexAttrib4usvNULL(GLuint index, const GLushort *v);
void INTERNAL_GL_APIENTRY glVertexAttribBindingNULL(GLuint attribindex, GLuint bindingindex);
void INTERNAL_GL_APIENTRY glVertexAttribDivisorNULL(GLuint index, GLuint divisor);
void INTERNAL_GL_APIENTRY glVertexAttribFormatNULL(GLuint attribindex,
                                                   GLint size,
                                                   GLenum type,
                                                   GLboolean normalized,
                                                   GLuint relativeoffset);
void INTERNAL_GL_APIENTRY glVertexAttribI1iNULL(GLuint index, GLint x);
void INTERNAL_GL_APIENTRY glVertexAttribI1ivNULL(GLuint index, const GLint *v);
void INTERNAL_GL_APIENTRY glVertexAttribI1uiNULL(GLuint index, GLuint x);
void INTERNAL_GL_APIENTRY glVertexAttribI1uivNULL(GLuint index, const GLuint *v);
void INTERNAL_GL_APIENTRY glVertexAttribI2iNULL(GLuint index, GLint x, GLint y);
void INTERNAL_GL_APIENTRY glVertexAttribI2ivNULL(GLuint index, const GLint *v);
void INTERNAL_GL_APIENTRY glVertexAttribI2uiNULL(GLuint index, GLuint x, GLuint y);
void INTERNAL_GL_APIENTRY glVertexAttribI2uivNULL(GLuint index, const GLuint *v);
void INTERNAL_GL_APIENTRY glVertexAttribI3iNULL(GLuint index, GLint x, GLint y, GLint z);
void INTERNAL_GL_APIENTRY glVertexAttribI3ivNULL(GLuint index, const GLint *v);
void INTERNAL_GL_APIENTRY glVertexAttribI3uiNULL(GLuint index, GLuint x, GLuint y, GLuint z);
void INTERNAL_GL_APIENTRY glVertexAttribI3uivNULL(GLuint index, const GLuint *v);
void INTERNAL_GL_APIENTRY glVertexAttribI4bvNULL(GLuint index, const GLbyte *v);
void INTERNAL_GL_APIENTRY glVertexAttribI4iNULL(GLuint index, GLint x, GLint y, GLint z, GLint w);
void INTERNAL_GL_APIENTRY glVertexAttribI4ivNULL(GLuint index, const GLint *v);
void INTERNAL_GL_APIENTRY glVertexAttribI4svNULL(GLuint index, const GLshort *v);
void INTERNAL_GL_APIENTRY glVertexAttribI4ubvNULL(GLuint index, const GLubyte *v);
void INTERNAL_GL_APIENTRY
glVertexAttribI4uiNULL(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
void INTERNAL_GL_APIENTRY glVertexAttribI4uivNULL(GLuint index, const GLuint *v);
void INTERNAL_GL_APIENTRY glVertexAttribI4usvNULL(GLuint index, const GLushort *v);
void INTERNAL_GL_APIENTRY glVertexAttribIFormatNULL(GLuint attribindex,
                                                    GLint size,
                                                    GLenum type,
                                                    GLuint relativeoffset);
void INTERNAL_GL_APIENTRY glVertexAttribIPointerNULL(GLuint index,
                                                     GLint size,
                                                     GLenum type,
                                                     GLsizei stride,
                                                     const void *pointer);
void INTERNAL_GL_APIENTRY glVertexAttribL1dNULL(GLuint index, GLdouble x);
void INTERNAL_GL_APIENTRY glVertexAttribL1dvNULL(GLuint index, const GLdouble *v);
void INTERNAL_GL_APIENTRY glVertexAttribL2dNULL(GLuint index, GLdouble x, GLdouble y);
void INTERNAL_GL_APIENTRY glVertexAttribL2dvNULL(GLuint index, const GLdouble *v);
void INTERNAL_GL_APIENTRY glVertexAttribL3dNULL(GLuint index, GLdouble x, GLdouble y, GLdouble z);
void INTERNAL_GL_APIENTRY glVertexAttribL3dvNULL(GLuint index, const GLdouble *v);
void INTERNAL_GL_APIENTRY
glVertexAttribL4dNULL(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
void INTERNAL_GL_APIENTRY glVertexAttribL4dvNULL(GLuint index, const GLdouble *v);
void INTERNAL_GL_APIENTRY glVertexAttribLFormatNULL(GLuint attribindex,
                                                    GLint size,
                                                    GLenum type,
                                                    GLuint relativeoffset);
void INTERNAL_GL_APIENTRY glVertexAttribLPointerNULL(GLuint index,
                                                     GLint size,
                                                     GLenum type,
                                                     GLsizei stride,
                                                     const void *pointer);
void INTERNAL_GL_APIENTRY glVertexAttribP1uiNULL(GLuint index,
                                                 GLenum type,
                                                 GLboolean normalized,
                                                 GLuint value);
void INTERNAL_GL_APIENTRY glVertexAttribP1uivNULL(GLuint index,
                                                  GLenum type,
                                                  GLboolean normalized,
                                                  const GLuint *value);
void INTERNAL_GL_APIENTRY glVertexAttribP2uiNULL(GLuint index,
                                                 GLenum type,
                                                 GLboolean normalized,
                                                 GLuint value);
void INTERNAL_GL_APIENTRY glVertexAttribP2uivNULL(GLuint index,
                                                  GLenum type,
                                                  GLboolean normalized,
                                                  const GLuint *value);
void INTERNAL_GL_APIENTRY glVertexAttribP3uiNULL(GLuint index,
                                                 GLenum type,
                                                 GLboolean normalized,
                                                 GLuint value);
void INTERNAL_GL_APIENTRY glVertexAttribP3uivNULL(GLuint index,
                                                  GLenum type,
                                                  GLboolean normalized,
                                                  const GLuint *value);
void INTERNAL_GL_APIENTRY glVertexAttribP4uiNULL(GLuint index,
                                                 GLenum type,
                                                 GLboolean normalized,
                                                 GLuint value);
void INTERNAL_GL_APIENTRY glVertexAttribP4uivNULL(GLuint index,
                                                  GLenum type,
                                                  GLboolean normalized,
                                                  const GLuint *value);
void INTERNAL_GL_APIENTRY glVertexAttribPointerNULL(GLuint index,
                                                    GLint size,
                                                    GLenum type,
                                                    GLboolean normalized,
                                                    GLsizei stride,
                                                    const void *pointer);
void INTERNAL_GL_APIENTRY glVertexBindingDivisorNULL(GLuint bindingindex, GLuint divisor);
void INTERNAL_GL_APIENTRY glViewportNULL(GLint x, GLint y, GLsizei width, GLsizei height);
void INTERNAL_GL_APIENTRY glViewportArrayvNULL(GLuint first, GLsizei count, const GLfloat *v);
void INTERNAL_GL_APIENTRY
glViewportIndexedfNULL(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
void INTERNAL_GL_APIENTRY glViewportIndexedfvNULL(GLuint index, const GLfloat *v);
void INTERNAL_GL_APIENTRY glWaitSemaphoreEXTNULL(GLuint semaphore,
                                                 GLuint numBufferBarriers,
                                                 const GLuint *buffers,
                                                 GLuint numTextureBarriers,
                                                 const GLuint *textures,
                                                 const GLenum *srcLayouts);
void INTERNAL_GL_APIENTRY glWaitSyncNULL(GLsync sync, GLbitfield flags, GLuint64 timeout);
}  // namespace rx

#endif  // LIBGLESV2_RENDERER_GL_NULL_GL_FUNCTIONS_AUTOGEN_H_
