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
21namespace gfx {
22
23class GLShareGroup;
24
25scoped_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