rend3_routine/
pre_cull.rs

1//! Builds and uploads the input to gpu culling.
2
3use rend3::{
4    format_sso,
5    graph::{DataHandle, RenderGraph},
6    types::Material,
7};
8use wgpu::Buffer;
9
10use crate::{
11    common::{self, Sorting},
12    culling,
13};
14
15/// Uploads the input to gpu culling for the given material archetype.
16pub fn add_to_graph<'node, M: Material>(
17    graph: &mut RenderGraph<'node>,
18    key: u64,
19    sorting: Option<Sorting>,
20    name: &str,
21    pre_cull_data: DataHandle<Buffer>,
22) {
23    let mut builder = graph.add_node(format_sso!("pre-cull {:?}", name));
24    let data_handle = builder.add_data_output(pre_cull_data);
25
26    builder.build(move |_pt, renderer, _encoder_or_pass, _temps, _ready, graph_data| {
27        let objects = graph_data.object_manager.get_objects::<M>(key);
28        let objects = common::sort_objects(objects, graph_data.camera_manager, sorting);
29        let buffer = culling::build_gpu_cull_input(&renderer.device, &objects);
30        graph_data.set_data::<Buffer>(data_handle, Some(buffer));
31    });
32}