1extern crate sky_renderer;
2
3use std::rc::Rc;
4use glam::{Mat4, Vec3};
5use sky_renderer::core::{App, Attribute, Geometry, Mesh, Renderer, Shader, Window};
6use sky_renderer::core::engine::opengl::{GL_TRIANGLES, GLfloat};
7
8const SCALE_FACTOR: f32 = 2.0;
9
10fn build_transform(viewport_width: f32, viewport_height: f32, time: f64) -> Mat4 {
11 let scale = Mat4::from_scale(Vec3::new(SCALE_FACTOR, -SCALE_FACTOR, SCALE_FACTOR));
12 let rotation = Mat4::from_rotation_z(2.0*time as f32);
13
14 let translation = Mat4::from_translation(Vec3::new(
16 viewport_width / 2.0,
17 viewport_height / 2.0,
18 0.0,
19 ));
20
21 let projection = Mat4::orthographic_rh_gl(0.0, viewport_width, viewport_height, 0.0, 0.0, 1.0);
22 projection * translation * rotation * scale
23}
24
25fn main() {
26 let vertices: Vec<GLfloat> = vec![
27 -10.0, 0.0, 10.0, 0.0, 0.0, 10.0, ];
31 let values_per_vertex = 2;
32
33 let window = Window::new("Transform", 800, 600);
34 let mut geometry = Geometry::new(GL_TRIANGLES);
35 geometry.add_buffer(&vertices, values_per_vertex);
36 geometry.add_vertex_attribute(Attribute::new(0, 2, 2, 0));
37
38 let vertex_shader_source = include_str!("shaders/transform.vert");
39 let fragment_shader_source = include_str!("shaders/transform.frag");
40
41 let shader = Shader::compile(vertex_shader_source, fragment_shader_source, None)
42 .expect("Failed to compile shader");
43
44 let mut mesh = Mesh::new(Rc::new(shader), geometry);
45 let renderer = Renderer::new(window.handle());
46 let mut app = App::new(window);
47
48 app.on_render(move || {
49 let (width, height) = renderer.viewport_size();
51
52 let transform = build_transform(width as f32, height as f32, renderer.get_time());
53 mesh.set_transform(transform);
54
55 renderer.draw_mesh(&mesh)
56 });
57
58 app.run();
59}