| 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 <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "ui/gl/gl_bindings.h" | 12 #include "ui/gl/gl_bindings.h" |
| 13 #include "ui/gl/gl_implementation.h" | 13 #include "ui/gl/gl_implementation.h" |
| 14 #include "ui/gl/gl_surface_cgl.h" | 14 #include "ui/gl/gl_surface_cgl.h" |
| 15 #include "ui/gl/gpu_switching_manager.h" |
| 15 | 16 |
| 16 namespace gfx { | 17 namespace gfx { |
| 17 | 18 |
| 18 GLContextCGL::GLContextCGL(GLShareGroup* share_group) | 19 GLContextCGL::GLContextCGL(GLShareGroup* share_group) |
| 19 : GLContext(share_group), | 20 : GLContext(share_group), |
| 20 context_(NULL), | 21 context_(NULL), |
| 21 gpu_preference_(PreferIntegratedGpu), | 22 gpu_preference_(PreferIntegratedGpu), |
| 22 discrete_pixelformat_(NULL) { | 23 discrete_pixelformat_(NULL) { |
| 23 } | 24 } |
| 24 | 25 |
| 25 bool GLContextCGL::Initialize(GLSurface* compatible_surface, | 26 bool GLContextCGL::Initialize(GLSurface* compatible_surface, |
| 26 GpuPreference gpu_preference) { | 27 GpuPreference gpu_preference) { |
| 27 DCHECK(compatible_surface); | 28 DCHECK(compatible_surface); |
| 28 | 29 |
| 30 gpu_preference = GpuSwitchingManager::GetInstance()->AdjustGpuPreference( |
| 31 gpu_preference); |
| 32 |
| 29 GLContextCGL* share_context = share_group() ? | 33 GLContextCGL* share_context = share_group() ? |
| 30 static_cast<GLContextCGL*>(share_group()->GetContext()) : NULL; | 34 static_cast<GLContextCGL*>(share_group()->GetContext()) : NULL; |
| 31 | 35 |
| 32 std::vector<CGLPixelFormatAttribute> attribs; | 36 std::vector<CGLPixelFormatAttribute> attribs; |
| 33 // If the system supports dual gpus then allow offline renderers for every | 37 // If the system supports dual gpus then allow offline renderers for every |
| 34 // context, so that they can all be in the same share group. | 38 // context, so that they can all be in the same share group. |
| 35 if (SupportsDualGpus()) | 39 if (SupportsDualGpus()) |
| 36 attribs.push_back(kCGLPFAAllowOfflineRenderers); | 40 attribs.push_back(kCGLPFAAllowOfflineRenderers); |
| 37 if (GetGLImplementation() == kGLImplementationAppleGL) { | 41 if (GetGLImplementation() == kGLImplementationAppleGL) { |
| 38 attribs.push_back(kCGLPFARendererID); | 42 attribs.push_back(kCGLPFARendererID); |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 } | 159 } |
| 156 | 160 |
| 157 GLContextCGL::~GLContextCGL() { | 161 GLContextCGL::~GLContextCGL() { |
| 158 Destroy(); | 162 Destroy(); |
| 159 } | 163 } |
| 160 | 164 |
| 161 GpuPreference GLContextCGL::GetGpuPreference() { | 165 GpuPreference GLContextCGL::GetGpuPreference() { |
| 162 return gpu_preference_; | 166 return gpu_preference_; |
| 163 } | 167 } |
| 164 | 168 |
| 165 void GLContextCGL::ForceUseOfDiscreteGPU() { | |
| 166 static CGLPixelFormatObj format = NULL; | |
| 167 if (format) | |
| 168 return; | |
| 169 CGLPixelFormatAttribute attribs[1]; | |
| 170 attribs[0] = static_cast<CGLPixelFormatAttribute>(0); | |
| 171 GLint num_pixel_formats = 0; | |
| 172 CGLChoosePixelFormat(attribs, &format, &num_pixel_formats); | |
| 173 // format is deliberately leaked. | |
| 174 } | |
| 175 | |
| 176 } // namespace gfx | 169 } // namespace gfx |
| OLD | NEW |