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 <memory> | 8 #include <memory> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 10 matching lines...) Expand all Loading... |
21 namespace gl { | 21 namespace gl { |
22 class YUVToRGBConverter; | 22 class YUVToRGBConverter; |
23 } // namespace gl | 23 } // namespace gl |
24 | 24 |
25 namespace gpu { | 25 namespace gpu { |
26 class GLContextVirtual; | 26 class GLContextVirtual; |
27 } // namespace gpu | 27 } // namespace gpu |
28 | 28 |
29 namespace gl { | 29 namespace gl { |
30 | 30 |
| 31 struct CurrentGL; |
| 32 class DebugGLApi; |
| 33 struct DriverGL; |
| 34 class GLApi; |
31 class GLSurface; | 35 class GLSurface; |
32 class GPUTiming; | 36 class GPUTiming; |
33 class GPUTimingClient; | 37 class GPUTimingClient; |
34 struct GLVersionInfo; | 38 struct GLVersionInfo; |
| 39 class RealGLApi; |
| 40 class TraceGLApi; |
35 | 41 |
36 struct GLContextAttribs { | 42 struct GLContextAttribs { |
37 GpuPreference gpu_preference = PreferIntegratedGpu; | 43 GpuPreference gpu_preference = PreferIntegratedGpu; |
38 bool bind_generates_resource = true; | 44 bool bind_generates_resource = true; |
39 bool webgl_compatibility_context = false; | 45 bool webgl_compatibility_context = false; |
40 }; | 46 }; |
41 | 47 |
42 // Encapsulates an OpenGL context, hiding platform specific management. | 48 // Encapsulates an OpenGL context, hiding platform specific management. |
43 class GL_EXPORT GLContext : public base::RefCounted<GLContext> { | 49 class GL_EXPORT GLContext : public base::RefCounted<GLContext> { |
44 public: | 50 public: |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 | 136 |
131 // Returns the GL version string. The context must be current. | 137 // Returns the GL version string. The context must be current. |
132 virtual std::string GetGLVersion(); | 138 virtual std::string GetGLVersion(); |
133 | 139 |
134 // Returns the GL renderer string. The context must be current. | 140 // Returns the GL renderer string. The context must be current. |
135 virtual std::string GetGLRenderer(); | 141 virtual std::string GetGLRenderer(); |
136 | 142 |
137 // Returns a helper structure to convert YUV textures to RGB textures. | 143 // Returns a helper structure to convert YUV textures to RGB textures. |
138 virtual YUVToRGBConverter* GetYUVToRGBConverter(); | 144 virtual YUVToRGBConverter* GetYUVToRGBConverter(); |
139 | 145 |
| 146 // Get the CurrentGL object for this context containing the driver, version |
| 147 // and API. |
| 148 CurrentGL* GetCurrentGL(); |
| 149 |
140 protected: | 150 protected: |
141 virtual ~GLContext(); | 151 virtual ~GLContext(); |
142 | 152 |
| 153 // Create the GLApi for this context using the provided driver. Creates a |
| 154 // RealGLApi by default. |
| 155 virtual GLApi* CreateGLApi(DriverGL* driver); |
| 156 |
143 // Will release the current context when going out of scope, unless canceled. | 157 // Will release the current context when going out of scope, unless canceled. |
144 class ScopedReleaseCurrent { | 158 class ScopedReleaseCurrent { |
145 public: | 159 public: |
146 ScopedReleaseCurrent(); | 160 ScopedReleaseCurrent(); |
147 ~ScopedReleaseCurrent(); | 161 ~ScopedReleaseCurrent(); |
148 | 162 |
149 void Cancel(); | 163 void Cancel(); |
150 | 164 |
151 private: | 165 private: |
152 bool canceled_; | 166 bool canceled_; |
153 }; | 167 }; |
154 | 168 |
155 // Sets the GL api to the real hardware API (vs the VirtualAPI) | 169 // Sets the GL api to the real hardware API (vs the VirtualAPI) |
156 static void SetRealGLApi(); | 170 void BindGLApi(); |
157 virtual void SetCurrent(GLSurface* surface); | 171 virtual void SetCurrent(GLSurface* surface); |
158 | 172 |
159 // Initialize function pointers to functions where the bound version depends | 173 // Initialize function pointers to functions where the bound version depends |
160 // on GL version or supported extensions. Should be called immediately after | 174 // on GL version or supported extensions. Should be called immediately after |
161 // this context is made current. | 175 // this context is made current. |
162 void InitializeDynamicBindings(); | 176 void InitializeDynamicBindings(); |
163 | 177 |
164 // Returns the last real (non-virtual) GLContext made current. | 178 // Returns the last real (non-virtual) GLContext made current. |
165 static GLContext* GetRealCurrent(); | 179 static GLContext* GetRealCurrent(); |
166 | 180 |
167 virtual void OnSetSwapInterval(int interval) = 0; | 181 virtual void OnSetSwapInterval(int interval) = 0; |
168 | 182 |
169 private: | 183 private: |
170 friend class base::RefCounted<GLContext>; | 184 friend class base::RefCounted<GLContext>; |
171 | 185 |
172 // For GetRealCurrent. | 186 // For GetRealCurrent. |
173 friend class gpu::GLContextVirtual; | 187 friend class gpu::GLContextVirtual; |
174 | 188 |
| 189 std::unique_ptr<GLVersionInfo> GenerateGLVersionInfo(); |
| 190 |
| 191 bool static_bindings_initialized_; |
| 192 bool dynamic_bindings_initialized_; |
| 193 std::unique_ptr<DriverGL> driver_gl_; |
| 194 std::unique_ptr<GLApi> gl_api_; |
| 195 std::unique_ptr<TraceGLApi> trace_gl_api_; |
| 196 std::unique_ptr<DebugGLApi> debug_gl_api_; |
| 197 std::unique_ptr<CurrentGL> current_gl_; |
| 198 |
| 199 // Copy of the real API (if one was created) for dynamic initialization |
| 200 RealGLApi* real_gl_api_ = nullptr; |
| 201 |
175 scoped_refptr<GLShareGroup> share_group_; | 202 scoped_refptr<GLShareGroup> share_group_; |
176 GLContext* current_virtual_context_; | 203 GLContext* current_virtual_context_; |
177 bool state_dirtied_externally_; | 204 bool state_dirtied_externally_; |
178 std::unique_ptr<GLStateRestorer> state_restorer_; | 205 std::unique_ptr<GLStateRestorer> state_restorer_; |
179 std::unique_ptr<GLVersionInfo> version_info_; | 206 std::unique_ptr<GLVersionInfo> version_info_; |
180 | 207 |
181 int swap_interval_; | 208 int swap_interval_; |
182 bool force_swap_interval_zero_; | 209 bool force_swap_interval_zero_; |
183 | 210 |
184 DISALLOW_COPY_AND_ASSIGN(GLContext); | 211 DISALLOW_COPY_AND_ASSIGN(GLContext); |
(...skipping 18 matching lines...) Expand all Loading... |
203 // scoped_refptr containing the initialized GLContext or nullptr if | 230 // scoped_refptr containing the initialized GLContext or nullptr if |
204 // initialization fails. | 231 // initialization fails. |
205 GL_EXPORT scoped_refptr<GLContext> InitializeGLContext( | 232 GL_EXPORT scoped_refptr<GLContext> InitializeGLContext( |
206 scoped_refptr<GLContext> context, | 233 scoped_refptr<GLContext> context, |
207 GLSurface* compatible_surface, | 234 GLSurface* compatible_surface, |
208 const GLContextAttribs& attribs); | 235 const GLContextAttribs& attribs); |
209 | 236 |
210 } // namespace gl | 237 } // namespace gl |
211 | 238 |
212 #endif // UI_GL_GL_CONTEXT_H_ | 239 #endif // UI_GL_GL_CONTEXT_H_ |
OLD | NEW |