Skip to main content

Readback

Enum Readback 

Source
pub enum Readback {
    Texture(Handle<Image>),
    Buffer {
        buffer: Handle<ShaderBuffer>,
        start_offset_and_size: Option<(u64, u64)>,
    },
}
Expand description

A component that registers the wrapped handle for gpu readback, either a texture or a buffer.

Data is read asynchronously and will be triggered on the entity via the ReadbackComplete event when complete. If this component is not removed, the readback will be attempted every frame

Variants§

§

Texture(Handle<Image>)

§

Buffer

Fields

§start_offset_and_size: Option<(u64, u64)>

Implementations§

Source§

impl Readback

Source

pub fn texture(image: Handle<Image>) -> Readback

Create a readback component for a texture using the given handle.

Examples found in repository?
examples/shader/gpu_readback.rs (line 128)
67fn setup(
68    mut commands: Commands,
69    mut images: ResMut<Assets<Image>>,
70    mut buffers: ResMut<Assets<ShaderBuffer>>,
71) {
72    // Create a storage buffer with some data
73    let buffer: Vec<u32> = (0..BUFFER_LEN as u32).collect();
74    let mut buffer = ShaderBuffer::from(buffer);
75    // We need to enable the COPY_SRC usage so we can copy the buffer to the cpu
76    buffer.buffer_description.usage |= BufferUsages::COPY_SRC;
77    let buffer = buffers.add(buffer);
78
79    // Create a storage texture with some data
80    let size = Extent3d {
81        width: BUFFER_LEN as u32,
82        height: 1,
83        ..default()
84    };
85    // We create an uninitialized image since this texture will only be used for getting data out
86    // of the compute shader, not getting data in, so there's no reason for it to exist on the CPU
87    let mut image = Image::new_uninit(
88        size,
89        TextureDimension::D2,
90        TextureFormat::R32Uint,
91        RenderAssetUsages::RENDER_WORLD,
92    );
93    // We also need to enable the COPY_SRC, as well as STORAGE_BINDING so we can use it in the
94    // compute shader
95    image.texture_descriptor.usage |= TextureUsages::COPY_SRC | TextureUsages::STORAGE_BINDING;
96    let image = images.add(image);
97
98    // Spawn the readback components. For each frame, the data will be read back from the GPU
99    // asynchronously and trigger the `ReadbackComplete` event on this entity. Despawn the entity
100    // to stop reading back the data.
101    commands
102        .spawn(Readback::buffer(buffer.clone()))
103        .observe(|event: On<ReadbackComplete>| {
104            // This matches the type which was used to create the `ShaderBuffer` above,
105            // and is a convenient way to interpret the data.
106            let data: Vec<u32> = event.to_shader_type();
107            info!("Buffer {:?}", data);
108        });
109
110    // It is also possible to read only a range of the buffer.
111    commands
112        .spawn(Readback::buffer_range(
113            buffer.clone(),
114            4 * u32::SHADER_SIZE.get(), // skip the first four elements
115            8 * u32::SHADER_SIZE.get(), // read eight elements
116        ))
117        .observe(|event: On<ReadbackComplete>| {
118            let data: Vec<u32> = event.to_shader_type();
119            info!("Buffer range {:?}", data);
120        });
121
122    // This is just a simple way to pass the buffer handle to the render app for our compute node
123    commands.insert_resource(ReadbackBuffer(buffer));
124
125    // Textures can also be read back from the GPU. Pay careful attention to the format of the
126    // texture, as it will affect how the data is interpreted.
127    commands
128        .spawn(Readback::texture(image.clone()))
129        .observe(|event: On<ReadbackComplete>| {
130            // You probably want to interpret the data as a color rather than a `ShaderType`,
131            // but in this case we know the data is a single channel storage texture, so we can
132            // interpret it as a `Vec<u32>`
133            let data: Vec<u32> = event.to_shader_type();
134            info!("Image {:?}", data);
135        });
136    commands.insert_resource(ReadbackImage(image));
137}
Source

pub fn buffer(buffer: Handle<ShaderBuffer>) -> Readback

Create a readback component for a full buffer using the given handle.

