SortedRenderPhase

Struct SortedRenderPhase 

Source
pub struct SortedRenderPhase<I>
where I: SortedPhaseItem,
{ pub items: Vec<I>, }
Expand description

A collection of all items to be rendered that will be encoded to GPU commands for a single render phase for a single view.

Each view (camera, or shadow-casting light, etc.) can have one or multiple render phases. They are used to queue entities for rendering. Multiple phases might be required due to different sorting/batching behaviors (e.g. opaque: front to back, transparent: back to front) or because one phase depends on the rendered texture of the previous phase (e.g. for screen-space reflections). All PhaseItems are then rendered using a single TrackedRenderPass. The render pass might be reused for multiple phases to reduce GPU overhead.

This flavor of render phase is used only for meshes that need to be sorted back-to-front, such as transparent meshes. For items that don’t need strict sorting, BinnedRenderPhase is preferred, for performance.

Fields§

§items: Vec<I>

The items within this SortedRenderPhase.

Implementations§

Source§

impl<I> SortedRenderPhase<I>
where I: SortedPhaseItem,

Source

pub fn add(&mut self, item: I)

Adds a PhaseItem to this render phase.

Examples found in repository?
examples/shader_advanced/custom_shader_instancing.rs (lines 160-168)
124fn queue_custom(
125    transparent_3d_draw_functions: Res<DrawFunctions<Transparent3d>>,
126    custom_pipeline: Res<CustomPipeline>,
127    mut pipelines: ResMut<SpecializedMeshPipelines<CustomPipeline>>,
128    pipeline_cache: Res<PipelineCache>,
129    meshes: Res<RenderAssets<RenderMesh>>,
130    render_mesh_instances: Res<RenderMeshInstances>,
131    material_meshes: Query<(Entity, &MainEntity), With<InstanceMaterialData>>,
132    mut transparent_render_phases: ResMut<ViewSortedRenderPhases<Transparent3d>>,
133    views: Query<(&ExtractedView, &Msaa)>,
134) {
135    let draw_custom = transparent_3d_draw_functions.read().id::<DrawCustom>();
136
137    for (view, msaa) in &views {
138        let Some(transparent_phase) = transparent_render_phases.get_mut(&view.retained_view_entity)
139        else {
140            continue;
141        };
142
143        let msaa_key = MeshPipelineKey::from_msaa_samples(msaa.samples());
144
145        let view_key = msaa_key | MeshPipelineKey::from_hdr(view.hdr);
146        let rangefinder = view.rangefinder3d();
147        for (entity, main_entity) in &material_meshes {
148            let Some(mesh_instance) = render_mesh_instances.render_mesh_queue_data(*main_entity)
149            else {
150                continue;
151            };
152            let Some(mesh) = meshes.get(mesh_instance.mesh_asset_id) else {
153                continue;
154            };
155            let key =
156                view_key | MeshPipelineKey::from_primitive_topology(mesh.primitive_topology());
157            let pipeline = pipelines
158                .specialize(&pipeline_cache, &custom_pipeline, key, &mesh.layout)
159                .unwrap();
160            transparent_phase.add(Transparent3d {
161                entity: (entity, *main_entity),
162                pipeline,
163                draw_function: draw_custom,
164                distance: rangefinder.distance_translation(&mesh_instance.translation),
165                batch_range: 0..1,
166                extra_index: PhaseItemExtraIndex::None,
167                indexed: true,
168            });
169        }
170    }
171}
More examples
Hide additional examples
examples/2d/mesh2d_manual.rs (lines 418-430)
377pub fn queue_colored_mesh2d(
378    transparent_draw_functions: Res<DrawFunctions<Transparent2d>>,
379    colored_mesh2d_pipeline: Res<ColoredMesh2dPipeline>,
380    mut pipelines: ResMut<SpecializedRenderPipelines<ColoredMesh2dPipeline>>,
381    pipeline_cache: Res<PipelineCache>,
382    render_meshes: Res<RenderAssets<RenderMesh>>,
383    render_mesh_instances: Res<RenderColoredMesh2dInstances>,
384    mut transparent_render_phases: ResMut<ViewSortedRenderPhases<Transparent2d>>,
385    views: Query<(&RenderVisibleEntities, &ExtractedView, &Msaa)>,
386) {
387    if render_mesh_instances.is_empty() {
388        return;
389    }
390    // Iterate each view (a camera is a view)
391    for (visible_entities, view, msaa) in &views {
392        let Some(transparent_phase) = transparent_render_phases.get_mut(&view.retained_view_entity)
393        else {
394            continue;
395        };
396
397        let draw_colored_mesh2d = transparent_draw_functions.read().id::<DrawColoredMesh2d>();
398
399        let mesh_key = Mesh2dPipelineKey::from_msaa_samples(msaa.samples())
400            | Mesh2dPipelineKey::from_hdr(view.hdr);
401
402        // Queue all entities visible to that view
403        for (render_entity, visible_entity) in visible_entities.iter::<Mesh2d>() {
404            if let Some(mesh_instance) = render_mesh_instances.get(visible_entity) {
405                let mesh2d_handle = mesh_instance.mesh_asset_id;
406                let mesh2d_transforms = &mesh_instance.transforms;
407                // Get our specialized pipeline
408                let mut mesh2d_key = mesh_key;
409                let Some(mesh) = render_meshes.get(mesh2d_handle) else {
410                    continue;
411                };
412                mesh2d_key |= Mesh2dPipelineKey::from_primitive_topology(mesh.primitive_topology());
413
414                let pipeline_id =
415                    pipelines.specialize(&pipeline_cache, &colored_mesh2d_pipeline, mesh2d_key);
416
417                let mesh_z = mesh2d_transforms.world_from_local.translation.z;
418                transparent_phase.add(Transparent2d {
419                    entity: (*render_entity, *visible_entity),
420                    draw_function: draw_colored_mesh2d,
421                    pipeline: pipeline_id,
422                    // The 2d render items are sorted according to their z value before rendering,
423                    // in order to get correct transparency
424                    sort_key: FloatOrd(mesh_z),
425                    // This material is not batched
426                    batch_range: 0..1,
427                    extra_index: PhaseItemExtraIndex::None,
428                    extracted_index: usize::MAX,
429                    indexed: mesh.indexed(),
430                });
431            }
432        }
433    }
434}
examples/shader_advanced/custom_render_phase.rs (lines 555-565)
496fn queue_custom_meshes(
497    custom_draw_functions: Res<DrawFunctions<Stencil3d>>,
498    mut pipelines: ResMut<SpecializedMeshPipelines<StencilPipeline>>,
499    pipeline_cache: Res<PipelineCache>,
500    custom_draw_pipeline: Res<StencilPipeline>,
501    render_meshes: Res<RenderAssets<RenderMesh>>,
502    render_mesh_instances: Res<RenderMeshInstances>,
503    mut custom_render_phases: ResMut<ViewSortedRenderPhases<Stencil3d>>,
504    mut views: Query<(&ExtractedView, &RenderVisibleEntities, &Msaa)>,
505    has_marker: Query<(), With<DrawStencil>>,
506) {
507    for (view, visible_entities, msaa) in &mut views {
508        let Some(custom_phase) = custom_render_phases.get_mut(&view.retained_view_entity) else {
509            continue;
510        };
511        let draw_custom = custom_draw_functions.read().id::<DrawMesh3dStencil>();
512
513        // Create the key based on the view.
514        // In this case we only care about MSAA and HDR
515        let view_key = MeshPipelineKey::from_msaa_samples(msaa.samples())
516            | MeshPipelineKey::from_hdr(view.hdr);
517
518        let rangefinder = view.rangefinder3d();
519        // Since our phase can work on any 3d mesh we can reuse the default mesh 3d filter
520        for (render_entity, visible_entity) in visible_entities.iter::<Mesh3d>() {
521            // We only want meshes with the marker component to be queued to our phase.
522            if has_marker.get(*render_entity).is_err() {
523                continue;
524            }
525            let Some(mesh_instance) = render_mesh_instances.render_mesh_queue_data(*visible_entity)
526            else {
527                continue;
528            };
529            let Some(mesh) = render_meshes.get(mesh_instance.mesh_asset_id) else {
530                continue;
531            };
532
533            // Specialize the key for the current mesh entity
534            // For this example we only specialize based on the mesh topology
535            // but you could have more complex keys and that's where you'd need to create those keys
536            let mut mesh_key = view_key;
537            mesh_key |= MeshPipelineKey::from_primitive_topology(mesh.primitive_topology());
538
539            let pipeline_id = pipelines.specialize(
540                &pipeline_cache,
541                &custom_draw_pipeline,
542                mesh_key,
543                &mesh.layout,
544            );
545            let pipeline_id = match pipeline_id {
546                Ok(id) => id,
547                Err(err) => {
548                    error!("{}", err);
549                    continue;
550                }
551            };
552            let distance = rangefinder.distance_translation(&mesh_instance.translation);
553            // At this point we have all the data we need to create a phase item and add it to our
554            // phase
555            custom_phase.add(Stencil3d {
556                // Sort the data based on the distance to the view
557                sort_key: FloatOrd(distance),
558                entity: (*render_entity, *visible_entity),
559                pipeline: pipeline_id,
560                draw_function: draw_custom,
561                // Sorted phase items aren't batched
562                batch_range: 0..1,
563                extra_index: PhaseItemExtraIndex::None,
564                indexed: mesh.indexed(),
565            });
566        }
567    }
568}
Source

