Skip to main content

easy_gpu/
frame.rs

1use std::ops::Range;
2use crate::assets::buffer::Buffer;
3use crate::assets::compute::bind_group::ComputeBindGroup;
4use crate::assets::compute::pipeline::ComputePipeline;
5use crate::assets::compute::task::ComputeTask;
6use crate::assets_manager::handle::Handle;
7use crate::assets::render::material::Material;
8use crate::assets::render::mesh::Mesh;
9
10pub(crate) struct RenderItem {
11    pub mesh: Handle<Mesh>,
12    pub material: Handle<Material>,
13    pub instances: Handle<Buffer>,
14    pub range: Range<u32>
15}
16
17impl RenderItem {
18    fn new(mesh: Handle<Mesh>, material: Handle<Material>,instances: Handle<Buffer>,range: Range<u32>) -> Self {
19        Self{
20            mesh,
21            material,
22            instances,
23            range,
24        }
25    }
26}
27
28pub struct Frame {
29    pub(crate) render_tasks: Vec<RenderItem>,
30  //  pub(crate) instance_buffer: InstanceBuffer,
31    pub(crate) compute_tasks: Vec<ComputeTask>,
32  //  instances: Vec<Instance>
33}
34
35impl Frame {
36    pub(crate) fn new() -> Self {
37        Self {
38            render_tasks: Vec::new(),
39            compute_tasks: Vec::new(),
40        }
41    }
42
43    pub(crate) fn clear(&mut self) {
44        self.render_tasks.clear();
45        self.compute_tasks.clear();
46    }
47
48    pub fn draw(&mut self,instances: Handle<Buffer>,material: Handle<Material>,mesh: Handle<Mesh>,range: Range<u32>) {
49        let item = RenderItem::new(mesh, material, instances, range);
50        self.render_tasks.push(item);
51    }
52
53    pub fn compute(&mut self,bind_group: Handle<ComputeBindGroup>, pipeline: Handle<ComputePipeline>, dispatch: (u32,u32,u32)){
54        let task = ComputeTask::new(pipeline,bind_group,dispatch);
55        self.compute_tasks.push(task);
56    }
57
58    pub fn sort(&mut self) {
59        self.render_tasks.sort_by_key(|item| {
60            (
61               // item.pipeline.index,
62                item.material.index,
63                item.mesh.index,
64            )
65        });
66    }
67}