use crate::Effect;
use super::{grayscale_effect_inner::GrayscaleEffectInner, GrayscaleFrame};
pub struct GrayscaleEffect {
pub(super) inner: Option<GrayscaleEffectInner>,
}
impl GrayscaleEffect {
pub fn new(
device: &wgpu::Device,
size: &wgpu::Extent3d,
format: wgpu::TextureFormat,
) -> GrayscaleEffect {
let inner = Some(GrayscaleEffectInner::new(device, size, format));
GrayscaleEffect { inner }
}
}
impl Effect for GrayscaleEffect {
type Frame<'a> = GrayscaleFrame<'a>;
fn resize(&mut self, device: &wgpu::Device, size: &wgpu::Extent3d) {
if let Some(ref mut inner) = self.inner {
inner.resize(device, size);
}
}
fn start_frame<'a>(
&'a mut self,
device: &'a wgpu::Device,
queue: &'a wgpu::Queue,
output_view: &'a wgpu::TextureView,
) -> GrayscaleFrame<'a> {
GrayscaleFrame {
target: self,
device,
queue,
output_view,
}
}
}