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

void SbGlShaderSource(SbGlUInt32 shader,
                      SbGlSizei count,
                      const SbGlChar* const* string,  // NOLINT
                      const SbGlInt32* length) {
  // Begone, const!
  glShaderSource(shader, count, const_cast<const GLchar**>(string), length);
}

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,
    &SbGlShaderSource,
    &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;
}
