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}