postprocess/
postprocess.rs1use std::sync::Arc;
2
3use rhachis::{
4    game_data,
5    graphics::SamplerType,
6    model::{Model, Transform},
7    postprocess::{Effect, PostProcess},
8    renderers::{SimpleRenderer, SimpleRendererBuilder},
9    texture::Texture,
10    Game, GameExt,
11};
12
13#[rhachis::run(rhachis::GameInit::default())]
14struct PP {
15    renderer: PostProcess<SimpleRenderer>,
16}
17
18impl Game for PP {
19    fn init() -> Self {
20        let mut renderer = SimpleRendererBuilder::default().build();
21        renderer.models.push(Model::quad_texture(
22            Arc::new(Texture::from_path("examples/test.png", SamplerType::LINEAR).unwrap()),
23            vec![Transform::scale((0.5, 0.5, 1.0))],
24        ));
25
26        Self {
27            renderer: PostProcess::new(renderer, Effect::resolution((64, 48).into())),
28        }
29    }
30
31    fn update(&mut self) {
32        let brightness = game_data().start_time().elapsed().as_secs_f32() / 4.0;
33        self.renderer.effect[0] = Effect {
34            resolution: Some((64, 48).into()),
35            brightness: Some(brightness.min(1.0)),
36            red_factor: Some(brightness * 4.0),
37            ..Default::default()
38        };
39    }
40
41    fn get_renderer(&mut self) -> &mut dyn rhachis::graphics::Renderer {
42        &mut self.renderer
43    }
44}