aura-gui 0.3.5

UI nativa acelerada por GPU para escritorio, Android e iOS, en un solo crate: estilo tipo Tailwind, componentes, sombras, animaciones y agentes de IA. Reposo a cero. Licencia AGPL-3.0 o comercial.
//! Valida el shader WGSL y los pipelines contra un dispositivo real (sin ventana).

use aura_ui::gpu::TextureAtlas;
use aura_ui::gpu::pipelines::Pipelines;

async fn headless_device() -> Option<(wgpu::Device, wgpu::Queue)> {
    let instance = wgpu::Instance::new(wgpu::InstanceDescriptor::new_without_display_handle());
    let adapter = instance
        .request_adapter(&wgpu::RequestAdapterOptions {
            power_preference: wgpu::PowerPreference::LowPower,
            ..Default::default()
        })
        .await
        .ok()?;
    adapter.request_device(&wgpu::DeviceDescriptor::default()).await.ok()
}

#[test]
fn uber_shader_compiles_and_builds_all_pipelines() {
    let Some((device, queue)) = pollster::block_on(headless_device()) else {
        eprintln!("sin adaptador gráfico: se omite la prueba");
        return;
    };
    let scope = device.push_error_scope(wgpu::ErrorFilter::Validation);
    let pipelines = Pipelines::new(&device, wgpu::TextureFormat::Bgra8Unorm);
    assert!(pipelines.is_ok());
    let error = pollster::block_on(scope.pop());
    assert!(error.is_none(), "error de validación: {error:?}");

    let mut atlas = TextureAtlas::monochrome(&device);
    let tile = atlas.insert(Some(&queue), 4, 4, &[255; 16]);
    assert!(tile.is_some());
}