pub struct NonDestructiveModifier<G: GaussianPod, M: Modifier<G>> {
pub modifier: M,
pub original_gaussians: GaussiansBuffer<G>,
}Expand description
A wrapper for any Modifier to not modify the original Gaussians.
This modifier stores a copy of the original Gaussians, whenever it is applied, it first copies original Gaussians to the destination Gaussians buffer, then applies the inner modifier.
Fields§
§modifier: M§original_gaussians: GaussiansBuffer<G>Implementations§
Source§impl<G: GaussianPod, M: Modifier<G>> NonDestructiveModifier<G, M>
impl<G: GaussianPod, M: Modifier<G>> NonDestructiveModifier<G, M>
Sourcepub fn new(
device: &Device,
queue: &Queue,
modifier: M,
gaussians: &GaussiansBuffer<G>,
) -> Result<Self, NonDestructiveModifierCreateError>
pub fn new( device: &Device, queue: &Queue, modifier: M, gaussians: &GaussiansBuffer<G>, ) -> Result<Self, NonDestructiveModifierCreateError>
Create a new non-destructive modifier.
gaussians must have wgpu::BufferUsages::COPY_SRC in its usage.
Sourcepub fn try_apply(
&self,
device: &Device,
encoder: &mut CommandEncoder,
gaussians: &GaussiansBuffer<G>,
model_transform: &ModelTransformBuffer,
gaussian_transform: &GaussianTransformBuffer,
) -> Result<(), GaussiansBufferUpdateError>
pub fn try_apply( &self, device: &Device, encoder: &mut CommandEncoder, gaussians: &GaussiansBuffer<G>, model_transform: &ModelTransformBuffer, gaussian_transform: &GaussianTransformBuffer, ) -> Result<(), GaussiansBufferUpdateError>
Try apply the modifier.
Returns Err if the original Gaussians count does not match the target Gaussians count.
Sourcepub fn try_apply_with(
&self,
encoder: &mut CommandEncoder,
gaussians: &GaussiansBuffer<G>,
f: impl FnOnce(&mut CommandEncoder, &M, &GaussiansBuffer<G>),
) -> Result<(), GaussiansBufferUpdateError>
pub fn try_apply_with( &self, encoder: &mut CommandEncoder, gaussians: &GaussiansBuffer<G>, f: impl FnOnce(&mut CommandEncoder, &M, &GaussiansBuffer<G>), ) -> Result<(), GaussiansBufferUpdateError>
Apply the modifier with a function.
This is convenient when you are not using the Modifier::apply function, and instead
want to use other functions to apply the modifier.
Trait Implementations§
Source§impl<G: Debug + GaussianPod, M: Debug + Modifier<G>> Debug for NonDestructiveModifier<G, M>
impl<G: Debug + GaussianPod, M: Debug + Modifier<G>> Debug for NonDestructiveModifier<G, M>
Source§impl<G: GaussianPod, M: Modifier<G>> Modifier<G> for NonDestructiveModifier<G, M>
impl<G: GaussianPod, M: Modifier<G>> Modifier<G> for NonDestructiveModifier<G, M>
Source§fn apply(
&self,
device: &Device,
encoder: &mut CommandEncoder,
gaussians: &GaussiansBuffer<G>,
model_transform: &ModelTransformBuffer,
gaussian_transform: &GaussianTransformBuffer,
)
fn apply( &self, device: &Device, encoder: &mut CommandEncoder, gaussians: &GaussiansBuffer<G>, model_transform: &ModelTransformBuffer, gaussian_transform: &GaussianTransformBuffer, )
Apply the modifier to the Gaussians.
Auto Trait Implementations§
impl<G, M> Freeze for NonDestructiveModifier<G, M>where
M: Freeze,
impl<G, M> !RefUnwindSafe for NonDestructiveModifier<G, M>
impl<G, M> Send for NonDestructiveModifier<G, M>where
M: Send,
impl<G, M> Sync for NonDestructiveModifier<G, M>where
M: Sync,
impl<G, M> Unpin for NonDestructiveModifier<G, M>
impl<G, M> !UnwindSafe for NonDestructiveModifier<G, M>
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
Mutably borrows from an owned value. Read more
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>
Converts
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>
Converts
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