// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
// It's formatted by clang-format using chromium coding style:
//    clang-format -i -style=chromium filename
// DO NOT EDIT!

// This file is included by gles2_implementation.h to declare the
// GL api functions.
#ifndef GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_AUTOGEN_H_
#define GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_AUTOGEN_H_

virtual void ActiveTexture(GLenum texture) OVERRIDE;

virtual void AttachShader(GLuint program, GLuint shader) OVERRIDE;

virtual void BindAttribLocation(GLuint program,
                                GLuint index,
                                const char* name) OVERRIDE;

virtual void BindBuffer(GLenum target, GLuint buffer) OVERRIDE;

virtual void BindFramebuffer(GLenum target, GLuint framebuffer) OVERRIDE;

virtual void BindRenderbuffer(GLenum target, GLuint renderbuffer) OVERRIDE;

virtual void BindTexture(GLenum target, GLuint texture) OVERRIDE;

virtual void BlendColor(GLclampf red,
                        GLclampf green,
                        GLclampf blue,
                        GLclampf alpha) OVERRIDE;

virtual void BlendEquation(GLenum mode) OVERRIDE;

virtual void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) OVERRIDE;

virtual void BlendFunc(GLenum sfactor, GLenum dfactor) OVERRIDE;

virtual void BlendFuncSeparate(GLenum srcRGB,
                               GLenum dstRGB,
                               GLenum srcAlpha,
                               GLenum dstAlpha) OVERRIDE;

virtual void BufferData(GLenum target,
                        GLsizeiptr size,
                        const void* data,
                        GLenum usage) OVERRIDE;

virtual void BufferSubData(GLenum target,
                           GLintptr offset,
                           GLsizeiptr size,
                           const void* data) OVERRIDE;

virtual GLenum CheckFramebufferStatus(GLenum target) OVERRIDE;

virtual void Clear(GLbitfield mask) OVERRIDE;

virtual void ClearColor(GLclampf red,
                        GLclampf green,
                        GLclampf blue,
                        GLclampf alpha) OVERRIDE;

virtual void ClearDepthf(GLclampf depth) OVERRIDE;

virtual void ClearStencil(GLint s) OVERRIDE;

virtual void ColorMask(GLboolean red,
                       GLboolean green,
                       GLboolean blue,
                       GLboolean alpha) OVERRIDE;

virtual void CompileShader(GLuint shader) OVERRIDE;

virtual void CompressedTexImage2D(GLenum target,
                                  GLint level,
                                  GLenum internalformat,
                                  GLsizei width,
                                  GLsizei height,
                                  GLint border,
                                  GLsizei imageSize,
                                  const void* data) OVERRIDE;

virtual void CompressedTexSubImage2D(GLenum target,
                                     GLint level,
                                     GLint xoffset,
                                     GLint yoffset,
                                     GLsizei width,
                                     GLsizei height,
                                     GLenum format,
                                     GLsizei imageSize,
                                     const void* data) OVERRIDE;

virtual void CopyTexImage2D(GLenum target,
                            GLint level,
                            GLenum internalformat,
                            GLint x,
                            GLint y,
                            GLsizei width,
                            GLsizei height,
                            GLint border) OVERRIDE;

virtual void CopyTexSubImage2D(GLenum target,
                               GLint level,
                               GLint xoffset,
                               GLint yoffset,
                               GLint x,
                               GLint y,
                               GLsizei width,
                               GLsizei height) OVERRIDE;

virtual GLuint CreateProgram() OVERRIDE;

virtual GLuint CreateShader(GLenum type) OVERRIDE;

virtual void CullFace(GLenum mode) OVERRIDE;

virtual void DeleteBuffers(GLsizei n, const GLuint* buffers) OVERRIDE;

virtual void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers) OVERRIDE;

virtual void DeleteProgram(GLuint program) OVERRIDE;

virtual void DeleteRenderbuffers(GLsizei n,
                                 const GLuint* renderbuffers) OVERRIDE;

virtual void DeleteShader(GLuint shader) OVERRIDE;

virtual void DeleteTextures(GLsizei n, const GLuint* textures) OVERRIDE;

virtual void DepthFunc(GLenum func) OVERRIDE;

virtual void DepthMask(GLboolean flag) OVERRIDE;

