// 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"

#if SB_API_VERSION >= 11

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;
}

#endif  // SB_API_VERSION >= 11
