71defa27b6a68f8a9177331f3034f526cd8332a4
[platform/framework/web/crosswalk.git] / src / content / common / gpu / gpu_memory_buffer_factory_mac.cc
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_io_surface.h"
10 #include "ui/gl/gl_image_shared_memory.h"
11
12 namespace content {
13 namespace {
14
15 class GpuMemoryBufferFactoryImpl : public GpuMemoryBufferFactory {
16  public:
17   // Overridden from GpuMemoryBufferFactory:
18   virtual gfx::GpuMemoryBufferHandle CreateGpuMemoryBuffer(
19       const gfx::GpuMemoryBufferHandle& handle,
20       const gfx::Size& size,
21       unsigned internalformat,
22       unsigned usage) OVERRIDE {
23     NOTREACHED();
24     return gfx::GpuMemoryBufferHandle();
25   }
26   virtual void DestroyGpuMemoryBuffer(
27       const gfx::GpuMemoryBufferHandle& handle) OVERRIDE {
28     NOTREACHED();
29   }
30   virtual scoped_refptr<gfx::GLImage> CreateImageForGpuMemoryBuffer(
31       const gfx::GpuMemoryBufferHandle& handle,
32       const gfx::Size& size,
33       unsigned internalformat,
34       int client_id) OVERRIDE {
35     switch (handle.type) {
36       case gfx::SHARED_MEMORY_BUFFER: {
37         scoped_refptr<gfx::GLImageSharedMemory> image(
38             new gfx::GLImageSharedMemory(size, internalformat));
39         if (!image->Initialize(handle))
40           return NULL;
41
42         return image;
43       }
44       case gfx::IO_SURFACE_BUFFER: {
45         scoped_refptr<gfx::GLImageIOSurface> image(
46             new gfx::GLImageIOSurface(size));
47         if (!image->Initialize(handle))
48           return NULL;
49
50         return image;
51       }
52       default:
53         NOTREACHED();
54         return scoped_refptr<gfx::GLImage>();
55     }
56   }
57 };
58
59 }  // namespace
60
61 // static
62 scoped_ptr<GpuMemoryBufferFactory> GpuMemoryBufferFactory::Create() {
63   return make_scoped_ptr<GpuMemoryBufferFactory>(
64       new GpuMemoryBufferFactoryImpl);
65 }
66
67 }  // namespace content