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 "ui/gl/gl_context.h" 6 7 #include "base/debug/trace_event.h" 8 #include "base/logging.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "ui/gl/gl_bindings.h" 11 #include "ui/gl/gl_context_egl.h" 12 #include "ui/gl/gl_context_glx.h" 13 #include "ui/gl/gl_context_osmesa.h" 14 #include "ui/gl/gl_context_stub.h" 15 #include "ui/gl/gl_implementation.h" 16 #include "ui/gl/gl_surface_egl.h" 17 #include "ui/gl/gl_surface_glx.h" 18 #include "ui/gl/gl_surface_osmesa.h" 19 #include "ui/gl/gl_surface_stub.h" 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 kGLImplementationOSMesaGL: { 32 scoped_refptr<GLContext> context(new GLContextOSMesa(share_group)); 33 if (!context->Initialize(compatible_surface, gpu_preference)) 34 return NULL; 35 36 return context; 37 } 38 case kGLImplementationDesktopGL: { 39 scoped_refptr<GLContext> context(new GLContextGLX(share_group)); 40 if (!context->Initialize(compatible_surface, gpu_preference)) 41 return NULL; 42 43 return context; 44 } 45 case kGLImplementationEGLGLES2: { 46 scoped_refptr<GLContext> context(new GLContextEGL(share_group)); 47 if (!context->Initialize(compatible_surface, gpu_preference)) 48 return NULL; 49 50 return context; 51 } 52 case kGLImplementationMockGL: 53 return new GLContextStub; 54 default: 55 NOTREACHED(); 56 return NULL; 57 } 58 } 59 60 } // namespace gfx 61