virtual void DepthRangef(GLclampf zNear, GLclampf zFar) OVERRIDE;

virtual void DetachShader(GLuint program, GLuint shader) OVERRIDE;

virtual void Disable(GLenum cap) OVERRIDE;

virtual void DrawArrays(GLenum mode, GLint first, GLsizei count) OVERRIDE;

virtual void DrawElements(GLenum mode,
                          GLsizei count,
                          GLenum type,
                          const void* indices) OVERRIDE;

virtual void Enable(GLenum cap) OVERRIDE;

virtual void Finish() OVERRIDE;

virtual void Flush() OVERRIDE;

virtual void FramebufferRenderbuffer(GLenum target,
                                     GLenum attachment,
                                     GLenum renderbuffertarget,
                                     GLuint renderbuffer) OVERRIDE;

virtual void FramebufferTexture2D(GLenum target,
                                  GLenum attachment,
                                  GLenum textarget,
                                  GLuint texture,
                                  GLint level) OVERRIDE;

virtual void FrontFace(GLenum mode) OVERRIDE;

virtual void GenBuffers(GLsizei n, GLuint* buffers) OVERRIDE;

virtual void GenerateMipmap(GLenum target) OVERRIDE;

virtual void GenFramebuffers(GLsizei n, GLuint* framebuffers) OVERRIDE;

virtual void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) OVERRIDE;

virtual void GenTextures(GLsizei n, GLuint* textures) OVERRIDE;

virtual void GetActiveAttrib(GLuint program,
                             GLuint index,
                             GLsizei bufsize,
                             GLsizei* length,
                             GLint* size,
                             GLenum* type,
                             char* name) OVERRIDE;

virtual void GetActiveUniform(GLuint program,
                              GLuint index,
                              GLsizei bufsize,
                              GLsizei* length,
                              GLint* size,
                              GLenum* type,
                              char* name) OVERRIDE;

virtual void GetAttachedShaders(GLuint program,
                                GLsizei maxcount,
                                GLsizei* count,
                                GLuint* shaders) OVERRIDE;

virtual GLint GetAttribLocation(GLuint program, const char* name) OVERRIDE;

virtual void GetBooleanv(GLenum pname, GLboolean* params) OVERRIDE;

virtual void GetBufferParameteriv(GLenum target,
                                  GLenum pname,
                                  GLint* params) OVERRIDE;

virtual GLenum GetError() OVERRIDE;

virtual void GetFloatv(GLenum pname, GLfloat* params) OVERRIDE;

virtual void GetFramebufferAttachmentParameteriv(GLenum target,
                                                 GLenum attachment,
                                                 GLenum pname,
                                                 GLint* params) OVERRIDE;

virtual void GetIntegerv(GLenum pname, GLint* params) OVERRIDE;

virtual void GetProgramiv(GLuint program, GLenum pname, GLint* params) OVERRIDE;

virtual void GetProgramInfoLog(GLuint program,
                               GLsizei bufsize,
                               GLsizei* length,
                               char* infolog) OVERRIDE;

virtual void GetRenderbufferParameteriv(GLenum target,
                                        GLenum pname,
                                        GLint* params) OVERRIDE;

virtual void GetShaderiv(GLuint shader, GLenum pname, GLint* params) OVERRIDE;

virtual void GetShaderInfoLog(GLuint shader,
                              GLsizei bufsize,
                              GLsizei* length,
                              char* infolog) OVERRIDE;

virtual void GetShaderPrecisionFormat(GLenum shadertype,
                                      GLenum precisiontype,
                                      GLint* range,
                                      GLint* precision) OVERRIDE;

virtual void GetShaderSource(GLuint shader,
                             GLsizei bufsize,
                             GLsizei* length,
                             char* source) OVERRIDE;

virtual const GLubyte* GetString(GLenum name) OVERRIDE;

virtual void GetTexParameterfv(GLenum target,
                               GLenum pname,
                               GLfloat* params) OVERRIDE;

virtual void GetTexParameteriv(GLenum target,
                               GLenum pname,
                               GLint* params) OVERRIDE;

virtual void GetUniformfv(GLuint program,
                          GLint location,
                          GLfloat* params) OVERRIDE;

virtual void GetUniformiv(GLuint program,
                          GLint location,
                          GLint* params) OVERRIDE;

