read_spz/
read_spz.rs

1//! This example reads a SPZ file containing Gaussians and uploads them to a GPU buffer.
2//!
3//! Run with:
4//!
5//! ```sh
6//! cargo run --example read_spz -- "path/to/input.spz"
7//! ```
8
9use glam::*;
10use wgpu_3dgs_core::{self as gs, BufferWrapper, ReadIterGaussian};
11
12type GaussianPod = gs::GaussianPodWithShHalfCov3dHalfConfigs;
13
14#[pollster::main]
15async fn main() {
16    let model_path = std::env::args()
17        .nth(1)
18        .unwrap_or_else(|| "examples/model.spz".to_string());
19
20    let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor::default());
21
22    let adapter = instance
23        .request_adapter(&wgpu::RequestAdapterOptions::default())
24        .await
25        .expect("adapter");
26
27    let (device, _) = adapter
28        .request_device(&wgpu::DeviceDescriptor {
29            label: Some("Device"),
30            required_limits: adapter.limits(),
31            ..Default::default()
32        })
33        .await
34        .expect("device");
35
36    println!("Reading gaussians from {}", model_path);
37
38    let gaussians = gs::SpzGaussians::read_from_file(&model_path).expect("gaussians");
39
40    println!("Header: {:?}", gaussians.header);
41
42    let gaussians_buffer = gs::GaussiansBuffer::<GaussianPod>::new(&device, &gaussians);
43
44    println!(
45        "Loaded {} gaussians ({:.3} KB) into GPU buffer.",
46        gaussians_buffer.len(),
47        gaussians_buffer.buffer().size() as f32 / 1024.0,
48    );
49}