#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum PassId {
Geometry,
BackdropCopy,
BackdropBlur,
Glass,
UI,
BloomExtract,
BloomBlur,
Composite,
Accessibility,
Present,
}
pub struct PassNode {
pub id: PassId,
pub enabled: bool,
}
impl PassNode {
pub const fn new(id: PassId) -> Self {
Self { id, enabled: true }
}
pub const fn disabled(id: PassId) -> Self {
Self { id, enabled: false }
}
}
pub use PassId::*;
pub fn build_pass_sequence(
has_glass: bool,
has_bloom: bool,
accessibility_enabled: bool,
) -> Vec<PassNode> {
let mut nodes = Vec::with_capacity(10);
nodes.push(PassNode::new(Geometry));
if has_glass {
nodes.push(PassNode::new(BackdropCopy));
nodes.push(PassNode::new(BackdropBlur));
nodes.push(PassNode::new(Glass));
}
nodes.push(PassNode::new(UI));
if has_bloom {
nodes.push(PassNode::new(BloomExtract));
nodes.push(PassNode::new(BloomBlur));
}
nodes.push(PassNode::new(Composite));
nodes.push(if accessibility_enabled {
PassNode::new(Accessibility)
} else {
PassNode::disabled(Accessibility)
});
nodes.push(PassNode::new(Present));
nodes
}