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

#ifndef ANGLE_CONTEXT_GL_4_5_AUTOGEN_H_
#define ANGLE_CONTEXT_GL_4_5_AUTOGEN_H_

#define ANGLE_GL_4_5_CONTEXT_API                                                                   \
    void bindTextureUnit(GLuint unit, TextureID texturePacked);                                    \
    void blitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0,         \
                              GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0,     \
                              GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);           \
    GLenum checkNamedFramebufferStatus(FramebufferID framebufferPacked, GLenum target);            \
    void clearNamedBufferData(BufferID bufferPacked, GLenum internalformat, GLenum format,         \
                              GLenum type, const void *data);                                      \
    void clearNamedBufferSubData(BufferID bufferPacked, GLenum internalformat, GLintptr offset,    \
                                 GLsizeiptr size, GLenum format, GLenum type, const void *data);   \
    void clearNamedFramebufferfi(FramebufferID framebufferPacked, GLenum buffer, GLint drawbuffer, \
                                 GLfloat depth, GLint stencil);                                    \
    void clearNamedFramebufferfv(FramebufferID framebufferPacked, GLenum buffer, GLint drawbuffer, \
                                 const GLfloat *value);                                            \
    void clearNamedFramebufferiv(FramebufferID framebufferPacked, GLenum buffer, GLint drawbuffer, \
                                 const GLint *value);                                              \
    void clearNamedFramebufferuiv(FramebufferID framebufferPacked, GLenum buffer,                  \
                                  GLint drawbuffer, const GLuint *value);                          \
    void clipControl(GLenum origin, GLenum depth);                                                 \
    void compressedTextureSubImage1D(TextureID texturePacked, GLint level, GLint xoffset,          \
                                     GLsizei width, GLenum format, GLsizei imageSize,              \
                                     const void *data);                                            \
    void compressedTextureSubImage2D(TextureID texturePacked, GLint level, GLint xoffset,          \
                                     GLint yoffset, GLsizei width, GLsizei height, GLenum format,  \
                                     GLsizei imageSize, const void *data);                         \
    void compressedTextureSubImage3D(TextureID texturePacked, GLint level, GLint xoffset,          \
                                     GLint yoffset, GLint zoffset, GLsizei width, GLsizei height,  \
                                     GLsizei depth, GLenum format, GLsizei imageSize,              \
                                     const void *data);                                            \
    void copyNamedBufferSubData(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset,        \
                                GLintptr writeOffset, GLsizeiptr size);                            \
    void copyTextureSubImage1D(TextureID texturePacked, GLint level, GLint xoffset, GLint x,       \
                               GLint y, GLsizei width);                                            \
    void copyTextureSubImage2D(TextureID texturePacked, GLint level, GLint xoffset, GLint yoffset, \
                               GLint x, GLint y, GLsizei width, GLsizei height);                   \
    void copyTextureSubImage3D(TextureID texturePacked, GLint level, GLint xoffset, GLint yoffset, \
                               GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);    \
    void createBuffers(GLsizei n, BufferID *buffersPacked);                                        \
    void createFramebuffers(GLsizei n, GLuint *framebuffers);                                      \
    void createProgramPipelines(GLsizei n, GLuint *pipelines);                                     \
    void createQueries(GLenum target, GLsizei n, GLuint *ids);                                     \
    void createRenderbuffers(GLsizei n, RenderbufferID *renderbuffersPacked);                      \
    void createSamplers(GLsizei n, GLuint *samplers);                                              \
    void createTextures(GLenum target, GLsizei n, GLuint *textures);                               \
    void createTransformFeedbacks(GLsizei n, GLuint *ids);                                         \
    void createVertexArrays(GLsizei n, VertexArrayID *arraysPacked);                               \
    void disableVertexArrayAttrib(VertexArrayID vaobjPacked, GLuint index);                        \
    void enableVertexArrayAttrib(VertexArrayID vaobjPacked, GLuint index);                         \
    void flushMappedNamedBufferRange(BufferID bufferPacked, GLintptr offset, GLsizeiptr length);   \
    void generateTextureMipmap(TextureID texturePacked);                                           \
    void getCompressedTextureImage(TextureID texturePacked, GLint level, GLsizei bufSize,          \
                                   void *pixels);                                                  \
    void getCompressedTextureSubImage(TextureID texturePacked, GLint level, GLint xoffset,         \
                                      GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, \
                                      GLsizei depth, GLsizei bufSize, void *pixels);               \
    void getNamedBufferParameteri64v(BufferID bufferPacked, GLenum pname, GLint64 *params);        \
    void getNamedBufferParameteriv(BufferID bufferPacked, GLenum pname, GLint *params);            \
    void getNamedBufferPointerv(BufferID bufferPacked, GLenum pname, void **params);               \
    void getNamedBufferSubData(BufferID bufferPacked, GLintptr offset, GLsizeiptr size,            \
                               void *data);                                                        \
    void getNamedFramebufferAttachmentParameteriv(FramebufferID framebufferPacked,                 \
                                                  GLenum attachment, GLenum pname, GLint *params); \
    void getNamedFramebufferParameteriv(FramebufferID framebufferPacked, GLenum pname,             \
                                        GLint *param);                                             \
    void getNamedRenderbufferParameteriv(RenderbufferID renderbufferPacked, GLenum pname,          \
                                         GLint *params);                                           \
    void getQueryBufferObjecti64v(GLuint id, BufferID bufferPacked, GLenum pname,                  \
                                  GLintptr offset);                                                \
    void getQueryBufferObjectiv(GLuint id, BufferID bufferPacked, GLenum pname, GLintptr offset);  \
    void getQueryBufferObjectui64v(GLuint id, BufferID bufferPacked, GLenum pname,                 \
                                   GLintptr offset);                                               \
    void getQueryBufferObjectuiv(GLuint id, BufferID bufferPacked, GLenum pname, GLintptr offset); \
    void getTextureImage(TextureID texturePacked, GLint level, GLenum format, GLenum type,         \
                         GLsizei bufSize, void *pixels);                                           \
    void getTextureLevelParameterfv(TextureID texturePacked, GLint level, GLenum pname,            \
                                    GLfloat *params);                                              \
    void getTextureLevelParameteriv(TextureID texturePacked, GLint level, GLenum pname,            \
                                    GLint *params);                                                \
    void getTextureParameterIiv(TextureID texturePacked, GLenum pname, GLint *params);             \
    void getTextureParameterIuiv(TextureID texturePacked, GLenum pname, GLuint *params);           \
    void getTextureParameterfv(TextureID texturePacked, GLenum pname, GLfloat *params);            \
    void getTextureParameteriv(TextureID texturePacked, GLenum pname, GLint *params);              \
    void getTextureSubImage(TextureID texturePacked, GLint level, GLint xoffset, GLint yoffset,    \
                            GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,           \
                            GLenum format, GLenum type, GLsizei bufSize, void *pixels);            \
    void getTransformFeedbacki64_v(GLuint xfb, GLenum pname, GLuint index, GLint64 *param);        \
    void getTransformFeedbacki_v(GLuint xfb, GLenum pname, GLuint index, GLint *param);            \
    void getTransformFeedbackiv(GLuint xfb, GLenum pname, GLint *param);                           \
    void getVertexArrayIndexed64iv(VertexArrayID vaobjPacked, GLuint index, GLenum pname,          \
                                   GLint64 *param);                                                \
    void getVertexArrayIndexediv(VertexArrayID vaobjPacked, GLuint index, GLenum pname,            \
                                 GLint *param);                                                    \
    void getVertexArrayiv(VertexArrayID vaobjPacked, GLenum pname, GLint *param);                  \
    void getnColorTable(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table);  \
    void getnCompressedTexImage(GLenum target, GLint lod, GLsizei bufSize, void *pixels);          \
    void getnConvolutionFilter(GLenum target, GLenum format, GLenum type, GLsizei bufSize,         \
                               void *image);                                                       \
    void getnHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type,                 \
                       GLsizei bufSize, void *values);                                             \
    void getnMapdv(GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);                     \
    void getnMapfv(GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);                      \
    void getnMapiv(GLenum target, GLenum query, GLsizei bufSize, GLint *v);                        \
    void getnMinmax(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize,   \
                    void *values);                                                                 \
    void getnPixelMapfv(GLenum map, GLsizei bufSize, GLfloat *values);                             \
    void getnPixelMapuiv(GLenum map, GLsizei bufSize, GLuint *values);                             \
    void getnPixelMapusv(GLenum map, GLsizei bufSize, GLushort *values);                           \
    void getnPolygonStipple(GLsizei bufSize, GLubyte *pattern);                                    \
    void getnSeparableFilter(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize,        \
                             void *row, GLsizei columnBufSize, void *column, void *span);          \
    void getnTexImage(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize,     \
                      void *pixels);                                                               \
    void getnUniformdv(ShaderProgramID programPacked, GLint location, GLsizei bufSize,             \
                       GLdouble *params);                                                          \
    void getnUniformuiv(ShaderProgramID programPacked, GLint location, GLsizei bufSize,            \
                        GLuint *params);                                                           \
    void invalidateNamedFramebufferData(FramebufferID framebufferPacked, GLsizei numAttachments,   \
                                        const GLenum *attachments);                                \
    void invalidateNamedFramebufferSubData(FramebufferID framebufferPacked,                        \
                                           GLsizei numAttachments, const GLenum *attachments,      \
                                           GLint x, GLint y, GLsizei width, GLsizei height);       \
    void *mapNamedBuffer(BufferID bufferPacked, GLenum access);                                    \
    void *mapNamedBufferRange(BufferID bufferPacked, GLintptr offset, GLsizeiptr length,           \
                              GLbitfield access);                                                  \
    void namedBufferData(BufferID bufferPacked, GLsizeiptr size, const void *data, GLenum usage);  \
    void namedBufferStorage(BufferID bufferPacked, GLsizeiptr size, const void *data,              \
                            GLbitfield flags);                                                     \
    void namedBufferSubData(BufferID bufferPacked, GLintptr offset, GLsizeiptr size,               \
                            const void *data);                                                     \
    void namedFramebufferDrawBuffer(FramebufferID framebufferPacked, GLenum buf);                  \
    void namedFramebufferDrawBuffers(FramebufferID framebufferPacked, GLsizei n,                   \
                                     const GLenum *bufs);                                          \
    void namedFramebufferParameteri(FramebufferID framebufferPacked, GLenum pname, GLint param);   \
    void namedFramebufferReadBuffer(FramebufferID framebufferPacked, GLenum src);                  \
    void namedFramebufferRenderbuffer(FramebufferID framebufferPacked, GLenum attachment,          \
                                      GLenum renderbuffertarget,                                   \
                                      RenderbufferID renderbufferPacked);                          \
    void namedFramebufferTexture(FramebufferID framebufferPacked, GLenum attachment,               \
                                 TextureID texturePacked, GLint level);                            \
    void namedFramebufferTextureLayer(FramebufferID framebufferPacked, GLenum attachment,          \
                                      TextureID texturePacked, GLint level, GLint layer);          \
    void namedRenderbufferStorage(RenderbufferID renderbufferPacked, GLenum internalformat,        \
                                  GLsizei width, GLsizei height);                                  \
    void namedRenderbufferStorageMultisample(RenderbufferID renderbufferPacked, GLsizei samples,   \
                                             GLenum internalformat, GLsizei width,                 \
                                             GLsizei height);                                      \
    void textureBarrier();                                                                         \
    void textureBuffer(TextureID texturePacked, GLenum internalformat, BufferID bufferPacked);     \
    void textureBufferRange(TextureID texturePacked, GLenum internalformat, BufferID bufferPacked, \
                            GLintptr offset, GLsizeiptr size);                                     \
    void textureParameterIiv(TextureID texturePacked, GLenum pname, const GLint *params);          \
    void textureParameterIuiv(TextureID texturePacked, GLenum pname, const GLuint *params);        \
    void textureParameterf(TextureID texturePacked, GLenum pname, GLfloat param);                  \
    void textureParameterfv(TextureID texturePacked, GLenum pname, const GLfloat *param);          \
    void textureParameteri(TextureID texturePacked, GLenum pname, GLint param);                    \
    void textureParameteriv(TextureID texturePacked, GLenum pname, const GLint *param);            \
    void textureStorage1D(TextureID texturePacked, GLsizei levels, GLenum internalformat,          \
                          GLsizei width);                                                          \
    void textureStorage2D(TextureID texturePacked, GLsizei levels, GLenum internalformat,          \
                          GLsizei width, GLsizei height);                                          \
    void textureStorage2DMultisample(TextureID texturePacked, GLsizei samples,                     \
                                     GLenum internalformat, GLsizei width, GLsizei height,         \
                                     GLboolean fixedsamplelocations);                              \
    void textureStorage3D(TextureID texturePacked, GLsizei levels, GLenum internalformat,          \
                          GLsizei width, GLsizei height, GLsizei depth);                           \
    void textureStorage3DMultisample(TextureID texturePacked, GLsizei samples,                     \
                                     GLenum internalformat, GLsizei width, GLsizei height,         \
                                     GLsizei depth, GLboolean fixedsamplelocations);               \
    void textureSubImage1D(TextureID texturePacked, GLint level, GLint xoffset, GLsizei width,     \
                           GLenum format, GLenum type, const void *pixels);                        \
    void textureSubImage2D(TextureID texturePacked, GLint level, GLint xoffset, GLint yoffset,     \
                           GLsizei width, GLsizei height, GLenum format, GLenum type,              \
                           const void *pixels);                                                    \
    void textureSubImage3D(TextureID texturePacked, GLint level, GLint xoffset, GLint yoffset,     \
                           GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,            \
                           GLenum format, GLenum type, const void *pixels);                        \
    void transformFeedbackBufferBase(GLuint xfb, GLuint index, BufferID bufferPacked);             \
    void transformFeedbackBufferRange(GLuint xfb, GLuint index, BufferID bufferPacked,             \
                                      GLintptr offset, GLsizeiptr size);                           \
    GLboolean unmapNamedBuffer(BufferID bufferPacked);                                             \
    void vertexArrayAttribBinding(VertexArrayID vaobjPacked, GLuint attribindex,                   \
                                  GLuint bindingindex);                                            \
    void vertexArrayAttribFormat(VertexArrayID vaobjPacked, GLuint attribindex, GLint size,        \
                                 GLenum type, GLboolean normalized, GLuint relativeoffset);        \
    void vertexArrayAttribIFormat(VertexArrayID vaobjPacked, GLuint attribindex, GLint size,       \
                                  GLenum type, GLuint relativeoffset);                             \
    void vertexArrayAttribLFormat(VertexArrayID vaobjPacked, GLuint attribindex, GLint size,       \
                                  GLenum type, GLuint relativeoffset);                             \
    void vertexArrayBindingDivisor(VertexArrayID vaobjPacked, GLuint bindingindex,                 \
                                   GLuint divisor);                                                \
    void vertexArrayElementBuffer(VertexArrayID vaobjPacked, BufferID bufferPacked);               \
    void vertexArrayVertexBuffer(VertexArrayID vaobjPacked, GLuint bindingindex,                   \
                                 BufferID bufferPacked, GLintptr offset, GLsizei stride);          \
    void vertexArrayVertexBuffers(VertexArrayID vaobjPacked, GLuint first, GLsizei count,          \
                                  const BufferID *buffersPacked, const GLintptr *offsets,          \
                                  const GLsizei *strides);

#endif  // ANGLE_CONTEXT_API_4_5_AUTOGEN_H_
