15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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 "ui/gl/gl_image.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/debug/trace_event.h" 8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/gl/gl_image_android_native_buffer.h" 9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ui/gl/gl_image_shm.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_image_stub.h" 114ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#include "ui/gl/gl_image_surface_texture.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_implementation.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<GLImage> GLImage::CreateGLImage(gfx::PluginWindowHandle window) { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TRACE_EVENT0("gpu", "GLImage::CreateGLImage"); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (GetGLImplementation()) { 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case kGLImplementationEGLGLES2: 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return NULL; 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case kGLImplementationMockGL: 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return new GLImageStub; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) default: 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTREACHED(); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)scoped_refptr<GLImage> GLImage::CreateGLImageForGpuMemoryBuffer( 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) gfx::GpuMemoryBufferHandle buffer, 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) gfx::Size size, 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) unsigned internalformat) { 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TRACE_EVENT0("gpu", "GLImage::CreateGLImageForGpuMemoryBuffer"); 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) switch (GetGLImplementation()) { 35a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) case kGLImplementationEGLGLES2: 36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) switch (buffer.type) { 37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) case SHARED_MEMORY_BUFFER: { 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) scoped_refptr<GLImageShm> image( 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) new GLImageShm(size, internalformat)); 40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (!image->Initialize(buffer)) 41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return NULL; 42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return image; 44a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch case ANDROID_NATIVE_BUFFER: { 46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_refptr<GLImageAndroidNativeBuffer> image( 47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new GLImageAndroidNativeBuffer(size)); 48a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (!image->Initialize(buffer)) 49a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return NULL; 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 51a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return image; 52a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 534ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch case SURFACE_TEXTURE_BUFFER: { 544ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch scoped_refptr<GLImageSurfaceTexture> image( 554ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch new GLImageSurfaceTexture(size)); 564ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch if (!image->Initialize(buffer)) 574ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch return NULL; 584ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 594ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch return image; 604ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch } 61a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) default: 62a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) NOTREACHED(); 63a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return NULL; 64a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case kGLImplementationMockGL: 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new GLImageStub; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gfx 74