#![cfg(feature = "gpu")]
use crate::model::{Camera, Decorations, GraphModel};
pub fn probe_usable_gpu() -> bool {
let instance = wgpu::Instance::default();
let adapter = pollster::block_on(instance.request_adapter(&wgpu::RequestAdapterOptions {
power_preference: wgpu::PowerPreference::HighPerformance,
force_fallback_adapter: false,
compatible_surface: None,
}));
match adapter {
Ok(adapter) => pollster::block_on(adapter.request_device(&wgpu::DeviceDescriptor {
label: Some("facett-graphview probe"),
required_features: wgpu::Features::empty(),
required_limits: wgpu::Limits::downlevel_defaults(),
memory_hints: wgpu::MemoryHints::Performance,
experimental_features: wgpu::ExperimentalFeatures::default(),
trace: wgpu::Trace::Off,
}))
.is_ok(),
Err(_) => false,
}
}
pub fn build_scene(model: &GraphModel, _decorations: &Decorations, camera: &Camera) -> vello::Scene {
use vello::kurbo::{Affine, RoundedRect};
use vello::peniko::{Color, Fill};
let mut scene = vello::Scene::new();
let hw = (crate::model::BOX_W * 0.5 * camera.zoom) as f64;
let hh = (crate::model::BOX_H * 0.5 * camera.zoom) as f64;
for n in &model.nodes {
let (cx, cy) = camera.project(n.pos);
let rect =
RoundedRect::new(cx as f64 - hw, cy as f64 - hh, cx as f64 + hw, cy as f64 + hh, 5.0);
let c = Color::from_rgba8(n.fill.r, n.fill.g, n.fill.b, n.fill.a);
scene.fill(Fill::NonZero, Affine::IDENTITY, c, None, &rect);
}
scene
}