// 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.
//
// Context_gl_3_2_autogen.h: Creates a macro for interfaces in Context.

#ifndef ANGLE_CONTEXT_GL_3_2_AUTOGEN_H_
#define ANGLE_CONTEXT_GL_3_2_AUTOGEN_H_

#define ANGLE_GL_3_2_CONTEXT_API                                                               \
    void drawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices,  \
                                GLint basevertex);                                             \
    void drawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type,              \
                                         const void *indices, GLsizei instancecount,           \
                                         GLint basevertex);                                    \
    void drawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count,     \
                                     GLenum type, const void *indices, GLint basevertex);      \
    void multiDrawElementsBaseVertex(GLenum mode, const GLsizei *count, GLenum type,           \
                                     const void *const *indices, GLsizei drawcount,            \
                                     const GLint *basevertex);                                 \
    void texImage2DMultisample(GLenum target, GLsizei samples, GLenum internalformat,          \
                               GLsizei width, GLsizei height, GLboolean fixedsamplelocations); \
    void texImage3DMultisample(GLenum target, GLsizei samples, GLenum internalformat,          \
                               GLsizei width, GLsizei height, GLsizei depth,                   \
                               GLboolean fixedsamplelocations);

#endif  // ANGLE_CONTEXT_API_3_2_AUTOGEN_H_
