molgfx-render 0.1.2

The render graph, passes and the engine that drives a frame.
Documentation
use super::*;

fn group(family: u32, shape: u32, translucent: bool) -> PrimitiveDrawGroup {
    PrimitiveDrawGroup {
        family,
        shape,
        translucent,
        first: 11,
        len: 7,
    }
}

#[test]
fn opaque_analytic_classes_route_to_their_exact_shadow_kinds() {
    let cases = [
        (group(FAMILY_ELLIPSOID, 0, false), KIND_ELLIPSOID),
        (group(FAMILY_BOX, 0, false), KIND_BOX),
        (
            group(FAMILY_POLYGON, POLYGON_PENTAGON, false),
            KIND_POLYGON_PENTAGON,
        ),
        (
            group(FAMILY_POLYGON, POLYGON_HEXAGON, false),
            KIND_POLYGON_HEXAGON,
        ),
        (group(FAMILY_PARTICLE, PARTICLE_SPHERE, false), KIND_SPHERE),
        (
            group(FAMILY_PARTICLE, PARTICLE_CYLINDER, false),
            KIND_CYLINDER,
        ),
        (
            group(FAMILY_PARTICLE, PARTICLE_SPHEROCYLINDER, false),
            KIND_SPHEROCYLINDER,
        ),
        (group(FAMILY_PARTICLE, PARTICLE_CIRCLE, false), KIND_CIRCLE),
        (group(FAMILY_PARTICLE, PARTICLE_SQUARE, false), KIND_SQUARE),
        (
            group(FAMILY_PARTICLE, PARTICLE_SUPERQUADRIC, false),
            KIND_SUPERQUADRIC,
        ),
    ];

    for (group, expected) in cases {
        assert_eq!(shadow_kind(&group), Some(expected));
    }
}

#[test]
fn gaussian_and_every_translucent_group_are_excluded_from_shadows() {
    assert_eq!(
        shadow_kind(&group(FAMILY_PARTICLE, PARTICLE_GAUSSIAN, false)),
        None,
    );
    assert_eq!(shadow_kind(&group(FAMILY_ELLIPSOID, 0, true)), None);
    assert_eq!(
        shadow_kind(&group(FAMILY_PARTICLE, PARTICLE_SUPERQUADRIC, true)),
        None,
    );
}

#[test]
fn unmapped_shapes_never_fall_back_to_an_incorrect_intersection() {
    assert_eq!(shadow_kind(&group(FAMILY_POLYGON, 4, false)), None);
    assert_eq!(shadow_kind(&group(FAMILY_PARTICLE, 99, false)), None);
    assert_eq!(shadow_kind(&group(99, 0, false)), None);
}