// 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 <GLES2/gl2.h>
#include <GLES2/gl2ext.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,
    nullptr,  // glReadBuffer
    nullptr,  // glDrawRangeElements
    nullptr,  // glTexImage3D
    nullptr,  // glTexSubImage3D
    nullptr,  // glCopyTexSubImage3D
    nullptr,  // glCompressedTexImage3D
    nullptr,  // glCompressedTexSubImage3D
    nullptr,  // glGenQueries
    nullptr,  // glDeleteQueries
    nullptr,  // glIsQuery
    nullptr,  // glBeginQuery
    nullptr,  // glEndQuery
    nullptr,  // glGetQueryiv
    nullptr,  // glGetQueryObjectuiv
    nullptr,  // glUnmapBuffer
    nullptr,  // glGetBufferPointerv
    nullptr,  // glDrawBuffers
    nullptr,  // glUniformMatrix2x3fv
    nullptr,  // glUniformMatrix3x2fv
    nullptr,  // glUniformMatrix2x4fv
    nullptr,  // glUniformMatrix4x2fv
    nullptr,  // glUniformMatrix3x4fv
    nullptr,  // glUniformMatrix4x3fv
    nullptr,  // glBlitFramebuffer
    nullptr,  // glRenderbufferStorageMultisample
    nullptr,  // glFramebufferTextureLayer
    nullptr,  // glMapBufferRange
    nullptr,  // glFlushMappedBufferRange
    nullptr,  // glBindVertexArray
    nullptr,  // glDeleteVertexArrays
    nullptr,  // glGenVertexArrays
    nullptr,  // glIsVertexArray
    nullptr,  // glGetIntegeri_v
    nullptr,  // glBeginTransformFeedback
    nullptr,  // glEndTransformFeedback
    nullptr,  // glBindBufferRange
    nullptr,  // glBindBufferBase
    nullptr,  // glTransformFeedbackVaryings
    nullptr,  // glGetTransformFeedbackVarying
    nullptr,  // glVertexAttribIPointer
    nullptr,  // glGetVertexAttribIiv
    nullptr,  // glGetVertexAttribIuiv
    nullptr,  // glVertexAttribI4i
    nullptr,  // glVertexAttribI4ui
    nullptr,  // glVertexAttribI4iv
    nullptr,  // glVertexAttribI4uiv
    nullptr,  // glGetUniformuiv
    nullptr,  // glGetFragDataLocation
    nullptr,  // glUniform1ui
    nullptr,  // glUniform2ui
    nullptr,  // glUniform3ui
    nullptr,  // glUniform4ui
    nullptr,  // glUniform1uiv
    nullptr,  // glUniform2uiv
    nullptr,  // glUniform3uiv
    nullptr,  // glUniform4uiv
    nullptr,  // glClearBufferiv
    nullptr,  // glClearBufferuiv
    nullptr,  // glClearBufferfv
    nullptr,  // glClearBufferfi
    nullptr,  // glGetStringi
    nullptr,  // glCopyBufferSubData
    nullptr,  // glGetUniformIndices
    nullptr,  // glGetActiveUniformsiv
    nullptr,  // glGetUniformBlockIndex
    nullptr,  // glGetActiveUniformBlockiv
    nullptr,  // glGetActiveUniformBlockName
    nullptr,  // glUniformBlockBinding
    nullptr,  // glDrawArraysInstanced
    nullptr,  // glDrawElementsInstanced
    nullptr,  // glFenceSync
    nullptr,  // glIsSync
    nullptr,  // glDeleteSync
    nullptr,  // glClientWaitSync
    nullptr,  // glWaitSync
    nullptr,  // glGetInteger64v
    nullptr,  // glGetSynciv
    nullptr,  // glGetInteger64i_v
    nullptr,  // glGetBufferParameteri64v
    nullptr,  // glGenSamplers
    nullptr,  // glDeleteSamplers
    nullptr,  // glIsSampler
    nullptr,  // glBindSampler
    nullptr,  // glSamplerParameteri
    nullptr,  // glSamplerParameteriv
    nullptr,  // glSamplerParameterf
    nullptr,  // glSamplerParameterfv
    nullptr,  // glGetSamplerParameteriv
    nullptr,  // glGetSamplerParameterfv
    nullptr,  // glVertexAttribDivisor
    nullptr,  // glBindTransformFeedback
    nullptr,  // glDeleteTransformFeedbacks
    nullptr,  // glGenTransformFeedbacks
    nullptr,  // glIsTransformFeedback
    nullptr,  // glPauseTransformFeedback
    nullptr,  // glResumeTransformFeedback
    nullptr,  // glGetProgramBinary
    nullptr,  // glProgramBinary
    nullptr,  // glProgramParameteri
    nullptr,  // glInvalidateFramebuffer
    nullptr,  // glInvalidateSubFramebuffer
    nullptr,  // glTexStorage2D
    nullptr,  // glTexStorage3D
    nullptr,  // glGetInternalformativ
};

}  // namespace

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