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