// 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.
//
// This file is auto-generated from
// ui/gl/generate_bindings.py
// It's formatted by clang-format using chromium coding style:
//    clang-format -i -style=chromium filename
// DO NOT EDIT!

#include "ui/gl/gl_stub_api_base.h"

namespace gl {

GLenum GLStubApiBase::glCheckFramebufferStatusEXTFn(GLenum target) {
  return 0;
}

GLenum GLStubApiBase::glClientWaitSyncFn(GLsync sync,
                                         GLbitfield flags,
                                         GLuint64 timeout) {
  return 0;
}

GLuint GLStubApiBase::glCreateProgramFn() {
  return 0;
}

GLuint GLStubApiBase::glCreateShaderFn(GLenum type) {
  return 0;
}

GLuint GLStubApiBase::glCreateShaderProgramvFn(GLenum type,
                                               GLsizei count,
                                               const char* const* strings) {
  return 0;
}

GLsync GLStubApiBase::glFenceSyncFn(GLenum condition, GLbitfield flags) {
  return 0;
}

GLuint GLStubApiBase::glGenPathsNVFn(GLsizei range) {
  return 0;
}

GLuint GLStubApiBase::glGenProgramPipelinesFn(GLsizei n, GLuint* pipelines) {
  return 0;
}

GLint GLStubApiBase::glGetAttribLocationFn(GLuint program, const char* name) {
  return 0;
}

GLuint GLStubApiBase::glGetDebugMessageLogFn(GLuint count,
                                             GLsizei bufSize,
                                             GLenum* sources,
                                             GLenum* types,
                                             GLuint* ids,
                                             GLenum* severities,
                                             GLsizei* lengths,
                                             char* messageLog) {
  return 0;
}

GLenum GLStubApiBase::glGetErrorFn() {
  return 0;
}

GLint GLStubApiBase::glGetFragDataIndexFn(GLuint program, const char* name) {
  return 0;
}

GLint GLStubApiBase::glGetFragDataLocationFn(GLuint program, const char* name) {
  return 0;
}

GLenum GLStubApiBase::glGetGraphicsResetStatusARBFn() {
  return 0;
}

GLuint GLStubApiBase::glGetProgramResourceIndexFn(GLuint program,
                                                  GLenum programInterface,
                                                  const GLchar* name) {
  return 0;
}

GLint GLStubApiBase::glGetProgramResourceLocationFn(GLuint program,
                                                    GLenum programInterface,
                                                    const char* name) {
  return 0;
}

const GLubyte* GLStubApiBase::glGetStringFn(GLenum name) {
  return 0;
}

const GLubyte* GLStubApiBase::glGetStringiFn(GLenum name, GLuint index) {
  return 0;
}

GLuint GLStubApiBase::glGetUniformBlockIndexFn(GLuint program,
                                               const char* uniformBlockName) {
  return 0;
}

GLint GLStubApiBase::glGetUniformLocationFn(GLuint program, const char* name) {
  return 0;
}

GLboolean GLStubApiBase::glIsBufferFn(GLuint buffer) {
  return 0;
}

GLboolean GLStubApiBase::glIsEnabledFn(GLenum cap) {
  return 0;
}

GLboolean GLStubApiBase::glIsFenceAPPLEFn(GLuint fence) {
  return 0;
}

GLboolean GLStubApiBase::glIsFenceNVFn(GLuint fence) {
  return 0;
}

GLboolean GLStubApiBase::glIsFramebufferEXTFn(GLuint framebuffer) {
  return 0;
}

GLboolean GLStubApiBase::glIsPathNVFn(GLuint path) {
  return 0;
}

GLboolean GLStubApiBase::glIsProgramFn(GLuint program) {
  return 0;
}

GLboolean GLStubApiBase::glIsProgramPipelineFn(GLuint pipeline) {
  return 0;
}

GLboolean GLStubApiBase::glIsQueryFn(GLuint query) {
  return 0;
}

GLboolean GLStubApiBase::glIsRenderbufferEXTFn(GLuint renderbuffer) {
  return 0;
}

GLboolean GLStubApiBase::glIsSamplerFn(GLuint sampler) {
  return 0;
}

GLboolean GLStubApiBase::glIsShaderFn(GLuint shader) {
  return 0;
}

GLboolean GLStubApiBase::glIsSyncFn(GLsync sync) {
  return 0;
}

GLboolean GLStubApiBase::glIsTextureFn(GLuint texture) {
  return 0;
}

GLboolean GLStubApiBase::glIsTransformFeedbackFn(GLuint id) {
  return 0;
}

GLboolean GLStubApiBase::glIsVertexArrayOESFn(GLuint array) {
  return 0;
}

void* GLStubApiBase::glMapBufferFn(GLenum target, GLenum access) {
  return 0;
}

void* GLStubApiBase::glMapBufferRangeFn(GLenum target,
                                        GLintptr offset,
                                        GLsizeiptr length,
                                        GLbitfield access) {
  return 0;
}

GLboolean GLStubApiBase::glTestFenceAPPLEFn(GLuint fence) {
  return 0;
}

GLboolean GLStubApiBase::glTestFenceNVFn(GLuint fence) {
  return 0;
}

GLboolean GLStubApiBase::glUnmapBufferFn(GLenum target) {
  return 0;
}

}  // namespace gl
