Wayland: draw opaque background when OpenGL alpha is enabled

This commit is contained in:
Christian Rauch 2020-07-22 10:47:12 +10:00 committed by Campbell Barton
parent cfa788cf9a
commit 59e48d8fe4
2 changed files with 25 additions and 0 deletions

@ -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.

@ -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;