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" 8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ui/gl/gl_image_shm.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_image_stub.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_implementation.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<GLImage> GLImage::CreateGLImage(gfx::PluginWindowHandle window) { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TRACE_EVENT0("gpu", "GLImage::CreateGLImage"); 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (GetGLImplementation()) { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case kGLImplementationOSMesaGL: 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case kGLImplementationDesktopGL: 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case kGLImplementationAppleGL: 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return NULL; 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case kGLImplementationMockGL: 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return new GLImageStub; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) default: 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTREACHED(); 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return NULL; 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)scoped_refptr<GLImage> GLImage::CreateGLImageForGpuMemoryBuffer( 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) gfx::GpuMemoryBufferHandle buffer, gfx::Size size) { 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TRACE_EVENT0("gpu", "GLImage::CreateGLImageForGpuMemoryBuffer"); 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) switch (GetGLImplementation()) { 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case kGLImplementationOSMesaGL: 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case kGLImplementationDesktopGL: 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case kGLImplementationAppleGL: 36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) switch (buffer.type) { 37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) case SHARED_MEMORY_BUFFER: { 38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) scoped_refptr<GLImageShm> image(new GLImageShm(size)); 39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (!image->Initialize(buffer)) 40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return NULL; 41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return image; 43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 44a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) default: 45a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) NOTREACHED(); 46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return NULL; 47a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case kGLImplementationMockGL: 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new GLImageStub; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gfx 57