Home | History | Annotate | Download | only in gpu
      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 #include "ui/gl/gl_image_surface_texture.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::SURFACE_TEXTURE_BUFFER: {
     45         scoped_refptr<gfx::GLImageSurfaceTexture> image(
     46             new gfx::GLImageSurfaceTexture(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
     68