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_surface.h" 6 7 #include "base/debug/trace_event.h" 8 #include "base/logging.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "third_party/mesa/src/include/GL/osmesa.h" 11 #include "ui/gl/gl_bindings.h" 12 #include "ui/gl/gl_implementation.h" 13 #include "ui/gl/gl_surface_cgl.h" 14 #include "ui/gl/gl_surface_osmesa.h" 15 #include "ui/gl/gl_surface_stub.h" 16 17 #if defined(USE_AURA) 18 #include "ui/gl/gl_surface_nsview.h" 19 #endif 20 21 namespace gfx { 22 23 bool GLSurface::InitializeOneOffInternal() { 24 switch (GetGLImplementation()) { 25 case kGLImplementationDesktopGL: 26 case kGLImplementationAppleGL: 27 if (!GLSurfaceCGL::InitializeOneOff()) { 28 LOG(ERROR) << "GLSurfaceCGL::InitializeOneOff failed."; 29 return false; 30 } 31 break; 32 default: 33 break; 34 } 35 return true; 36 } 37 38 scoped_refptr<GLSurface> GLSurface::CreateViewGLSurface( 39 gfx::AcceleratedWidget window) { 40 TRACE_EVENT0("gpu", "GLSurface::CreateViewGLSurface"); 41 #if defined(USE_AURA) 42 switch (GetGLImplementation()) { 43 case kGLImplementationDesktopGL: 44 case kGLImplementationAppleGL: { 45 scoped_refptr<GLSurface> surface(new GLSurfaceNSView(window)); 46 if (!surface->Initialize()) 47 return NULL; 48 49 return surface; 50 } 51 case kGLImplementationMockGL: 52 return new GLSurfaceStub; 53 default: 54 NOTREACHED(); 55 return NULL; 56 } 57 #else 58 return CreateOffscreenGLSurface(gfx::Size(1, 1)); 59 #endif 60 } 61 62 scoped_refptr<GLSurface> GLSurface::CreateOffscreenGLSurface( 63 const gfx::Size& size) { 64 TRACE_EVENT0("gpu", "GLSurface::CreateOffscreenGLSurface"); 65 switch (GetGLImplementation()) { 66 case kGLImplementationOSMesaGL: { 67 scoped_refptr<GLSurface> surface(new GLSurfaceOSMesa(OSMESA_RGBA, 68 size)); 69 if (!surface->Initialize()) 70 return NULL; 71 72 return surface; 73 } 74 case kGLImplementationDesktopGL: 75 case kGLImplementationAppleGL: { 76 scoped_refptr<GLSurface> surface(new NoOpGLSurfaceCGL(size)); 77 if (!surface->Initialize()) 78 return NULL; 79 80 return surface; 81 } 82 case kGLImplementationMockGL: 83 return new GLSurfaceStub; 84 default: 85 NOTREACHED(); 86 return NULL; 87 } 88 } 89 90 } // namespace gfx 91