render/blur: Cache native texture type
This commit is contained in:
parent
c92b91221c
commit
f6cb4519a0
11 changed files with 74 additions and 61 deletions
|
|
@ -175,7 +175,7 @@ fn load_icon(theme: &CursorTheme, shape: CursorIcon) -> Result<Vec<Image>, Error
|
||||||
}
|
}
|
||||||
|
|
||||||
render_elements! {
|
render_elements! {
|
||||||
pub CursorRenderElement<R> where R: ImportAll + ImportMem + AsGlowRenderer;
|
pub CursorRenderElement<R> where R: ImportAll + ImportMem + AsGlowRenderer, R::TextureId: Send;
|
||||||
Static=MemoryRenderBufferRenderElement<R>,
|
Static=MemoryRenderBufferRenderElement<R>,
|
||||||
Surface=SurfaceRenderElement<R>,
|
Surface=SurfaceRenderElement<R>,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
backend::render::{GlMultiError, wayland::SurfaceRenderElement},
|
backend::{
|
||||||
|
kms::render::gles::GbmGlowBackend,
|
||||||
|
render::{GlMultiError, wayland::SurfaceRenderElement},
|
||||||
|
},
|
||||||
shell::{CosmicMappedRenderElement, WorkspaceRenderElement},
|
shell::{CosmicMappedRenderElement, WorkspaceRenderElement},
|
||||||
utils::iced::IcedRenderElement,
|
utils::iced::IcedRenderElement,
|
||||||
};
|
};
|
||||||
|
|
@ -37,7 +40,7 @@ use super::{GlMultiRenderer, cursor::CursorRenderElement};
|
||||||
pub enum CosmicElement<R>
|
pub enum CosmicElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
CosmicMappedRenderElement<R>: RenderElement<R>,
|
CosmicMappedRenderElement<R>: RenderElement<R>,
|
||||||
{
|
{
|
||||||
Workspace(
|
Workspace(
|
||||||
|
|
@ -58,7 +61,7 @@ where
|
||||||
impl<R> Element for CosmicElement<R>
|
impl<R> Element for CosmicElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
CosmicMappedRenderElement<R>: RenderElement<R>,
|
CosmicMappedRenderElement<R>: RenderElement<R>,
|
||||||
{
|
{
|
||||||
fn id(&self) -> &Id {
|
fn id(&self) -> &Id {
|
||||||
|
|
@ -223,7 +226,7 @@ where
|
||||||
impl<R> RenderElement<R> for CosmicElement<R>
|
impl<R> RenderElement<R> for CosmicElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
CosmicMappedRenderElement<R>: RenderElement<R>,
|
CosmicMappedRenderElement<R>: RenderElement<R>,
|
||||||
{
|
{
|
||||||
fn draw(
|
fn draw(
|
||||||
|
|
@ -339,7 +342,7 @@ impl<R> From<CropRenderElement<RescaleRenderElement<WorkspaceRenderElement<R>>>>
|
||||||
for CosmicElement<R>
|
for CosmicElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
CosmicMappedRenderElement<R>: RenderElement<R>,
|
CosmicMappedRenderElement<R>: RenderElement<R>,
|
||||||
{
|
{
|
||||||
fn from(elem: CropRenderElement<RescaleRenderElement<WorkspaceRenderElement<R>>>) -> Self {
|
fn from(elem: CropRenderElement<RescaleRenderElement<WorkspaceRenderElement<R>>>) -> Self {
|
||||||
|
|
@ -354,7 +357,7 @@ where
|
||||||
impl<R> From<IcedRenderElement<R>> for CosmicElement<R>
|
impl<R> From<IcedRenderElement<R>> for CosmicElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
CosmicMappedRenderElement<R>: RenderElement<R>,
|
CosmicMappedRenderElement<R>: RenderElement<R>,
|
||||||
{
|
{
|
||||||
fn from(value: IcedRenderElement<R>) -> Self {
|
fn from(value: IcedRenderElement<R>) -> Self {
|
||||||
|
|
@ -365,7 +368,7 @@ where
|
||||||
impl<R> From<DamageElement> for CosmicElement<R>
|
impl<R> From<DamageElement> for CosmicElement<R>
|
||||||
where
|
where
|
||||||
R: Renderer + ImportAll + ImportMem + AsGlowRenderer,
|
R: Renderer + ImportAll + ImportMem + AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
CosmicMappedRenderElement<R>: RenderElement<R>,
|
CosmicMappedRenderElement<R>: RenderElement<R>,
|
||||||
{
|
{
|
||||||
fn from(value: DamageElement) -> Self {
|
fn from(value: DamageElement) -> Self {
|
||||||
|
|
@ -377,7 +380,7 @@ where
|
||||||
impl<R> From<TextureRenderElement<GlesTexture>> for CosmicElement<R>
|
impl<R> From<TextureRenderElement<GlesTexture>> for CosmicElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
CosmicMappedRenderElement<R>: RenderElement<R>,
|
CosmicMappedRenderElement<R>: RenderElement<R>,
|
||||||
{
|
{
|
||||||
fn from(elem: TextureRenderElement<GlesTexture>) -> Self {
|
fn from(elem: TextureRenderElement<GlesTexture>) -> Self {
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ use smithay::{
|
||||||
allocator::Fourcc,
|
allocator::Fourcc,
|
||||||
renderer::{
|
renderer::{
|
||||||
Bind, BlitFrame, Color32F, ContextId, Frame, FrameContext, ImportAll, Offscreen,
|
Bind, BlitFrame, Color32F, ContextId, Frame, FrameContext, ImportAll, Offscreen,
|
||||||
Renderer, Texture, TextureFilter,
|
Renderer, RendererSuper, Texture, TextureFilter,
|
||||||
element::{Element, Id, Kind, RenderElement},
|
element::{Element, Id, Kind, RenderElement},
|
||||||
gles::{
|
gles::{
|
||||||
GlesError, GlesFrame, GlesRenderer, GlesTexProgram, GlesTexture, Uniform,
|
GlesError, GlesFrame, GlesRenderer, GlesTexProgram, GlesTexture, Uniform,
|
||||||
|
|
@ -115,7 +115,7 @@ impl BlurShaders {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type BlurTexture = Mutex<Option<GlesTexture>>;
|
type BlurTexture<T: Texture> = Mutex<Option<T>>;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct BlurState {
|
pub struct BlurState {
|
||||||
|
|
@ -369,7 +369,10 @@ impl Element for BlurElement {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<R: Renderer + AsGlowRenderer> RenderElement<R> for BlurElement {
|
impl<R: Renderer + AsGlowRenderer> RenderElement<R> for BlurElement
|
||||||
|
where
|
||||||
|
R::TextureId: Send + 'static,
|
||||||
|
{
|
||||||
fn capture_framebuffer(
|
fn capture_framebuffer(
|
||||||
&self,
|
&self,
|
||||||
frame: &mut <R>::Frame<'_, '_>,
|
frame: &mut <R>::Frame<'_, '_>,
|
||||||
|
|
@ -377,41 +380,48 @@ impl<R: Renderer + AsGlowRenderer> RenderElement<R> for BlurElement {
|
||||||
dst: Rectangle<i32, Physical>,
|
dst: Rectangle<i32, Physical>,
|
||||||
cache: &UserDataMap,
|
cache: &UserDataMap,
|
||||||
) -> Result<(), <R>::Error> {
|
) -> Result<(), <R>::Error> {
|
||||||
|
let transform = frame.transformation();
|
||||||
|
let tex_size = self.src.to_i32_round();
|
||||||
let glow_frame = <R as AsGlowRenderer>::glow_frame_mut(frame);
|
let glow_frame = <R as AsGlowRenderer>::glow_frame_mut(frame);
|
||||||
let gles_frame = BorrowMut::<GlesFrame<'_, '_>>::borrow_mut(glow_frame);
|
let gles_frame = BorrowMut::<GlesFrame<'_, '_>>::borrow_mut(glow_frame);
|
||||||
let transform = gles_frame.transformation();
|
let mut renderer = gles_frame.renderer();
|
||||||
let tex_size = self.src.to_i32_round();
|
|
||||||
|
|
||||||
let texture_ref = cache.get_or_insert_threadsafe(BlurTexture::default);
|
let texture_ref = cache.get_or_insert_threadsafe(BlurTexture::<R::TextureId>::default);
|
||||||
let mut texture_entry = texture_ref.lock().unwrap();
|
let mut texture_entry = texture_ref.lock().unwrap();
|
||||||
if texture_entry
|
if texture_entry.as_ref().is_some_and(|tex| {
|
||||||
.as_ref()
|
tex.size() != tex_size
|
||||||
.is_some_and(|tex| tex.size() != tex_size)
|
|| R::tex_to_gl(
|
||||||
{
|
&renderer.as_ref().context_id(),
|
||||||
|
texture_entry.as_ref().unwrap(),
|
||||||
|
)
|
||||||
|
.is_none()
|
||||||
|
}) {
|
||||||
texture_entry.take();
|
texture_entry.take();
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut renderer = gles_frame.renderer();
|
|
||||||
if texture_entry.is_none() {
|
if texture_entry.is_none() {
|
||||||
*texture_entry = Some(
|
let gl_texture = renderer
|
||||||
renderer
|
.as_mut()
|
||||||
.as_mut()
|
.create_buffer(Fourcc::Abgr8888, tex_size)
|
||||||
.create_buffer(Fourcc::Abgr8888, tex_size)
|
.map_err(R::from_gles_error)?;
|
||||||
.map_err(R::from_gles_error)?,
|
*texture_entry = Some(R::tex_from_gl(&renderer.as_ref().context_id(), gl_texture));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
let texture = texture_entry.as_mut().unwrap();
|
|
||||||
|
let mut texture = R::tex_to_gl(
|
||||||
|
&renderer.as_ref().context_id(),
|
||||||
|
texture_entry.as_ref().unwrap(),
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
let mut off_texture = renderer
|
let mut off_texture = renderer
|
||||||
.as_mut()
|
.as_mut()
|
||||||
.create_buffer(Fourcc::Abgr8888, tex_size)
|
.create_buffer(Fourcc::Abgr8888, tex_size)
|
||||||
.map_err(R::from_gles_error)?;
|
.map_err(R::from_gles_error)?;
|
||||||
std::mem::drop(renderer);
|
std::mem::drop(renderer);
|
||||||
|
|
||||||
let sync = blit_from_active_fb(gles_frame, src, dst, transform, texture)
|
let sync = blit_from_active_fb(gles_frame, src, dst, transform, &mut texture)
|
||||||
.map_err(R::from_gles_error)?;
|
.map_err(R::from_gles_error)?;
|
||||||
gles_frame.wait(&sync).map_err(R::from_gles_error)?;
|
gles_frame.wait(&sync).map_err(R::from_gles_error)?;
|
||||||
|
|
||||||
let mut textures = [texture, &mut off_texture];
|
let mut textures = [&mut texture, &mut off_texture];
|
||||||
render_blur(
|
render_blur(
|
||||||
gles_frame.renderer().as_mut(),
|
gles_frame.renderer().as_mut(),
|
||||||
&self.scaling_shaders,
|
&self.scaling_shaders,
|
||||||
|
|
@ -433,7 +443,6 @@ impl<R: Renderer + AsGlowRenderer> RenderElement<R> for BlurElement {
|
||||||
opaque_regions: &[Rectangle<i32, Physical>],
|
opaque_regions: &[Rectangle<i32, Physical>],
|
||||||
cache: Option<&UserDataMap>,
|
cache: Option<&UserDataMap>,
|
||||||
) -> Result<(), R::Error> {
|
) -> Result<(), R::Error> {
|
||||||
let glow_frame = <R as AsGlowRenderer>::glow_frame_mut(frame);
|
|
||||||
let src_to_geo = self.geometry.size / self.src;
|
let src_to_geo = self.geometry.size / self.src;
|
||||||
let src_log = src
|
let src_log = src
|
||||||
.upscale(src_to_geo)
|
.upscale(src_to_geo)
|
||||||
|
|
@ -451,26 +460,27 @@ impl<R: Renderer + AsGlowRenderer> RenderElement<R> for BlurElement {
|
||||||
.flat_map(|rect| damage.iter().flat_map(move |r| r.intersection(rect)))
|
.flat_map(|rect| damage.iter().flat_map(move |r| r.intersection(rect)))
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
let cache = cache.expect("Framebuffer element without cache?");
|
let cache = cache.expect("Framebuffer element without cache?");
|
||||||
let Some(texture) = cache.get::<BlurTexture>() else {
|
let Some(texture) = cache.get::<BlurTexture<R::TextureId>>() else {
|
||||||
return Err(R::from_gles_error(GlesError::BlitError));
|
return Err(R::from_gles_error(GlesError::BlitError));
|
||||||
};
|
};
|
||||||
let texture_ref = texture.lock().unwrap();
|
let texture_ref = texture.lock().unwrap();
|
||||||
|
|
||||||
BorrowMut::<GlesFrame<'_, '_>>::borrow_mut(glow_frame)
|
if let Some(tex) = texture_ref.as_ref() {
|
||||||
.render_texture_from_to(
|
BorrowMut::<GlesFrame>::borrow_mut(<R as AsGlowRenderer>::glow_frame_mut(frame))
|
||||||
texture_ref
|
.override_default_tex_program(self.render_shader.clone(), self.uniforms.clone());
|
||||||
.as_ref()
|
frame.render_texture_from_to(
|
||||||
.ok_or(R::from_gles_error(GlesError::BlitError))?,
|
tex,
|
||||||
src,
|
src,
|
||||||
dst,
|
dst,
|
||||||
&damage,
|
&damage,
|
||||||
opaque_regions,
|
&opaque_regions,
|
||||||
Transform::Normal,
|
Transform::Normal,
|
||||||
1.0,
|
1.0,
|
||||||
Some(&self.render_shader),
|
)?;
|
||||||
&self.uniforms,
|
BorrowMut::<GlesFrame>::borrow_mut(<R as AsGlowRenderer>::glow_frame_mut(frame))
|
||||||
)
|
.clear_tex_program_override();
|
||||||
.map_err(R::from_gles_error)
|
}
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ pub mod blur_effect;
|
||||||
pub mod clipped_surface;
|
pub mod clipped_surface;
|
||||||
|
|
||||||
render_elements! {
|
render_elements! {
|
||||||
pub SurfaceRenderElement<R> where R: AsGlowRenderer + ImportAll;
|
pub SurfaceRenderElement<R> where R: AsGlowRenderer + ImportAll, R::TextureId: Send;
|
||||||
Blur=BlurElement,
|
Blur=BlurElement,
|
||||||
Clipped=ClippedSurfaceRenderElement<R>,
|
Clipped=ClippedSurfaceRenderElement<R>,
|
||||||
Wayland=WaylandSurfaceRenderElement<R>,
|
Wayland=WaylandSurfaceRenderElement<R>,
|
||||||
|
|
|
||||||
|
|
@ -1137,7 +1137,7 @@ where
|
||||||
impl<R> Element for CosmicMappedRenderElement<R>
|
impl<R> Element for CosmicMappedRenderElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
{
|
{
|
||||||
fn id(&self) -> &smithay::backend::renderer::element::Id {
|
fn id(&self) -> &smithay::backend::renderer::element::Id {
|
||||||
match self {
|
match self {
|
||||||
|
|
@ -1358,7 +1358,7 @@ where
|
||||||
impl<R> RenderElement<R> for CosmicMappedRenderElement<R>
|
impl<R> RenderElement<R> for CosmicMappedRenderElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
{
|
{
|
||||||
fn draw(
|
fn draw(
|
||||||
&self,
|
&self,
|
||||||
|
|
|
||||||
|
|
@ -1927,7 +1927,7 @@ impl<R: Renderer + ImportAll + ImportMem> From<SurfaceRenderElement<R>>
|
||||||
impl<R> Element for CosmicStackRenderElement<R>
|
impl<R> Element for CosmicStackRenderElement<R>
|
||||||
where
|
where
|
||||||
R: Renderer + ImportAll + ImportMem + AsGlowRenderer,
|
R: Renderer + ImportAll + ImportMem + AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
{
|
{
|
||||||
fn id(&self) -> &RendererId {
|
fn id(&self) -> &RendererId {
|
||||||
match self {
|
match self {
|
||||||
|
|
@ -2036,7 +2036,7 @@ where
|
||||||
impl<R> RenderElement<R> for CosmicStackRenderElement<R>
|
impl<R> RenderElement<R> for CosmicStackRenderElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
{
|
{
|
||||||
fn draw(
|
fn draw(
|
||||||
&self,
|
&self,
|
||||||
|
|
|
||||||
|
|
@ -1275,7 +1275,7 @@ impl<R: AsGlowRenderer + ImportAll + ImportMem> From<SurfaceRenderElement<R>>
|
||||||
impl<R> Element for CosmicWindowRenderElement<R>
|
impl<R> Element for CosmicWindowRenderElement<R>
|
||||||
where
|
where
|
||||||
R: Renderer + ImportAll + ImportMem + AsGlowRenderer,
|
R: Renderer + ImportAll + ImportMem + AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
{
|
{
|
||||||
fn id(&self) -> &RendererId {
|
fn id(&self) -> &RendererId {
|
||||||
match self {
|
match self {
|
||||||
|
|
@ -1384,7 +1384,7 @@ where
|
||||||
impl<R> RenderElement<R> for CosmicWindowRenderElement<R>
|
impl<R> RenderElement<R> for CosmicWindowRenderElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
{
|
{
|
||||||
fn draw(
|
fn draw(
|
||||||
&self,
|
&self,
|
||||||
|
|
|
||||||
|
|
@ -1973,7 +1973,7 @@ pub struct OutputNotMapped;
|
||||||
pub enum WorkspaceRenderElement<R>
|
pub enum WorkspaceRenderElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
{
|
{
|
||||||
OverrideRedirect(SurfaceRenderElement<R>),
|
OverrideRedirect(SurfaceRenderElement<R>),
|
||||||
LowerLayerShell(NamespacedElement<SurfaceRenderElement<R>>),
|
LowerLayerShell(NamespacedElement<SurfaceRenderElement<R>>),
|
||||||
|
|
@ -1986,7 +1986,7 @@ where
|
||||||
impl<R> Element for WorkspaceRenderElement<R>
|
impl<R> Element for WorkspaceRenderElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
{
|
{
|
||||||
fn id(&self) -> &smithay::backend::renderer::element::Id {
|
fn id(&self) -> &smithay::backend::renderer::element::Id {
|
||||||
match self {
|
match self {
|
||||||
|
|
@ -2117,7 +2117,7 @@ where
|
||||||
impl<R> RenderElement<R> for WorkspaceRenderElement<R>
|
impl<R> RenderElement<R> for WorkspaceRenderElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
{
|
{
|
||||||
fn draw(
|
fn draw(
|
||||||
&self,
|
&self,
|
||||||
|
|
@ -2213,7 +2213,7 @@ where
|
||||||
impl<R> From<RescaleRenderElement<CosmicWindowRenderElement<R>>> for WorkspaceRenderElement<R>
|
impl<R> From<RescaleRenderElement<CosmicWindowRenderElement<R>>> for WorkspaceRenderElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
CosmicMappedRenderElement<R>: RenderElement<R>,
|
CosmicMappedRenderElement<R>: RenderElement<R>,
|
||||||
{
|
{
|
||||||
fn from(elem: RescaleRenderElement<CosmicWindowRenderElement<R>>) -> Self {
|
fn from(elem: RescaleRenderElement<CosmicWindowRenderElement<R>>) -> Self {
|
||||||
|
|
@ -2224,7 +2224,7 @@ where
|
||||||
impl<R> From<CosmicWindowRenderElement<R>> for WorkspaceRenderElement<R>
|
impl<R> From<CosmicWindowRenderElement<R>> for WorkspaceRenderElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
CosmicMappedRenderElement<R>: RenderElement<R>,
|
CosmicMappedRenderElement<R>: RenderElement<R>,
|
||||||
{
|
{
|
||||||
fn from(elem: CosmicWindowRenderElement<R>) -> Self {
|
fn from(elem: CosmicWindowRenderElement<R>) -> Self {
|
||||||
|
|
@ -2235,7 +2235,7 @@ where
|
||||||
impl<R> From<SurfaceRenderElement<R>> for WorkspaceRenderElement<R>
|
impl<R> From<SurfaceRenderElement<R>> for WorkspaceRenderElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
CosmicMappedRenderElement<R>: RenderElement<R>,
|
CosmicMappedRenderElement<R>: RenderElement<R>,
|
||||||
{
|
{
|
||||||
fn from(elem: SurfaceRenderElement<R>) -> Self {
|
fn from(elem: SurfaceRenderElement<R>) -> Self {
|
||||||
|
|
@ -2246,7 +2246,7 @@ where
|
||||||
impl<R> From<NamespacedElement<SurfaceRenderElement<R>>> for WorkspaceRenderElement<R>
|
impl<R> From<NamespacedElement<SurfaceRenderElement<R>>> for WorkspaceRenderElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
CosmicMappedRenderElement<R>: RenderElement<R>,
|
CosmicMappedRenderElement<R>: RenderElement<R>,
|
||||||
{
|
{
|
||||||
fn from(elem: NamespacedElement<SurfaceRenderElement<R>>) -> Self {
|
fn from(elem: NamespacedElement<SurfaceRenderElement<R>>) -> Self {
|
||||||
|
|
@ -2257,7 +2257,7 @@ where
|
||||||
impl<R> From<CosmicMappedRenderElement<R>> for WorkspaceRenderElement<R>
|
impl<R> From<CosmicMappedRenderElement<R>> for WorkspaceRenderElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
CosmicMappedRenderElement<R>: RenderElement<R>,
|
CosmicMappedRenderElement<R>: RenderElement<R>,
|
||||||
{
|
{
|
||||||
fn from(elem: CosmicMappedRenderElement<R>) -> Self {
|
fn from(elem: CosmicMappedRenderElement<R>) -> Self {
|
||||||
|
|
@ -2268,7 +2268,7 @@ where
|
||||||
impl<R> From<TextureRenderElement<GlesTexture>> for WorkspaceRenderElement<R>
|
impl<R> From<TextureRenderElement<GlesTexture>> for WorkspaceRenderElement<R>
|
||||||
where
|
where
|
||||||
R: AsGlowRenderer,
|
R: AsGlowRenderer,
|
||||||
R::TextureId: 'static,
|
R::TextureId: Send + 'static,
|
||||||
CosmicMappedRenderElement<R>: RenderElement<R>,
|
CosmicMappedRenderElement<R>: RenderElement<R>,
|
||||||
{
|
{
|
||||||
fn from(elem: TextureRenderElement<GlesTexture>) -> Self {
|
fn from(elem: TextureRenderElement<GlesTexture>) -> Self {
|
||||||
|
|
|
||||||
|
|
@ -1112,7 +1112,7 @@ impl<P: Program + Send + 'static> IcedElement<P> {
|
||||||
}
|
}
|
||||||
|
|
||||||
render_elements! {
|
render_elements! {
|
||||||
pub IcedRenderElement<R> where R: ImportMem + AsGlowRenderer;
|
pub IcedRenderElement<R> where R: ImportMem + AsGlowRenderer, R::TextureId: Send;
|
||||||
UI=MemoryRenderBufferRenderElement<R>,
|
UI=MemoryRenderBufferRenderElement<R>,
|
||||||
Blur=BlurElement,
|
Blur=BlurElement,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ pub fn screenshot_window(state: &mut State, surface: &CosmicSurface) {
|
||||||
fn render_window<R>(renderer: &mut R, window: &CosmicSurface) -> anyhow::Result<()>
|
fn render_window<R>(renderer: &mut R, window: &CosmicSurface) -> anyhow::Result<()>
|
||||||
where
|
where
|
||||||
R: Renderer + ImportAll + Offscreen<GlesRenderbuffer> + ExportMem + AsGlowRenderer,
|
R: Renderer + ImportAll + Offscreen<GlesRenderbuffer> + ExportMem + AsGlowRenderer,
|
||||||
R::TextureId: Clone + 'static,
|
R::TextureId: Send + Clone + 'static,
|
||||||
R::Error: Send + Sync + 'static,
|
R::Error: Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
let bbox = bbox_from_surface_tree(&window.wl_surface().unwrap(), (0, 0));
|
let bbox = bbox_from_surface_tree(&window.wl_surface().unwrap(), (0, 0));
|
||||||
|
|
|
||||||
|
|
@ -502,7 +502,7 @@ pub fn render_workspace_to_buffer(
|
||||||
}
|
}
|
||||||
|
|
||||||
smithay::render_elements! {
|
smithay::render_elements! {
|
||||||
pub WindowCaptureElement<R> where R: ImportAll + ImportMem + AsGlowRenderer;
|
pub WindowCaptureElement<R> where R: ImportAll + ImportMem + AsGlowRenderer, R::TextureId: Send;
|
||||||
WaylandElement=SurfaceRenderElement<R>,
|
WaylandElement=SurfaceRenderElement<R>,
|
||||||
CursorElement=RelocateRenderElement<cursor::CursorRenderElement<R>>,
|
CursorElement=RelocateRenderElement<cursor::CursorRenderElement<R>>,
|
||||||
DamageElement=DamageElement,
|
DamageElement=DamageElement,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue