use crate::graphics::gl_wrapper::{ShaderProgram, Vao};
use cgmath::*;
pub struct Object {
mesh: Vao,
pub transform: Matrix4<f32>,
pub shader_program: ShaderProgram,
}
impl Object {
pub fn new(mesh: Vao, shader_program: ShaderProgram) -> Self {
Self {
mesh,
transform: Matrix4::identity(),
shader_program,
}
}
pub fn set_transform(&mut self, transform: Matrix4<f32>) {
self.transform = transform;
}
pub fn render(&mut self, view_matrix: Matrix4<f32>, projection_matrix: Matrix4<f32>) {
self.shader_program.bind();
self.shader_program
.set_uniform_matrix4fv("model", &self.transform)
.unwrap();
self.shader_program
.set_uniform_matrix4fv("view", &view_matrix)
.unwrap();
self.shader_program
.set_uniform_matrix4fv("projection", &projection_matrix)
.unwrap();
self.mesh.bind();
unsafe {
gl::DrawElements(
gl::TRIANGLES,
self.mesh.index_count() as i32,
gl::UNSIGNED_INT,
std::ptr::null(),
);
}
}
}