pub struct Tick { /* private fields */ }
Expand description
A value that tracks when a system ran relative to other systems. This is used to power change detection.
Note that a system that hasn’t been run yet has a Tick
of 0.
Implementations§
Source§impl Tick
impl Tick
Sourcepub const MAX: Tick
pub const MAX: Tick
The maximum relative age for a change tick.
The value of this is equal to MAX_CHANGE_AGE
.
Since change detection will not work for any ticks older than this, ticks are periodically scanned to ensure their relative values are below this.
Sourcepub const fn get(self) -> u32
pub const fn get(self) -> u32
Gets the value of this change tick.
Examples found in repository?
215fn queue_custom_phase_item(
216 pipeline_cache: Res<PipelineCache>,
217 mut pipeline: ResMut<CustomPhasePipeline>,
218 mut opaque_render_phases: ResMut<ViewBinnedRenderPhases<Opaque3d>>,
219 opaque_draw_functions: Res<DrawFunctions<Opaque3d>>,
220 views: Query<(&ExtractedView, &RenderVisibleEntities, &Msaa)>,
221 mut next_tick: Local<Tick>,
222) {
223 let draw_custom_phase_item = opaque_draw_functions
224 .read()
225 .id::<DrawCustomPhaseItemCommands>();
226
227 // Render phases are per-view, so we need to iterate over all views so that
228 // the entity appears in them. (In this example, we have only one view, but
229 // it's good practice to loop over all views anyway.)
230 for (view, view_visible_entities, msaa) in views.iter() {
231 let Some(opaque_phase) = opaque_render_phases.get_mut(&view.retained_view_entity) else {
232 continue;
233 };
234
235 // Find all the custom rendered entities that are visible from this
236 // view.
237 for &entity in view_visible_entities.get::<CustomRenderedEntity>().iter() {
238 // Ordinarily, the [`SpecializedRenderPipeline::Key`] would contain
239 // some per-view settings, such as whether the view is HDR, but for
240 // simplicity's sake we simply hard-code the view's characteristics,
241 // with the exception of number of MSAA samples.
242 let Ok(pipeline_id) = pipeline
243 .variants
244 .specialize(&pipeline_cache, CustomPhaseKey(*msaa))
245 else {
246 continue;
247 };
248
249 // Bump the change tick in order to force Bevy to rebuild the bin.
250 let this_tick = next_tick.get() + 1;
251 next_tick.set(this_tick);
252
253 // Add the custom render item. We use the
254 // [`BinnedRenderPhaseType::NonMesh`] type to skip the special
255 // handling that Bevy has for meshes (preprocessing, indirect
256 // draws, etc.)
257 //
258 // The asset ID is arbitrary; we simply use [`AssetId::invalid`],
259 // but you can use anything you like. Note that the asset ID need
260 // not be the ID of a [`Mesh`].
261 opaque_phase.add(
262 Opaque3dBatchSetKey {
263 draw_function: draw_custom_phase_item,
264 pipeline: pipeline_id,
265 material_bind_group_index: None,
266 lightmap_slab: None,
267 vertex_slab: default(),
268 index_slab: None,
269 },
270 Opaque3dBinKey {
271 asset_id: AssetId::<Mesh>::invalid().untyped(),
272 },
273 entity,
274 InputUniformIndex::default(),
275 BinnedRenderPhaseType::NonMesh,
276 *next_tick,
277 );
278 }
279 }
280}
More examples
267fn queue_custom_mesh_pipeline(
268 pipeline_cache: Res<PipelineCache>,
269 custom_mesh_pipeline: Res<CustomMeshPipeline>,
270 (mut opaque_render_phases, opaque_draw_functions): (
271 ResMut<ViewBinnedRenderPhases<Opaque3d>>,
272 Res<DrawFunctions<Opaque3d>>,
273 ),
274 mut specialized_mesh_pipelines: ResMut<SpecializedMeshPipelines<CustomMeshPipeline>>,
275 views: Query<(&RenderVisibleEntities, &ExtractedView, &Msaa)>,
276 (render_meshes, render_mesh_instances): (
277 Res<RenderAssets<RenderMesh>>,
278 Res<RenderMeshInstances>,
279 ),
280 mut change_tick: Local<Tick>,
281 mesh_allocator: Res<MeshAllocator>,
282 gpu_preprocessing_support: Res<GpuPreprocessingSupport>,
283) {
284 // Get the id for our custom draw function
285 let draw_function = opaque_draw_functions
286 .read()
287 .id::<DrawSpecializedPipelineCommands>();
288
289 // Render phases are per-view, so we need to iterate over all views so that
290 // the entity appears in them. (In this example, we have only one view, but
291 // it's good practice to loop over all views anyway.)
292 for (view_visible_entities, view, msaa) in views.iter() {
293 let Some(opaque_phase) = opaque_render_phases.get_mut(&view.retained_view_entity) else {
294 continue;
295 };
296
297 // Create the key based on the view. In this case we only care about MSAA and HDR
298 let view_key = MeshPipelineKey::from_msaa_samples(msaa.samples())
299 | MeshPipelineKey::from_hdr(view.hdr);
300
301 // Find all the custom rendered entities that are visible from this
302 // view.
303 for &(render_entity, visible_entity) in
304 view_visible_entities.get::<CustomRenderedEntity>().iter()
305 {
306 // Get the mesh instance
307 let Some(mesh_instance) = render_mesh_instances.render_mesh_queue_data(visible_entity)
308 else {
309 continue;
310 };
311
312 // Get the mesh data
313 let Some(mesh) = render_meshes.get(mesh_instance.mesh_asset_id) else {
314 continue;
315 };
316
317 let (vertex_slab, index_slab) = mesh_allocator.mesh_slabs(&mesh_instance.mesh_asset_id);
318
319 // Specialize the key for the current mesh entity
320 // For this example we only specialize based on the mesh topology
321 // but you could have more complex keys and that's where you'd need to create those keys
322 let mut mesh_key = view_key;
323 mesh_key |= MeshPipelineKey::from_primitive_topology(mesh.primitive_topology());
324
325 // Finally, we can specialize the pipeline based on the key
326 let pipeline_id = specialized_mesh_pipelines
327 .specialize(
328 &pipeline_cache,
329 &custom_mesh_pipeline,
330 mesh_key,
331 &mesh.layout,
332 )
333 // This should never happen with this example, but if your pipeline
334 // specialization can fail you need to handle the error here
335 .expect("Failed to specialize mesh pipeline");
336
337 // Bump the change tick so that Bevy is forced to rebuild the bin.
338 let next_change_tick = change_tick.get() + 1;
339 change_tick.set(next_change_tick);
340
341 // Add the mesh with our specialized pipeline
342 opaque_phase.add(
343 Opaque3dBatchSetKey {
344 draw_function,
345 pipeline: pipeline_id,
346 material_bind_group_index: None,
347 vertex_slab: vertex_slab.unwrap_or_default(),
348 index_slab,
349 lightmap_slab: None,
350 },
351 // For this example we can use the mesh asset id as the bin key,
352 // but you can use any asset_id as a key
353 Opaque3dBinKey {
354 asset_id: mesh_instance.mesh_asset_id.into(),
355 },
356 (render_entity, visible_entity),
357 mesh_instance.current_uniform_index,
358 // This example supports batching and multi draw indirect,
359 // but if your pipeline doesn't support it you can use
360 // `BinnedRenderPhaseType::UnbatchableMesh`
361 BinnedRenderPhaseType::mesh(
362 mesh_instance.should_batch(),
363 &gpu_preprocessing_support,
364 ),
365 *change_tick,
366 );
367 }
368 }
369}
Sourcepub fn set(&mut self, tick: u32)
pub fn set(&mut self, tick: u32)
Sets the value of this change tick.
Examples found in repository?
215fn queue_custom_phase_item(
216 pipeline_cache: Res<PipelineCache>,
217 mut pipeline: ResMut<CustomPhasePipeline>,
218 mut opaque_render_phases: ResMut<ViewBinnedRenderPhases<Opaque3d>>,
219 opaque_draw_functions: Res<DrawFunctions<Opaque3d>>,
220 views: Query<(&ExtractedView, &RenderVisibleEntities, &Msaa)>,
221 mut next_tick: Local<Tick>,
222) {
223 let draw_custom_phase_item = opaque_draw_functions
224 .read()
225 .id::<DrawCustomPhaseItemCommands>();
226
227 // Render phases are per-view, so we need to iterate over all views so that
228 // the entity appears in them. (In this example, we have only one view, but
229 // it's good practice to loop over all views anyway.)
230 for (view, view_visible_entities, msaa) in views.iter() {
231 let Some(opaque_phase) = opaque_render_phases.get_mut(&view.retained_view_entity) else {
232 continue;
233 };
234
235 // Find all the custom rendered entities that are visible from this
236 // view.
237 for &entity in view_visible_entities.get::<CustomRenderedEntity>().iter() {
238 // Ordinarily, the [`SpecializedRenderPipeline::Key`] would contain
239 // some per-view settings, such as whether the view is HDR, but for
240 // simplicity's sake we simply hard-code the view's characteristics,
241 // with the exception of number of MSAA samples.
242 let Ok(pipeline_id) = pipeline
243 .variants
244 .specialize(&pipeline_cache, CustomPhaseKey(*msaa))
245 else {
246 continue;
247 };
248
249 // Bump the change tick in order to force Bevy to rebuild the bin.
250 let this_tick = next_tick.get() + 1;
251 next_tick.set(this_tick);
252
253 // Add the custom render item. We use the
254 // [`BinnedRenderPhaseType::NonMesh`] type to skip the special
255 // handling that Bevy has for meshes (preprocessing, indirect
256 // draws, etc.)
257 //
258 // The asset ID is arbitrary; we simply use [`AssetId::invalid`],
259 // but you can use anything you like. Note that the asset ID need
260 // not be the ID of a [`Mesh`].
261 opaque_phase.add(
262 Opaque3dBatchSetKey {
263 draw_function: draw_custom_phase_item,
264 pipeline: pipeline_id,
265 material_bind_group_index: None,
266 lightmap_slab: None,
267 vertex_slab: default(),
268 index_slab: None,
269 },
270 Opaque3dBinKey {
271 asset_id: AssetId::<Mesh>::invalid().untyped(),
272 },
273 entity,
274 InputUniformIndex::default(),
275 BinnedRenderPhaseType::NonMesh,
276 *next_tick,
277 );
278 }
279 }
280}
More examples
267fn queue_custom_mesh_pipeline(
268 pipeline_cache: Res<PipelineCache>,
269 custom_mesh_pipeline: Res<CustomMeshPipeline>,
270 (mut opaque_render_phases, opaque_draw_functions): (
271 ResMut<ViewBinnedRenderPhases<Opaque3d>>,
272 Res<DrawFunctions<Opaque3d>>,
273 ),
274 mut specialized_mesh_pipelines: ResMut<SpecializedMeshPipelines<CustomMeshPipeline>>,
275 views: Query<(&RenderVisibleEntities, &ExtractedView, &Msaa)>,
276 (render_meshes, render_mesh_instances): (
277 Res<RenderAssets<RenderMesh>>,
278 Res<RenderMeshInstances>,
279 ),
280 mut change_tick: Local<Tick>,
281 mesh_allocator: Res<MeshAllocator>,
282 gpu_preprocessing_support: Res<GpuPreprocessingSupport>,
283) {
284 // Get the id for our custom draw function
285 let draw_function = opaque_draw_functions
286 .read()
287 .id::<DrawSpecializedPipelineCommands>();
288
289 // Render phases are per-view, so we need to iterate over all views so that
290 // the entity appears in them. (In this example, we have only one view, but
291 // it's good practice to loop over all views anyway.)
292 for (view_visible_entities, view, msaa) in views.iter() {
293 let Some(opaque_phase) = opaque_render_phases.get_mut(&view.retained_view_entity) else {
294 continue;
295 };
296
297 // Create the key based on the view. In this case we only care about MSAA and HDR
298 let view_key = MeshPipelineKey::from_msaa_samples(msaa.samples())
299 | MeshPipelineKey::from_hdr(view.hdr);
300
301 // Find all the custom rendered entities that are visible from this
302 // view.
303 for &(render_entity, visible_entity) in
304 view_visible_entities.get::<CustomRenderedEntity>().iter()
305 {
306 // Get the mesh instance
307 let Some(mesh_instance) = render_mesh_instances.render_mesh_queue_data(visible_entity)
308 else {
309 continue;
310 };
311
312 // Get the mesh data
313 let Some(mesh) = render_meshes.get(mesh_instance.mesh_asset_id) else {
314 continue;
315 };
316
317 let (vertex_slab, index_slab) = mesh_allocator.mesh_slabs(&mesh_instance.mesh_asset_id);
318
319 // Specialize the key for the current mesh entity
320 // For this example we only specialize based on the mesh topology
321 // but you could have more complex keys and that's where you'd need to create those keys
322 let mut mesh_key = view_key;
323 mesh_key |= MeshPipelineKey::from_primitive_topology(mesh.primitive_topology());
324
325 // Finally, we can specialize the pipeline based on the key
326 let pipeline_id = specialized_mesh_pipelines
327 .specialize(
328 &pipeline_cache,
329 &custom_mesh_pipeline,
330 mesh_key,
331 &mesh.layout,
332 )
333 // This should never happen with this example, but if your pipeline
334 // specialization can fail you need to handle the error here
335 .expect("Failed to specialize mesh pipeline");
336
337 // Bump the change tick so that Bevy is forced to rebuild the bin.
338 let next_change_tick = change_tick.get() + 1;
339 change_tick.set(next_change_tick);
340
341 // Add the mesh with our specialized pipeline
342 opaque_phase.add(
343 Opaque3dBatchSetKey {
344 draw_function,
345 pipeline: pipeline_id,
346 material_bind_group_index: None,
347 vertex_slab: vertex_slab.unwrap_or_default(),
348 index_slab,
349 lightmap_slab: None,
350 },
351 // For this example we can use the mesh asset id as the bin key,
352 // but you can use any asset_id as a key
353 Opaque3dBinKey {
354 asset_id: mesh_instance.mesh_asset_id.into(),
355 },
356 (render_entity, visible_entity),
357 mesh_instance.current_uniform_index,
358 // This example supports batching and multi draw indirect,
359 // but if your pipeline doesn't support it you can use
360 // `BinnedRenderPhaseType::UnbatchableMesh`
361 BinnedRenderPhaseType::mesh(
362 mesh_instance.should_batch(),
363 &gpu_preprocessing_support,
364 ),
365 *change_tick,
366 );
367 }
368 }
369}
Sourcepub fn is_newer_than(self, last_run: Tick, this_run: Tick) -> bool
pub fn is_newer_than(self, last_run: Tick, this_run: Tick) -> bool
Returns true
if this Tick
occurred since the system’s last_run
.
this_run
is the current tick of the system, used as a reference to help deal with wraparound.
Sourcepub fn check_tick(&mut self, check: CheckChangeTicks) -> bool
pub fn check_tick(&mut self, check: CheckChangeTicks) -> bool
Wraps this change tick’s value if it exceeds Tick::MAX
.
Returns true
if wrapping was performed. Otherwise, returns false
.
Trait Implementations§
Source§impl FromReflect for Tick
impl FromReflect for Tick
Source§fn from_reflect(reflect: &(dyn PartialReflect + 'static)) -> Option<Tick>
fn from_reflect(reflect: &(dyn PartialReflect + 'static)) -> Option<Tick>
Self
from a reflected value.Source§fn take_from_reflect(
reflect: Box<dyn PartialReflect>,
) -> Result<Self, Box<dyn PartialReflect>>
fn take_from_reflect( reflect: Box<dyn PartialReflect>, ) -> Result<Self, Box<dyn PartialReflect>>
Self
using,
constructing the value using from_reflect
if that fails. Read moreSource§impl GetTypeRegistration for Tick
impl GetTypeRegistration for Tick
Source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
TypeRegistration
for this type.Source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
Source§impl IntoReturn for Tick
impl IntoReturn for Tick
Source§impl PartialReflect for Tick
impl PartialReflect for Tick
Source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
Source§fn try_apply(
&mut self,
value: &(dyn PartialReflect + 'static),
) -> Result<(), ApplyError>
fn try_apply( &mut self, value: &(dyn PartialReflect + 'static), ) -> Result<(), ApplyError>
Source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Source§fn reflect_owned(self: Box<Tick>) -> ReflectOwned
fn reflect_owned(self: Box<Tick>) -> ReflectOwned
Source§fn try_into_reflect(
self: Box<Tick>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<Tick>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
Source§fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
Source§fn try_as_reflect_mut(&mut self) -> Option<&mut (dyn Reflect + 'static)>
fn try_as_reflect_mut(&mut self) -> Option<&mut (dyn Reflect + 'static)>
Source§fn into_partial_reflect(self: Box<Tick>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<Tick>) -> Box<dyn PartialReflect>
Source§fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
Source§fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
Source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn reflect_partial_eq(
&self,
value: &(dyn PartialReflect + 'static),
) -> Option<bool>
fn reflect_partial_eq( &self, value: &(dyn PartialReflect + 'static), ) -> Option<bool>
Source§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Source§fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
Self
using reflection. Read moreSource§fn apply(&mut self, value: &(dyn PartialReflect + 'static))
fn apply(&mut self, value: &(dyn PartialReflect + 'static))
Source§fn to_dynamic(&self) -> Box<dyn PartialReflect>
fn to_dynamic(&self) -> Box<dyn PartialReflect>
Source§fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
PartialReflect
, combines reflect_clone
and
take
in a useful fashion, automatically constructing an appropriate
ReflectCloneError
if the downcast fails. Read moreSource§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Source§impl Reflect for Tick
impl Reflect for Tick
Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut dyn Any
. Read moreSource§fn into_reflect(self: Box<Tick>) -> Box<dyn Reflect>
fn into_reflect(self: Box<Tick>) -> Box<dyn Reflect>
Source§fn as_reflect(&self) -> &(dyn Reflect + 'static)
fn as_reflect(&self) -> &(dyn Reflect + 'static)
Source§fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
Source§impl Struct for Tick
impl Struct for Tick
Source§fn field(&self, name: &str) -> Option<&(dyn PartialReflect + 'static)>
fn field(&self, name: &str) -> Option<&(dyn PartialReflect + 'static)>
name
as a &dyn PartialReflect
.Source§fn field_mut(
&mut self,
name: &str,
) -> Option<&mut (dyn PartialReflect + 'static)>
fn field_mut( &mut self, name: &str, ) -> Option<&mut (dyn PartialReflect + 'static)>
name
as a
&mut dyn PartialReflect
.Source§fn field_at(&self, index: usize) -> Option<&(dyn PartialReflect + 'static)>
fn field_at(&self, index: usize) -> Option<&(dyn PartialReflect + 'static)>
index
as a
&dyn PartialReflect
.Source§fn field_at_mut(
&mut self,
index: usize,
) -> Option<&mut (dyn PartialReflect + 'static)>
fn field_at_mut( &mut self, index: usize, ) -> Option<&mut (dyn PartialReflect + 'static)>
index
as a &mut dyn PartialReflect
.Source§fn name_at(&self, index: usize) -> Option<&str>
fn name_at(&self, index: usize) -> Option<&str>
index
.Source§fn iter_fields(&self) -> FieldIter<'_> ⓘ
fn iter_fields(&self) -> FieldIter<'_> ⓘ
Source§fn to_dynamic_struct(&self) -> DynamicStruct
fn to_dynamic_struct(&self) -> DynamicStruct
DynamicStruct
from this struct.Source§fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
None
if TypeInfo
is not available.Source§impl TypePath for Tick
impl TypePath for Tick
Source§fn type_path() -> &'static str
fn type_path() -> &'static str
Source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
Source§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
Source§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
impl Copy for Tick
impl Eq for Tick
impl StructuralPartialEq for Tick
Auto Trait Implementations§
impl Freeze for Tick
impl RefUnwindSafe for Tick
impl Send for Tick
impl Sync for Tick
impl Unpin for Tick
impl UnwindSafe for Tick
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
, which can then be
downcast
into Box<dyn 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>
, which 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> 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> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
Source§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path
.Source§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
Source§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident
.Source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name
.Source§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
Source§impl<T> DynamicTyped for Twhere
T: Typed,
impl<T> DynamicTyped for Twhere
T: Typed,
Source§fn reflect_type_info(&self) -> &'static TypeInfo
fn reflect_type_info(&self) -> &'static TypeInfo
Typed::type_info
.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self
using default()
.
Source§impl<S> GetField for Swhere
S: Struct,
impl<S> GetField for Swhere
S: Struct,
Source§impl<T> GetPath for T
impl<T> GetPath for T
Source§fn reflect_path<'p>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p>, ) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
path
. Read moreSource§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p>, ) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
path
. Read moreSource§fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
path
. Read moreSource§fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
path
. Read moreSource§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> InitializeFromFunction<T> for T
impl<T> InitializeFromFunction<T> for T
Source§fn initialize_from_function(f: fn() -> T) -> T
fn initialize_from_function(f: fn() -> T) -> 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 moreSource§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
Source§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
Source§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian()
.Source§impl<Ret> SpawnIfAsync<(), Ret> for Ret
impl<Ret> SpawnIfAsync<(), Ret> for Ret
Source§impl<T, O> SuperFrom<T> for Owhere
O: From<T>,
impl<T, O> SuperFrom<T> for Owhere
O: From<T>,
Source§fn super_from(input: T) -> O
fn super_from(input: T) -> O
Source§impl<T, O, M> SuperInto<O, M> for Twhere
O: SuperFrom<T, M>,
impl<T, O, M> SuperInto<O, M> for Twhere
O: SuperFrom<T, M>,
Source§fn super_into(self) -> O
fn super_into(self) -> O
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.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
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.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
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.