Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / ui / gl / gl_gl_api_implementation.h
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.
4
5 #ifndef UI_GL_GL_GL_API_IMPLEMENTATION_H_
6 #define UI_GL_GL_GL_API_IMPLEMENTATION_H_
7
8 #include "base/compiler_specific.h"
9 #include "ui/gl/gl_bindings.h"
10 #include "ui/gl/gl_export.h"
11
12 namespace gpu {
13 namespace gles2 {
14 class GLES2Decoder;
15 }
16 }
17 namespace gfx {
18
19 class GLContext;
20 class GLSurface;
21 struct GLVersionInfo;
22
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();
35
36 class GLApiBase : public GLApi {
37  public:
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"
42
43  protected:
44   GLApiBase();
45   ~GLApiBase() override;
46   void InitializeBase(DriverGL* driver);
47   void SignalFlush();
48
49   DriverGL* driver_;
50 };
51
52 // Implemenents the GL API by calling directly into the driver.
53 class RealGLApi : public GLApiBase {
54  public:
55   RealGLApi();
56   ~RealGLApi() override;
57   void Initialize(DriverGL* driver);
58
59  private:
60   void glFinishFn() override;
61   void glFlushFn() override;
62 };
63
64 // Inserts a TRACE for every GL call.
65 class TraceGLApi : public GLApi {
66  public:
67   TraceGLApi(GLApi* gl_api) : gl_api_(gl_api) { }
68   ~TraceGLApi() override;
69
70   // Include the auto-generated part of this class. We split this because
71   // it means we can easily edit the non-auto generated parts right here in
72   // this file instead of having to edit some template or the code generator.
73   #include "gl_bindings_api_autogen_gl.h"
74
75  private:
76   GLApi* gl_api_;
77 };
78
79 // Catches incorrect usage when GL calls are made without a current context.
80 class NoContextGLApi : public GLApi {
81  public:
82   NoContextGLApi();
83   ~NoContextGLApi() override;
84
85   // Include the auto-generated part of this class. We split this because
86   // it means we can easily edit the non-auto generated parts right here in
87   // this file instead of having to edit some template or the code generator.
88   #include "gl_bindings_api_autogen_gl.h"
89 };
90
91 // Implementents the GL API using co-operative state restoring.
92 // Assumes there is only one real GL context and that multiple virtual contexts
93 // are implemented above it. Restores the needed state from the current context.
94 class VirtualGLApi : public GLApiBase {
95  public:
96   VirtualGLApi();
97   ~VirtualGLApi() override;
98   void Initialize(DriverGL* driver, GLContext* real_context);
99
100   // Sets the current virutal context.
101   bool MakeCurrent(GLContext* virtual_context, GLSurface* surface);
102
103   void OnReleaseVirtuallyCurrent(GLContext* virtual_context);
104
105 private:
106   // Overridden functions from GLApiBase
107  const GLubyte* glGetStringFn(GLenum name) override;
108  void glFinishFn() override;
109  void glFlushFn() override;
110
111   // The real context we're running on.
112   GLContext* real_context_;
113
114   // The current virtual context.
115   GLContext* current_context_;
116
117   // The supported extensions being advertised for this virtual context.
118   std::string extensions_;
119 };
120
121 class GL_EXPORT ScopedSetGLToRealGLApi {
122  public:
123   ScopedSetGLToRealGLApi();
124   ~ScopedSetGLToRealGLApi();
125
126  private:
127   GLApi* old_gl_api_;
128 };
129
130 }  // namespace gfx
131
132 #endif  // UI_GL_GL_GL_API_IMPLEMENTATION_H_