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_image.h"
6
7#include "base/debug/trace_event.h"
8#include "ui/gl/gl_image_io_surface.h"
9#include "ui/gl/gl_image_shm.h"
10#include "ui/gl/gl_image_stub.h"
11#include "ui/gl/gl_implementation.h"
12
13namespace gfx {
14
15scoped_refptr<GLImage> GLImage::CreateGLImage(gfx::PluginWindowHandle window) {
16  TRACE_EVENT0("gpu", "GLImage::CreateGLImage");
17  switch (GetGLImplementation()) {
18    case kGLImplementationOSMesaGL:
19    case kGLImplementationDesktopGL:
20    case kGLImplementationAppleGL:
21      return NULL;
22    case kGLImplementationMockGL:
23      return new GLImageStub;
24    default:
25      NOTREACHED();
26      return NULL;
27  }
28}
29
30scoped_refptr<GLImage> GLImage::CreateGLImageForGpuMemoryBuffer(
31    gfx::GpuMemoryBufferHandle buffer,
32    gfx::Size size,
33    unsigned internalformat) {
34  TRACE_EVENT0("gpu", "GLImage::CreateGLImageForGpuMemoryBuffer");
35  switch (GetGLImplementation()) {
36    case kGLImplementationOSMesaGL:
37    case kGLImplementationDesktopGL:
38    case kGLImplementationAppleGL:
39      switch (buffer.type) {
40        case SHARED_MEMORY_BUFFER: {
41          scoped_refptr<GLImageShm> image(
42              new GLImageShm(size, internalformat));
43          if (!image->Initialize(buffer))
44            return NULL;
45
46          return image;
47        }
48        case IO_SURFACE_BUFFER: {
49          scoped_refptr<GLImageIOSurface> image(new GLImageIOSurface(size));
50          if (!image->Initialize(buffer))
51            return NULL;
52
53          return image;
54        }
55        default:
56          NOTREACHED();
57          return NULL;
58      }
59    case kGLImplementationMockGL:
60      return new GLImageStub;
61    default:
62      NOTREACHED();
63      return NULL;
64  }
65}
66
67}  // namespace gfx
68