tufa 0.1.0

A wgpu abstraction layer.
Documentation
use std::sync::OnceLock;

use crate::{
    bindings::{IndexBuffer, VertexBuffer},
    gpu::Gpu,
    pipeline::render::{
        consts::{QUAD_INDEX, QUAD_VERTEX},
        Vertex,
    },
};

pub(crate) struct DefaultBuffers {
    buffers: OnceLock<(VertexBuffer<Vertex>, IndexBuffer)>,
}

impl DefaultBuffers {
    pub fn empty() -> Self {
        Self {
            buffers: OnceLock::new(),
        }
    }

    pub fn get(&self, gpu: &Gpu) -> &(VertexBuffer<Vertex>, IndexBuffer) {
        self.buffers.get_or_init(|| {
            (
                gpu.create_vertex(QUAD_VERTEX).unwrap(),
                gpu.create_index(QUAD_INDEX),
            )
        })
    }
}