1 // Copyright (c) 2012 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.
5 #ifndef UI_GL_GL_GL_API_IMPLEMENTATION_H_
6 #define UI_GL_GL_GL_API_IMPLEMENTATION_H_
8 #include "base/compiler_specific.h"
9 #include "ui/gl/gl_bindings.h"
10 #include "ui/gl/gl_export.h"
23 void InitializeStaticGLBindingsGL();
24 void InitializeDynamicGLBindingsGL(GLContext
* context
);
25 void InitializeDebugGLBindingsGL();
26 void InitializeNullDrawGLBindingsGL();
27 // TODO(danakj): Remove this when all test suites are using null-draw.
28 bool HasInitializedNullDrawGLBindingsGL();
29 bool SetNullDrawGLBindingsEnabledGL(bool enabled
);
30 void ClearGLBindingsGL();
31 void SetGLToRealGLApi();
32 void SetGLApi(GLApi
* api
);
33 void SetGLApiToNoContext();
34 const GLVersionInfo
* GetGLVersionInfo();
36 class GLApiBase
: public GLApi
{
38 // Include the auto-generated part of this class. We split this because
39 // it means we can easily edit the non-auto generated parts right here in
40 // this file instead of having to edit some template or the code generator.
41 #include "gl_bindings_api_autogen_gl.h"
45 ~GLApiBase() override
;
46 void InitializeBase(DriverGL
* driver
);
51 // Implemenents the GL API by calling directly into the driver.
52 class RealGLApi
: public GLApiBase
{
55 ~RealGLApi() override
;
56 void Initialize(DriverGL
* driver
);
59 void glFinishFn() override
;
60 void glFlushFn() override
;
63 // Inserts a TRACE for every GL call.
64 class TraceGLApi
: public GLApi
{
66 TraceGLApi(GLApi
* gl_api
) : gl_api_(gl_api
) { }
67 ~TraceGLApi() override
;
69 // Include the auto-generated part of this class. We split this because
70 // it means we can easily edit the non-auto generated parts right here in
71 // this file instead of having to edit some template or the code generator.
72 #include "gl_bindings_api_autogen_gl.h"
78 // Catches incorrect usage when GL calls are made without a current context.
79 class NoContextGLApi
: public GLApi
{
82 ~NoContextGLApi() override
;
84 // Include the auto-generated part of this class. We split this because
85 // it means we can easily edit the non-auto generated parts right here in
86 // this file instead of having to edit some template or the code generator.
87 #include "gl_bindings_api_autogen_gl.h"
90 // Implementents the GL API using co-operative state restoring.
91 // Assumes there is only one real GL context and that multiple virtual contexts
92 // are implemented above it. Restores the needed state from the current context.
93 class VirtualGLApi
: public GLApiBase
{
96 ~VirtualGLApi() override
;
97 void Initialize(DriverGL
* driver
, GLContext
* real_context
);
99 // Sets the current virutal context.
100 bool MakeCurrent(GLContext
* virtual_context
, GLSurface
* surface
);
102 void OnReleaseVirtuallyCurrent(GLContext
* virtual_context
);
105 // Overridden functions from GLApiBase
106 const GLubyte
* glGetStringFn(GLenum name
) override
;
107 void glFinishFn() override
;
108 void glFlushFn() override
;
110 // The real context we're running on.
111 GLContext
* real_context_
;
113 // The current virtual context.
114 GLContext
* current_context_
;
116 // The supported extensions being advertised for this virtual context.
117 std::string extensions_
;
120 class GL_EXPORT ScopedSetGLToRealGLApi
{
122 ScopedSetGLToRealGLApi();
123 ~ScopedSetGLToRealGLApi();
131 #endif // UI_GL_GL_GL_API_IMPLEMENTATION_H_