1// Copyright 2014 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 "content/common/gpu/gpu_memory_buffer_factory.h"
6
7#include "base/logging.h"
8#include "ui/gl/gl_image.h"
9#include "ui/gl/gl_image_shared_memory.h"
10
11namespace content {
12namespace {
13
14class GpuMemoryBufferFactoryImpl : public GpuMemoryBufferFactory {
15 public:
16  // Overridden from GpuMemoryBufferFactory:
17  virtual gfx::GpuMemoryBufferHandle CreateGpuMemoryBuffer(
18      const gfx::GpuMemoryBufferHandle& handle,
19      const gfx::Size& size,
20      unsigned internalformat,
21      unsigned usage) OVERRIDE {
22    NOTREACHED();
23    return gfx::GpuMemoryBufferHandle();
24  }
25  virtual void DestroyGpuMemoryBuffer(
26      const gfx::GpuMemoryBufferHandle& handle) OVERRIDE {
27    NOTREACHED();
28  }
29  virtual scoped_refptr<gfx::GLImage> CreateImageForGpuMemoryBuffer(
30      const gfx::GpuMemoryBufferHandle& handle,
31      const gfx::Size& size,
32      unsigned internalformat,
33      int client_id) OVERRIDE {
34    switch (handle.type) {
35      case gfx::SHARED_MEMORY_BUFFER: {
36        scoped_refptr<gfx::GLImageSharedMemory> image(
37            new gfx::GLImageSharedMemory(size, internalformat));
38        if (!image->Initialize(handle))
39          return NULL;
40
41        return image;
42      }
43      default:
44        NOTREACHED();
45        return scoped_refptr<gfx::GLImage>();
46    }
47  }
48};
49
50}  // namespace
51
52// static
53scoped_ptr<GpuMemoryBufferFactory> GpuMemoryBufferFactory::Create() {
54  return make_scoped_ptr<GpuMemoryBufferFactory>(
55      new GpuMemoryBufferFactoryImpl);
56}
57
58}  // namespace content
59