Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Rauch <Rauch.Christian@gmx.de>2020-07-22 03:47:12 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-07-22 03:57:42 +0300
commit59e48d8fe4b72b0d6717820c185ae91b5ae7ab39 (patch)
treeea8c176daa5db0c315389da36a7bed7f3d393e4d
parentcfa788cf9a8ef08f11beb04bd4ea7e87b2a9bf6e (diff)
Wayland: draw opaque background when OpenGL alpha is enabled
-rw-r--r--intern/ghost/intern/GHOST_WindowWayland.cpp21
-rw-r--r--intern/ghost/intern/GHOST_WindowWayland.h4
2 files changed, 25 insertions, 0 deletions
diff --git a/intern/ghost/intern/GHOST_WindowWayland.cpp b/intern/ghost/intern/GHOST_WindowWayland.cpp
index ef02db7abc3..fe65162d168 100644
--- a/intern/ghost/intern/GHOST_WindowWayland.cpp
+++ b/intern/ghost/intern/GHOST_WindowWayland.cpp
@@ -180,6 +180,10 @@ GHOST_WindowWayland::GHOST_WindowWayland(GHOST_SystemWayland *system,
wl_surface_commit(w->surface);
wl_display_roundtrip(m_system->display());
+#ifdef GHOST_OPENGL_ALPHA
+ setOpaque();
+#endif
+
setState(state);
setTitle(title);
@@ -214,6 +218,10 @@ GHOST_TSuccess GHOST_WindowWayland::deactivate()
GHOST_TSuccess GHOST_WindowWayland::notify_size()
{
+#ifdef GHOST_OPENGL_ALPHA
+ setOpaque();
+#endif
+
return m_system->pushEvent(
new GHOST_Event(m_system->getMilliSeconds(), GHOST_kEventWindowSize, this));
}
@@ -385,6 +393,19 @@ bool GHOST_WindowWayland::isDialog() const
return w->is_dialog;
}
+#ifdef GHOST_OPENGL_ALPHA
+void GHOST_WindowWayland::setOpaque() const
+{
+ struct wl_region *region;
+
+ /* Make the window opaque. */
+ region = wl_compositor_create_region(m_system->compositor());
+ wl_region_add(region, 0, 0, w->width, w->height);
+ wl_surface_set_opaque_region(w->surface, region);
+ wl_region_destroy(region);
+}
+#endif
+
/**
* \param type The type of rendering context create.
* \return Indication of success.
diff --git a/intern/ghost/intern/GHOST_WindowWayland.h b/intern/ghost/intern/GHOST_WindowWayland.h
index 23e55fcd6e4..ff1eb60e154 100644
--- a/intern/ghost/intern/GHOST_WindowWayland.h
+++ b/intern/ghost/intern/GHOST_WindowWayland.h
@@ -109,6 +109,10 @@ class GHOST_WindowWayland : public GHOST_Window {
bool isDialog() const override;
+#ifdef GHOST_OPENGL_ALPHA
+ void setOpaque() const;
+#endif
+
private:
GHOST_SystemWayland *m_system;
struct window_t *w;