pub struct ObservingRenderer<R, F> { /* private fields */ }Expand description
A renderer that hands every scene it is given to a closure before passing it on.
Observation belongs here rather than in a backend. It needs nothing from the platform, so a backend that learned about inspection would carry it once per API, and the scene is already an engine type: a scene optimiser, a culling pass, an assertion about what primitives a renderer is handed and in what order, are all statements about this layer.
What a window painted is observable one layer up, where the frame still holds the scene it
built (Window::painted_quads), so this is for observing a renderer rather than a frame.
This wraps a renderer in another renderer, and the choices that make it useful are the
forwarding ones: it observes draw and
render_scene, and it does not override
render_scene_to_image, so a readback is observed
once through the render_scene it composes rather than twice.
Implementations§
Source§impl<R, F> ObservingRenderer<R, F>
impl<R, F> ObservingRenderer<R, F>
Sourcepub fn new(inner: R, on_scene: F) -> ObservingRenderer<R, F>
pub fn new(inner: R, on_scene: F) -> ObservingRenderer<R, F>
Wraps inner, calling on_scene with each scene it is asked to draw.
Sourcepub fn into_inner(self) -> R
pub fn into_inner(self) -> R
Takes back the observed renderer.
Trait Implementations§
Source§impl<R, F> SceneRenderer for ObservingRenderer<R, F>
impl<R, F> SceneRenderer for ObservingRenderer<R, F>
Source§fn draw(&mut self, scene: &Scene) -> bool
fn draw(&mut self, scene: &Scene) -> bool
scene, returning whether it was presented. Read moreSource§fn sprite_atlas(&self) -> Arc<dyn PlatformAtlas> ⓘ
fn sprite_atlas(&self) -> Arc<dyn PlatformAtlas> ⓘ
Source§fn set_viewport_size(&mut self, size: Size<DevicePixels>)
fn set_viewport_size(&mut self, size: Size<DevicePixels>)
Source§fn render_scene(
&mut self,
scene: &Scene,
size: Size<DevicePixels>,
) -> Result<(), Error>
fn render_scene( &mut self, scene: &Scene, size: Size<DevicePixels>, ) -> Result<(), Error>
Source§fn read_pixels(&mut self) -> Result<PixelBuffer, Error>
fn read_pixels(&mut self) -> Result<PixelBuffer, Error>
render_scene back. Read moreSource§fn offscreen_surface_handle(&self) -> Option<Arc<dyn Any + Send + Sync>>
fn offscreen_surface_handle(&self) -> Option<Arc<dyn Any + Send + Sync>>
render_scene, as a handle that may
cross a thread boundary. Read moreSource§fn render_scene_to_image(
&mut self,
scene: &Scene,
size: Size<DevicePixels>,
) -> Result<PixelBuffer, Error>
fn render_scene_to_image( &mut self, scene: &Scene, size: Size<DevicePixels>, ) -> Result<PixelBuffer, Error>
scene offscreen and reads the result back.Auto Trait Implementations§
impl<R, F> Freeze for ObservingRenderer<R, F>
impl<R, F> RefUnwindSafe for ObservingRenderer<R, F>where
R: RefUnwindSafe,
F: RefUnwindSafe,
impl<R, F> Send for ObservingRenderer<R, F>
impl<R, F> Sync for ObservingRenderer<R, F>
impl<R, F> Unpin for ObservingRenderer<R, F>
impl<R, F> UnsafeUnpin for ObservingRenderer<R, F>where
R: UnsafeUnpin,
F: UnsafeUnpin,
impl<R, F> UnwindSafe for ObservingRenderer<R, F>where
R: UnwindSafe,
F: UnwindSafe,
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> 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