pub struct GaussiansBuffer<G: GaussianPod>(/* private fields */);Expand description
The Gaussians storage buffer.
This buffer holds an array of Gaussians represented by the specified GaussianPod.
Implementations§
Source§impl<G: GaussianPod> GaussiansBuffer<G>
impl<G: GaussianPod> GaussiansBuffer<G>
Sourcepub fn new(device: &Device, gaussians: &impl IterGaussian) -> Self
pub fn new(device: &Device, gaussians: &impl IterGaussian) -> Self
Create a new Gaussians buffer.
Examples found in repository?
15async fn main() {
16 let model_path = std::env::args()
17 .nth(1)
18 .unwrap_or_else(|| "examples/model.ply".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::PlyGaussians::read_from_file(&model_path).expect("gaussians");
39
40 let gaussians_buffer = gs::GaussiansBuffer::<GaussianPod>::new(&device, &gaussians);
41
42 println!(
43 "Loaded {} gaussians ({:.3} KB) into GPU buffer.",
44 gaussians_buffer.len(),
45 gaussians_buffer.buffer().size() as f32 / 1024.0,
46 );
47}More examples
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}Sourcepub fn new_with_usage(
device: &Device,
gaussians: &impl IterGaussian,
usage: BufferUsages,
) -> Self
pub fn new_with_usage( device: &Device, gaussians: &impl IterGaussian, usage: BufferUsages, ) -> Self
Create a new Gaussians buffer with the specified size with wgpu::BufferUsages.
Sourcepub fn new_with_pods(device: &Device, gaussians: &[G]) -> Self
pub fn new_with_pods(device: &Device, gaussians: &[G]) -> Self
Create a new Gaussians buffer with GaussianPod.
Sourcepub fn new_with_pods_and_usage(
device: &Device,
gaussians: &[G],
usage: BufferUsages,
) -> Self
pub fn new_with_pods_and_usage( device: &Device, gaussians: &[G], usage: BufferUsages, ) -> Self
Create a new Gaussians buffer with GaussianPod and the specified size and
wgpu::BufferUsages.
Sourcepub fn new_empty(device: &Device, len: usize) -> Self
pub fn new_empty(device: &Device, len: usize) -> Self
Create a new Gaussians buffer with the specified size.
Sourcepub fn new_empty_with_usage(
device: &Device,
len: usize,
usage: BufferUsages,
) -> Self
pub fn new_empty_with_usage( device: &Device, len: usize, usage: BufferUsages, ) -> Self
Create a new Gaussians buffer with the specified size and wgpu::BufferUsages.
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Get the number of Gaussians.
Examples found in repository?
15async fn main() {
16 let model_path = std::env::args()
17 .nth(1)
18 .unwrap_or_else(|| "examples/model.ply".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::PlyGaussians::read_from_file(&model_path).expect("gaussians");
39
40 let gaussians_buffer = gs::GaussiansBuffer::<GaussianPod>::new(&device, &gaussians);
41
42 println!(
43 "Loaded {} gaussians ({:.3} KB) into GPU buffer.",
44 gaussians_buffer.len(),
45 gaussians_buffer.buffer().size() as f32 / 1024.0,
46 );
47}More examples
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}Sourcepub fn update(
&self,
queue: &Queue,
gaussians: &impl IterGaussian,
) -> Result<(), GaussiansBufferUpdateError>
pub fn update( &self, queue: &Queue, gaussians: &impl IterGaussian, ) -> Result<(), GaussiansBufferUpdateError>
Update the buffer.
gaussians should have the same number of Gaussians as the buffer.
Sourcepub fn update_with_pod(
&self,
queue: &Queue,
pods: &[G],
) -> Result<(), GaussiansBufferUpdateError>
pub fn update_with_pod( &self, queue: &Queue, pods: &[G], ) -> Result<(), GaussiansBufferUpdateError>
Update the buffer with GaussianPod.
pods should have the same number of Gaussians as the buffer.
Sourcepub fn update_range(
&self,
queue: &Queue,
start: usize,
gaussians: &[Gaussian],
) -> Result<(), GaussiansBufferUpdateRangeError>
pub fn update_range( &self, queue: &Queue, start: usize, gaussians: &[Gaussian], ) -> Result<(), GaussiansBufferUpdateRangeError>
Update a range of the buffer.
gaussians should fit in the buffer starting from start.
Sourcepub fn update_range_with_pod(
&self,
queue: &Queue,
start: usize,
pods: &[G],
) -> Result<(), GaussiansBufferUpdateRangeError>
pub fn update_range_with_pod( &self, queue: &Queue, start: usize, pods: &[G], ) -> Result<(), GaussiansBufferUpdateRangeError>
Update a range of the buffer with GaussianPod.
pods should fit in the buffer starting from start.
Sourcepub async fn download_gaussians(
&self,
device: &Device,
queue: &Queue,
) -> Result<Vec<Gaussian>, DownloadBufferError>
pub async fn download_gaussians( &self, device: &Device, queue: &Queue, ) -> Result<Vec<Gaussian>, DownloadBufferError>
Trait Implementations§
Source§impl<G: GaussianPod> BufferWrapper for GaussiansBuffer<G>
impl<G: GaussianPod> BufferWrapper for GaussiansBuffer<G>
Source§const DEFAULT_USAGES: BufferUsages
const DEFAULT_USAGES: BufferUsages
Source§fn download<'life0, 'life1, 'life2, 'async_trait, T>(
&'life0 self,
device: &'life1 Device,
queue: &'life2 Queue,
) -> Pin<Box<dyn Future<Output = Result<Vec<T>, DownloadBufferError>> + Send + 'async_trait>>where
Self: Send + Sync + 'async_trait,
T: 'async_trait + NoUninit + AnyBitPattern,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn download<'life0, 'life1, 'life2, 'async_trait, T>(
&'life0 self,
device: &'life1 Device,
queue: &'life2 Queue,
) -> Pin<Box<dyn Future<Output = Result<Vec<T>, DownloadBufferError>> + Send + 'async_trait>>where
Self: Send + Sync + 'async_trait,
T: 'async_trait + NoUninit + AnyBitPattern,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Vec.Source§fn prepare_download(
&self,
device: &Device,
encoder: &mut CommandEncoder,
) -> Buffer
fn prepare_download( &self, device: &Device, encoder: &mut CommandEncoder, ) -> Buffer
Source§fn map_download<'life0, 'life1, 'async_trait, T>(
download: &'life0 Buffer,
device: &'life1 Device,
) -> Pin<Box<dyn Future<Output = Result<Vec<T>, DownloadBufferError>> + Send + 'async_trait>>where
T: 'async_trait + NoUninit + AnyBitPattern,
Self: Send + 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn map_download<'life0, 'life1, 'async_trait, T>(
download: &'life0 Buffer,
device: &'life1 Device,
) -> Pin<Box<dyn Future<Output = Result<Vec<T>, DownloadBufferError>> + Send + 'async_trait>>where
T: 'async_trait + NoUninit + AnyBitPattern,
Self: Send + 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn map_download_with_poll_type<'life0, 'life1, 'async_trait, T>(
download: &'life0 Buffer,
device: &'life1 Device,
poll_type: PollType,
) -> Pin<Box<dyn Future<Output = Result<Vec<T>, DownloadBufferError>> + Send + 'async_trait>>where
T: 'async_trait + NoUninit + AnyBitPattern,
'life0: 'async_trait,
'life1: 'async_trait,
fn map_download_with_poll_type<'life0, 'life1, 'async_trait, T>(
download: &'life0 Buffer,
device: &'life1 Device,
poll_type: PollType,
) -> Pin<Box<dyn Future<Output = Result<Vec<T>, DownloadBufferError>> + Send + 'async_trait>>where
T: 'async_trait + NoUninit + AnyBitPattern,
'life0: 'async_trait,
'life1: 'async_trait,
wgpu::PollType. Read moreSource§impl<G: Clone + GaussianPod> Clone for GaussiansBuffer<G>
impl<G: Clone + GaussianPod> Clone for GaussiansBuffer<G>
Source§fn clone(&self) -> GaussiansBuffer<G>
fn clone(&self) -> GaussiansBuffer<G>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<G: Debug + GaussianPod> Debug for GaussiansBuffer<G>
impl<G: Debug + GaussianPod> Debug for GaussiansBuffer<G>
Source§impl<G: GaussianPod> From<GaussiansBuffer<G>> for Buffer
impl<G: GaussianPod> From<GaussiansBuffer<G>> for Buffer
Source§fn from(wrapper: GaussiansBuffer<G>) -> Self
fn from(wrapper: GaussiansBuffer<G>) -> Self
Auto Trait Implementations§
impl<G> Freeze for GaussiansBuffer<G>
impl<G> !RefUnwindSafe for GaussiansBuffer<G>
impl<G> Send for GaussiansBuffer<G>
impl<G> Sync for GaussiansBuffer<G>
impl<G> Unpin for GaussiansBuffer<G>where
G: Unpin,
impl<G> !UnwindSafe for GaussiansBuffer<G>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more