virtual GLint GetUniformLocation(GLuint program, const char* name) OVERRIDE;

virtual void GetVertexAttribPointerv(GLuint index,
                                     GLenum pname,
                                     void** pointer) OVERRIDE;

virtual void Hint(GLenum target, GLenum mode) OVERRIDE;

virtual GLboolean IsBuffer(GLuint buffer) OVERRIDE;

virtual GLboolean IsEnabled(GLenum cap) OVERRIDE;

virtual GLboolean IsFramebuffer(GLuint framebuffer) OVERRIDE;

virtual GLboolean IsProgram(GLuint program) OVERRIDE;

virtual GLboolean IsRenderbuffer(GLuint renderbuffer) OVERRIDE;

virtual GLboolean IsShader(GLuint shader) OVERRIDE;

virtual GLboolean IsTexture(GLuint texture) OVERRIDE;

virtual void LineWidth(GLfloat width) OVERRIDE;

virtual void LinkProgram(GLuint program) OVERRIDE;

virtual void PixelStorei(GLenum pname, GLint param) OVERRIDE;

virtual void PolygonOffset(GLfloat factor, GLfloat units) OVERRIDE;

virtual void ReadPixels(GLint x,
                        GLint y,
                        GLsizei width,
                        GLsizei height,
                        GLenum format,
                        GLenum type,
                        void* pixels) OVERRIDE;

virtual void ReleaseShaderCompiler() OVERRIDE;

virtual void RenderbufferStorage(GLenum target,
                                 GLenum internalformat,
                                 GLsizei width,
                                 GLsizei height) OVERRIDE;

virtual void SampleCoverage(GLclampf value, GLboolean invert) OVERRIDE;

virtual void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) OVERRIDE;

virtual void ShaderBinary(GLsizei n,
                          const GLuint* shaders,
                          GLenum binaryformat,
                          const void* binary,
                          GLsizei length) OVERRIDE;

virtual void ShaderSource(GLuint shader,
                          GLsizei count,
                          const GLchar* const* str,
                          const GLint* length) OVERRIDE;

virtual void ShallowFinishCHROMIUM() OVERRIDE;

virtual void ShallowFlushCHROMIUM() OVERRIDE;

virtual void StencilFunc(GLenum func, GLint ref, GLuint mask) OVERRIDE;

virtual void StencilFuncSeparate(GLenum face,
                                 GLenum func,
                                 GLint ref,
                                 GLuint mask) OVERRIDE;

virtual void StencilMask(GLuint mask) OVERRIDE;

virtual void StencilMaskSeparate(GLenum face, GLuint mask) OVERRIDE;

virtual void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) OVERRIDE;

virtual void StencilOpSeparate(GLenum face,
                               GLenum fail,
                               GLenum zfail,
                               GLenum zpass) OVERRIDE;

virtual void TexImage2D(GLenum target,
                        GLint level,
                        GLint internalformat,
                        GLsizei width,
                        GLsizei height,
                        GLint border,
                        GLenum format,
                        GLenum type,
                        const void* pixels) OVERRIDE;

virtual void TexParameterf(GLenum target, GLenum pname, GLfloat param) OVERRIDE;

virtual void TexParameterfv(GLenum target,
                            GLenum pname,
                            const GLfloat* params) OVERRIDE;

virtual void TexParameteri(GLenum target, GLenum pname, GLint param) OVERRIDE;

virtual void TexParameteriv(GLenum target,
                            GLenum pname,
                            const GLint* params) OVERRIDE;

virtual void TexSubImage2D(GLenum target,
                           GLint level,
                           GLint xoffset,
                           GLint yoffset,
                           GLsizei width,
                           GLsizei height,
                           GLenum format,
                           GLenum type,
                           const void* pixels) OVERRIDE;

virtual void Uniform1f(GLint location, GLfloat x) OVERRIDE;

virtual void Uniform1fv(GLint location,
                        GLsizei count,
                        const GLfloat* v) OVERRIDE;

virtual void Uniform1i(GLint location, GLint x) OVERRIDE;

virtual void Uniform1iv(GLint location, GLsizei count, const GLint* v) OVERRIDE;

virtual void Uniform2f(GLint location, GLfloat x, GLfloat y) OVERRIDE;

