Add headless wgpu vision and camera controls
Some checks failed
CI / rust-skia (Rust only) (push) Has been cancelled
CI / required (push) Has been cancelled

This commit is contained in:
2026-08-22 11:36:34 +02:00
parent 0dd2ca5824
commit c101007362
19 changed files with 1250 additions and 56 deletions

View File

@@ -120,6 +120,27 @@ async fn golden_scene_is_deterministic_depth_ordered_and_privacy_marked() {
assert!(pixels[center + 1] > 180 && pixels[center] < 80 && pixels[center + 2] < 80);
}
#[cfg(feature = "live-grid")]
#[tokio::test(flavor = "multi_thread")]
async fn offscreen_wgpu_renders_depth_ordered_scene_when_an_adapter_is_available() {
let Ok(renderer) = WgpuRenderer::new().await else {
return;
};
let limits = VisionLimits {
width: 64,
height: 64,
minimum_interval: std::time::Duration::ZERO,
..VisionLimits::default()
};
let rgba = tokio::task::spawn_blocking(move || renderer.render(&scene(), limits))
.await
.expect("render worker")
.expect("offscreen render");
assert_eq!(rgba.len(), 64 * 64 * 4);
let center = (32 * 64 + 32) * 4;
assert!(rgba[center + 1] > 180 && rgba[center] < 80 && rgba[center + 2] < 80);
}
#[tokio::test]
async fn invalid_camera_huge_scene_stale_generation_and_size_limit_fail_closed() {
let mut bad = scene();
@@ -332,7 +353,7 @@ async fn responder_adds_generic_image_payload_and_returns_summary_on_capability_
.await
.unwrap();
assert!(response.as_str().contains("does not support visual input"));
assert!(response.as_str().contains("Synthetic viewport"));
assert!(response.as_str().contains("Reconstructed viewport"));
assert_eq!(*endpoint.parts.lock().unwrap(), 3);
}