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 #include "base/basictypes.h" 6 #include "base/debug/trace_event.h" 7 #include "base/logging.h" 8 #include "base/memory/scoped_ptr.h" 9 #include "third_party/mesa/src/include/GL/osmesa.h" 10 #include "ui/gl/gl_context_cgl.h" 11 #include "ui/gl/gl_context_osmesa.h" 12 #include "ui/gl/gl_context_stub.h" 13 #include "ui/gl/gl_implementation.h" 14 #include "ui/gl/gl_surface.h" 15 #include "ui/gl/gl_switches.h" 16 17 #if defined(USE_AURA) 18 #include "ui/gl/gl_context_nsview.h" 19 #endif 20 21 namespace gfx { 22 23 class GLShareGroup; 24 25 scoped_refptr<GLContext> GLContext::CreateGLContext( 26 GLShareGroup* share_group, 27 GLSurface* compatible_surface, 28 GpuPreference gpu_preference) { 29 TRACE_EVENT0("gpu", "GLContext::CreateGLContext"); 30 switch (GetGLImplementation()) { 31 case kGLImplementationDesktopGL: 32 case kGLImplementationAppleGL: { 33 scoped_refptr<GLContext> context; 34 #if defined(USE_AURA) 35 if (compatible_surface->IsOffscreen()) 36 context = new GLContextCGL(share_group); 37 else 38 context = new GLContextNSView(share_group); 39 #else 40 context = new GLContextCGL(share_group); 41 #endif // USE_AURA 42 if (!context->Initialize(compatible_surface, gpu_preference)) 43 return NULL; 44 45 return context; 46 } 47 case kGLImplementationOSMesaGL: { 48 scoped_refptr<GLContext> context(new GLContextOSMesa(share_group)); 49 if (!context->Initialize(compatible_surface, gpu_preference)) 50 return NULL; 51 52 return context; 53 } 54 case kGLImplementationMockGL: 55 return new GLContextStub; 56 default: 57 NOTREACHED(); 58 return NULL; 59 } 60 } 61 62 } // namespace gfx 63