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