Skip to main content

SceneFrame

Struct SceneFrame 

Source
#[non_exhaustive]
pub struct SceneFrame {
Show 34 fields pub generation: u64, pub surfaces: SurfaceSubmission, pub point_clouds: Vec<PointCloudItem>, pub point_cloud_refs: Vec<PointCloudRefItem>, pub glyphs: Vec<GlyphItem>, pub glyph_set_refs: Vec<GlyphSetRefItem>, pub polylines: Vec<PolylineItem>, pub polyline_refs: Vec<PolylineRefItem>, pub volumes: Vec<VolumeItem>, pub isolines: Vec<IsolineItem>, pub streamtube_items: Vec<StreamtubeItem>, pub streamtube_refs: Vec<StreamtubeRefItem>, pub screen_images: Vec<ScreenImageItem>, pub gpu_implicit: Vec<GpuImplicitItem>, pub gpu_mc_jobs: Vec<GpuMarchingCubesJob>, pub volume_meshes: Vec<VolumeMeshItem>, pub tube_items: Vec<TubeItem>, pub tube_refs: Vec<TubeRefItem>, pub image_slices: Vec<ImageSliceItem>, pub tensor_glyphs: Vec<TensorGlyphItem>, pub tensor_glyph_set_refs: Vec<TensorGlyphSetRefItem>, pub ribbon_items: Vec<RibbonItem>, pub ribbon_refs: Vec<RibbonRefItem>, pub volume_surface_slices: Vec<VolumeSurfaceSliceItem>, pub sprite_items: Vec<SpriteItem>, pub sprite_set_refs: Vec<SpriteSetRefItem>, pub sprite_instance_set_refs: Vec<SpriteInstanceSetRefItem>, pub mesh_instances: Vec<MeshInstanceItem>, pub gpu_particle_systems: Vec<GpuParticleSystemItem>, pub gaussian_splats: Vec<GaussianSplatItem>, pub decals: Vec<DecalItem>, pub scatter_volumes: Vec<ScatterVolumeItem>, pub lights: Vec<LightSource>, pub plugin_items: HashMap<&'static str, Box<dyn PluginItemCollection>>,
}
Expand description

World-space scene content for one frame.

Groups all renderable world-space content submitted to the renderer. Surfaces are submitted through SurfaceSubmission; scientific visualization primitives sit alongside them.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§generation: u64

Scene version counter from Scene::version(). Default: 0 (triggers rebuild on first frame).

The renderer uses this to skip batch rebuild and GPU upload when scene content has not changed since the previous frame.

§surfaces: SurfaceSubmission

Surface geometry submission (opaque and transparent meshes).

§point_clouds: Vec<PointCloudItem>

Point cloud items to render this frame.

§point_cloud_refs: Vec<PointCloudRefItem>

References to pre-uploaded point clouds.

§glyphs: Vec<GlyphItem>

Instanced glyph items to render this frame.

§glyph_set_refs: Vec<GlyphSetRefItem>

References to pre-uploaded glyph sets.

§polylines: Vec<PolylineItem>

Polyline (streamline) items to render this frame.

§polyline_refs: Vec<PolylineRefItem>

References to pre-uploaded polylines (one entry per draw). Each PolylineRefItem carries a handle into the renderer’s polyline store plus a per-frame model matrix and item settings.

§volumes: Vec<VolumeItem>

Volume items to render this frame via GPU ray-marching.

§isolines: Vec<IsolineItem>

Isoline (contour line) items to render on mesh surfaces.

§streamtube_items: Vec<StreamtubeItem>

Streamtube items to render this frame.

§streamtube_refs: Vec<StreamtubeRefItem>

References to pre-uploaded streamtubes.

§screen_images: Vec<ScreenImageItem>

Screen-space image overlay items to render this frame.

§gpu_implicit: Vec<GpuImplicitItem>

GPU implicit surface items to render this frame.

§gpu_mc_jobs: Vec<GpuMarchingCubesJob>

GPU marching cubes jobs to dispatch this frame.

§volume_meshes: Vec<VolumeMeshItem>

Unstructured volume meshes submitted this frame.

Each VolumeMeshItem renders either as a boundary surface (default, through the standard mesh pipeline) or as a volumetric draw through projected tetrahedra (when VolumeMeshItem::transparency is set and the item was uploaded via upload_volume_mesh_with_transparency). Cell-level picking, selection outlines, and wireframe overlays are driven from this collection regardless of mode.

§tube_items: Vec<TubeItem>

General tube items to render this frame.

§tube_refs: Vec<TubeRefItem>

References to pre-uploaded tubes.

§image_slices: Vec<ImageSliceItem>

2D image slice items to render this frame.