virtual void Uniform2fv(GLint location,
                        GLsizei count,
                        const GLfloat* v) OVERRIDE;

virtual void Uniform2i(GLint location, GLint x, GLint y) OVERRIDE;

virtual void Uniform2iv(GLint location, GLsizei count, const GLint* v) OVERRIDE;

virtual void Uniform3f(GLint location,
                       GLfloat x,
                       GLfloat y,
                       GLfloat z) OVERRIDE;

virtual void Uniform3fv(GLint location,
                        GLsizei count,
                        const GLfloat* v) OVERRIDE;

virtual void Uniform3i(GLint location, GLint x, GLint y, GLint z) OVERRIDE;

virtual void Uniform3iv(GLint location, GLsizei count, const GLint* v) OVERRIDE;

virtual void Uniform4f(GLint location,
                       GLfloat x,
                       GLfloat y,
                       GLfloat z,
                       GLfloat w) OVERRIDE;

virtual void Uniform4fv(GLint location,
                        GLsizei count,
                        const GLfloat* v) OVERRIDE;

virtual void Uniform4i(GLint location,
                       GLint x,
                       GLint y,
                       GLint z,
                       GLint w) OVERRIDE;

virtual void Uniform4iv(GLint location, GLsizei count, const GLint* v) OVERRIDE;

virtual void UniformMatrix2fv(GLint location,
                              GLsizei count,
                              GLboolean transpose,
                              const GLfloat* value) OVERRIDE;

virtual void UniformMatrix3fv(GLint location,
                              GLsizei count,
                              GLboolean transpose,
                              const GLfloat* value) OVERRIDE;

virtual void UniformMatrix4fv(GLint location,
                              GLsizei count,
                              GLboolean transpose,
                              const GLfloat* value) OVERRIDE;

virtual void UseProgram(GLuint program) OVERRIDE;

virtual void ValidateProgram(GLuint program) OVERRIDE;

virtual void VertexAttrib1f(GLuint indx, GLfloat x) OVERRIDE;

virtual void VertexAttrib1fv(GLuint indx, const GLfloat* values) OVERRIDE;

virtual void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) OVERRIDE;

virtual void VertexAttrib2fv(GLuint indx, const GLfloat* values) OVERRIDE;

virtual void VertexAttrib3f(GLuint indx,
                            GLfloat x,
                            GLfloat y,
                            GLfloat z) OVERRIDE;

virtual void VertexAttrib3fv(GLuint indx, const GLfloat* values) OVERRIDE;

virtual void VertexAttrib4f(GLuint indx,
                            GLfloat x,
                            GLfloat y,
                            GLfloat z,
                            GLfloat w) OVERRIDE;

virtual void VertexAttrib4fv(GLuint indx, const GLfloat* values) OVERRIDE;

virtual void VertexAttribPointer(GLuint indx,
                                 GLint size,
                                 GLenum type,
                                 GLboolean normalized,
                                 GLsizei stride,
                                 const void* ptr) OVERRIDE;

virtual void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) OVERRIDE;

virtual void BlitFramebufferCHROMIUM(GLint srcX0,
                                     GLint srcY0,
                                     GLint srcX1,
                                     GLint srcY1,
                                     GLint dstX0,
                                     GLint dstY0,
                                     GLint dstX1,
                                     GLint dstY1,
                                     GLbitfield mask,
                                     GLenum filter) OVERRIDE;

virtual void RenderbufferStorageMultisampleCHROMIUM(GLenum target,
                                                    GLsizei samples,
                                                    GLenum internalformat,
                                                    GLsizei width,
                                                    GLsizei height) OVERRIDE;

virtual void RenderbufferStorageMultisampleEXT(GLenum target,
                                               GLsizei samples,
                                               GLenum internalformat,
                                               GLsizei width,
                                               GLsizei height) OVERRIDE;

virtual void FramebufferTexture2DMultisampleEXT(GLenum target,
                                                GLenum attachment,
                                                GLenum textarget,
                                                GLuint texture,
                                                GLint level,
                                                GLsizei samples) OVERRIDE;

virtual void TexStorage2DEXT(GLenum target,
                             GLsizei levels,
                             GLenum internalFormat,
                             GLsizei width,
                             GLsizei height) OVERRIDE;

