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_glx.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 CreateGLImage(gfx::PluginWindowHandle window)15scoped_refptr<GLImage> GLImage::CreateGLImage(gfx::PluginWindowHandle window) { 16 TRACE_EVENT0("gpu", "GLImage::CreateGLImage"); 17 switch (GetGLImplementation()) { 18 case kGLImplementationOSMesaGL: 19 return NULL; 20 case kGLImplementationDesktopGL: { 21 scoped_refptr<GLImageGLX> image(new GLImageGLX(window)); 22 if (!image->Initialize()) 23 return NULL; 24 25 return image; 26 } 27 case kGLImplementationEGLGLES2: 28 return NULL; 29 case kGLImplementationMockGL: 30 return new GLImageStub; 31 default: 32 NOTREACHED(); 33 return NULL; 34 } 35 } 36 CreateGLImageForGpuMemoryBuffer(gfx::GpuMemoryBufferHandle buffer,gfx::Size size,unsigned internalformat)37scoped_refptr<GLImage> GLImage::CreateGLImageForGpuMemoryBuffer( 38 gfx::GpuMemoryBufferHandle buffer, 39 gfx::Size size, 40 unsigned internalformat) { 41 TRACE_EVENT0("gpu", "GLImage::CreateGLImageForGpuMemoryBuffer"); 42 switch (GetGLImplementation()) { 43 case kGLImplementationOSMesaGL: 44 case kGLImplementationDesktopGL: 45 case kGLImplementationEGLGLES2: 46 switch (buffer.type) { 47 case SHARED_MEMORY_BUFFER: { 48 scoped_refptr<GLImageShm> image( 49 new GLImageShm(size, internalformat)); 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