Skip to main content

rotex_types/resource/
batch.rs

1use crate::resource::descriptors::{
2    BindGroupDescriptor, BindGroupLayoutDescriptor, BufferDescriptor, ComputePipelineDescriptor,
3    MaterialDescriptor, MeshDescriptor, TextureDescriptor,
4};
5use crate::resource::geometry::IndexFormat;
6use crate::resource::ids::{
7    BindGroupId, BindGroupLayoutId, BufferId, ComputePipelineId, MaterialId, MeshId, TextureId,
8};
9
10#[derive(Debug, Clone)]
11pub enum ResourceCreateDescriptor {
12    Mesh { id: u64, mesh: MeshDescriptor },
13    Texture { id: u64, texture: TextureDescriptor },
14    Material { id: u64, material: MaterialDescriptor },
15    Buffer { id: u64, buffer: BufferDescriptor },
16    ComputePipeline { id: u64, pipeline: ComputePipelineDescriptor },
17    BindGroupLayout { id: u64, layout: BindGroupLayoutDescriptor },
18    BindGroup { id: u64, group: BindGroupDescriptor },
19}
20
21#[derive(Debug, Clone)]
22pub struct ResourceBatchCreate {
23    pub resources: Vec<ResourceCreateDescriptor>,
24}
25
26impl ResourceBatchCreate {
27    pub fn new(resources: Vec<ResourceCreateDescriptor>) -> Self {
28        Self { resources }
29    }
30}
31
32#[derive(Debug, Clone, Copy)]
33pub enum ResourceHandle {
34    Mesh(MeshId),
35    Texture(TextureId),
36    Material(MaterialId),
37    Buffer(BufferId),
38    ComputePipeline(ComputePipelineId),
39    BindGroupLayout(BindGroupLayoutId),
40    BindGroup(BindGroupId),
41}
42
43#[derive(Debug, Clone)]
44pub struct CreatedResources {
45    pub handles: Vec<ResourceHandle>,
46}
47
48#[derive(Debug, Clone)]
49pub enum ResourceUpdateDescriptor {
50    Mesh {
51        id: MeshId,
52        vertex_streams: Vec<crate::resource::descriptors::VertexStream>,
53        index_data: Vec<u8>,
54        index_format: IndexFormat,
55        index_count: u32,
56    },
57    MeshVertices {
58        id: MeshId,
59        vertex_data: Vec<u8>,
60    },
61    Texture {
62        id: TextureId,
63        data: Vec<u8>,
64    },
65    Material {
66        id: MaterialId,
67        enable_depth: Option<bool>,
68        texture: Option<Option<TextureId>>,
69    },
70    Buffer {
71        id: BufferId,
72        data: Vec<u8>,
73    },
74}
75
76#[derive(Debug, Clone)]
77pub struct ResourceBatchUpdate {
78    pub updates: Vec<ResourceUpdateDescriptor>,
79}
80
81impl ResourceBatchUpdate {
82    pub fn new(updates: Vec<ResourceUpdateDescriptor>) -> Self {
83        Self { updates }
84    }
85}