virtual void GenQueriesEXT(GLsizei n, GLuint* queries) OVERRIDE;

virtual void DeleteQueriesEXT(GLsizei n, const GLuint* queries) OVERRIDE;

virtual GLboolean IsQueryEXT(GLuint id) OVERRIDE;

virtual void BeginQueryEXT(GLenum target, GLuint id) OVERRIDE;

virtual void EndQueryEXT(GLenum target) OVERRIDE;

virtual void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) OVERRIDE;

virtual void GetQueryObjectuivEXT(GLuint id,
                                  GLenum pname,
                                  GLuint* params) OVERRIDE;

virtual void InsertEventMarkerEXT(GLsizei length,
                                  const GLchar* marker) OVERRIDE;

virtual void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) OVERRIDE;

virtual void PopGroupMarkerEXT() OVERRIDE;

virtual void GenVertexArraysOES(GLsizei n, GLuint* arrays) OVERRIDE;

virtual void DeleteVertexArraysOES(GLsizei n, const GLuint* arrays) OVERRIDE;

virtual GLboolean IsVertexArrayOES(GLuint array) OVERRIDE;

virtual void BindVertexArrayOES(GLuint array) OVERRIDE;

virtual void SwapBuffers() OVERRIDE;

virtual GLuint GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
                                           GLsizei count,
                                           GLenum type,
                                           GLuint offset) OVERRIDE;

virtual GLboolean EnableFeatureCHROMIUM(const char* feature) OVERRIDE;

virtual void* MapBufferCHROMIUM(GLuint target, GLenum access) OVERRIDE;

virtual GLboolean UnmapBufferCHROMIUM(GLuint target) OVERRIDE;

virtual void* MapImageCHROMIUM(GLuint image_id) OVERRIDE;

virtual void UnmapImageCHROMIUM(GLuint image_id) OVERRIDE;

virtual void* MapBufferSubDataCHROMIUM(GLuint target,
                                       GLintptr offset,
                                       GLsizeiptr size,
                                       GLenum access) OVERRIDE;

virtual void UnmapBufferSubDataCHROMIUM(const void* mem) OVERRIDE;

virtual void* MapTexSubImage2DCHROMIUM(GLenum target,
                                       GLint level,
                                       GLint xoffset,
                                       GLint yoffset,
                                       GLsizei width,
                                       GLsizei height,
                                       GLenum format,
                                       GLenum type,
                                       GLenum access) OVERRIDE;

virtual void UnmapTexSubImage2DCHROMIUM(const void* mem) OVERRIDE;

virtual void ResizeCHROMIUM(GLuint width,
                            GLuint height,
                            GLfloat scale_factor) OVERRIDE;

virtual const GLchar* GetRequestableExtensionsCHROMIUM() OVERRIDE;

virtual void RequestExtensionCHROMIUM(const char* extension) OVERRIDE;

virtual void RateLimitOffscreenContextCHROMIUM() OVERRIDE;

virtual void GetMultipleIntegervCHROMIUM(const GLenum* pnames,
                                         GLuint count,
                                         GLint* results,
                                         GLsizeiptr size) OVERRIDE;

virtual void GetProgramInfoCHROMIUM(GLuint program,
                                    GLsizei bufsize,
                                    GLsizei* size,
                                    void* info) OVERRIDE;

virtual GLuint CreateStreamTextureCHROMIUM(GLuint texture) OVERRIDE;

virtual GLuint CreateImageCHROMIUM(GLsizei width,
                                   GLsizei height,
                                   GLenum internalformat,
                                   GLenum usage) OVERRIDE;

virtual void DestroyImageCHROMIUM(GLuint image_id) OVERRIDE;

virtual void GetImageParameterivCHROMIUM(GLuint image_id,
                                         GLenum pname,
                                         GLint* params) OVERRIDE;

virtual GLuint CreateGpuMemoryBufferImageCHROMIUM(GLsizei width,
                                                  GLsizei height,
                                                  GLenum internalformat,
                                                  GLenum usage) OVERRIDE;

virtual void GetTranslatedShaderSourceANGLE(GLuint shader,
                                            GLsizei bufsize,
                                            GLsizei* length,
                                            char* source) OVERRIDE;

