summaryrefslogtreecommitdiffstats
path: root/src/hardwareintegration/compositor/wayland-egl
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@qt.io>2018-01-30 10:37:24 +0100
committerPaul Olav Tvete <paul.tvete@qt.io>2018-01-31 10:29:53 +0100
commit6c1499b227324e29cece5651fa00c812d9e01709 (patch)
treedb9ce6e6bc8c605bd54514954b91b73834249b6f /src/hardwareintegration/compositor/wayland-egl
parent7a9d0f9d0a852c727aef5a54ceeb51b7b2dda85d (diff)
parent06230d22488796d92ea130e985d1e0ee2ed05199 (diff)
Merge remote-tracking branch 'qt/5.10' into dev
Diffstat (limited to 'src/hardwareintegration/compositor/wayland-egl')
-rw-r--r--src/hardwareintegration/compositor/wayland-egl/wayland-egl.pri2
-rw-r--r--src/hardwareintegration/compositor/wayland-egl/waylandeglclientbufferintegration.cpp29
-rw-r--r--src/hardwareintegration/compositor/wayland-egl/waylandeglclientbufferintegration.h3
3 files changed, 32 insertions, 2 deletions
diff --git a/src/hardwareintegration/compositor/wayland-egl/wayland-egl.pri b/src/hardwareintegration/compositor/wayland-egl/wayland-egl.pri
index df3aead3e..e20c6802c 100644
--- a/src/hardwareintegration/compositor/wayland-egl/wayland-egl.pri
+++ b/src/hardwareintegration/compositor/wayland-egl/wayland-egl.pri
@@ -1,6 +1,6 @@
INCLUDEPATH += $$PWD
-QMAKE_USE_PRIVATE += wayland-server wayland-egl
+QMAKE_USE_PRIVATE += egl wayland-server wayland-egl
QT += egl_support-private
diff --git a/src/hardwareintegration/compositor/wayland-egl/waylandeglclientbufferintegration.cpp b/src/hardwareintegration/compositor/wayland-egl/waylandeglclientbufferintegration.cpp
index f39a7ce71..fdaddb6ab 100644
--- a/src/hardwareintegration/compositor/wayland-egl/waylandeglclientbufferintegration.cpp
+++ b/src/hardwareintegration/compositor/wayland-egl/waylandeglclientbufferintegration.cpp
@@ -198,10 +198,14 @@ public:
QEGLStreamConvenience *funcs;
static WaylandEglClientBufferIntegrationPrivate *get(WaylandEglClientBufferIntegration *integration) {
- return integration->d_ptr.data();
+ return shuttingDown ? nullptr : integration->d_ptr.data();
}
+
+ static bool shuttingDown;
};
+bool WaylandEglClientBufferIntegrationPrivate::shuttingDown = false;
+
BufferState::BufferState()
: egl_format(EGL_TEXTURE_RGBA)
, egl_stream(EGL_NO_STREAM_KHR)
@@ -395,6 +399,11 @@ WaylandEglClientBufferIntegration::WaylandEglClientBufferIntegration()
{
}
+WaylandEglClientBufferIntegration::~WaylandEglClientBufferIntegration()
+{
+ WaylandEglClientBufferIntegrationPrivate::shuttingDown = true;
+}
+
void WaylandEglClientBufferIntegration::initializeHardware(struct wl_display *display)
{
Q_D(WaylandEglClientBufferIntegration);
@@ -480,6 +489,24 @@ WaylandEglClientBuffer::WaylandEglClientBuffer(WaylandEglClientBufferIntegration
}
}
+
+WaylandEglClientBuffer::~WaylandEglClientBuffer()
+{
+ auto *p = WaylandEglClientBufferIntegrationPrivate::get(m_integration);
+
+ if (p) {
+ for (auto image : d->egl_images)
+ p->egl_destroy_image(p->egl_display, image);
+
+ if (d->egl_stream)
+ p->funcs->destroy_stream(p->egl_display, d->egl_stream);
+
+ for (auto *texture : d->textures)
+ delete texture;
+ }
+ delete d;
+}
+
static QWaylandBufferRef::BufferFormatEgl formatFromEglFormat(EGLint format) {
switch (format) {
case EGL_TEXTURE_RGB:
diff --git a/src/hardwareintegration/compositor/wayland-egl/waylandeglclientbufferintegration.h b/src/hardwareintegration/compositor/wayland-egl/waylandeglclientbufferintegration.h
index 5217039d8..60ce814de 100644
--- a/src/hardwareintegration/compositor/wayland-egl/waylandeglclientbufferintegration.h
+++ b/src/hardwareintegration/compositor/wayland-egl/waylandeglclientbufferintegration.h
@@ -53,6 +53,7 @@ class WaylandEglClientBufferIntegration : public QtWayland::ClientBufferIntegrat
Q_DECLARE_PRIVATE(WaylandEglClientBufferIntegration)
public:
WaylandEglClientBufferIntegration();
+ ~WaylandEglClientBufferIntegration();
void initializeHardware(struct ::wl_display *display) override;
@@ -68,6 +69,8 @@ struct BufferState;
class WaylandEglClientBuffer : public QtWayland::ClientBuffer
{
public:
+ ~WaylandEglClientBuffer();
+
QWaylandBufferRef::BufferFormatEgl bufferFormatEgl() const override;
QSize size() const override;
QWaylandSurface::Origin origin() const override;