15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/common/gpu/gpu_memory_buffer_factory.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/logging.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/gl/gl_image.h" 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/gl/gl_image_shared_memory.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/gl/gl_image_surface_texture.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace content { 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace { 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class GpuMemoryBufferFactoryImpl : public GpuMemoryBufferFactory { 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public: 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Overridden from GpuMemoryBufferFactory: 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual gfx::GpuMemoryBufferHandle CreateGpuMemoryBuffer( 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::GpuMemoryBufferHandle& handle, 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::Size& size, 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) unsigned internalformat, 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) unsigned usage) OVERRIDE { 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NOTREACHED(); 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return gfx::GpuMemoryBufferHandle(); 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void DestroyGpuMemoryBuffer( 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::GpuMemoryBufferHandle& handle) OVERRIDE { 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NOTREACHED(); 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual scoped_refptr<gfx::GLImage> CreateImageForGpuMemoryBuffer( 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::GpuMemoryBufferHandle& handle, 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::Size& size, 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) unsigned internalformat, 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int client_id) OVERRIDE { 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) switch (handle.type) { 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case gfx::SHARED_MEMORY_BUFFER: { 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<gfx::GLImageSharedMemory> image( 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new gfx::GLImageSharedMemory(size, internalformat)); 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!image->Initialize(handle)) 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return image; 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case gfx::SURFACE_TEXTURE_BUFFER: { 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<gfx::GLImageSurfaceTexture> image( 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new gfx::GLImageSurfaceTexture(size)); 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!image->Initialize(handle)) 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return image; 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) default: 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NOTREACHED(); 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return scoped_refptr<gfx::GLImage>(); 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// static 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)scoped_ptr<GpuMemoryBufferFactory> GpuMemoryBufferFactory::Create() { 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return make_scoped_ptr<GpuMemoryBufferFactory>( 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new GpuMemoryBufferFactoryImpl); 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace content 68