Skip to main content

triangle/
triangle.rs

1extern crate sky_renderer;
2
3use std::rc::Rc;
4use sky_renderer::core::{App, Attribute, Geometry, Mesh, Renderer, Shader, Window};
5use sky_renderer::core::engine::opengl::{GLfloat, GL_TRIANGLES};
6
7fn main() {
8    let window = Window::new("Hello Window", 800, 600);
9
10
11    let vertex_shader_source = include_str!("shaders/geometry.vert");
12    let fragment_shader_source = include_str!("shaders/geometry.frag");
13
14    /* 5 values per vertex: x,y,r,g,b */
15    let vertices: Vec<GLfloat> = vec![
16        /* bottom right */ 0.5, -0.5, /*color */ 1.0, 0.0, 0.0,
17        /* bottom left */ -0.5, -0.5, /*color */ 0.0, 1.0, 0.0,
18        /* top */ 0.0, 0.5, /*color */ 0.0, 0.0, 1.0,
19    ];
20
21    let position_values_per_vertex = 2;
22    let color_values_per_vertex = 3;
23    let values_per_vertex = 5;
24
25
26    let mut geometry = Geometry::new(GL_TRIANGLES);
27    geometry.add_buffer(&vertices, values_per_vertex);
28
29    let position_attribute =
30        Attribute::new(0, position_values_per_vertex, values_per_vertex as usize, 0);
31    geometry.add_vertex_attribute(position_attribute);
32
33    let color_attribute = Attribute::new(
34        1,
35        color_values_per_vertex,
36        values_per_vertex as usize,
37        position_values_per_vertex as usize,
38    );
39    geometry.add_vertex_attribute(color_attribute);
40
41    let shader = Shader::compile(vertex_shader_source, fragment_shader_source, None)
42        .expect("Failed to compile shader");
43
44    let mesh = Mesh::new(Rc::new(shader), geometry);
45
46    let renderer = Renderer::new(window.handle());
47    let mut app = App::new(window);
48
49    app.on_render(move || {
50        renderer.draw_mesh(&mesh)
51    });
52    app.run();
53}