// Copyright 2019 The Cobalt Authors. All Rights Reserved.
//
// 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.

#include <GLES3/gl3.h>

#include "starboard/gles.h"

namespace {

const SbGlesInterface g_sb_gles_interface = {
    &glActiveTexture,
    &glAttachShader,
    &glBindAttribLocation,
    &glBindBuffer,
    &glBindFramebuffer,
    &glBindRenderbuffer,
    &glBindTexture,
    &glBlendColor,
    &glBlendEquation,
    &glBlendEquationSeparate,
    &glBlendFunc,
    &glBlendFuncSeparate,
    &glBufferData,
    &glBufferSubData,
    &glCheckFramebufferStatus,
    &glClear,
    &glClearColor,
    &glClearDepthf,
    &glClearStencil,
    &glColorMask,
    &glCompileShader,
    &glCompressedTexImage2D,
    &glCompressedTexSubImage2D,
    &glCopyTexImage2D,
    &glCopyTexSubImage2D,
    &glCreateProgram,
    &glCreateShader,
    &glCullFace,
    &glDeleteBuffers,
    &glDeleteFramebuffers,
    &glDeleteProgram,
    &glDeleteRenderbuffers,
    &glDeleteShader,
    &glDeleteTextures,
    &glDepthFunc,
    &glDepthMask,
    &glDepthRangef,
    &glDetachShader,
    &glDisable,
    &glDisableVertexAttribArray,
    &glDrawArrays,
    &glDrawElements,
    &glEnable,
    &glEnableVertexAttribArray,
    &glFinish,
    &glFlush,
    &glFramebufferRenderbuffer,
    &glFramebufferTexture2D,
    &glFrontFace,
    &glGenBuffers,
    &glGenerateMipmap,
    &glGenFramebuffers,
    &glGenRenderbuffers,
    &glGenTextures,
    &glGetActiveAttrib,
    &glGetActiveUniform,
    &glGetAttachedShaders,
    &glGetAttribLocation,
    &glGetBooleanv,
    &glGetBufferParameteriv,
    &glGetError,
    &glGetFloatv,
    &glGetFramebufferAttachmentParameteriv,
    &glGetIntegerv,
    &glGetProgramiv,
    &glGetProgramInfoLog,
    &glGetRenderbufferParameteriv,
    &glGetShaderiv,
    &glGetShaderInfoLog,
    &glGetShaderPrecisionFormat,
    &glGetShaderSource,
    &glGetString,
    &glGetTexParameterfv,
    &glGetTexParameteriv,
    &glGetUniformfv,
    &glGetUniformiv,
    &glGetUniformLocation,
    &glGetVertexAttribfv,
    &glGetVertexAttribiv,
    &glGetVertexAttribPointerv,
    &glHint,
    &glIsBuffer,
    &glIsEnabled,
    &glIsFramebuffer,
    &glIsProgram,
    &glIsRenderbuffer,
    &glIsShader,
    &glIsTexture,
    &glLineWidth,
    &glLinkProgram,
    &glPixelStorei,
    &glPolygonOffset,
    &glReadPixels,
    &glReleaseShaderCompiler,
    &glRenderbufferStorage,
    &glSampleCoverage,
    &glScissor,
    &glShaderBinary,
    &glShaderSource,
    &glStencilFunc,
    &glStencilFuncSeparate,
    &glStencilMask,
    &glStencilMaskSeparate,
    &glStencilOp,
    &glStencilOpSeparate,
    &glTexImage2D,
    &glTexParameterf,
    &glTexParameterfv,
    &glTexParameteri,
    &glTexParameteriv,
    &glTexSubImage2D,
    &glUniform1f,
    &glUniform1fv,
    &glUniform1i,
    &glUniform1iv,
    &glUniform2f,
    &glUniform2fv,
    &glUniform2i,
    &glUniform2iv,
    &glUniform3f,
    &glUniform3fv,
    &glUniform3i,
    &glUniform3iv,
    &glUniform4f,
    &glUniform4fv,
    &glUniform4i,
    &glUniform4iv,
    &glUniformMatrix2fv,
    &glUniformMatrix3fv,
    &glUniformMatrix4fv,
    &glUseProgram,
    &glValidateProgram,
    &glVertexAttrib1f,
    &glVertexAttrib1fv,
    &glVertexAttrib2f,
    &glVertexAttrib2fv,
    &glVertexAttrib3f,
    &glVertexAttrib3fv,
    &glVertexAttrib4f,
    &glVertexAttrib4fv,
    &glVertexAttribPointer,
    &glViewport,
    &glReadBuffer,
    &glDrawRangeElements,
    &glTexImage3D,
    &glTexSubImage3D,
    &glCopyTexSubImage3D,
    &glCompressedTexImage3D,
    &glCompressedTexSubImage3D,
    &glGenQueries,
    &glDeleteQueries,
    &glIsQuery,
    &glBeginQuery,
    &glEndQuery,
    &glGetQueryiv,
    &glGetQueryObjectuiv,
    &glUnmapBuffer,
    &glGetBufferPointerv,
    &glDrawBuffers,
    &glUniformMatrix2x3fv,
    &glUniformMatrix3x2fv,
    &glUniformMatrix2x4fv,
    &glUniformMatrix4x2fv,
    &glUniformMatrix3x4fv,
    &glUniformMatrix4x3fv,
    &glBlitFramebuffer,
    &glRenderbufferStorageMultisample,
    &glFramebufferTextureLayer,
    &glMapBufferRange,
    &glFlushMappedBufferRange,
    &glBindVertexArray,
    &glDeleteVertexArrays,
    &glGenVertexArrays,
    &glIsVertexArray,
    &glGetIntegeri_v,
    &glBeginTransformFeedback,
    &glEndTransformFeedback,
    &glBindBufferRange,
    &glBindBufferBase,
    &glTransformFeedbackVaryings,
    &glGetTransformFeedbackVarying,
    &glVertexAttribIPointer,
    &glGetVertexAttribIiv,
    &glGetVertexAttribIuiv,
    &glVertexAttribI4i,
    &glVertexAttribI4ui,
    &glVertexAttribI4iv,
    &glVertexAttribI4uiv,
    &glGetUniformuiv,
    &glGetFragDataLocation,
    &glUniform1ui,
    &glUniform2ui,
    &glUniform3ui,
    &glUniform4ui,
    &glUniform1uiv,
    &glUniform2uiv,
    &glUniform3uiv,
    &glUniform4uiv,
    &glClearBufferiv,
    &glClearBufferuiv,
    &glClearBufferfv,
    &glClearBufferfi,
    &glGetStringi,
    &glCopyBufferSubData,
    &glGetUniformIndices,
    &glGetActiveUniformsiv,
    &glGetUniformBlockIndex,
    &glGetActiveUniformBlockiv,
    &glGetActiveUniformBlockName,
    &glUniformBlockBinding,
    &glDrawArraysInstanced,
    &glDrawElementsInstanced,
    &glFenceSync,
    &glIsSync,
    &glDeleteSync,
    &glClientWaitSync,
    &glWaitSync,
    &glGetInteger64v,
    &glGetSynciv,
    &glGetInteger64i_v,
    &glGetBufferParameteri64v,
    &glGenSamplers,
    &glDeleteSamplers,
    &glIsSampler,
    &glBindSampler,
    &glSamplerParameteri,
    &glSamplerParameteriv,
    &glSamplerParameterf,
    &glSamplerParameterfv,
    &glGetSamplerParameteriv,
    &glGetSamplerParameterfv,
    &glVertexAttribDivisor,
    &glBindTransformFeedback,
    &glDeleteTransformFeedbacks,
    &glGenTransformFeedbacks,
    &glIsTransformFeedback,
    &glPauseTransformFeedback,
    &glResumeTransformFeedback,
    &glGetProgramBinary,
    &glProgramBinary,
    &glProgramParameteri,
    &glInvalidateFramebuffer,
    &glInvalidateSubFramebuffer,
    &glTexStorage2D,
    &glTexStorage3D,
    &glGetInternalformativ,
};

}  // namespace

const SbGlesInterface* SbGetGlesInterface() {
  return &g_sb_gles_interface;
}
