Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(157)

Unified Diff: ui/ozone/platform/wayland/wayland_surface_factory.cc

Issue 2313353003: Ozone/Wayland: Move to newer APIs and improve GPU initialization (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/ozone/platform/wayland/wayland_surface_factory.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/ozone/platform/wayland/wayland_surface_factory.cc
diff --git a/ui/ozone/platform/wayland/wayland_surface_factory.cc b/ui/ozone/platform/wayland/wayland_surface_factory.cc
index 46a3f1260cfccea89d9ba472aeeb57dbb5bc61e3..4a443bf1c702a9c7686b8f9dfe81356d3963a489 100644
--- a/ui/ozone/platform/wayland/wayland_surface_factory.cc
+++ b/ui/ozone/platform/wayland/wayland_surface_factory.cc
@@ -13,6 +13,7 @@
#include "third_party/skia/include/core/SkSurface.h"
#include "ui/gfx/vsync_provider.h"
#include "ui/ozone/common/egl_util.h"
+#include "ui/ozone/common/gl_ozone_egl.h"
#include "ui/ozone/platform/wayland/wayland_connection.h"
#include "ui/ozone/platform/wayland/wayland_object.h"
#include "ui/ozone/platform/wayland/wayland_window.h"
@@ -126,20 +127,33 @@ WaylandCanvasSurface::CreateVSyncProvider() {
return nullptr;
}
-WaylandSurfaceFactory::WaylandSurfaceFactory(WaylandConnection* connection)
- : connection_(connection) {}
+namespace {
-WaylandSurfaceFactory::~WaylandSurfaceFactory() {}
+class GLOzoneEGLWayland : public GLOzoneEGL {
+ public:
+ GLOzoneEGLWayland(WaylandConnection* connection) : connection_(connection) {}
+ ~GLOzoneEGLWayland() override {}
-scoped_refptr<gl::GLSurface> WaylandSurfaceFactory::CreateViewGLSurface(
- gl::GLImplementation implementation,
- gfx::AcceleratedWidget widget) {
- if (implementation != gl::kGLImplementationEGLGLES2) {
- NOTREACHED();
- return nullptr;
- }
+ scoped_refptr<gl::GLSurface> CreateViewGLSurface(
+ gfx::AcceleratedWidget widget) override;
+
+ scoped_refptr<gl::GLSurface> CreateOffscreenGLSurface(
+ const gfx::Size& size) override;
+
+ protected:
+ intptr_t GetNativeDisplay() override;
+ bool LoadGLES2Bindings() override;
+ private:
+ WaylandConnection* connection_;
+
+ DISALLOW_COPY_AND_ASSIGN(GLOzoneEGLWayland);
+};
+
+scoped_refptr<gl::GLSurface> GLOzoneEGLWayland::CreateViewGLSurface(
+ gfx::AcceleratedWidget widget) {
#if defined(USE_WAYLAND_EGL)
+ DCHECK(connection_);
WaylandWindow* window = connection_->GetWindow(widget);
DCHECK(window);
// The wl_egl_window needs to be created before the GLSurface so it can be
@@ -153,14 +167,8 @@ scoped_refptr<gl::GLSurface> WaylandSurfaceFactory::CreateViewGLSurface(
#endif
}
-scoped_refptr<gl::GLSurface> WaylandSurfaceFactory::CreateOffscreenGLSurface(
- gl::GLImplementation implementation,
+scoped_refptr<gl::GLSurface> GLOzoneEGLWayland::CreateOffscreenGLSurface(
const gfx::Size& size) {
- if (implementation != gl::kGLImplementationEGLGLES2) {
- NOTREACHED();
- return nullptr;
- }
-
#if defined(USE_WAYLAND_EGL)
return gl::InitializeGLSurface(new gl::PbufferGLSurfaceEGL(size));
#else
@@ -168,14 +176,12 @@ scoped_refptr<gl::GLSurface> WaylandSurfaceFactory::CreateOffscreenGLSurface(
#endif
}
-intptr_t WaylandSurfaceFactory::GetNativeDisplay() {
+intptr_t GLOzoneEGLWayland::GetNativeDisplay() {
return reinterpret_cast<intptr_t>(connection_->display());
}
-bool WaylandSurfaceFactory::LoadEGLGLES2Bindings() {
+bool GLOzoneEGLWayland::LoadGLES2Bindings() {
#if defined(USE_WAYLAND_EGL)
- if (!connection_)
- return false;
setenv("EGL_PLATFORM", "wayland", 0);
return LoadDefaultEGLGLES2Bindings();
#else
@@ -183,13 +189,42 @@ bool WaylandSurfaceFactory::LoadEGLGLES2Bindings() {
#endif
}
+} // namespace
+
+WaylandSurfaceFactory::WaylandSurfaceFactory(WaylandConnection* connection)
+ : connection_(connection) {
+ if (connection_)
+ egl_implementation_.reset(new GLOzoneEGLWayland(connection_));
+}
+
+WaylandSurfaceFactory::~WaylandSurfaceFactory() {}
+
std::unique_ptr<SurfaceOzoneCanvas>
WaylandSurfaceFactory::CreateCanvasForWidget(gfx::AcceleratedWidget widget) {
+ if (!connection_)
+ return nullptr;
WaylandWindow* window = connection_->GetWindow(widget);
DCHECK(window);
return base::MakeUnique<WaylandCanvasSurface>(connection_, window);
}
+std::vector<gl::GLImplementation>
+WaylandSurfaceFactory::GetAllowedGLImplementations() {
+ std::vector<gl::GLImplementation> impls;
+ impls.push_back(gl::kGLImplementationEGLGLES2);
+ return impls;
+}
+
+GLOzone* WaylandSurfaceFactory::GetGLOzone(
+ gl::GLImplementation implementation) {
+ switch (implementation) {
+ case gl::kGLImplementationEGLGLES2:
+ return egl_implementation_.get();
+ default:
+ return nullptr;
+ }
+}
+
scoped_refptr<NativePixmap> WaylandSurfaceFactory::CreateNativePixmap(
gfx::AcceleratedWidget widget,
gfx::Size size,
« no previous file with comments | « ui/ozone/platform/wayland/wayland_surface_factory.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698