pub struct PersistentRenderer { /* private fields */ }Expand description
Per-step persistent renderer for feedback loops. See the module docs in
render::PersistentRenderer for lifetime, thread-affinity, and
object/config-invariance guarantees. Built for the surface-policy use case
in neocortx where a fixed object is rendered from a moving camera many
times per episode (issue #65).
Persistent per-step renderer. Loads the scene once at new() and renders
one frame per render() call by mutating the camera transform and scene
root rotation in-place. Built for surface-policy feedback loops where the
object stays fixed for the duration of an episode and the camera moves
every step. See issue #65.
§Thread affinity
PersistentRenderer must be created, used, and dropped on the same thread.
Holds a bevy::App that owns GPU resources not safe to move across
threads; !Send + !Sync is enforced via PhantomData<*const ()>.
§Object + config invariants
object_dir and RenderConfig are fixed at new(). To render a different
object or change resolution/lighting, drop and rebuild. Rotation may change
freely between render() calls.
Implementations§
Source§impl PersistentRenderer
impl PersistentRenderer
Sourcepub fn new(
object_dir: &Path,
render_config: &RenderConfig,
) -> Result<Self, RenderError>
pub fn new( object_dir: &Path, render_config: &RenderConfig, ) -> Result<Self, RenderError>
Build the App, load the scene + texture, spawn the scene root, and drive
one warmup render whose output is discarded. After new() returns, the
first user-facing render() call benefits from a warm PSO cache and
applied materials.
Sourcepub fn render(
&mut self,
camera_transform: &Transform,
object_rotation: &ObjectRotation,
) -> Result<RenderOutput, RenderError>
pub fn render( &mut self, camera_transform: &Transform, object_rotation: &ObjectRotation, ) -> Result<RenderOutput, RenderError>
Render one frame from the given camera transform and object rotation.
Reuses the loaded scene + warm PSO cache from new().
Sourcepub fn object_dir(&self) -> &Path
pub fn object_dir(&self) -> &Path
Path to the YCB object directory this renderer was bound to.
Sourcepub fn render_config(&self) -> &RenderConfig
pub fn render_config(&self) -> &RenderConfig
The RenderConfig this renderer was constructed with.
Auto Trait Implementations§
impl !Freeze for PersistentRenderer
impl !RefUnwindSafe for PersistentRenderer
impl !Send for PersistentRenderer
impl !Sync for PersistentRenderer
impl Unpin for PersistentRenderer
impl UnsafeUnpin for PersistentRenderer
impl !UnwindSafe for PersistentRenderer
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T ShaderType for self. When used in AsBindGroup
derives, it is safe to assume that all images in self exist.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> 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, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
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