blob: dc2e20c53173a0a23725624afe9d81038d3687fe [file] [log] [blame]
James Robinson646469d2014-10-03 15:33:28 -07001// 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
James Robinson646469d2014-10-03 15:33:28 -07007#include "base/logging.h"
8#include "base/memory/scoped_ptr.h"
Benjamin Lermancdfc88d2015-02-03 14:35:12 +01009#include "base/trace_event/trace_event.h"
James Robinson646469d2014-10-03 15:33:28 -070010#include "ui/gl/gl_bindings.h"
11#include "ui/gl/gl_context_egl.h"
12#include "ui/gl/gl_context_osmesa.h"
13#include "ui/gl/gl_context_stub.h"
14#include "ui/gl/gl_context_wgl.h"
15#include "ui/gl/gl_implementation.h"
16#include "ui/gl/gl_surface_egl.h"
17#include "ui/gl/gl_surface_osmesa.h"
18#include "ui/gl/gl_surface_stub.h"
19#include "ui/gl/gl_surface_wgl.h"
20
21namespace gfx {
22
23scoped_refptr<GLContext> GLContext::CreateGLContext(
24 GLShareGroup* share_group,
25 GLSurface* compatible_surface,
26 GpuPreference gpu_preference) {
27 TRACE_EVENT0("gpu", "GLContext::CreateGLContext");
28 switch (GetGLImplementation()) {
29 case kGLImplementationOSMesaGL: {
30 scoped_refptr<GLContext> context(new GLContextOSMesa(share_group));
31 if (!context->Initialize(compatible_surface, gpu_preference))
32 return NULL;
33
34 return context;
35 }
36 case kGLImplementationEGLGLES2: {
37 scoped_refptr<GLContext> context(new GLContextEGL(share_group));
38 if (!context->Initialize(compatible_surface, gpu_preference))
39 return NULL;
40
41 return context;
42 }
43 case kGLImplementationDesktopGL: {
44 scoped_refptr<GLContext> context(new GLContextWGL(share_group));
45 if (!context->Initialize(compatible_surface, gpu_preference))
46 return NULL;
47
48 return context;
49 }
50 case kGLImplementationMockGL:
51 return new GLContextStub;
52 default:
53 NOTREACHED();
54 return NULL;
55 }
56}
57
58} // namespace gfx