dunge 0.1.7

Simple and portable 3d render library
Documentation
use {
    crate::layout::{InstanceModel, Plain},
    wgpu::{Buffer, Device, Queue},
};

pub(crate) struct Instance {
    buffer: Buffer,
    n_instances: u32,
}

impl Instance {
    pub fn new(models: &[InstanceModel], device: &Device) -> Self {
        use wgpu::{
            util::{BufferInitDescriptor, DeviceExt},
            BufferUsages,
        };

        Self {
            buffer: device.create_buffer_init(&BufferInitDescriptor {
                label: Some("instance buffer"),
                contents: models.as_bytes(),
                usage: BufferUsages::VERTEX | BufferUsages::COPY_DST,
            }),
            n_instances: models.len().try_into().expect("convert instances len"),
        }
    }

    pub fn update_models(&mut self, models: &[InstanceModel], queue: &Queue) {
        queue.write_buffer(&self.buffer, 0, models.as_bytes());
        self.n_instances = models.len().try_into().expect("convert instances len");
    }

    pub fn buffer(&self) -> &Buffer {
        &self.buffer
    }

    pub fn n_instances(&self) -> u32 {
        self.n_instances
    }
}