// 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_6_autogen.h:
//   Defines the GL 4.6 entry points.

#ifndef LIBGL_ENTRY_POINTS_GL_4_6_AUTOGEN_H_
#define LIBGL_ENTRY_POINTS_GL_4_6_AUTOGEN_H_

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

namespace gl
{
ANGLE_EXPORT void GL_APIENTRY MultiDrawArraysIndirectCount(GLenum mode,
                                                           const void *indirect,
                                                           GLintptr drawcount,
                                                           GLsizei maxdrawcount,
                                                           GLsizei stride);
ANGLE_EXPORT void GL_APIENTRY MultiDrawElementsIndirectCount(GLenum mode,
                                                             GLenum type,
                                                             const void *indirect,
                                                             GLintptr drawcount,
                                                             GLsizei maxdrawcount,
                                                             GLsizei stride);
ANGLE_EXPORT void GL_APIENTRY PolygonOffsetClamp(GLfloat factor, GLfloat units, GLfloat clamp);
ANGLE_EXPORT void GL_APIENTRY SpecializeShader(GLuint shader,
                                               const GLchar *pEntryPoint,
                                               GLuint numSpecializationConstants,
                                               const GLuint *pConstantIndex,
                                               const GLuint *pConstantValue);
}  // namespace gl

#endif  // LIBGL_ENTRY_POINTS_GL_4_6_AUTOGEN_H_
