ngon/
ngon.rs

1use std::f32::consts::PI;
2
3use bottomless_pit::colour::Colour;
4use bottomless_pit::engine_handle::{Engine, EngineBuilder};
5use bottomless_pit::material::{Material, MaterialBuilder};
6use bottomless_pit::render::RenderHandle;
7use bottomless_pit::resource::LoadingOp;
8use bottomless_pit::shader::UniformData;
9use bottomless_pit::shader::{Shader, ShaderOptions};
10use bottomless_pit::vec2;
11use bottomless_pit::vectors::Vec2;
12use bottomless_pit::Game;
13
14use encase::ShaderType;
15
16fn main() {
17    let mut engine = EngineBuilder::new()
18        .with_resolution((500, 500))
19        .remove_vsync()
20        .build()
21        .unwrap();
22
23    let data = Time {
24        time: 0.0,
25        _pading: 0.0,
26        _padding2: 0.0,
27        _padding4: 0.0,
28    };
29
30    let uniform_data = UniformData::new(&data);
31
32    let mouse_shader = Shader::new(
33        "examples/sinewaves.wgsl",
34        ShaderOptions::with_uniform_data(&uniform_data),
35        &mut engine,
36        LoadingOp::Blocking,
37    );
38
39    let regular_material = MaterialBuilder::new()
40        .set_shader(mouse_shader)
41        .build(&mut engine);
42
43    let pos = Position {
44        regular_material,
45        time: data,
46    };
47
48    engine.run(pos);
49}
50
51#[derive(ShaderType)]
52struct Time {
53    time: f32,
54    _pading: f32,
55    _padding2: f32,
56    _padding4: f32,
57}
58
59struct Position {
60    regular_material: Material<Time>,
61    time: Time,
62}
63
64impl Game for Position {
65    fn render<'o>(&'o mut self, mut render: RenderHandle<'o>) {
66        let mut render_handle = render.begin_pass(Colour::BLACK);
67
68        self.regular_material.add_regular_n_gon(
69            120,
70            200.0,
71            vec2! { 250.0 },
72            Colour::BLUE,
73            &render_handle,
74        );
75
76        self.regular_material.draw(&mut render_handle);
77    }
78
79    fn update(&mut self, engine_handle: &mut Engine) {
80        let dt = engine_handle.get_frame_delta_time();
81        self.time.time = (self.time.time + dt) % (32.0 * PI);
82        self.regular_material
83            .update_uniform_data(&self.time, &engine_handle)
84            .unwrap();
85    }
86}