Home | History | Annotate | Download | only in gl
      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