43 lines
1.6 KiB
Rust
43 lines
1.6 KiB
Rust
#![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<u8> {
|
|
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()])));
|
|
}
|