pub fn clear(&mut self)

Removes all PhaseItems from this render phase.

Source

pub fn sort(&mut self)

Sorts all of its PhaseItems.

Source

pub fn iter_entities(&self) -> impl Iterator<Item = Entity>

An Iterator through the associated Entity for each PhaseItem in order.

Source

pub fn render<'w>( &self, render_pass: &mut TrackedRenderPass<'w>, world: &'w World, view: Entity, ) -> Result<(), DrawError>

Renders all of its PhaseItems using their corresponding draw functions.

Examples found in repository?
examples/shader_advanced/custom_render_phase.rs (line 625)
584    fn run<'w>(
585        &self,
586        graph: &mut RenderGraphContext,
587        render_context: &mut RenderContext<'w>,
588        (camera, view, target, resolution_override): QueryItem<'w, '_, Self::ViewQuery>,
589        world: &'w World,
590    ) -> Result<(), NodeRunError> {
591        // First, we need to get our phases resource
592        let Some(stencil_phases) = world.get_resource::<ViewSortedRenderPhases<Stencil3d>>() else {
593            return Ok(());
594        };
595
596        // Get the view entity from the graph
597        let view_entity = graph.view_entity();
598
599        // Get the phase for the current view running our node
600        let Some(stencil_phase) = stencil_phases.get(&view.retained_view_entity) else {
601            return Ok(());
602        };
603
604        // Render pass setup
605        let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor {
606            label: Some("stencil pass"),
607            // For the purpose of the example, we will write directly to the view target. A real
608            // stencil pass would write to a custom texture and that texture would be used in later
609            // passes to render custom effects using it.
610            color_attachments: &[Some(target.get_color_attachment())],
611            // We don't bind any depth buffer for this pass
612            depth_stencil_attachment: None,
613            timestamp_writes: None,
614            occlusion_query_set: None,
615        });
616
617        if let Some(viewport) =
618            Viewport::from_viewport_and_override(camera.viewport.as_ref(), resolution_override)
619        {
620            render_pass.set_camera_viewport(&viewport);
621        }
622
623        // Render the phase
624        // This will execute each draw functions of each phase items queued in this phase
625        if let Err(err) = stencil_phase.render(&mut render_pass, world, view_entity) {
626            error!("Error encountered while rendering the stencil phase {err:?}");
627        }
628
629        Ok(())
630    }
Source