Examples found in repository?
examples/shader/gpu_readback.rs (line 102)
67fn setup(
68    mut commands: Commands,
69    mut images: ResMut<Assets<Image>>,
70    mut buffers: ResMut<Assets<ShaderBuffer>>,
71) {
72    // Create a storage buffer with some data
73    let buffer: Vec<u32> = (0..BUFFER_LEN as u32).collect();
74    let mut buffer = ShaderBuffer::from(buffer);
75    // We need to enable the COPY_SRC usage so we can copy the buffer to the cpu
76    buffer.buffer_description.usage |= BufferUsages::COPY_SRC;
77    let buffer = buffers.add(buffer);
78
79    // Create a storage texture with some data
80    let size = Extent3d {
81        width: BUFFER_LEN as u32,
82        height: 1,
83        ..default()
84    };
85    // We create an uninitialized image since this texture will only be used for getting data out
86    // of the compute shader, not getting data in, so there's no reason for it to exist on the CPU
87    let mut image = Image::new_uninit(
88        size,
89        TextureDimension::D2,
90        TextureFormat::R32Uint,
91        RenderAssetUsages::RENDER_WORLD,
92    );
93    // We also need to enable the COPY_SRC, as well as STORAGE_BINDING so we can use it in the
94    // compute shader
95    image.texture_descriptor.usage |= TextureUsages::COPY_SRC | TextureUsages::STORAGE_BINDING;
96    let image = images.add(image);
97
98    // Spawn the readback components. For each frame, the data will be read back from the GPU
99    // asynchronously and trigger the `ReadbackComplete` event on this entity. Despawn the entity
100    // to stop reading back the data.
101    commands
102        .spawn(Readback::buffer(buffer.clone()))
103        .observe(|event: On<ReadbackComplete>| {
104            // This matches the type which was used to create the `ShaderBuffer` above,
105            // and is a convenient way to interpret the data.
106            let data: Vec<u32> = event.to_shader_type();
107            info!("Buffer {:?}", data);
108        });
109
110    // It is also possible to read only a range of the buffer.
111    commands
112        .spawn(Readback::buffer_range(
113            buffer.clone(),
114            4 * u32::SHADER_SIZE.get(), // skip the first four elements
115            8 * u32::SHADER_SIZE.get(), // read eight elements
116        ))
117        .observe(|event: On<ReadbackComplete>| {
118            let data: Vec<u32> = event.to_shader_type();
119            info!("Buffer range {:?}", data);
120        });
121
122    // This is just a simple way to pass the buffer handle to the render app for our compute node
123    commands.insert_resource(ReadbackBuffer(buffer));
124
125    // Textures can also be read back from the GPU. Pay careful attention to the format of the
126    // texture, as it will affect how the data is interpreted.
127    commands
128        .spawn(Readback::texture(image.clone()))
129        .observe(|event: On<ReadbackComplete>| {
130            // You probably want to interpret the data as a color rather than a `ShaderType`,
131            // but in this case we know the data is a single channel storage texture, so we can
132            // interpret it as a `Vec<u32>`
133            let data: Vec<u32> = event.to_shader_type();
134            info!("Image {:?}", data);
135        });
136    commands.insert_resource(ReadbackImage(image));
137}
Source

pub fn buffer_range( buffer: Handle<ShaderBuffer>, start_offset: u64, size: u64, ) -> Readback

Create a readback component for a buffer range using the given handle, a start offset in bytes and a number of bytes to read.

Examples found in repository?
examples/shader/gpu_readback.rs (lines 112-116)
67fn setup(
68    mut commands: Commands,
69    mut images: ResMut<Assets<Image>>,
70    mut buffers: ResMut<Assets<ShaderBuffer>>,
71) {
72    // Create a storage buffer with some data
73    let buffer: Vec<u32> = (0..BUFFER_LEN as u32).collect();
74    let mut buffer = ShaderBuffer::from(buffer);
75    // We need to enable the COPY_SRC usage so we can copy the buffer to the cpu
76    buffer.buffer_description.usage |= BufferUsages::COPY_SRC;
77    let buffer = buffers.add(buffer);
78
79    // Create a storage texture with some data
80    let size = Extent3d {
81        width: BUFFER_LEN as u32,
82        height: 1,
83        ..default()
84    };
85    // We create an uninitialized image since this texture will only be used for getting data out
86    // of the compute shader, not getting data in, so there's no reason for it to exist on the CPU
87    let mut image = Image::new_uninit(
88        size,
89        TextureDimension::D2,
90        TextureFormat::R32Uint,
91        RenderAssetUsages::RENDER_WORLD,
92    );
93    // We also need to enable the COPY_SRC, as well as STORAGE_BINDING so we can use it in the
94    // compute shader
95    image.texture_descriptor.usage |= TextureUsages::COPY_SRC | TextureUsages::STORAGE_BINDING;
96    let image = images.add(image);
97
98    // Spawn the readback components. For each frame, the data will be read back from the GPU
99    // asynchronously and trigger the `ReadbackComplete` event on this entity. Despawn the entity
100    // to stop reading back the data.
101    commands
102        .spawn(Readback::buffer(buffer.clone()))
103        .observe(|event: On<ReadbackComplete>| {
104            // This matches the type which was used to create the `ShaderBuffer` above,
105            // and is a convenient way to interpret the data.
106            let data: Vec<u32> = event.to_shader_type();
107            info!("Buffer {:?}", data);
108        });
109
110    // It is also possible to read only a range of the buffer.
111    commands
112        .spawn(Readback::buffer_range(
113            buffer.clone(),
114            4 * u32::SHADER_SIZE.get(), // skip the first four elements
115            8 * u32::SHADER_SIZE.get(), // read eight elements
116        ))
117        .observe(|event: On<ReadbackComplete>| {
118            let data: Vec<u32> = event.to_shader_type();
119            info!("Buffer range {:?}", data);
120        });
121
122    // This is just a simple way to pass the buffer handle to the render app for our compute node
123    commands.insert_resource(ReadbackBuffer(buffer));
124
125    // Textures can also be read back from the GPU. Pay careful attention to the format of the
126    // texture, as it will affect how the data is interpreted.
127    commands
128        .spawn(Readback::texture(image.clone()))
129        .observe(|event: On<ReadbackComplete>| {
130            // You probably want to interpret the data as a color rather than a `ShaderType`,
131            // but in this case we know the data is a single channel storage texture, so we can
132            // interpret it as a `Vec<u32>`
133            let data: Vec<u32> = event.to_shader_type();
134            info!("Image {:?}", data);
135        });
136    commands.insert_resource(ReadbackImage(image));
137}

