// GENERATED FILE - DO NOT EDIT.
// Generated by generate_entry_points.py using data from gl.xml.
//
// Copyright 2020 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_2_autogen.h:
//   Defines the Desktop GL 2.x entry points.

#ifndef LIBGLESV2_ENTRY_POINTS_GL_2_AUTOGEN_H_
#define LIBGLESV2_ENTRY_POINTS_GL_2_AUTOGEN_H_

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

extern "C" {

// GL 2.0
ANGLE_EXPORT void GL_APIENTRY GL_GetVertexAttribdv(GLuint index, GLenum pname, GLdouble *params);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib1d(GLuint index, GLdouble x);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib1dv(GLuint index, const GLdouble *v);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib1s(GLuint index, GLshort x);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib1sv(GLuint index, const GLshort *v);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib2d(GLuint index, GLdouble x, GLdouble y);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib2dv(GLuint index, const GLdouble *v);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib2s(GLuint index, GLshort x, GLshort y);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib2sv(GLuint index, const GLshort *v);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib3d(GLuint index, GLdouble x, GLdouble y, GLdouble z);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib3dv(GLuint index, const GLdouble *v);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib3s(GLuint index, GLshort x, GLshort y, GLshort z);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib3sv(GLuint index, const GLshort *v);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib4Nbv(GLuint index, const GLbyte *v);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib4Niv(GLuint index, const GLint *v);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib4Nsv(GLuint index, const GLshort *v);
ANGLE_EXPORT void GL_APIENTRY
GL_VertexAttrib4Nub(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib4Nubv(GLuint index, const GLubyte *v);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib4Nuiv(GLuint index, const GLuint *v);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib4Nusv(GLuint index, const GLushort *v);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib4bv(GLuint index, const GLbyte *v);
ANGLE_EXPORT void GL_APIENTRY
GL_VertexAttrib4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib4dv(GLuint index, const GLdouble *v);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib4iv(GLuint index, const GLint *v);
ANGLE_EXPORT void GL_APIENTRY
GL_VertexAttrib4s(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib4sv(GLuint index, const GLshort *v);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib4ubv(GLuint index, const GLubyte *v);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib4uiv(GLuint index, const GLuint *v);
ANGLE_EXPORT void GL_APIENTRY GL_VertexAttrib4usv(GLuint index, const GLushort *v);

// GL 2.1
}  // extern "C"

#endif  // LIBGLESV2_ENTRY_POINTS_GL_2_AUTOGEN_H_
