Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / ui / gl / gl_surface_android.cc
1 // Copyright 2014 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/logging.h"
8 #include "base/memory/ref_counted.h"
9 #include "third_party/khronos/EGL/egl.h"
10 #include "ui/gfx/native_widget_types.h"
11 #include "ui/gl/gl_implementation.h"
12 #include "ui/gl/gl_surface_egl.h"
13 #include "ui/gl/gl_surface_osmesa.h"
14 #include "ui/gl/gl_surface_stub.h"
15
16 namespace gfx {
17
18 // static
19 bool GLSurface::InitializeOneOffInternal() {
20   switch (GetGLImplementation()) {
21     case kGLImplementationEGLGLES2:
22       if (!GLSurfaceEGL::InitializeOneOff()) {
23         LOG(ERROR) << "GLSurfaceEGL::InitializeOneOff failed.";
24         return false;
25       }
26     default:
27       break;
28   }
29   return true;
30 }
31
32 // static
33 scoped_refptr<GLSurface> GLSurface::CreateViewGLSurface(
34     gfx::AcceleratedWidget window) {
35   CHECK_NE(kGLImplementationNone, GetGLImplementation());
36   if (GetGLImplementation() == kGLImplementationOSMesaGL) {
37     scoped_refptr<GLSurface> surface(new GLSurfaceOSMesaHeadless());
38     if (!surface->Initialize())
39       return NULL;
40     return surface;
41   }
42   DCHECK(GetGLImplementation() == kGLImplementationEGLGLES2);
43   if (window != kNullAcceleratedWidget) {
44     scoped_refptr<GLSurface> surface = new NativeViewGLSurfaceEGL(window);
45     if (surface->Initialize())
46       return surface;
47   } else {
48     scoped_refptr<GLSurface> surface = new GLSurfaceStub();
49     if (surface->Initialize())
50       return surface;
51   }
52   return NULL;
53 }
54
55 // static
56 scoped_refptr<GLSurface> GLSurface::CreateOffscreenGLSurface(
57     const gfx::Size& size) {
58   CHECK_NE(kGLImplementationNone, GetGLImplementation());
59   switch (GetGLImplementation()) {
60     case kGLImplementationOSMesaGL: {
61       scoped_refptr<GLSurface> surface(
62           new GLSurfaceOSMesa(OSMesaSurfaceFormatBGRA, size));
63       if (!surface->Initialize())
64         return NULL;
65
66       return surface;
67     }
68     case kGLImplementationEGLGLES2: {
69       scoped_refptr<GLSurface> surface;
70       if (GLSurfaceEGL::IsEGLSurfacelessContextSupported() &&
71           (size.width() == 0 && size.height() == 0)) {
72         surface = new SurfacelessEGL(size);
73       } else {
74         surface = new PbufferGLSurfaceEGL(size);
75       }
76
77       if (!surface->Initialize())
78         return NULL;
79       return surface;
80     }
81     default:
82       NOTREACHED();
83       return NULL;
84   }
85 }
86
87 EGLNativeDisplayType GetPlatformDefaultEGLNativeDisplay() {
88   return EGL_DEFAULT_DISPLAY;
89 }
90
91 }  // namespace gfx