#![allow( dead_code, unused_imports, unused_variables, unused_macros, unreachable_patterns )] use hcie_composite::composite_layers; use hcie_protocol::Layer as ProtoLayer; fn count_opaque(pixels: &[u8]) -> usize { pixels.iter().skip(3).step_by(4).filter(|&&a| a > 0).count() } fn proto_to_comp(l: &ProtoLayer) -> ProtoLayer { l.clone() } #[test] fn test_composite_visibility_from_protocol_layer() { let _ = env_logger::try_init(); let w = 100u32; let h = 100u32; // Build layers using hcie_protocol::Layer (like Engine does) let mut bg = ProtoLayer::new_transparent("bg", w, h); bg.id = 1; bg.pixels = vec![255u8; (w * h * 4) as usize]; let mut top = ProtoLayer::new_transparent("top", w, h); top.id = 2; top.pixels = vec![0u8; (w * h * 4) as usize]; for y in 20..80 { for x in 20..80 { let i = (y * w + x) as usize * 4; top.pixels[i] = 0; top.pixels[i + 1] = 0; top.pixels[i + 2] = 0; top.pixels[i + 3] = 255; } } let run_composite = |layers: &[ProtoLayer]| -> Vec { composite_layers(layers, w, h) }; eprintln!( "BOTH VISIBLE: opaque={}/10000", count_opaque(&run_composite(&[bg.clone(), top.clone()])) ); bg.visible = false; eprintln!( "BG HIDDEN: opaque={}/10000 (expect 3600)", count_opaque(&run_composite(&[bg.clone(), top.clone()])) ); bg.visible = true; top.visible = false; eprintln!( "TOP HIDDEN: opaque={}/10000 (expect 10000)", count_opaque(&run_composite(&[bg.clone(), top.clone()])) ); bg.visible = false; top.visible = false; eprintln!( "BOTH HIDDEN: opaque={}/10000 (expect 0)", count_opaque(&run_composite(&[bg.clone(), top.clone()])) ); }