// Copyright 2016 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.

#ifndef UI_GL_GL_STUB_API_H_
#define UI_GL_GL_STUB_API_H_

#include <string>

#include "ui/gl/gl_export.h"
#include "ui/gl/gl_stub_api_base.h"

namespace gl {

class GL_EXPORT GLStubApi: public GLStubApiBase {
 public:
  GLStubApi();
  ~GLStubApi() override;

  void set_version(std::string version) { version_ = std::move(version); }

  void set_extensions(std::string extensions) {
    extensions_ = std::move(extensions);
  }

  GLenum glCheckFramebufferStatusEXTFn(GLenum target) override;
  GLuint glCreateProgramFn(void) override;
  GLuint glCreateShaderFn(GLenum type) override;
  GLsync glFenceSyncFn(GLenum condition, GLbitfield flags) override;
  void glGenBuffersARBFn(GLsizei n, GLuint* buffers) override;
  void glGenerateMipmapEXTFn(GLenum target) override;
  void glGenFencesAPPLEFn(GLsizei n, GLuint* fences) override;
  void glGenFencesNVFn(GLsizei n, GLuint* fences) override;
  void glGenFramebuffersEXTFn(GLsizei n, GLuint* framebuffers) override;
  GLuint glGenPathsNVFn(GLsizei range) override;
  void glGenQueriesFn(GLsizei n, GLuint* ids) override;
  void glGenRenderbuffersEXTFn(GLsizei n, GLuint* renderbuffers) override;
  void glGenSamplersFn(GLsizei n, GLuint* samplers) override;
  void glGenTexturesFn(GLsizei n, GLuint* textures) override;
  void glGenTransformFeedbacksFn(GLsizei n, GLuint* ids) override;
  void glGenVertexArraysOESFn(GLsizei n, GLuint* arrays) override;
  void glGetIntegervFn(GLenum pname, GLint* params) override;
  void glGetProgramivFn(GLuint program, GLenum pname, GLint* params) override;
  void glGetShaderivFn(GLuint shader, GLenum pname, GLint* params) override;
  void glGetQueryObjecti64vFn(GLuint id,
                              GLenum pname,
                              GLint64* params) override;
  void glGetQueryObjectivFn(GLuint id, GLenum pname, GLint* params) override;
  void glGetQueryObjectui64vFn(GLuint id,
                               GLenum pname,
                               GLuint64* params) override;
  void glGetQueryObjectuivFn(GLuint id, GLenum pname, GLuint* params) override;
  const GLubyte* glGetStringFn(GLenum name) override;
  const GLubyte* glGetStringiFn(GLenum name, GLuint index) override;
  GLboolean glIsBufferFn(GLuint buffer) override;
  GLboolean glIsEnabledFn(GLenum cap) override;
  GLboolean glIsFenceAPPLEFn(GLuint fence) override;
  GLboolean glIsFenceNVFn(GLuint fence) override;
  GLboolean glIsFramebufferEXTFn(GLuint framebuffer) override;
  GLboolean glIsPathNVFn(GLuint path) override;
  GLboolean glIsProgramFn(GLuint program) override;
  GLboolean glIsQueryFn(GLuint query) override;
  GLboolean glIsRenderbufferEXTFn(GLuint renderbuffer) override;
  GLboolean glIsSamplerFn(GLuint sampler) override;
  GLboolean glIsShaderFn(GLuint shader) override;
  GLboolean glIsSyncFn(GLsync sync) override;
  GLboolean glIsTextureFn(GLuint texture) override;
  GLboolean glIsTransformFeedbackFn(GLuint id) override;
  GLboolean glIsVertexArrayOESFn(GLuint array) override;
  GLboolean glTestFenceAPPLEFn(GLuint fence) override;
  GLboolean glTestFenceNVFn(GLuint fence) override;
  GLboolean glUnmapBufferFn(GLenum target) override;

 private:
  std::string version_;
  std::string extensions_;

  DISALLOW_COPY_AND_ASSIGN(GLStubApi);
};

}  // namespace gl

#endif  // UI_GL_GL_STUB_API_H_
