molgfx-render 0.3.2

The render graph, passes and the engine that drives a frame.
Documentation
struct BasePipelines<D: Device> {
    reset: D::Pipeline,
    reset_tiles: D::Pipeline,
    bin_atoms: D::Pipeline,
    compact_tiles: D::Pipeline,
    atoms: D::Pipeline,
    bonds: D::Pipeline,
    direct_bonds: D::Pipeline,
    visual_cull: D::Pipeline,
    visual_shading: D::Pipeline,
    visual_shading_all: D::Pipeline,
}

impl<D: Device> BasePipelines<D> {
    fn new(
        device: &D,
        atom_layout: &D::BindGroupLayout,
        bond_layout: &D::BindGroupLayout,
        visual_layout: &D::BindGroupLayout,
    ) -> Result<Self, RenderError> {
        let cull = shader(device, "cull", molgfx_shaders::CULL)?;
        let visual = shader(
            device,
            "visual program evaluator",
            molgfx_shaders::VISUAL_PROGRAM,
        )?;
        let atom_layouts = &[Some(atom_layout)];
        let bond_layouts = &[Some(bond_layout)];
        let visual_layouts = &[Some(visual_layout)];
        Ok(Self {
            reset: pipeline(
                device,
                &cull,
                atom_layouts,
                "reset indirect arguments",
                "reset_cull",
            )?,
            reset_tiles: pipeline(
                device,
                &cull,
                atom_layouts,
                "reset screen tiles",
                "reset_tiles",
            )?,
            bin_atoms: pipeline(
                device,
                &cull,
                atom_layouts,
                "bin screen tile atoms",
                "bin_atoms",
            )?,
            compact_tiles: pipeline(
                device,
                &cull,
                atom_layouts,
                "compact screen tiles",
                "compact_tiles",
            )?,
            atoms: pipeline(device, &cull, atom_layouts, "compact atoms", "cull_atoms")?,
            bonds: pipeline(device, &cull, bond_layouts, "compact bonds", "cull_bonds")?,
            direct_bonds: pipeline(
                device,
                &cull,
                bond_layouts,
                "compact wire bonds",
                "cull_bonds_direct",
            )?,
            visual_cull: pipeline(
                device,
                &visual,
                visual_layouts,
                "evaluate cull visuals",
                "evaluate_visual_cull",
            )?,
            visual_shading: pipeline(
                device,
                &visual,
                visual_layouts,
                "evaluate compact visuals",
                "evaluate_visual_shading",
            )?,
            visual_shading_all: pipeline(
                device,
                &visual,
                visual_layouts,
                "evaluate all visuals",
                "evaluate_visual_shading_all",
            )?,
        })
    }
}