screencopy: don't force opaque window backgrounds

This meant that, for windows that were not fully opaque, there was no
way to capture their transparency.  No way to put a window with
transparency on top of a background in OBS, for example.
This commit is contained in:
Alyssa Ross 2024-11-30 11:49:53 +01:00 • committed by Victoria Brekenfeld
parent a14d075aa0
commit 69d251fb74

View file

@ -12,7 +12,7 @@ use smithay::{
gles::{GlesError, GlesRenderbuffer}, gles::{GlesError, GlesRenderbuffer},
sync::SyncPoint, sync::SyncPoint,
utils::with_renderer_surface_state, utils::with_renderer_surface_state,
Bind, Blit, BufferType, ExportMem, ImportAll, ImportMem, Offscreen, Renderer, Bind, Blit, BufferType, Color32F, ExportMem, ImportAll, ImportMem, Offscreen, Renderer,
}, },
}, },
desktop::space::SpaceElement, desktop::space::SpaceElement,
@ -36,7 +36,7 @@ use crate::{
backend::render::{ backend::render::{
cursor, cursor,
element::{AsGlowRenderer, CosmicElement, DamageElement, FromGlesError}, element::{AsGlowRenderer, CosmicElement, DamageElement, FromGlesError},
render_workspace, CursorMode, ElementFilter, RendererRef, CLEAR_COLOR, render_workspace, CursorMode, ElementFilter, RendererRef,
}, },
shell::{CosmicMappedRenderElement, CosmicSurface, WorkspaceRenderElement}, shell::{CosmicMappedRenderElement, CosmicSurface, WorkspaceRenderElement},
state::{Common, KmsNodes, State}, state::{Common, KmsNodes, State},
@ -573,12 +573,7 @@ pub fn render_window_to_buffer(
renderer.bind(render_buffer).map_err(DTError::Rendering)?; renderer.bind(render_buffer).map_err(DTError::Rendering)?;
} }
dt.render_output( dt.render_output(renderer, age, &elements, Color32F::TRANSPARENT)
renderer,
age,
&elements,
CLEAR_COLOR, // TODO use a theme neutral color
)
} }
let common = &mut state.common; let common = &mut state.common;