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 let vertices: Vec<GLfloat> = vec![
16 0.5, -0.5, 1.0, 0.0, 0.0,
17 -0.5, -0.5, 0.0, 1.0, 0.0,
18 0.0, 0.5, 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}