virtual void PostSubBufferCHROMIUM(GLint x,
                                   GLint y,
                                   GLint width,
                                   GLint height) OVERRIDE;

virtual void TexImageIOSurface2DCHROMIUM(GLenum target,
                                         GLsizei width,
                                         GLsizei height,
                                         GLuint ioSurfaceId,
                                         GLuint plane) OVERRIDE;

virtual void CopyTextureCHROMIUM(GLenum target,
                                 GLenum source_id,
                                 GLenum dest_id,
                                 GLint level,
                                 GLint internalformat,
                                 GLenum dest_type) OVERRIDE;

virtual void DrawArraysInstancedANGLE(GLenum mode,
                                      GLint first,
                                      GLsizei count,
                                      GLsizei primcount) OVERRIDE;

virtual void DrawElementsInstancedANGLE(GLenum mode,
                                        GLsizei count,
                                        GLenum type,
                                        const void* indices,
                                        GLsizei primcount) OVERRIDE;

virtual void VertexAttribDivisorANGLE(GLuint index, GLuint divisor) OVERRIDE;

virtual void GenMailboxCHROMIUM(GLbyte* mailbox) OVERRIDE;

virtual void ProduceTextureCHROMIUM(GLenum target,
                                    const GLbyte* mailbox) OVERRIDE;

virtual void ProduceTextureDirectCHROMIUM(GLuint texture,
                                          GLenum target,
                                          const GLbyte* mailbox) OVERRIDE;

virtual void ConsumeTextureCHROMIUM(GLenum target,
                                    const GLbyte* mailbox) OVERRIDE;

virtual GLuint CreateAndConsumeTextureCHROMIUM(GLenum target,
                                               const GLbyte* mailbox) OVERRIDE;

virtual void BindUniformLocationCHROMIUM(GLuint program,
                                         GLint location,
                                         const char* name) OVERRIDE;

virtual void BindTexImage2DCHROMIUM(GLenum target, GLint imageId) OVERRIDE;

virtual void ReleaseTexImage2DCHROMIUM(GLenum target, GLint imageId) OVERRIDE;

virtual void TraceBeginCHROMIUM(const char* name) OVERRIDE;

virtual void TraceEndCHROMIUM() OVERRIDE;

virtual void AsyncTexSubImage2DCHROMIUM(GLenum target,
                                        GLint level,
                                        GLint xoffset,
                                        GLint yoffset,
                                        GLsizei width,
                                        GLsizei height,
                                        GLenum format,
                                        GLenum type,
                                        const void* data) OVERRIDE;

virtual void AsyncTexImage2DCHROMIUM(GLenum target,
                                     GLint level,
                                     GLenum internalformat,
                                     GLsizei width,
                                     GLsizei height,
                                     GLint border,
                                     GLenum format,
                                     GLenum type,
                                     const void* pixels) OVERRIDE;

virtual void WaitAsyncTexImage2DCHROMIUM(GLenum target) OVERRIDE;

virtual void WaitAllAsyncTexImage2DCHROMIUM() OVERRIDE;

virtual void DiscardFramebufferEXT(GLenum target,
                                   GLsizei count,
                                   const GLenum* attachments) OVERRIDE;

virtual void LoseContextCHROMIUM(GLenum current, GLenum other) OVERRIDE;

virtual GLuint InsertSyncPointCHROMIUM() OVERRIDE;

virtual void WaitSyncPointCHROMIUM(GLuint sync_point) OVERRIDE;

virtual void DrawBuffersEXT(GLsizei count, const GLenum* bufs) OVERRIDE;

virtual void DiscardBackbufferCHROMIUM() OVERRIDE;

virtual void ScheduleOverlayPlaneCHROMIUM(GLint plane_z_order,
                                          GLenum plane_transform,
                                          GLuint overlay_texture_id,
                                          GLint bounds_x,
                                          GLint bounds_y,
                                          GLint bounds_width,
                                          GLint bounds_height,
                                          GLfloat uv_x,
                                          GLfloat uv_y,
                                          GLfloat uv_width,
                                          GLfloat uv_height) OVERRIDE;

virtual void MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat* m) OVERRIDE;

virtual void MatrixLoadIdentityCHROMIUM(GLenum matrixMode) OVERRIDE;

#endif  // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_AUTOGEN_H_
