summaryrefslogtreecommitdiff
path: root/client/src/armature.rs
blob: d955415538374d6023bc84cdb23da5bc73db4d8e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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<Buffer>,
    joint_mat: Vec<Mat4>,
    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::<f32>() * 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()),
        );
    }
}