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

#ifndef ANGLE_CONTEXT_GL_3_0_AUTOGEN_H_
#define ANGLE_CONTEXT_GL_3_0_AUTOGEN_H_

#define ANGLE_GL_3_0_CONTEXT_API                                                               \
    void beginConditionalRender(GLuint id, GLenum mode);                                       \
    void clampColor(GLenum target, GLenum clamp);                                              \
    void colorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);         \
    void disablei(GLenum target, GLuint index);                                                \
    void enablei(GLenum target, GLuint index);                                                 \
    void endConditionalRender();                                                               \
    void framebufferTexture1D(GLenum target, GLenum attachment, TextureTarget textargetPacked, \
                              TextureID texturePacked, GLint level);                           \
    GLboolean isEnabledi(GLenum target, GLuint index);                                         \
    void vertexAttribI1i(GLuint index, GLint x);                                               \
    void vertexAttribI1iv(GLuint index, const GLint *v);                                       \
    void vertexAttribI1ui(GLuint index, GLuint x);                                             \
    void vertexAttribI1uiv(GLuint index, const GLuint *v);                                     \
    void vertexAttribI2i(GLuint index, GLint x, GLint y);                                      \
    void vertexAttribI2iv(GLuint index, const GLint *v);                                       \
    void vertexAttribI2ui(GLuint index, GLuint x, GLuint y);                                   \
    void vertexAttribI2uiv(GLuint index, const GLuint *v);                                     \
    void vertexAttribI3i(GLuint index, GLint x, GLint y, GLint z);                             \
    void vertexAttribI3iv(GLuint index, const GLint *v);                                       \
    void vertexAttribI3ui(GLuint index, GLuint x, GLuint y, GLuint z);                         \
    void vertexAttribI3uiv(GLuint index, const GLuint *v);                                     \
    void vertexAttribI4bv(GLuint index, const GLbyte *v);                                      \
    void vertexAttribI4sv(GLuint index, const GLshort *v);                                     \
    void vertexAttribI4ubv(GLuint index, const GLubyte *v);                                    \
    void vertexAttribI4usv(GLuint index, const GLushort *v);

#endif  // ANGLE_CONTEXT_API_3_0_AUTOGEN_H_
