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 #include "ui/gl/gl_context_cgl.h" | 5 #include "ui/gl/gl_context_cgl.h" |
6 | 6 |
7 #include <OpenGL/CGLRenderers.h> | 7 #include <OpenGL/CGLRenderers.h> |
8 #include <OpenGL/CGLTypes.h> | 8 #include <OpenGL/CGLTypes.h> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 break; | 171 break; |
172 } | 172 } |
173 } | 173 } |
174 renderer_id_ = renderer_id; | 174 renderer_id_ = renderer_id; |
175 } | 175 } |
176 } | 176 } |
177 | 177 |
178 if (IsCurrent(surface)) | 178 if (IsCurrent(surface)) |
179 return true; | 179 return true; |
180 | 180 |
| 181 ScopedReleaseCurrent release_current; |
181 TRACE_EVENT0("gpu", "GLContextCGL::MakeCurrent"); | 182 TRACE_EVENT0("gpu", "GLContextCGL::MakeCurrent"); |
182 | 183 |
183 if (CGLSetCurrentContext( | 184 if (CGLSetCurrentContext( |
184 static_cast<CGLContextObj>(context_)) != kCGLNoError) { | 185 static_cast<CGLContextObj>(context_)) != kCGLNoError) { |
185 LOG(ERROR) << "Unable to make gl context current."; | 186 LOG(ERROR) << "Unable to make gl context current."; |
186 return false; | 187 return false; |
187 } | 188 } |
188 | 189 |
189 // Set this as soon as the context is current, since we might call into GL. | 190 // Set this as soon as the context is current, since we might call into GL. |
190 SetRealGLApi(); | 191 SetRealGLApi(); |
191 | 192 |
192 SetCurrent(surface); | 193 SetCurrent(surface); |
193 if (!InitializeDynamicBindings()) { | 194 if (!InitializeDynamicBindings()) { |
194 ReleaseCurrent(surface); | |
195 return false; | 195 return false; |
196 } | 196 } |
197 | 197 |
198 if (!surface->OnMakeCurrent(this)) { | 198 if (!surface->OnMakeCurrent(this)) { |
199 LOG(ERROR) << "Unable to make gl context current."; | 199 LOG(ERROR) << "Unable to make gl context current."; |
200 return false; | 200 return false; |
201 } | 201 } |
202 | 202 |
| 203 release_current.Cancel(); |
203 return true; | 204 return true; |
204 } | 205 } |
205 | 206 |
206 void GLContextCGL::ReleaseCurrent(GLSurface* surface) { | 207 void GLContextCGL::ReleaseCurrent(GLSurface* surface) { |
207 if (!IsCurrent(surface)) | 208 if (!IsCurrent(surface)) |
208 return; | 209 return; |
209 | 210 |
210 SetCurrent(NULL); | 211 SetCurrent(NULL); |
211 CGLSetCurrentContext(NULL); | 212 CGLSetCurrentContext(NULL); |
212 } | 213 } |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 | 296 |
296 GLContextCGL::~GLContextCGL() { | 297 GLContextCGL::~GLContextCGL() { |
297 Destroy(); | 298 Destroy(); |
298 } | 299 } |
299 | 300 |
300 GpuPreference GLContextCGL::GetGpuPreference() { | 301 GpuPreference GLContextCGL::GetGpuPreference() { |
301 return gpu_preference_; | 302 return gpu_preference_; |
302 } | 303 } |
303 | 304 |
304 } // namespace gfx | 305 } // namespace gfx |
OLD | NEW |