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

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

GLuint GLStubApiBase::glGenPathsNVFn(GLsizei range) {
  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;
}

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::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