pub fn render_range<'w>( &self, render_pass: &mut TrackedRenderPass<'w>, world: &'w World, view: Entity, range: impl SliceIndex<[I], Output = [I]>, ) -> Result<(), DrawError>

Renders all PhaseItems in the provided range (based on their index in self.items) using their corresponding draw functions.

Trait Implementations§

Source§

impl<I> Default for SortedRenderPhase<I>
where I: SortedPhaseItem,

Source§

fn default() -> SortedRenderPhase<I>

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

Auto Trait Implementations§

§

impl<I> Freeze for SortedRenderPhase<I>

§

impl<I> RefUnwindSafe for SortedRenderPhase<I>
where I: RefUnwindSafe,

§

impl<I> Send for SortedRenderPhase<I>

§

impl<I> Sync for SortedRenderPhase<I>

§

impl<I> Unpin for SortedRenderPhase<I>
where I: Unpin,

§

impl<I> UnwindSafe for SortedRenderPhase<I>
where I: UnwindSafe,

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, U> AsBindGroupShaderType<U> for T
where U: ShaderType, &'a T: for<'a> Into<U>,

Source§

fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U

Return the T ShaderType for self. When used in AsBindGroup derives, it is safe to assume that all images in self exist.
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<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
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 for T
where T: Any,

Source§

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

Convert 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>

Convert 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)

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

Convert &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> 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_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

Source§

impl<T> FromWorld for T
where T: Default,

Source§

fn from_world(_world: &mut World) -> T

Creates Self using default().

Source§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Source§

const WITNESS: W = W::MAKE

A constant of the type witness
Source§

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

Source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Source§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
Source§

impl<T> InitializeFromFunction<T> for T

Source§

fn initialize_from_function(f: fn() -> T) -> T

Create an instance of this type from an initialization function
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> IntoResult<T> for T

Source§

fn into_result(self) -> Result<T, RunSystemError>

Converts this type into the system output type.
Source§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<A> Is for A
where A: Any,

Source§

fn is<T>() -> bool
where T: Any,

Checks if the current type “is” another type, using a TypeId equality comparison. This is most useful in the context of generic logic. Read more
Source§

impl<T> NoneValue for T
where T: Default,

Source§

type NoneType = T

Source§

fn null_value() -> T

The none-equivalent value.
Source§

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

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
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<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<Ret> SpawnIfAsync<(), Ret> for Ret

Source§

fn spawn(self) -> Ret

Spawn the value into the dioxus runtime if it is an async block
Source§

impl<T, O> SuperFrom<T> for O
where O: From<T>,

Source§

fn super_from(input: T) -> O

Convert from a type to another type.
Source§

impl<T, O, M> SuperInto<O, M> for T
where O: SuperFrom<T, M>,

Source§

fn super_into(self) -> O

Convert from a type to another type.
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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

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

Source§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

Source§

impl<T> Settings for T
where T: 'static + Send + Sync,

Source§

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

Source§

impl<T> WasmNotSendSync for T

Source§

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