// Auto-generated with: android/scripts/gen-entries.py --mode=static_translator_namespaced_stubs stream-servers/gl/OpenGLESDispatch/gles2_stubbed_in_translator_namespace.entries --output=stream-servers/gl/OpenGLESDispatch/gles2_stubbed_in_translator_namespace.cpp
// DO NOT EDIT THIS FILE

#include <GLES2/gl2.h>
#include <GL/GLcorearb.h>
namespace translator {
namespace gles2 {
GL_APICALL void GL_APIENTRY glClearDepth(GLclampd) { return; }
GL_APICALL void GL_APIENTRY glDepthRange(GLclampd, GLclampd) { return; }
GL_APICALL void GL_APIENTRY glPushAttrib(GLbitfield) { return; }
GL_APICALL void GL_APIENTRY glPushClientAttrib(GLbitfield) { return; }
GL_APICALL void GL_APIENTRY glPopAttrib() { return; }
GL_APICALL void GL_APIENTRY glPopClientAttrib() { return; }
GL_APICALL GLboolean GL_APIENTRY glIsRenderbufferEXT(GLuint) { return (GLboolean)0; }
GL_APICALL void GL_APIENTRY glBindRenderbufferEXT(GLenum, GLuint) { return; }
GL_APICALL void GL_APIENTRY glDeleteRenderbuffersEXT(GLsizei, const GLuint *) { return; }
GL_APICALL void GL_APIENTRY glGenRenderbuffersEXT(GLsizei, GLuint *) { return; }
GL_APICALL void GL_APIENTRY glRenderbufferStorageEXT(GLenum, GLenum, GLsizei, GLsizei) { return; }
GL_APICALL void GL_APIENTRY glGetRenderbufferParameterivEXT(GLenum, GLenum, GLint *) { return; }
GL_APICALL GLboolean GL_APIENTRY glIsFramebufferEXT(GLuint) { return (GLboolean)0; }
GL_APICALL void GL_APIENTRY glBindFramebufferEXT(GLenum, GLuint) { return; }
GL_APICALL void GL_APIENTRY glDeleteFramebuffersEXT(GLsizei, const GLuint *) { return; }
GL_APICALL void GL_APIENTRY glGenFramebuffersEXT(GLsizei, GLuint *) { return; }
GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatusEXT(GLenum) { return (GLenum)0; }
GL_APICALL void GL_APIENTRY glFramebufferTexture1DEXT(GLenum, GLenum, GLenum, GLuint, GLint) { return; }
GL_APICALL void GL_APIENTRY glFramebufferTexture2DEXT(GLenum, GLenum, GLenum, GLuint, GLint) { return; }
GL_APICALL void GL_APIENTRY glFramebufferTexture3DEXT(GLenum, GLenum, GLenum, GLuint, GLint, GLint) { return; }
GL_APICALL void GL_APIENTRY glFramebufferRenderbufferEXT(GLenum, GLenum, GLenum, GLuint) { return; }
GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameterivEXT(GLenum, GLenum, GLenum, GLint *) { return; }
GL_APICALL void GL_APIENTRY glGenerateMipmapEXT(GLenum) { return; }
GL_APICALL void GL_APIENTRY glReadnPixelsEXT(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLsizei, void *) { return; }
GL_APICALL void GL_APIENTRY glGetnUniformfvEXT(GLuint, GLint, GLsizei, float *) { return; }
GL_APICALL void GL_APIENTRY glGetnUniformivEXT(GLuint, GLint, GLsizei, GLint *) { return; }
GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES(GLenum, GLenum, GLenum, GLuint, GLint, GLint) { return; }
} // namespace gles2
} // namespace translator
