extern crate wilhelm_renderer;
use std::rc::Rc;
use wilhelm_renderer::core::{App, Attribute, Color, Geometry, Mesh, Shader, Window};
use wilhelm_renderer::core::engine::opengl::{GLfloat, GL_TRIANGLES};
fn main() {
let window = Window::new("Hello Window", 800, 600, Color::from_rgb(0.07, 0.13, 0.17));
let vertex_shader_source = include_str!("shaders/geometry.vert");
let fragment_shader_source = include_str!("shaders/geometry.frag");
let vertices: Vec<GLfloat> = vec![
0.5, -0.5, 1.0, 0.0, 0.0,
-0.5, -0.5, 0.0, 1.0, 0.0,
0.0, 0.5, 0.0, 0.0, 1.0,
];
let position_values_per_vertex = 2;
let color_values_per_vertex = 3;
let values_per_vertex = 5;
let mut geometry = Geometry::new(GL_TRIANGLES);
geometry.add_buffer(&vertices, values_per_vertex);
let position_attribute =
Attribute::new(0, position_values_per_vertex, values_per_vertex as usize, 0);
geometry.add_vertex_attribute(position_attribute);
let color_attribute = Attribute::new(
1,
color_values_per_vertex,
values_per_vertex as usize,
position_values_per_vertex as usize,
);
geometry.add_vertex_attribute(color_attribute);
let shader = Shader::compile(vertex_shader_source, fragment_shader_source, None)
.expect("Failed to compile shader");
let mesh = Mesh::new(Rc::new(shader), geometry);
let mut app = App::new(window);
app.on_render(move |renderer, _| {
renderer.draw_mesh(&mesh)
});
app.run();
}