OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef UI_GL_GL_CONTEXT_H_ | 5 #ifndef UI_GL_GL_CONTEXT_H_ |
6 #define UI_GL_GL_CONTEXT_H_ | 6 #define UI_GL_GL_CONTEXT_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
| 12 #include "base/cancelable_callback.h" |
12 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
13 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
14 #include "base/synchronization/cancellation_flag.h" | 15 #include "base/synchronization/cancellation_flag.h" |
15 #include "ui/gl/gl_share_group.h" | 16 #include "ui/gl/gl_share_group.h" |
16 #include "ui/gl/gl_state_restorer.h" | 17 #include "ui/gl/gl_state_restorer.h" |
17 #include "ui/gl/gpu_preference.h" | 18 #include "ui/gl/gpu_preference.h" |
18 | 19 |
| 20 namespace gpu { |
| 21 class GLContextVirtual; |
| 22 } // namespace gpu |
| 23 |
19 namespace gfx { | 24 namespace gfx { |
20 | 25 |
21 class GLSurface; | 26 class GLSurface; |
22 class GPUTiming; | 27 class GPUTiming; |
23 class GPUTimingClient; | 28 class GPUTimingClient; |
24 class VirtualGLApi; | 29 class VirtualGLApi; |
25 struct GLVersionInfo; | 30 struct GLVersionInfo; |
26 | 31 |
27 | 32 |
28 // Encapsulates an OpenGL context, hiding platform specific management. | 33 // Encapsulates an OpenGL context, hiding platform specific management. |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 // Notify this context that |virtual_context|, that was using us, is | 128 // Notify this context that |virtual_context|, that was using us, is |
124 // being released or destroyed. | 129 // being released or destroyed. |
125 void OnReleaseVirtuallyCurrent(GLContext* virtual_context); | 130 void OnReleaseVirtuallyCurrent(GLContext* virtual_context); |
126 | 131 |
127 // Returns the GL version string. The context must be current. | 132 // Returns the GL version string. The context must be current. |
128 virtual std::string GetGLVersion(); | 133 virtual std::string GetGLVersion(); |
129 | 134 |
130 // Returns the GL renderer string. The context must be current. | 135 // Returns the GL renderer string. The context must be current. |
131 virtual std::string GetGLRenderer(); | 136 virtual std::string GetGLRenderer(); |
132 | 137 |
| 138 // Return a callback that, when called, indicates that the state the |
| 139 // underlying context has been changed by code outside of the command buffer, |
| 140 // and will need to be restored. |
| 141 virtual base::Closure GetStateWasDirtiedExternallyCallback(); |
| 142 |
| 143 // Restore the context's state if it was dirtied by an external caller. |
| 144 virtual void RestoreStateIfDirtiedExternally(); |
| 145 |
133 protected: | 146 protected: |
134 virtual ~GLContext(); | 147 virtual ~GLContext(); |
135 | 148 |
136 // Will release the current context when going out of scope, unless canceled. | 149 // Will release the current context when going out of scope, unless canceled. |
137 class ScopedReleaseCurrent { | 150 class ScopedReleaseCurrent { |
138 public: | 151 public: |
139 ScopedReleaseCurrent(); | 152 ScopedReleaseCurrent(); |
140 ~ScopedReleaseCurrent(); | 153 ~ScopedReleaseCurrent(); |
141 | 154 |
142 void Cancel(); | 155 void Cancel(); |
143 | 156 |
144 private: | 157 private: |
145 bool canceled_; | 158 bool canceled_; |
146 }; | 159 }; |
147 | 160 |
148 // Sets the GL api to the real hardware API (vs the VirtualAPI) | 161 // Sets the GL api to the real hardware API (vs the VirtualAPI) |
149 static void SetRealGLApi(); | 162 static void SetRealGLApi(); |
150 virtual void SetCurrent(GLSurface* surface); | 163 virtual void SetCurrent(GLSurface* surface); |
151 | 164 |
152 // Initialize function pointers to functions where the bound version depends | 165 // Initialize function pointers to functions where the bound version depends |
153 // on GL version or supported extensions. Should be called immediately after | 166 // on GL version or supported extensions. Should be called immediately after |
154 // this context is made current. | 167 // this context is made current. |
155 bool InitializeDynamicBindings(); | 168 bool InitializeDynamicBindings(); |
156 | 169 |
157 // Returns the last real (non-virtual) GLContext made current. | 170 // Returns the last real (non-virtual) GLContext made current. |
158 static GLContext* GetRealCurrent(); | 171 static GLContext* GetRealCurrent(); |
159 | 172 |
160 virtual void OnSetSwapInterval(int interval) = 0; | 173 virtual void OnSetSwapInterval(int interval) = 0; |
161 | 174 |
| 175 bool GetStateWasDirtiedExternally() const; |
| 176 void SetStateWasDirtiedExternally(bool dirtied_externally); |
| 177 |
162 private: | 178 private: |
163 friend class base::RefCounted<GLContext>; | 179 friend class base::RefCounted<GLContext>; |
164 | 180 |
165 // For GetRealCurrent. | 181 // For GetRealCurrent. |
166 friend class VirtualGLApi; | 182 friend class VirtualGLApi; |
| 183 friend class gpu::GLContextVirtual; |
167 | 184 |
168 scoped_refptr<GLShareGroup> share_group_; | 185 scoped_refptr<GLShareGroup> share_group_; |
169 scoped_ptr<VirtualGLApi> virtual_gl_api_; | 186 scoped_ptr<VirtualGLApi> virtual_gl_api_; |
| 187 bool state_dirtied_externally_; |
170 scoped_ptr<GLStateRestorer> state_restorer_; | 188 scoped_ptr<GLStateRestorer> state_restorer_; |
171 scoped_ptr<GLVersionInfo> version_info_; | 189 scoped_ptr<GLVersionInfo> version_info_; |
172 | 190 |
173 int swap_interval_; | 191 int swap_interval_; |
174 bool force_swap_interval_zero_; | 192 bool force_swap_interval_zero_; |
175 | 193 |
| 194 base::CancelableCallback<void()> state_dirtied_callback_; |
| 195 |
176 DISALLOW_COPY_AND_ASSIGN(GLContext); | 196 DISALLOW_COPY_AND_ASSIGN(GLContext); |
177 }; | 197 }; |
178 | 198 |
179 class GL_EXPORT GLContextReal : public GLContext { | 199 class GL_EXPORT GLContextReal : public GLContext { |
180 public: | 200 public: |
181 explicit GLContextReal(GLShareGroup* share_group); | 201 explicit GLContextReal(GLShareGroup* share_group); |
182 scoped_refptr<gfx::GPUTimingClient> CreateGPUTimingClient() override; | 202 scoped_refptr<gfx::GPUTimingClient> CreateGPUTimingClient() override; |
183 | 203 |
184 protected: | 204 protected: |
185 ~GLContextReal() override; | 205 ~GLContextReal() override; |
186 | 206 |
187 void SetCurrent(GLSurface* surface) override; | 207 void SetCurrent(GLSurface* surface) override; |
188 | 208 |
189 private: | 209 private: |
190 scoped_ptr<gfx::GPUTiming> gpu_timing_; | 210 scoped_ptr<gfx::GPUTiming> gpu_timing_; |
191 DISALLOW_COPY_AND_ASSIGN(GLContextReal); | 211 DISALLOW_COPY_AND_ASSIGN(GLContextReal); |
192 }; | 212 }; |
193 | 213 |
194 } // namespace gfx | 214 } // namespace gfx |
195 | 215 |
196 #endif // UI_GL_GL_CONTEXT_H_ | 216 #endif // UI_GL_GL_CONTEXT_H_ |
OLD | NEW |