dunge 0.1.4

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(crate) fn new(models: &[InstanceModel], device: &Device) -> Self {
        use wgpu::{
            util::{BufferInitDescriptor, DeviceExt},
            BufferUsages,
        };

        let buffer = device.create_buffer_init(&BufferInitDescriptor {
            label: Some("instance buffer"),
            contents: models.as_bytes(),
            usage: BufferUsages::VERTEX | BufferUsages::COPY_DST,
        });

        let n_instances = models.len().try_into().expect("convert instances len");

        Self {
            buffer,
            n_instances,
        }
    }

    pub(crate) 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(crate) fn buffer(&self) -> &Buffer {
        &self.buffer
    }

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