§tensor_glyphs: Vec<TensorGlyphItem>

Tensor glyph items to render this frame.

§tensor_glyph_set_refs: Vec<TensorGlyphSetRefItem>

References to pre-uploaded tensor glyph sets.

§ribbon_items: Vec<RibbonItem>

Ribbon items to render this frame.

§ribbon_refs: Vec<RibbonRefItem>

References to pre-uploaded ribbons.

§volume_surface_slices: Vec<VolumeSurfaceSliceItem>

Volume surface slice items to render this frame.

§sprite_items: Vec<SpriteItem>

Billboard sprite items to render this frame.

§sprite_set_refs: Vec<SpriteSetRefItem>

References to pre-uploaded sprite sets (static billboards).

§sprite_instance_set_refs: Vec<SpriteInstanceSetRefItem>

References to pre-uploaded sprite instance sets (entity sprites).

§mesh_instances: Vec<MeshInstanceItem>

Mesh-instance batches to render this frame (mesh-based particles).

§gpu_particle_systems: Vec<GpuParticleSystemItem>

GPU particle systems to advance and draw this frame.

§gaussian_splats: Vec<GaussianSplatItem>

Gaussian splat items to render this frame.

§decals: Vec<DecalItem>

Screen-space decal items to render this frame (D1).

§scatter_volumes: Vec<ScatterVolumeItem>

Participating-media volumes (fog, smoke, clouds) to render this frame.

§lights: Vec<LightSource>

Scene-graph light sources to union with EffectsFrame::lighting.lights.

Populate via crate::scene::scene::Scene::collect_lights. The renderer chains these with the frame-data lights before building the GPU uniform; consumers that use only EffectsFrame::lighting leave this empty.

§plugin_items: HashMap<&'static str, Box<dyn PluginItemCollection>>

Plugin item collections, keyed by ItemTypePlugin::type_name.

Populated via Self::submit_plugin_items. Empty by default; the renderer iterates this map during prepare / paint and dispatches to the matching registered plugin. Entries whose type_name is not registered on the renderer are silently ignored.

Implementations§

Source§

impl SceneFrame

Source

pub fn new(surfaces: SurfaceSubmission) -> Self

Build a scene frame from a surface submission.

Source

pub fn from_surface_items(items: Vec<SceneRenderItem>) -> Self

Build a scene frame from a flat list of surface render items.

The Vec is converted to an Arc<[SceneRenderItem]> so callers that submit the same list repeatedly can cheaply clone the Arc instead of cloning the underlying data.

The frame’s generation defaults to 0. If items change every frame (e.g. from physics writeback or snapshot interpolation), chain with_generation to supply a value that changes with the content – otherwise the renderer’s instance-buffer cache will treat every frame as identical after the first upload:

// Static scene -- generation 0 is fine, items never change.
SceneFrame::from_surface_items(items)

// Dynamic scene -- pass a value that increments when content changes.
// scene.version() is the right source when writeback drives the items.
SceneFrame::from_surface_items(items).with_generation(scene.version())
Source

pub fn with_generation(self, generation: u64) -> Self

Override the generation stamp on a scene frame.

The renderer compares generation against the previous frame to decide whether to rebuild and re-upload the instance buffer. A generation of 0 (the default for from_surface_items) causes the cache to hit on every frame after the first, freezing rendered objects even if item transforms have changed.

Pass any value that changes when content changes. scene.version() is the natural choice when items are derived from scene writeback.

Source

pub fn submit_plugin_items<C: PluginItemCollection>( &mut self, type_name: &'static str, items: C, )

Submit a plugin item collection under type_name.

The renderer dispatches per-frame work and draw calls to the matching ItemTypePlugin registered with the same type_name. Submitting under a name that has no registered plugin is a no-op.

Calling this twice with the same name replaces the previous submission.

Source

pub fn from_shared_items(items: Arc<[SceneRenderItem]>, generation: u64) -> Self

Build a scene frame from an already-allocated shared slice.

Use this variant when you cache render items across frames:

// First frame / on change: rebuild the Arc once.
self.items_arc = Arc::from(scene.collect_render_items(&sel));

// Every frame: zero-cost clone.
SceneFrame::from_shared_items(Arc::clone(&self.items_arc), scene.version())
Source

pub fn from_scene(scene: &mut Scene, selection: &Selection) -> Self

Build a scene frame by collecting render items from a Scene.

Calls Scene::collect_render_items and stamps generation with the current scene version so the renderer can skip batch rebuilds on unchanged frames.

This is the preferred constructor for the common single-viewport path. Use SceneFrame::from_surface_items when you need to assemble render items manually.

Trait Implementations§

Source§

impl Default for SceneFrame

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &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)

Converts &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> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Send + Sync>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more