cranpose-render-wgpu 0.1.164

WGPU renderer backend for Cranpose
Documentation
use cranpose_ui_graphics::BlendMode;

use crate::render::{RunTier, SUPPORTED_BLEND_MODES, ShapePipelineKey, supported_blend_mode};

fn prewarmed() -> Vec<ShapePipelineKey> {
    let mut keys = Vec::new();
    for blend_mode in SUPPORTED_BLEND_MODES {
        for tier in [RunTier::Store, RunTier::Arena] {
            keys.push(ShapePipelineKey::general_for(blend_mode, tier));
        }
    }
    keys
}

#[test]
fn every_blend_mode_a_scene_can_ask_for_is_prewarmed() {
    let ready = prewarmed();
    for mode in BlendMode::ALL {
        for tier in [RunTier::Store, RunTier::Arena] {
            let key = ShapePipelineKey::general_for(supported_blend_mode(mode), tier);
            assert!(
                ready.contains(&key),
                "{mode:?} resolves to a general pipeline no one built at startup, so the \
                 first draw using it compiles inside its own frame"
            );
        }
    }
}

#[test]
fn the_prewarmed_set_is_the_whole_general_space() {
    let ready = prewarmed();
    assert_eq!(ready.len(), SUPPORTED_BLEND_MODES.len() * 2);
    assert!(ready.iter().all(|key| key.is_general()));
    let mut unique = ready.clone();
    unique.dedup();
    assert_eq!(unique.len(), ready.len(), "a pipeline built twice");
}

#[test]
fn an_unsupported_mode_folds_onto_one_that_is_built() {
    assert_eq!(
        supported_blend_mode(BlendMode::Multiply),
        BlendMode::SrcOver
    );
    assert_eq!(supported_blend_mode(BlendMode::Clear), BlendMode::SrcOver);
    assert_eq!(supported_blend_mode(BlendMode::Src), BlendMode::Src);
    assert_eq!(supported_blend_mode(BlendMode::DstOut), BlendMode::DstOut);
}