1#![doc = include_str!("../README.md")]
2
3mod buffer;
4mod error;
5mod modifier;
6mod non_destructive_modifier;
7mod selection;
8mod selection_modifier;
9pub mod shader;
10
11pub use buffer::*;
12pub use error::*;
13pub use modifier::*;
14pub use non_destructive_modifier::*;
15pub use selection::*;
16pub use selection_modifier::*;
17
18pub use wgpu_3dgs_core as core;
19
20use wgpu_3dgs_core::{
21 BufferWrapper, GaussianPod, GaussianTransformBuffer, GaussiansBuffer, IterGaussian,
22 ModelTransformBuffer,
23};
24
25pub struct Editor<G: GaussianPod> {
39 pub model_transform_buffer: ModelTransformBuffer,
40 pub gaussian_transform_buffer: GaussianTransformBuffer,
41 pub gaussians_buffer: GaussiansBuffer<G>,
42}
43
44impl<G: GaussianPod> Editor<G> {
45 pub fn new(device: &wgpu::Device, gaussians: &impl IterGaussian) -> Self {
47 log::debug!("Creating model transform buffer");
48 let model_transform_buffer = ModelTransformBuffer::new(device);
49
50 log::debug!("Creating gaussian transform buffer");
51 let gaussian_transform_buffer = GaussianTransformBuffer::new(device);
52
53 log::debug!("Creating gaussians buffer");
54 let gaussians_buffer = GaussiansBuffer::new_with_usage(
55 device,
56 gaussians,
57 GaussiansBuffer::<G>::DEFAULT_USAGES | wgpu::BufferUsages::COPY_SRC,
58 );
59
60 log::debug!("Basic editor created");
61
62 Self {
63 model_transform_buffer,
64 gaussian_transform_buffer,
65 gaussians_buffer,
66 }
67 }
68
69 pub fn apply<'a>(
71 &self,
72 device: &wgpu::Device,
73 encoder: &mut wgpu::CommandEncoder,
74 modifiers: impl IntoIterator<Item = &'a dyn Modifier<G>>,
75 ) {
76 for modifier in modifiers.into_iter() {
77 modifier.apply(
78 device,
79 encoder,
80 &self.gaussians_buffer,
81 &self.model_transform_buffer,
82 &self.gaussian_transform_buffer,
83 );
84 }
85 }
86}