pub struct DecodedClip {
pub dims: [u32; 3],
pub pivot: [f32; 3],
pub voxel_world_size: f32,
pub occ_words_per_col: u32,
pub loop_mode: LoopMode,
pub frames: Vec<VoxelFrame>,
pub dirs: Vec<Vec<u32>>,
pub durations: Vec<u32>,
}Expand description
A decoded clip: every frame expanded to a full VoxelFrame plus its
recomputed dirs (parallel to frames[i].colors) and resolved
durations. The runtime flipbook.
Fields§
§dims: [u32; 3]Fixed bounding box [xsiz, ysiz, zsiz] in voxels, copied from
the source VoxelClip.
pivot: [f32; 3]Model pivot in fractional voxel units from the box’s minimum corner, copied from the source clip.
voxel_world_size: f32Render scale (1 voxel = this many world units), copied from the source clip.
occ_words_per_col: u32u32 occupancy words per column: ceil(dims[2] / 32).
loop_mode: LoopModePlayback wrap behaviour, copied from the source clip.
frames: Vec<VoxelFrame>Every frame fully reconstructed (deltas applied), in playback order.
dirs: Vec<Vec<u32>>Per-frame surface-normal LUT indices, parallel to
frames[i].colors.
durations: Vec<u32>Resolved per-frame durations (ms) — always one entry per frame
(uniform default_frame_ms when the clip stored none).
Implementations§
Source§impl DecodedClip
impl DecodedClip
Sourcepub fn frame_count(&self) -> usize
pub fn frame_count(&self) -> usize
Number of frames in the clip (≥ 1 for a decodable clip).
Sourcepub fn total_ms(&self) -> u32
pub fn total_ms(&self) -> u32
Total loop length in ms (sum of frame durations), saturating rather than overflowing for absurdly long clips.
Sourcepub fn frame_at(&self, elapsed_ms: u32) -> usize
pub fn frame_at(&self, elapsed_ms: u32) -> usize
The frame index to show after elapsed_ms of playback, honouring
the clip’s LoopMode and per-frame durations. Pure — the host
(or the facade’s clip-instance clocks) drives set_clip_instance_frame
from this. Empty clip ⇒ 0.
LoopMode::Loop: wraps modulo the total length.LoopMode::Once: holds the last frame past the end.LoopMode::PingPong: bounces0→N-1→0over2·total.
Trait Implementations§
Source§impl Clone for DecodedClip
impl Clone for DecodedClip
Source§fn clone(&self) -> DecodedClip
fn clone(&self) -> DecodedClip
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for DecodedClip
impl RefUnwindSafe for DecodedClip
impl Send for DecodedClip
impl Sync for DecodedClip
impl Unpin for DecodedClip
impl UnsafeUnpin for DecodedClip
impl UnwindSafe for DecodedClip
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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