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_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
59