1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef UI_GL_GL_STUB_API_H_
6 #define UI_GL_GL_STUB_API_H_
7 
8 #include <string>
9 
10 #include "ui/gl/gl_export.h"
11 #include "ui/gl/gl_stub_api_base.h"
12 
13 namespace gl {
14 
15 class GL_EXPORT GLStubApi: public GLStubApiBase {
16  public:
17   GLStubApi();
18   ~GLStubApi() override;
19 
set_version(std::string version)20   void set_version(std::string version) { version_ = std::move(version); }
21 
set_extensions(std::string extensions)22   void set_extensions(std::string extensions) {
23     extensions_ = std::move(extensions);
24   }
25 
26   GLenum glCheckFramebufferStatusEXTFn(GLenum target) override;
27   GLuint glCreateProgramFn(void) override;
28   GLuint glCreateShaderFn(GLenum type) override;
29   GLsync glFenceSyncFn(GLenum condition, GLbitfield flags) override;
30   void glGenBuffersARBFn(GLsizei n, GLuint* buffers) override;
31   void glGenerateMipmapEXTFn(GLenum target) override;
32   void glGenFencesAPPLEFn(GLsizei n, GLuint* fences) override;
33   void glGenFencesNVFn(GLsizei n, GLuint* fences) override;
34   void glGenFramebuffersEXTFn(GLsizei n, GLuint* framebuffers) override;
35   GLuint glGenPathsNVFn(GLsizei range) override;
36   void glGenQueriesFn(GLsizei n, GLuint* ids) override;
37   void glGenRenderbuffersEXTFn(GLsizei n, GLuint* renderbuffers) override;
38   void glGenSamplersFn(GLsizei n, GLuint* samplers) override;
39   void glGenTexturesFn(GLsizei n, GLuint* textures) override;
40   void glGenTransformFeedbacksFn(GLsizei n, GLuint* ids) override;
41   void glGenVertexArraysOESFn(GLsizei n, GLuint* arrays) override;
42   void glGetIntegervFn(GLenum pname, GLint* params) override;
43   void glGetProgramivFn(GLuint program, GLenum pname, GLint* params) override;
44   void glGetShaderivFn(GLuint shader, GLenum pname, GLint* params) override;
45   void glGetQueryObjecti64vFn(GLuint id,
46                               GLenum pname,
47                               GLint64* params) override;
48   void glGetQueryObjectivFn(GLuint id, GLenum pname, GLint* params) override;
49   void glGetQueryObjectui64vFn(GLuint id,
50                                GLenum pname,
51                                GLuint64* params) override;
52   void glGetQueryObjectuivFn(GLuint id, GLenum pname, GLuint* params) override;
53   const GLubyte* glGetStringFn(GLenum name) override;
54   const GLubyte* glGetStringiFn(GLenum name, GLuint index) override;
55   GLboolean glIsBufferFn(GLuint buffer) override;
56   GLboolean glIsEnabledFn(GLenum cap) override;
57   GLboolean glIsFenceAPPLEFn(GLuint fence) override;
58   GLboolean glIsFenceNVFn(GLuint fence) override;
59   GLboolean glIsFramebufferEXTFn(GLuint framebuffer) override;
60   GLboolean glIsPathNVFn(GLuint path) override;
61   GLboolean glIsProgramFn(GLuint program) override;
62   GLboolean glIsQueryFn(GLuint query) override;
63   GLboolean glIsRenderbufferEXTFn(GLuint renderbuffer) override;
64   GLboolean glIsSamplerFn(GLuint sampler) override;
65   GLboolean glIsShaderFn(GLuint shader) override;
66   GLboolean glIsSyncFn(GLsync sync) override;
67   GLboolean glIsTextureFn(GLuint texture) override;
68   GLboolean glIsTransformFeedbackFn(GLuint id) override;
69   GLboolean glIsVertexArrayOESFn(GLuint array) override;
70   GLboolean glTestFenceAPPLEFn(GLuint fence) override;
71   GLboolean glTestFenceNVFn(GLuint fence) override;
72   GLboolean glUnmapBufferFn(GLenum target) override;
73 
74  private:
75   // The only consumers of GLStubApi are GpuChannelTestCommon (gpu_unittests)
76   // and GPU fuzzers. We get a new GLStubApi for every case executed by
77   // fuzzers, so we don't have to worry about ID exhaustion.
GenHelper(GLsizei count,GLuint * objects)78   void GenHelper(GLsizei count, GLuint* objects) {
79     for (GLsizei i = 0; i < count; ++i)
80       objects[i] = next_id_++;
81   }
82 
83   std::string version_;
84   std::string extensions_;
85   GLuint next_id_ = 1;
86 
87   DISALLOW_COPY_AND_ASSIGN(GLStubApi);
88 };
89 
90 }  // namespace gl
91 
92 #endif  // UI_GL_GL_STUB_API_H_
93