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 13namespace gfx { 14 15scoped_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 30scoped_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