// GENERATED FILE - DO NOT EDIT.
// Generated by generate_entry_points.py using data from 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.
//
// entry_points_gl_4_1_autogen.h:
//   Defines the GL 4.1 entry points.

#ifndef LIBGL_ENTRY_POINTS_GL_4_1_AUTOGEN_H_
#define LIBGL_ENTRY_POINTS_GL_4_1_AUTOGEN_H_

#include <export.h>
#include "angle_gl.h"

namespace gl
{
ANGLE_EXPORT void GL_APIENTRY ActiveShaderProgram(GLuint pipeline, GLuint program);
ANGLE_EXPORT void GL_APIENTRY BindProgramPipeline(GLuint pipeline);
ANGLE_EXPORT void GL_APIENTRY ClearDepthf(GLfloat d);
ANGLE_EXPORT GLuint GL_APIENTRY CreateShaderProgramv(GLenum type,
                                                     GLsizei count,
                                                     const GLchar *const *strings);
ANGLE_EXPORT void GL_APIENTRY DeleteProgramPipelines(GLsizei n, const GLuint *pipelines);
ANGLE_EXPORT void GL_APIENTRY DepthRangeArrayv(GLuint first, GLsizei count, const GLdouble *v);
ANGLE_EXPORT void GL_APIENTRY DepthRangeIndexed(GLuint index, GLdouble n, GLdouble f);
ANGLE_EXPORT void GL_APIENTRY DepthRangef(GLfloat n, GLfloat f);
ANGLE_EXPORT void GL_APIENTRY GenProgramPipelines(GLsizei n, GLuint *pipelines);
ANGLE_EXPORT void GL_APIENTRY GetDoublei_v(GLenum target, GLuint index, GLdouble *data);
ANGLE_EXPORT void GL_APIENTRY GetFloati_v(GLenum target, GLuint index, GLfloat *data);
ANGLE_EXPORT void GL_APIENTRY GetProgramBinary(GLuint program,
                                               GLsizei bufSize,
                                               GLsizei *length,
                                               GLenum *binaryFormat,
                                               void *binary);
ANGLE_EXPORT void GL_APIENTRY GetProgramPipelineInfoLog(GLuint pipeline,
                                                        GLsizei bufSize,
                                                        GLsizei *length,
                                                        GLchar *infoLog);
ANGLE_EXPORT void GL_APIENTRY GetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint *params);
ANGLE_EXPORT void GL_APIENTRY GetShaderPrecisionFormat(GLenum shadertype,
                                                       GLenum precisiontype,
                                                       GLint *range,
                                                       GLint *precision);
ANGLE_EXPORT void GL_APIENTRY GetVertexAttribLdv(GLuint index, GLenum pname, GLdouble *params);
ANGLE_EXPORT GLboolean GL_APIENTRY IsProgramPipeline(GLuint pipeline);
ANGLE_EXPORT void GL_APIENTRY ProgramBinary(GLuint program,
                                            GLenum binaryFormat,
                                            const void *binary,
                                            GLsizei length);
