1 // Copyright (c) 2012 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 "ui/gl/gl_image.h" 6 7 #include "base/debug/trace_event.h" 8 #include "ui/gl/gl_image_io_surface.h" 9 #include "ui/gl/gl_image_shm.h" 10 #include "ui/gl/gl_image_stub.h" 11 #include "ui/gl/gl_implementation.h" 12 13 namespace gfx { 14 15 scoped_refptr<GLImage> GLImage::CreateGLImage(gfx::PluginWindowHandle window) { 16 TRACE_EVENT0("gpu", "GLImage::CreateGLImage"); 17 switch (GetGLImplementation()) { 18 case kGLImplementationOSMesaGL: 19 case kGLImplementationDesktopGL: 20 case kGLImplementationAppleGL: 21 return NULL; 22 case kGLImplementationMockGL: 23 return new GLImageStub; 24 default: 25 NOTREACHED(); 26 return NULL; 27 } 28 } 29 30 scoped_refptr<GLImage> GLImage::CreateGLImageForGpuMemoryBuffer( 31 gfx::GpuMemoryBufferHandle buffer, 32 gfx::Size size, 33 unsigned internalformat) { 34 TRACE_EVENT0("gpu", "GLImage::CreateGLImageForGpuMemoryBuffer"); 35 switch (GetGLImplementation()) { 36 case kGLImplementationOSMesaGL: 37 case kGLImplementationDesktopGL: 38 case kGLImplementationAppleGL: 39 switch (buffer.type) { 40 case SHARED_MEMORY_BUFFER: { 41 scoped_refptr<GLImageShm> image( 42 new GLImageShm(size, internalformat)); 43 if (!image->Initialize(buffer)) 44 return NULL; 45 46 return image; 47 } 48 case IO_SURFACE_BUFFER: { 49 scoped_refptr<GLImageIOSurface> image(new GLImageIOSurface(size)); 50 if (!image->Initialize(buffer)) 51 return NULL; 52 53 return image; 54 } 55 default: 56 NOTREACHED(); 57 return NULL; 58 } 59 case kGLImplementationMockGL: 60 return new GLImageStub; 61 default: 62 NOTREACHED(); 63 return NULL; 64 } 65 } 66 67 } // namespace gfx 68