ursus_core/assets/registry/
mesh.rs1use crate::assets::mesh::CpuMesh;
2use crate::assets::upload::GpuUploadRequest;
3use crate::assets::upload_queue::UploadQueue;
4use ursus_ecs::components::mesh::MeshHandle;
5
6#[derive(Default)]
7struct MeshHandleAllocator {
8 next: u32,
9}
10
11impl MeshHandleAllocator {
12 fn alloc(&mut self) -> MeshHandle {
13 let id = self.next;
14 self.next += 1;
15 MeshHandle(id)
16 }
17}
18
19#[derive(Default)]
22pub struct MeshRegistry {
23 handles: MeshHandleAllocator,
24 upload_queue: UploadQueue,
25}
26
27impl MeshRegistry {
28 pub fn upload(&mut self, mesh: CpuMesh) -> MeshHandle {
29 let handle = self.handles.alloc();
30 self.upload_queue.push(GpuUploadRequest::Mesh {
31 handle,
32 vertices: mesh.vertices,
33 indices: mesh.indices,
34 name: mesh.name,
35 });
36 handle
37 }
38
39 pub(crate) fn flush_uploads(&mut self, tx: &std::sync::mpsc::Sender<GpuUploadRequest>) {
40 self.upload_queue.drain_to(tx);
41 }
42}