15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/gpu/gpu_memory_buffer_factory.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_image.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_image_shared_memory.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GpuMemoryBufferFactoryImpl : public GpuMemoryBufferFactory { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from GpuMemoryBufferFactory: 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::GpuMemoryBufferHandle CreateGpuMemoryBuffer( 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::GpuMemoryBufferHandle& handle, 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Size& size, 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned internalformat, 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned usage) OVERRIDE { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gfx::GpuMemoryBufferHandle(); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DestroyGpuMemoryBuffer( 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::GpuMemoryBufferHandle& handle) OVERRIDE { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_refptr<gfx::GLImage> CreateImageForGpuMemoryBuffer( 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::GpuMemoryBufferHandle& handle, 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Size& size, 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned internalformat, 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int client_id) OVERRIDE { 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (handle.type) { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case gfx::SHARED_MEMORY_BUFFER: { 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<gfx::GLImageSharedMemory> image( 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new gfx::GLImageSharedMemory(size, internalformat)); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!image->Initialize(handle)) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return image; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return scoped_refptr<gfx::GLImage>(); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<GpuMemoryBufferFactory> GpuMemoryBufferFactory::Create() { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return make_scoped_ptr<GpuMemoryBufferFactory>( 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new GpuMemoryBufferFactoryImpl); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)