2026-07-16 22:10:22 +03:00
|
|
|
#![allow(
|
|
|
|
|
dead_code,
|
|
|
|
|
unused_imports,
|
|
|
|
|
unused_variables,
|
|
|
|
|
unused_macros,
|
|
|
|
|
unreachable_patterns
|
|
|
|
|
)]
|
2026-07-09 02:59:53 +03:00
|
|
|
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();
|
2026-07-16 22:10:22 +03:00
|
|
|
let w = 100u32;
|
|
|
|
|
let h = 100u32;
|
2026-07-09 02:59:53 +03:00
|
|
|
|
|
|
|
|
// Build layers using hcie_protocol::Layer (like Engine does)
|
|
|
|
|
let mut bg = ProtoLayer::new_transparent("bg", w, h);
|
|
|
|
|
bg.id = 1;
|
2026-07-16 22:10:22 +03:00
|
|
|
bg.pixels = vec![255u8; (w * h * 4) as usize];
|
2026-07-09 02:59:53 +03:00
|
|
|
|
|
|
|
|
let mut top = ProtoLayer::new_transparent("top", w, h);
|
|
|
|
|
top.id = 2;
|
2026-07-16 22:10:22 +03:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-07-09 02:59:53 +03:00
|
|
|
|
2026-07-16 22:10:22 +03:00
|
|
|
let run_composite = |layers: &[ProtoLayer]| -> Vec<u8> { composite_layers(layers, w, h) };
|
2026-07-09 02:59:53 +03:00
|
|
|
|
2026-07-16 22:10:22 +03:00
|
|
|
eprintln!(
|
|
|
|
|
"BOTH VISIBLE: opaque={}/10000",
|
|
|
|
|
count_opaque(&run_composite(&[bg.clone(), top.clone()]))
|
|
|
|
|
);
|
2026-07-09 02:59:53 +03:00
|
|
|
bg.visible = false;
|
2026-07-16 22:10:22 +03:00
|
|
|
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()]))
|
|
|
|
|
);
|
2026-07-09 02:59:53 +03:00
|
|
|
}
|