ANGLE_EXPORT void GL_APIENTRY ProgramParameteri(GLuint program, GLenum pname, GLint value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform1d(GLuint program, GLint location, GLdouble v0);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform1dv(GLuint program,
                                                GLint location,
                                                GLsizei count,
                                                const GLdouble *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform1f(GLuint program, GLint location, GLfloat v0);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform1fv(GLuint program,
                                                GLint location,
                                                GLsizei count,
                                                const GLfloat *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform1i(GLuint program, GLint location, GLint v0);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform1iv(GLuint program,
                                                GLint location,
                                                GLsizei count,
                                                const GLint *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform1ui(GLuint program, GLint location, GLuint v0);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform1uiv(GLuint program,
                                                 GLint location,
                                                 GLsizei count,
                                                 const GLuint *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform2d(GLuint program,
                                               GLint location,
                                               GLdouble v0,
                                               GLdouble v1);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform2dv(GLuint program,
                                                GLint location,
                                                GLsizei count,
                                                const GLdouble *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform2f(GLuint program,
                                               GLint location,
                                               GLfloat v0,
                                               GLfloat v1);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform2fv(GLuint program,
                                                GLint location,
                                                GLsizei count,
                                                const GLfloat *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform2iv(GLuint program,
                                                GLint location,
                                                GLsizei count,
                                                const GLint *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform2ui(GLuint program,
                                                GLint location,
                                                GLuint v0,
                                                GLuint v1);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform2uiv(GLuint program,
                                                 GLint location,
                                                 GLsizei count,
                                                 const GLuint *value);
ANGLE_EXPORT void GL_APIENTRY
ProgramUniform3d(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform3dv(GLuint program,
                                                GLint location,
                                                GLsizei count,
                                                const GLdouble *value);
ANGLE_EXPORT void GL_APIENTRY
ProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform3fv(GLuint program,
                                                GLint location,
                                                GLsizei count,
                                                const GLfloat *value);
ANGLE_EXPORT void GL_APIENTRY
ProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform3iv(GLuint program,
                                                GLint location,
                                                GLsizei count,
                                                const GLint *value);
ANGLE_EXPORT void GL_APIENTRY
ProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform3uiv(GLuint program,
                                                 GLint location,
                                                 GLsizei count,
                                                 const GLuint *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform4d(GLuint program,
                                               GLint location,
                                               GLdouble v0,
                                               GLdouble v1,
                                               GLdouble v2,
                                               GLdouble v3);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform4dv(GLuint program,
                                                GLint location,
                                                GLsizei count,
                                                const GLdouble *value);
ANGLE_EXPORT void GL_APIENTRY
ProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform4fv(GLuint program,
                                                GLint location,
                                                GLsizei count,
                                                const GLfloat *value);
ANGLE_EXPORT void GL_APIENTRY
ProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform4iv(GLuint program,
                                                GLint location,
                                                GLsizei count,
                                                const GLint *value);
ANGLE_EXPORT void GL_APIENTRY
ProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
ANGLE_EXPORT void GL_APIENTRY ProgramUniform4uiv(GLuint program,
                                                 GLint location,
                                                 GLsizei count,
                                                 const GLuint *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix2dv(GLuint program,
                                                      GLint location,
                                                      GLsizei count,
                                                      GLboolean transpose,
                                                      const GLdouble *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix2fv(GLuint program,
                                                      GLint location,
                                                      GLsizei count,
                                                      GLboolean transpose,
                                                      const GLfloat *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix2x3dv(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLdouble *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix2x3fv(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLfloat *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix2x4dv(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLdouble *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix2x4fv(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLfloat *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix3dv(GLuint program,
                                                      GLint location,
                                                      GLsizei count,
                                                      GLboolean transpose,
                                                      const GLdouble *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix3fv(GLuint program,
                                                      GLint location,
                                                      GLsizei count,
                                                      GLboolean transpose,
                                                      const GLfloat *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix3x2dv(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLdouble *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix3x2fv(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLfloat *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix3x4dv(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLdouble *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix3x4fv(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLfloat *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix4dv(GLuint program,
                                                      GLint location,
                                                      GLsizei count,
                                                      GLboolean transpose,
                                                      const GLdouble *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix4fv(GLuint program,
                                                      GLint location,
                                                      GLsizei count,
                                                      GLboolean transpose,
                                                      const GLfloat *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix4x2dv(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLdouble *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix4x2fv(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLfloat *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix4x3dv(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLdouble *value);
ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix4x3fv(GLuint program,
                                                        GLint location,
                                                        GLsizei count,
                                                        GLboolean transpose,
                                                        const GLfloat *value);
ANGLE_EXPORT void GL_APIENTRY ReleaseShaderCompiler();
ANGLE_EXPORT void GL_APIENTRY ScissorArrayv(GLuint first, GLsizei count, const GLint *v);
ANGLE_EXPORT void GL_APIENTRY
ScissorIndexed(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
ANGLE_EXPORT void GL_APIENTRY ScissorIndexedv(GLuint index, const GLint *v);
ANGLE_EXPORT void GL_APIENTRY ShaderBinary(GLsizei count,
                                           const GLuint *shaders,
                                           GLenum binaryformat,
                                           const void *binary,
                                           GLsizei length);
ANGLE_EXPORT void GL_APIENTRY UseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program);
ANGLE_EXPORT void GL_APIENTRY ValidateProgramPipeline(GLuint pipeline);
ANGLE_EXPORT void GL_APIENTRY VertexAttribL1d(GLuint index, GLdouble x);
ANGLE_EXPORT void GL_APIENTRY VertexAttribL1dv(GLuint index, const GLdouble *v);
ANGLE_EXPORT void GL_APIENTRY VertexAttribL2d(GLuint index, GLdouble x, GLdouble y);
ANGLE_EXPORT void GL_APIENTRY VertexAttribL2dv(GLuint index, const GLdouble *v);
ANGLE_EXPORT void GL_APIENTRY VertexAttribL3d(GLuint index, GLdouble x, GLdouble y, GLdouble z);
ANGLE_EXPORT void GL_APIENTRY VertexAttribL3dv(GLuint index, const GLdouble *v);
ANGLE_EXPORT void GL_APIENTRY
VertexAttribL4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
ANGLE_EXPORT void GL_APIENTRY VertexAttribL4dv(GLuint index, const GLdouble *v);
ANGLE_EXPORT void GL_APIENTRY
VertexAttribLPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
ANGLE_EXPORT void GL_APIENTRY ViewportArrayv(GLuint first, GLsizei count, const GLfloat *v);
ANGLE_EXPORT void GL_APIENTRY
ViewportIndexedf(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
ANGLE_EXPORT void GL_APIENTRY ViewportIndexedfv(GLuint index, const GLfloat *v);
}  // namespace gl

#endif  // LIBGL_ENTRY_POINTS_GL_4_1_AUTOGEN_H_
