diff options
author | Christian Rauch <Rauch.Christian@gmx.de> | 2020-07-22 03:47:12 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2020-07-22 03:57:42 +0300 |
commit | 59e48d8fe4b72b0d6717820c185ae91b5ae7ab39 (patch) | |
tree | ea8c176daa5db0c315389da36a7bed7f3d393e4d /intern | |
parent | cfa788cf9a8ef08f11beb04bd4ea7e87b2a9bf6e (diff) |
Wayland: draw opaque background when OpenGL alpha is enabled
Diffstat (limited to 'intern')
-rw-r--r-- | intern/ghost/intern/GHOST_WindowWayland.cpp | 21 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_WindowWayland.h | 4 |
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; |