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 15 scoped_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 37 scoped_refptr<GLImage> GLImage::CreateGLImageForGpuMemoryBuffer( 38 gfx::GpuMemoryBufferHandle buffer, gfx::Size size) { 39 TRACE_EVENT0("gpu", "GLImage::CreateGLImageForGpuMemoryBuffer"); 40 switch (GetGLImplementation()) { 41 case kGLImplementationOSMesaGL: 42 case kGLImplementationDesktopGL: 43 case kGLImplementationEGLGLES2: 44 switch (buffer.type) { 45 case SHARED_MEMORY_BUFFER: { 46 scoped_refptr<GLImageShm> image(new GLImageShm(size)); 47 if (!image->Initialize(buffer)) 48 return NULL; 49 50 return image; 51 } 52 default: 53 NOTREACHED(); 54 return NULL; 55 } 56 case kGLImplementationMockGL: 57 return new GLImageStub; 58 default: 59 NOTREACHED(); 60 return NULL; 61 } 62 } 63 64 } // namespace gfx 65