Index: ui/gl/init/gl_factory_ozone.cc |
diff --git a/ui/gl/init/gl_factory_ozone.cc b/ui/gl/init/gl_factory_ozone.cc |
index 7b8589e4c81c800d0a4150e0b22136cfd399e4f4..76c465da6a7bab9d796db818917c1a3158392f2b 100644 |
--- a/ui/gl/init/gl_factory_ozone.cc |
+++ b/ui/gl/init/gl_factory_ozone.cc |
@@ -13,6 +13,13 @@ |
#include "ui/gl/gl_implementation.h" |
#include "ui/gl/gl_share_group.h" |
#include "ui/gl/gl_surface.h" |
+#include "ui/gl/gl_surface_egl.h" |
+#include "ui/gl/gl_surface_osmesa.h" |
+#include "ui/gl/gl_surface_ozone.h" |
+#include "ui/gl/gl_surface_stub.h" |
+#include "ui/ozone/public/ozone_platform.h" |
+#include "ui/ozone/public/surface_factory_ozone.h" |
+#include "ui/ozone/public/surface_ozone_egl.h" |
namespace gl { |
namespace init { |
@@ -37,5 +44,59 @@ scoped_refptr<GLContext> CreateGLContext(GLShareGroup* share_group, |
} |
} |
+scoped_refptr<GLSurface> CreateViewGLSurface(gfx::AcceleratedWidget window) { |
+ TRACE_EVENT0("gpu", "gl::init::CreateViewGLSurface"); |
+ switch (GetGLImplementation()) { |
+ case kGLImplementationOSMesaGL: |
+ return InitializeGLSurface(new GLSurfaceOSMesaHeadless()); |
+ case kGLImplementationEGLGLES2: { |
+ DCHECK_NE(window, gfx::kNullAcceleratedWidget); |
+ scoped_refptr<GLSurface> surface; |
+ if (GLSurfaceEGL::IsEGLSurfacelessContextSupported()) |
+ surface = CreateViewGLSurfaceOzoneSurfacelessSurfaceImpl(window); |
+ if (!surface) |
+ surface = CreateViewGLSurfaceOzone(window); |
+ return surface; |
+ } |
+ case kGLImplementationMockGL: |
+ return InitializeGLSurface(new GLSurfaceStub()); |
+ default: |
+ NOTREACHED(); |
+ return nullptr; |
+ } |
+} |
+ |
+scoped_refptr<GLSurface> CreateSurfacelessViewGLSurface( |
+ gfx::AcceleratedWidget window) { |
+ TRACE_EVENT0("gpu", "gl::init::CreateSurfacelessViewGLSurface"); |
+ if (GetGLImplementation() == kGLImplementationEGLGLES2 && |
+ window != gfx::kNullAcceleratedWidget && |
+ GLSurfaceEGL::IsEGLSurfacelessContextSupported()) { |
+ return CreateViewGLSurfaceOzoneSurfaceless(window); |
+ } |
+ return nullptr; |
+} |
+ |
+scoped_refptr<GLSurface> CreateOffscreenGLSurface(const gfx::Size& size) { |
+ TRACE_EVENT0("gpu", "gl::init::CreateOffscreenGLSurface"); |
+ switch (GetGLImplementation()) { |
+ case kGLImplementationOSMesaGL: |
+ return InitializeGLSurface( |
+ new GLSurfaceOSMesa(GLSurface::SURFACE_OSMESA_BGRA, size)); |
+ case kGLImplementationEGLGLES2: |
+ if (GLSurfaceEGL::IsEGLSurfacelessContextSupported() && |
+ (size.width() == 0 && size.height() == 0)) { |
+ return InitializeGLSurface(new SurfacelessEGL(size)); |
+ } else { |
+ return InitializeGLSurface(new PbufferGLSurfaceEGL(size)); |
+ } |
+ case kGLImplementationMockGL: |
+ return new GLSurfaceStub; |
+ default: |
+ NOTREACHED(); |
+ return nullptr; |
+ } |
+} |
+ |
} // namespace init |
} // namespace gl |