/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

// *********************************
// *********************************
// AUTOGENERATED CODE.  DO NOT EDIT.
// *********************************
// *********************************

#ifndef GRAPHICS_TRANSLATION_GLES_PASS_THROUGH_H_
#define GRAPHICS_TRANSLATION_GLES_PASS_THROUGH_H_

#include <GLES/gl.h>

#include "OpenGLESDispatch/gldefs.h"


class GlesContext;
struct ANGLE_GLES2;

#define PASS_THROUGH(_context, _name, ...) \
    _name##Call(_context, ##__VA_ARGS__)


void ActiveTextureCall(const GlesContext* c, GLenum texture);
void AttachShaderCall(const GlesContext* c, GLuint program, GLuint shader);
void BindAttribLocationCall(const GlesContext* c, GLuint program, GLuint index, const char* name);
void BindBufferCall(const GlesContext* c, GLenum target, GLuint buffer);
void BindFramebufferCall(const GlesContext* c, GLenum target, GLuint framebuffer);
void BindRenderbufferCall(const GlesContext* c, GLenum target, GLuint renderbuffer);
void BindTextureCall(const GlesContext* c, GLenum target, GLuint texture);
void BlendColorCall(const GlesContext* c, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
void BlendEquationCall(const GlesContext* c, GLenum mode);
void BlendEquationSeparateCall(const GlesContext* c, GLenum modeRGB, GLenum modeAlpha);
void BlendFuncCall(const GlesContext* c, GLenum sfactor, GLenum dfactor);
void BlendFuncSeparateCall(const GlesContext* c, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
void BufferDataCall(const GlesContext* c, GLenum target, GLsizeiptr size, const void* data, GLenum usage);
void BufferSubDataCall(const GlesContext* c, GLenum target, GLintptr offset, GLsizeiptr size, const void* data);
GLenum CheckFramebufferStatusCall(const GlesContext* c, GLenum target);
void ClearCall(const GlesContext* c, GLbitfield mask);
void ClearColorCall(const GlesContext* c, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
void ClearDepthfCall(const GlesContext* c, GLclampf depth);
void ClearStencilCall(const GlesContext* c, GLint s);
void ColorMaskCall(const GlesContext* c, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
void CompileShaderCall(const GlesContext* c, GLuint shader);
void CompressedTexImage2DCall(const GlesContext* c, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data);
void CompressedTexSubImage2DCall(const GlesContext* c, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data);
void CopyTexImage2DCall(const GlesContext* c, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
void CopyTexSubImage2DCall(const GlesContext* c, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
GLuint CreateProgramCall(const GlesContext* c);
GLuint CreateShaderCall(const GlesContext* c, GLenum type);
void CullFaceCall(const GlesContext* c, GLenum mode);
void DeleteBuffersCall(const GlesContext* c, GLsizei n, const GLuint* buffers);
void DeleteFramebuffersCall(const GlesContext* c, GLsizei n, const GLuint* framebuffers);
void DeleteProgramCall(const GlesContext* c, GLuint program);
void DeleteRenderbuffersCall(const GlesContext* c, GLsizei n, const GLuint* renderbuffers);
void DeleteShaderCall(const GlesContext* c, GLuint shader);
void DeleteTexturesCall(const GlesContext* c, GLsizei n, const GLuint* textures);
void DepthFuncCall(const GlesContext* c, GLenum func);
void DepthMaskCall(const GlesContext* c, GLboolean flag);
void DepthRangefCall(const GlesContext* c, GLclampf zNear, GLclampf zFar);
void DetachShaderCall(const GlesContext* c, GLuint program, GLuint shader);
void DisableCall(const GlesContext* c, GLenum cap);
void DisableVertexAttribArrayCall(const GlesContext* c, GLuint index);
void DrawArraysCall(const GlesContext* c, GLenum mode, GLint first, GLsizei count);
void DrawElementsCall(const GlesContext* c, GLenum mode, GLsizei count, GLenum type, const void* indices);
void EGLImageTargetTexture2DOESCall(const GlesContext* c, GLenum target, GLeglImageOES image);
void EnableCall(const GlesContext* c, GLenum cap);
void EnableVertexAttribArrayCall(const GlesContext* c, GLuint index);
void FinishCall(const GlesContext* c);
void FlushCall(const GlesContext* c);
void FramebufferRenderbufferCall(const GlesContext* c, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
void FramebufferTexture2DCall(const GlesContext* c, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
void FrontFaceCall(const GlesContext* c, GLenum mode);
void GenBuffersCall(const GlesContext* c, GLsizei n, GLuint* buffers);
void GenerateMipmapCall(const GlesContext* c, GLenum target);
void GenFramebuffersCall(const GlesContext* c, GLsizei n, GLuint* framebuffers);
void GenRenderbuffersCall(const GlesContext* c, GLsizei n, GLuint* renderbuffers);
void GenTexturesCall(const GlesContext* c, GLsizei n, GLuint* textures);
void GetActiveAttribCall(const GlesContext* c, GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name);
void GetActiveUniformCall(const GlesContext* c, GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name);
void GetAttachedShadersCall(const GlesContext* c, GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
GLint GetAttribLocationCall(const GlesContext* c, GLuint program, const char* name);
void GetBooleanvCall(const GlesContext* c, GLenum pname, GLboolean* params);
void GetBufferParameterivCall(const GlesContext* c, GLenum target, GLenum pname, GLint* params);
GLenum GetErrorCall(const GlesContext* c);
void GetFloatvCall(const GlesContext* c, GLenum pname, GLfloat* params);
void GetIntegervCall(const GlesContext* c, GLenum pname, GLint* params);
void GetProgramivCall(const GlesContext* c, GLuint program, GLenum pname, GLint* params);
void GetProgramInfoLogCall(const GlesContext* c, GLuint program, GLsizei bufsize, GLsizei* length, char* infolog);
void GetRenderbufferParameterivCall(const GlesContext* c, GLenum target, GLenum pname, GLint* params);
void GetShaderivCall(const GlesContext* c, GLuint shader, GLenum pname, GLint* params);
void GetShaderInfoLogCall(const GlesContext* c, GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog);
void GetShaderPrecisionFormatCall(const GlesContext* c, GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
void GetShaderSourceCall(const GlesContext* c, GLuint shader, GLsizei bufsize, GLsizei* length, char* source);
const GLubyte* GetStringCall(const GlesContext* c, GLenum name);
void GetTexParameterfvCall(const GlesContext* c, GLenum target, GLenum pname, GLfloat* params);
void GetTexParameterivCall(const GlesContext* c, GLenum target, GLenum pname, GLint* params);
void GetUniformfvCall(const GlesContext* c, GLuint program, GLint location, GLfloat* params);
void GetUniformivCall(const GlesContext* c, GLuint program, GLint location, GLint* params);
GLint GetUniformLocationCall(const GlesContext* c, GLuint program, const char* name);
void GetVertexAttribfvCall(const GlesContext* c, GLuint index, GLenum pname, GLfloat* params);
void GetVertexAttribivCall(const GlesContext* c, GLuint index, GLenum pname, GLint* params);
void GetVertexAttribPointervCall(const GlesContext* c, GLuint index, GLenum pname, void** pointer);
void HintCall(const GlesContext* c, GLenum target, GLenum mode);
GLboolean IsBufferCall(const GlesContext* c, GLuint buffer);
GLboolean IsEnabledCall(const GlesContext* c, GLenum cap);
GLboolean IsProgramCall(const GlesContext* c, GLuint program);
GLboolean IsRenderbufferCall(const GlesContext* c, GLuint renderbuffer);
GLboolean IsShaderCall(const GlesContext* c, GLuint shader);
GLboolean IsTextureCall(const GlesContext* c, GLuint texture);
void LineWidthCall(const GlesContext* c, GLfloat width);
void LinkProgramCall(const GlesContext* c, GLuint program);
void PixelStoreiCall(const GlesContext* c, GLenum pname, GLint param);
void PolygonOffsetCall(const GlesContext* c, GLfloat factor, GLfloat units);
void ReadPixelsCall(const GlesContext* c, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels);
void ReleaseShaderCompilerCall(const GlesContext* c);
void RenderbufferStorageCall(const GlesContext* c, GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
void SampleCoverageCall(const GlesContext* c, GLclampf value, GLboolean invert);
void ScissorCall(const GlesContext* c, GLint x, GLint y, GLsizei width, GLsizei height);
void ShaderBinaryCall(const GlesContext* c, GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length);
void ShaderSourceCall(const GlesContext* c, GLuint shader, GLsizei count, const char** str, const GLint* length);
void StencilFuncCall(const GlesContext* c, GLenum func, GLint ref, GLuint mask);
void StencilFuncSeparateCall(const GlesContext* c, GLenum face, GLenum func, GLint ref, GLuint mask);
void StencilMaskCall(const GlesContext* c, GLuint mask);
void StencilMaskSeparateCall(const GlesContext* c, GLenum face, GLuint mask);
void StencilOpCall(const GlesContext* c, GLenum fail, GLenum zfail, GLenum zpass);
void StencilOpSeparateCall(const GlesContext* c, GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
void TexImage2DCall(const GlesContext* c, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels);
void TexParameterfCall(const GlesContext* c, GLenum target, GLenum pname, GLfloat param);
void TexParameterfvCall(const GlesContext* c, GLenum target, GLenum pname, const GLfloat* params);
void TexParameteriCall(const GlesContext* c, GLenum target, GLenum pname, GLint param);
void TexParameterivCall(const GlesContext* c, GLenum target, GLenum pname, const GLint* params);
void TexSubImage2DCall(const GlesContext* c, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels);
void Uniform1fCall(const GlesContext* c, GLint location, GLfloat x);
void Uniform1fvCall(const GlesContext* c, GLint location, GLsizei count, const GLfloat* v);
void Uniform1iCall(const GlesContext* c, GLint location, GLint x);
void Uniform1ivCall(const GlesContext* c, GLint location, GLsizei count, const GLint* v);
void Uniform2fCall(const GlesContext* c, GLint location, GLfloat x, GLfloat y);
void Uniform2fvCall(const GlesContext* c, GLint location, GLsizei count, const GLfloat* v);
void Uniform2iCall(const GlesContext* c, GLint location, GLint x, GLint y);
void Uniform2ivCall(const GlesContext* c, GLint location, GLsizei count, const GLint* v);
void Uniform3fCall(const GlesContext* c, GLint location, GLfloat x, GLfloat y, GLfloat z);
void Uniform3fvCall(const GlesContext* c, GLint location, GLsizei count, const GLfloat* v);
void Uniform3iCall(const GlesContext* c, GLint location, GLint x, GLint y, GLint z);
void Uniform3ivCall(const GlesContext* c, GLint location, GLsizei count, const GLint* v);
void Uniform4fCall(const GlesContext* c, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
void Uniform4fvCall(const GlesContext* c, GLint location, GLsizei count, const GLfloat* v);
void Uniform4iCall(const GlesContext* c, GLint location, GLint x, GLint y, GLint z, GLint w);
void Uniform4ivCall(const GlesContext* c, GLint location, GLsizei count, const GLint* v);
void UniformMatrix2fvCall(const GlesContext* c, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
void UniformMatrix3fvCall(const GlesContext* c, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
void UniformMatrix4fvCall(const GlesContext* c, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
void UseProgramCall(const GlesContext* c, GLuint program);
void ValidateProgramCall(const GlesContext* c, GLuint program);
void VertexAttrib1fCall(const GlesContext* c, GLuint indx, GLfloat x);
void VertexAttrib1fvCall(const GlesContext* c, GLuint indx, const GLfloat* values);
void VertexAttrib2fCall(const GlesContext* c, GLuint indx, GLfloat x, GLfloat y);
void VertexAttrib2fvCall(const GlesContext* c, GLuint indx, const GLfloat* values);
void VertexAttrib3fCall(const GlesContext* c, GLuint indx, GLfloat x, GLfloat y, GLfloat z);
void VertexAttrib3fvCall(const GlesContext* c, GLuint indx, const GLfloat* values);
void VertexAttrib4fCall(const GlesContext* c, GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
void VertexAttrib4fvCall(const GlesContext* c, GLuint indx, const GLfloat* values);
void VertexAttribPointerCall(const GlesContext* c, GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr);
void ViewportCall(const GlesContext* c, GLint x, GLint y, GLsizei width, GLsizei height);
// TODO: REPLACE FOLLOWING API CALLS WITH GLES-SPECIFIC
void* MapTexSubImage2DCHROMIUMCall (const GlesContext* c,
                                    GLenum target, GLint level,
                                    GLint xoffset, GLint yoffset,
                                    GLsizei width, GLsizei height,
                                    GLenum format, GLenum type, GLenum access);
void  UnmapTexSubImage2DCHROMIUMCall (const GlesContext* c, const void* mem);
void* MapBufferSubDataCHROMIUMCall (GLuint target, GLintptr offset,
                                    GLsizeiptr size, GLenum access);

#endif  // GRAPHICS_TRANSLATION_GLES_PASS_THROUGH_H_
