render: make surfaces own rectangles, to drop a clone
This commit is contained in:
parent
f180171ee7
commit
e9bbdd13c2
@ -58,9 +58,9 @@ impl Shader for ThinkingShader {
|
|||||||
impl<T: Surface> IdleTask<T> {
|
impl<T: Surface> IdleTask<T> {
|
||||||
pub fn new<S: Surfaces<Surface = T>>(surfaces: &mut S) -> Self {
|
pub fn new<S: Surfaces<Surface = T>>(surfaces: &mut S) -> Self {
|
||||||
IdleTask {
|
IdleTask {
|
||||||
solid: surfaces.new_surface(&Rectangle::everything()).unwrap(),
|
solid: surfaces.new_surface(Rectangle::everything()).unwrap(),
|
||||||
surface: surfaces.new_surface(&Rectangle::everything()).unwrap(),
|
surface: surfaces.new_surface(Rectangle::everything()).unwrap(),
|
||||||
shimmer: surfaces.new_surface(&Rectangle::everything()).unwrap(),
|
shimmer: surfaces.new_surface(Rectangle::everything()).unwrap(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -183,8 +183,7 @@ impl<T: Surface> Task for TestPattern<T> {
|
|||||||
self.stepper.run(|| {
|
self.stepper.run(|| {
|
||||||
self.frame = self.frame.wrapping_add(1);
|
self.frame = self.frame.wrapping_add(1);
|
||||||
self.surface.set_opacity(sin8(self.frame));
|
self.surface.set_opacity(sin8(self.frame));
|
||||||
//log::info!("Step {}", self.frame);
|
self.surface.set_rect( match self.pattern {
|
||||||
self.surface.set_rect( &match self.pattern {
|
|
||||||
TestShader::SweepX => Rectangle::new(
|
TestShader::SweepX => Rectangle::new(
|
||||||
Coordinates::new(self.frame, 0),
|
Coordinates::new(self.frame, 0),
|
||||||
Coordinates::new(self.frame, 255)
|
Coordinates::new(self.frame, 255)
|
||||||
|
@ -82,9 +82,9 @@ impl Surface for BufferedSurface {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_rect(&mut self, rect: &Rectangle<Virtual>) {
|
fn set_rect(&mut self, rect: Rectangle<Virtual>) {
|
||||||
self.updater.push(SurfaceUpdate {
|
self.updater.push(SurfaceUpdate {
|
||||||
rect: Some(rect.clone()),
|
rect: Some(rect),
|
||||||
slot: self.slot,
|
slot: self.slot,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
@ -179,12 +179,12 @@ impl Surfaces for ShaderChain {
|
|||||||
type Error = ();
|
type Error = ();
|
||||||
type Surface = BufferedSurface;
|
type Surface = BufferedSurface;
|
||||||
|
|
||||||
fn new_surface(&mut self, area: &Rectangle<Virtual>) -> Result<Self::Surface, Self::Error> {
|
fn new_surface(&mut self, area: Rectangle<Virtual>) -> Result<Self::Surface, Self::Error> {
|
||||||
let next_slot = self.bindings.len();
|
let next_slot = self.bindings.len();
|
||||||
self.bindings.push(ShaderBinding {
|
self.bindings.push(ShaderBinding {
|
||||||
opacity: 255,
|
opacity: 255,
|
||||||
shader: None,
|
shader: None,
|
||||||
rect: area.clone()
|
rect: area
|
||||||
});
|
});
|
||||||
|
|
||||||
Ok(BufferedSurface {
|
Ok(BufferedSurface {
|
||||||
@ -225,7 +225,7 @@ impl BufferedSurfacePool {
|
|||||||
impl Surfaces for BufferedSurfacePool {
|
impl Surfaces for BufferedSurfacePool {
|
||||||
type Error = ();
|
type Error = ();
|
||||||
type Surface = <ShaderChain as Surfaces>::Surface;
|
type Surface = <ShaderChain as Surfaces>::Surface;
|
||||||
fn new_surface(&mut self, area: &crate::geometry::Rectangle<crate::geometry::Virtual>) -> Result<Self::Surface, Self::Error> {
|
fn new_surface(&mut self, area: crate::geometry::Rectangle<crate::geometry::Virtual>) -> Result<Self::Surface, Self::Error> {
|
||||||
self.pool.write().unwrap().new_surface(area)
|
self.pool.write().unwrap().new_surface(area)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,8 +270,8 @@ impl Surface for SharedSurface {
|
|||||||
self.binding.lock().unwrap().shader = None;
|
self.binding.lock().unwrap().shader = None;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_rect(&mut self, rect: &Rectangle<Virtual>) {
|
fn set_rect(&mut self, rect: Rectangle<Virtual>) {
|
||||||
self.binding.lock().unwrap().rect = rect.clone();
|
self.binding.lock().unwrap().rect = rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_opacity(&mut self, opacity: u8) {
|
fn set_opacity(&mut self, opacity: u8) {
|
||||||
@ -296,7 +296,7 @@ impl SurfacePool {
|
|||||||
impl Surfaces for SurfacePool {
|
impl Surfaces for SurfacePool {
|
||||||
type Surface = SharedSurface;
|
type Surface = SharedSurface;
|
||||||
type Error = io::Error;
|
type Error = io::Error;
|
||||||
fn new_surface(&mut self, area: &Rectangle<Virtual>) -> Result<Self::Surface, Self::Error> {
|
fn new_surface(&mut self, area: Rectangle<Virtual>) -> Result<Self::Surface, Self::Error> {
|
||||||
let mut surface = SharedSurface::default();
|
let mut surface = SharedSurface::default();
|
||||||
surface.set_rect(area);
|
surface.set_rect(area);
|
||||||
self.surfaces.push(surface.clone());
|
self.surfaces.push(surface.clone());
|
||||||
|
@ -30,7 +30,7 @@ pub trait Shader: Send + Sync {
|
|||||||
pub trait Surfaces: Send + Sync {
|
pub trait Surfaces: Send + Sync {
|
||||||
type Surface: Surface;
|
type Surface: Surface;
|
||||||
type Error: Debug;
|
type Error: Debug;
|
||||||
fn new_surface(&mut self, area: &Rectangle<Virtual>) -> Result<Self::Surface, Self::Error>;
|
fn new_surface(&mut self, area: Rectangle<Virtual>) -> Result<Self::Surface, Self::Error>;
|
||||||
fn render_to<S: Sample>(&self, output: &mut S, frame: usize);
|
fn render_to<S: Sample>(&self, output: &mut S, frame: usize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ pub trait Surface: Send + Sync {
|
|||||||
fn set_shader(&mut self, shader: Box<dyn Shader>);
|
fn set_shader(&mut self, shader: Box<dyn Shader>);
|
||||||
fn clear_shader(&mut self);
|
fn clear_shader(&mut self);
|
||||||
|
|
||||||
fn set_rect(&mut self, rect: &Rectangle<Virtual>);
|
fn set_rect(&mut self, rect: Rectangle<Virtual>);
|
||||||
fn set_opacity(&mut self, opacity: u8);
|
fn set_opacity(&mut self, opacity: u8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user