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_nsview.h" 12#include "ui/gl/gl_context_osmesa.h" 13#include "ui/gl/gl_context_stub.h" 14#include "ui/gl/gl_implementation.h" 15#include "ui/gl/gl_surface.h" 16#include "ui/gl/gl_switches.h" 17 18namespace gfx { 19 20class GLShareGroup; 21 22scoped_refptr<GLContext> GLContext::CreateGLContext( 23 GLShareGroup* share_group, 24 GLSurface* compatible_surface, 25 GpuPreference gpu_preference) { 26 TRACE_EVENT0("gpu", "GLContext::CreateGLContext"); 27 switch (GetGLImplementation()) { 28 case kGLImplementationDesktopGL: 29 case kGLImplementationAppleGL: { 30 scoped_refptr<GLContext> context; 31 if (compatible_surface->IsOffscreen()) 32 context = new GLContextCGL(share_group); 33 else 34 context = new GLContextNSView(share_group); 35 if (!context->Initialize(compatible_surface, gpu_preference)) 36 return NULL; 37 38 return context; 39 } 40 case kGLImplementationOSMesaGL: { 41 scoped_refptr<GLContext> context(new GLContextOSMesa(share_group)); 42 if (!context->Initialize(compatible_surface, gpu_preference)) 43 return NULL; 44 45 return context; 46 } 47 case kGLImplementationMockGL: 48 return new GLContextStub; 49 default: 50 NOTREACHED(); 51 return NULL; 52 } 53} 54 55} // namespace gfx 56