Trait Implementations§

Source§

impl Clone for Readback

Source§

fn clone(&self) -> Readback

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Component for Readback
where Readback: Send + Sync + 'static,

Source§

const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table

A constant indicating the storage type used for this component.
Source§

type Mutability = Mutable

A marker type to assist Bevy with determining if this component is mutable, or immutable. Mutable components will have Component<Mutability = Mutable>, while immutable components will instead have Component<Mutability = Immutable>. Read more
Source§

fn register_required_components( _requiree: ComponentId, required_components: &mut RequiredComponentsRegistrator<'_, '_>, )

Registers required components. Read more
Source§

fn clone_behavior() -> ComponentCloneBehavior

Called when registering this component, allowing to override clone function (or disable cloning altogether) for this component. Read more
Source§

fn map_entities<M>(this: &mut Readback, mapper: &mut M)
where M: EntityMapper,

Maps the entities on this component using the given EntityMapper. This is used to remap entities in contexts like scenes and entity cloning. When deriving Component, this is populated by annotating fields containing entities with #[entities] Read more
Source§

fn relationship_accessor() -> Option<ComponentRelationshipAccessor<Readback>>

Returns ComponentRelationshipAccessor required for working with relationships in dynamic contexts. Read more
Source§

fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_add ComponentHook for this Component if one is defined.
Source§

fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_insert ComponentHook for this Component if one is defined.
Source§

fn on_discard() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_discard ComponentHook for this Component if one is defined.
Source§

fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_remove ComponentHook for this Component if one is defined.
Source§

fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_despawn ComponentHook for this Component if one is defined.
Source§

impl Debug for Readback

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl ExtractComponent for Readback
where Readback: Clone,

Source§

type QueryData = &'static Readback

ECS ReadOnlyQueryData to fetch the components to extract.
Source§

type QueryFilter = ()

Filters the entities with additional constraints.
Source§

type Out = Readback

The output from extraction, i.e. ExtractComponent::extract_component. Read more
Source§

fn extract_component( item: <<Readback as ExtractComponent>::QueryData as QueryData>::Item<'_, '_>, ) -> Option<<Readback as ExtractComponent>::Out>

Defines how the component is transferred into the “render world”. Read more
Source§

impl FromTemplate for Readback

Source§

type Template = ReadbackTemplate

The Template for this type.
Source§

impl SyncComponent for Readback
where Readback: Clone,

Source§

type Target = Readback

Describes what components should be removed from the render world if the implementing component is removed.
Source§

impl Unpin for Readback
where [()]: for<'a> SpecializeFromTemplate,

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, 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<C> Bundle for C
where C: Component,

Source§

fn component_ids( components: &mut ComponentsRegistrator<'_>, ) -> impl Iterator<Item = ComponentId> + use<C>

Source§

fn get_component_ids( components: &Components, ) -> impl Iterator<Item = Option<ComponentId>>

Return a iterator over this Bundle’s component ids. This will be None if the component has not been registered.
Source§

impl<C> BundleFromComponents for C
where C: Component,

Source§

unsafe fn from_components<T, F>(ctx: &mut T, func: &mut F) -> C
where F: for<'a> FnMut(&'a mut T) -> OwningPtr<'a>, C: Sized,

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

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

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<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

Source§

impl<C> DynamicBundle for C
where C: Component,

Source§

type Effect = ()

An operation on the entity that happens after inserting this bundle.
Source§

unsafe fn get_components( ptr: MovingPtr<'_, C>, func: &mut impl FnMut(StorageType, OwningPtr<'_>), ) -> <C as DynamicBundle>::Effect

Moves the components out of the bundle. Read more
Source§

unsafe fn apply_effect( _ptr: MovingPtr<'_, MaybeUninit<C>>, _entity: &mut EntityWorldMut<'_>, )

Applies the after-effects of spawning this bundle. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

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, 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> HitDataExtra for T
where T: Send + Sync + Debug + Any + 'static,

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<G> PatchFromTemplate for G
where G: FromTemplate,

Source§

type Template = <G as FromTemplate>::Template

The Template that will be patched.
Source§

fn patch<F>(func: F) -> TemplatePatch<F, <G as PatchFromTemplate>::Template>
where F: FnOnce(&mut <G as PatchFromTemplate>::Template, &mut ResolveContext<'_>),

Takes a “patch function” func, and turns it into a TemplatePatch.
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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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<T> TypeData for T
where T: 'static + Send + Sync + Clone,

Source§

fn clone_type_data(&self) -> Box<dyn TypeData>

Creates a type-erased clone of this value.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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