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 "ui/gl/gl_context_cgl.h" 10#include "ui/gl/gl_context_osmesa.h" 11#include "ui/gl/gl_context_stub.h" 12#include "ui/gl/gl_implementation.h" 13#include "ui/gl/gl_surface.h" 14#include "ui/gl/gl_switches.h" 15 16namespace gfx { 17 18class GLShareGroup; 19 20scoped_refptr<GLContext> GLContext::CreateGLContext( 21 GLShareGroup* share_group, 22 GLSurface* compatible_surface, 23 GpuPreference gpu_preference) { 24 TRACE_EVENT0("gpu", "GLContext::CreateGLContext"); 25 switch (GetGLImplementation()) { 26 case kGLImplementationDesktopGL: 27 case kGLImplementationAppleGL: { 28 scoped_refptr<GLContext> context; 29 // Note that with virtualization we might still be able to make current 30 // a different onscreen surface with this context later. But we should 31 // always be creating the context with an offscreen surface first. 32 DCHECK(compatible_surface->IsOffscreen()); 33 context = new GLContextCGL(share_group); 34 if (!context->Initialize(compatible_surface, gpu_preference)) 35 return NULL; 36 37 return context; 38 } 39 case kGLImplementationOSMesaGL: { 40 scoped_refptr<GLContext> context(new GLContextOSMesa(share_group)); 41 if (!context->Initialize(compatible_surface, gpu_preference)) 42 return NULL; 43 44 return context; 45 } 46 case kGLImplementationMockGL: 47 return new GLContextStub; 48 default: 49 NOTREACHED(); 50 return NULL; 51 } 52} 53 54} // namespace gfx 55