use std::sync::Arc; use glam::Mat4; use weareshared::resources::Armature; use wgpu::{Buffer, BufferDescriptor, BufferUsages, Device, Queue}; pub struct RArmature { pub joint_mat_uniform_buffer: Arc, joint_mat: Vec, data: Armature, } impl RArmature { pub fn new(device: &Device, armature: Armature) -> Self { Self { joint_mat_uniform_buffer: Arc::new(device.create_buffer(&BufferDescriptor { label: Some("joint uniform"), size: (armature.parent.as_ref().unwrap().len() * size_of::() * 16) as u64, usage: BufferUsages::COPY_DST | BufferUsages::UNIFORM, mapped_at_creation: false, })), data: armature, joint_mat: vec![], } } pub fn update(&mut self) {} pub fn write_uniform(&self, queue: &Queue) { queue.write_buffer( &self.joint_mat_uniform_buffer, 0, bytemuck::cast_slice(self.joint_mat.as_slice()), ); } }