use std::rc::Rc;
use std::cell::RefCell;
use gfx::traits::FactoryExt;
use cgmath::{Matrix4, Vector3, One};
use Renderer;
use Vertex;
use defines::GpuData;
pub struct Model {
pub vertices: Vec<Vertex>,
pub transform: Matrix4<f32>,
pub gpu_data: GpuData,
pub is_dirty: bool,
}
pub type ModelHandle = Rc<RefCell<Model>>;
impl Model {
pub fn new(mut renderer: &mut Renderer, vertices: &[Vertex]) -> ModelHandle {
let (vertex_buffer, slice) = renderer.factory.create_vertex_buffer_with_slice(
vertices,
(),
);
let locals = renderer.factory.create_constant_buffer(1);
let gpu_data = GpuData {
slice,
vertices: vertex_buffer,
locals,
};
let transform: Matrix4<f32> = Matrix4::one();
Rc::new(RefCell::new(Model {
vertices: vertices.to_vec(),
transform,
gpu_data,
is_dirty: false,
}))
}
pub fn translate(&mut self, translation: Vector3<f32>) {
self.transform = self.transform * Matrix4::from_translation(translation);
}
}