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

View File

@@ -180,6 +180,10 @@ GHOST_WindowWayland::GHOST_WindowWayland(GHOST_SystemWayland *system,
wl_surface_commit(w->surface); wl_surface_commit(w->surface);
wl_display_roundtrip(m_system->display()); wl_display_roundtrip(m_system->display());
#ifdef GHOST_OPENGL_ALPHA
setOpaque();
#endif
setState(state); setState(state);
setTitle(title); setTitle(title);
@@ -214,6 +218,10 @@ GHOST_TSuccess GHOST_WindowWayland::deactivate()
GHOST_TSuccess GHOST_WindowWayland::notify_size() GHOST_TSuccess GHOST_WindowWayland::notify_size()
{ {
#ifdef GHOST_OPENGL_ALPHA
setOpaque();
#endif
return m_system->pushEvent( return m_system->pushEvent(
new GHOST_Event(m_system->getMilliSeconds(), GHOST_kEventWindowSize, this)); new GHOST_Event(m_system->getMilliSeconds(), GHOST_kEventWindowSize, this));
} }
@@ -385,6 +393,19 @@ bool GHOST_WindowWayland::isDialog() const
return w->is_dialog; 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. * \param type The type of rendering context create.
* \return Indication of success. * \return Indication of success.

View File

@@ -109,6 +109,10 @@ class GHOST_WindowWayland : public GHOST_Window {
bool isDialog() const override; bool isDialog() const override;
#ifdef GHOST_OPENGL_ALPHA
void setOpaque() const;
#endif
private: private:
GHOST_SystemWayland *m_system; GHOST_SystemWayland *m_system;
struct window_t *w; struct window_t *w;