pub struct RenderVisibleEntities {
pub classes: IndexMap<TypeId, RenderVisibleEntitiesClass, NoOpHash>,
}Expand description
Stores a list of all entities that are visible from a single view or subview, as well as the change lists.
This component is only placed directly on camera entities. Lights instead
have a RenderShadowMapVisibleEntities component that contains one or
more RenderVisibleEntities components, one for each cascade or cubemap
side.
The crate::camera::extract_cameras and extract_lights systems create
this object, but they don’t populate it. Instead, the
collect_visible_cpu_culled_entities and
collect_gpu_culled_meshes systems are responsible for
updating this component from the lists of entities in
RenderExtractedVisibleEntities and RenderGpuCulledEntities,
respectively.
Fields§
§classes: IndexMap<TypeId, RenderVisibleEntitiesClass, NoOpHash>Entities visible from this view or subview, sorted by
VisibilityClass.
Implementations§
Source§impl RenderVisibleEntities
impl RenderVisibleEntities
Sourcepub fn get<QF>(&self) -> Option<&RenderVisibleEntitiesClass>where
QF: 'static,
pub fn get<QF>(&self) -> Option<&RenderVisibleEntitiesClass>where
QF: 'static,
Returns the RenderVisibleEntitiesClass corresponding to the given
VisibilityClass.
Examples found in repository?
379pub fn queue_colored_mesh2d(
380 transparent_draw_functions: Res<DrawFunctions<Transparent2d>>,
381 colored_mesh2d_pipeline: Res<ColoredMesh2dPipeline>,
382 mut pipelines: ResMut<SpecializedRenderPipelines<ColoredMesh2dPipeline>>,
383 pipeline_cache: Res<PipelineCache>,
384 render_meshes: Res<RenderAssets<RenderMesh>>,
385 render_mesh_instances: Res<RenderColoredMesh2dInstances>,
386 mut transparent_render_phases: ResMut<ViewSortedRenderPhases<Transparent2d>>,
387 views: Query<(&RenderVisibleEntities, &ExtractedView, &Msaa)>,
388) {
389 if render_mesh_instances.is_empty() {
390 return;
391 }
392 // Iterate each view (a camera is a view)
393 for (visible_entities, view, msaa) in &views {
394 let Some(transparent_phase) = transparent_render_phases.get_mut(&view.retained_view_entity)
395 else {
396 continue;
397 };
398
399 let draw_colored_mesh2d = transparent_draw_functions.read().id::<DrawColoredMesh2d>();
400
401 let mesh_key = Mesh2dPipelineKey::from_msaa_samples(msaa.samples())
402 | Mesh2dPipelineKey::from_target_format(view.target_format);
403
404 // Queue all entities visible to that view
405 let Some(visible_entities) = visible_entities.get::<Mesh2d>() else {
406 continue;
407 };
408 for (render_entity, visible_entity) in visible_entities.iter_visible() {
409 if let Some(mesh_instance) = render_mesh_instances.get(visible_entity) {
410 let mesh2d_handle = mesh_instance.mesh_asset_id;
411 let mesh2d_transforms = &mesh_instance.transforms;
412 // Get our specialized pipeline
413 let mut mesh2d_key = mesh_key;
414 let Some(mesh) = render_meshes.get(mesh2d_handle) else {
415 continue;
416 };
417 mesh2d_key |= Mesh2dPipelineKey::from_primitive_topology_and_strip_index(
418 mesh.primitive_topology(),
419 mesh.index_format(),
420 );
421
422 let pipeline_id =
423 pipelines.specialize(&pipeline_cache, &colored_mesh2d_pipeline, mesh2d_key);
424
425 let mesh_z = mesh2d_transforms.world_from_local.translation.z;
426 transparent_phase.add_retained(Transparent2d {
427 entity: (*render_entity, *visible_entity),
428 draw_function: draw_colored_mesh2d,
429 pipeline: pipeline_id,
430 // The 2d render items are sorted according to their z value before rendering,
431 // in order to get correct transparency
432 sort_key: FloatOrd(mesh_z),
433 // This material is not batched
434 batch_range: 0..1,
435 extra_index: PhaseItemExtraIndex::None,
436 extracted_index: usize::MAX,
437 indexed: mesh.indexed(),
438 });
439 }
440 }
441 }
442}More examples
227fn queue_custom_phase_item(
228 pipeline_cache: Res<PipelineCache>,
229 mut pipeline: ResMut<CustomPhasePipeline>,
230 mut opaque_render_phases: ResMut<ViewBinnedRenderPhases<Opaque3d>>,
231 opaque_draw_functions: Res<DrawFunctions<Opaque3d>>,
232 views: Query<(&ExtractedView, &RenderVisibleEntities, &Msaa)>,
233 dirty_specializations: Res<DirtySpecializations>,
234 mut pending_custom_phase_item_queues: ResMut<PendingCustomPhaseItemQueues>,
235) {
236 let draw_custom_phase_item = opaque_draw_functions
237 .read()
238 .id::<DrawCustomPhaseItemCommands>();
239
240 // Render phases are per-view, so we need to iterate over all views so that
241 // the entity appears in them. (In this example, we have only one view, but
242 // it's good practice to loop over all views anyway.)
243 for (view, view_visible_entities, msaa) in views.iter() {
244 let Some(opaque_phase) = opaque_render_phases.get_mut(&view.retained_view_entity) else {
245 continue;
246 };
247
248 // Fetch the list of visible entities in the `CustomRenderedEntity`
249 // class. If there are no such entities, then we have no entities to
250 // render, and we're done.
251 let Some(render_visible_mesh_entities) =
252 view_visible_entities.get::<CustomRenderedEntity>()
253 else {
254 continue;
255 };
256
257 let view_pending_custom_phase_item_queues =
258 pending_custom_phase_item_queues.prepare_for_new_frame(view.retained_view_entity);
259
260 // First, remove meshes that need to be respecialized, and those that
261 // were removed, from the bins.
262 for &main_entity in dirty_specializations
263 .iter_to_dequeue(view.retained_view_entity, render_visible_mesh_entities)
264 {
265 opaque_phase.remove(main_entity);
266 }
267
268 // Find all the custom rendered entities that are visible from this
269 // view.
270 for (render_entity, main_entity) in dirty_specializations.iter_to_queue(
271 view.retained_view_entity,
272 render_visible_mesh_entities,
273 &view_pending_custom_phase_item_queues.prev_frame,
274 ) {
275 // Ordinarily, the [`SpecializedRenderPipeline::Key`] would contain
276 // some per-view settings, such as whether the view is HDR, but for
277 // simplicity's sake we simply hard-code the view's characteristics,
278 // with the exception of number of MSAA samples.
279 let Ok(pipeline_id) = pipeline
280 .variants
281 .specialize(&pipeline_cache, CustomPhaseKey(*msaa))
282 else {
283 continue;
284 };
285
286 // Add the custom render item. We use the
287 // [`BinnedRenderPhaseType::NonMesh`] type to skip the special
288 // handling that Bevy has for meshes (preprocessing, indirect
289 // draws, etc.)
290 //
291 // The asset ID is arbitrary; we simply use [`AssetId::invalid`],
292 // but you can use anything you like. Note that the asset ID need
293 // not be the ID of a [`Mesh`].
294 opaque_phase.add(
295 Opaque3dBatchSetKey {
296 draw_function: draw_custom_phase_item,
297 pipeline: pipeline_id,
298 material_bind_group_index: None,
299 lightmap_slab: None,
300 slabs: MeshSlabs::default(),
301 },
302 Opaque3dBinKey {
303 asset_id: AssetId::<Mesh>::invalid().untyped(),
304 },
305 (*render_entity, *main_entity),
306 InputUniformIndex::default(),
307 BinnedRenderPhaseType::NonMesh,
308 );
309 }
310 }
311}531fn queue_custom_meshes(
532 custom_draw_functions: Res<DrawFunctions<Stencil3d>>,
533 mut pipelines: ResMut<SpecializedMeshPipelines<StencilPipeline>>,
534 pipeline_cache: Res<PipelineCache>,
535 custom_draw_pipeline: Res<StencilPipeline>,
536 render_meshes: Res<RenderAssets<RenderMesh>>,
537 render_mesh_instances: Res<RenderMeshInstances>,
538 maybe_batched_instance_buffers: Option<
539 Res<BatchedInstanceBuffers<MeshUniform, MeshInputUniform>>,
540 >,
541 mut custom_render_phases: ResMut<ViewSortedRenderPhases<Stencil3d>>,
542 mut views: Query<(&ExtractedView, &RenderVisibleEntities)>,
543 view_key_cache: Res<ViewKeyCache>,
544 dirty_specializations: Res<DirtySpecializations>,
545 mut pending_custom_mesh_queues: ResMut<PendingCustomMeshQueues>,
546 has_marker: Query<(), With<DrawStencil>>,
547) {
548 for (view, visible_entities) in &mut views {
549 let Some(custom_phase) = custom_render_phases.get_mut(&view.retained_view_entity) else {
550 continue;
551 };
552 let draw_custom = custom_draw_functions.read().id::<DrawMesh3dStencil>();
553
554 let Some(&view_key) = view_key_cache.get(&view.retained_view_entity) else {
555 continue;
556 };
557
558 // Since our phase can work on any 3d mesh we can reuse the default mesh 3d filter
559 let Some(render_visible_mesh_entities) = visible_entities.get::<Mesh3d>() else {
560 continue;
561 };
562
563 let view_pending_custom_mesh_queues =
564 pending_custom_mesh_queues.prepare_for_new_frame(view.retained_view_entity);
565
566 // First, remove meshes that need to be respecialized, and those that were removed, from the bins.
567 for &main_entity in dirty_specializations
568 .iter_to_dequeue(view.retained_view_entity, render_visible_mesh_entities)
569 {
570 custom_phase.remove(Entity::PLACEHOLDER, main_entity);
571 }
572
573 for (render_entity, visible_entity) in dirty_specializations.iter_to_queue(
574 view.retained_view_entity,
575 render_visible_mesh_entities,
576 &view_pending_custom_mesh_queues.prev_frame,
577 ) {
578 // We only want meshes with the marker component to be queued to our phase.
579 if has_marker.get(*render_entity).is_err() {
580 continue;
581 }
582 let Some(mesh_instance) = render_mesh_instances.render_mesh_queue_data(*visible_entity)
583 else {
584 // We couldn't fetch the mesh, probably because it hasn't been
585 // loaded yet. Add the entity to the list of pending custom mesh
586 // queues and bail.
587 view_pending_custom_mesh_queues
588 .current_frame
589 .insert((*render_entity, *visible_entity));
590 continue;
591 };
592 let Some(mesh) = render_meshes.get(mesh_instance.mesh_asset_id()) else {
593 continue;
594 };
595
596 // Specialize the key for the current mesh entity
597 // For this example we only specialize based on the mesh topology
598 // but you could have more complex keys and that's where you'd need to create those keys
599 let mut mesh_key = view_key;
600 mesh_key |= MeshPipelineKey::from_primitive_topology_and_strip_index(
601 mesh.primitive_topology(),
602 mesh.index_format(),
603 );
604
605 let pipeline_id = pipelines.specialize(
606 &pipeline_cache,
607 &custom_draw_pipeline,
608 mesh_key,
609 &mesh.layout,
610 );
611 let pipeline_id = match pipeline_id {
612 Ok(id) => id,
613 Err(err) => {
614 error!("{}", err);
615 continue;
616 }
617 };
618 // At this point we have all the data we need to create a phase item and add it to our
619 // phase
620 custom_phase.add_retained(Stencil3d {
621 sorting_info: TransparentSortingInfo3d::Sorted {
622 mesh_center: pbr::get_mesh_instance_world_from_local(
623 *visible_entity,
624 mesh_instance.current_uniform_index,
625 &render_mesh_instances,
626 maybe_batched_instance_buffers.as_deref(),
627 )
628 .transform_point3(
629 render_meshes
630 .get(mesh_instance.mesh_asset_id())
631 .unwrap()
632 .aabb_center,
633 ),
634 depth_bias: 0.0,
635 },
636 distance: FloatOrd(0.0),
637 entity: (Entity::PLACEHOLDER, *visible_entity),
638 pipeline: pipeline_id,
639 draw_function: draw_custom,
640 // Sorted phase items aren't batched
641 batch_range: 0..1,
642 extra_index: PhaseItemExtraIndex::None,
643 indexed: mesh.indexed(),
644 });
645 }
646 }
647}277fn queue_custom_mesh_pipeline(
278 pipeline_cache: Res<PipelineCache>,
279 custom_mesh_pipeline: Res<CustomMeshPipeline>,
280 (mut opaque_render_phases, opaque_draw_functions): (
281 ResMut<ViewBinnedRenderPhases<Opaque3d>>,
282 Res<DrawFunctions<Opaque3d>>,
283 ),
284 mut specialized_mesh_pipelines: ResMut<SpecializedMeshPipelines<CustomMeshPipeline>>,
285 views: Query<(&RenderVisibleEntities, &ExtractedView)>,
286 view_key_cache: Res<ViewKeyCache>,
287 (render_meshes, render_mesh_instances): (
288 Res<RenderAssets<RenderMesh>>,
289 Res<RenderMeshInstances>,
290 ),
291 mut change_tick: Local<Tick>,
292 mesh_allocator: Res<MeshAllocator>,
293 gpu_preprocessing_support: Res<GpuPreprocessingSupport>,
294 dirty_specializations: Res<DirtySpecializations>,
295 mut pending_custom_mesh_queues: ResMut<PendingCustomMeshQueues>,
296) {
297 // Get the id for our custom draw function
298 let draw_function = opaque_draw_functions
299 .read()
300 .id::<DrawSpecializedPipelineCommands>();
301
302 // Render phases are per-view, so we need to iterate over all views so that
303 // the entity appears in them. (In this example, we have only one view, but
304 // it's good practice to loop over all views anyway.)
305 for (view_visible_entities, view) in views.iter() {
306 let Some(opaque_phase) = opaque_render_phases.get_mut(&view.retained_view_entity) else {
307 continue;
308 };
309
310 let Some(&view_key) = view_key_cache.get(&view.retained_view_entity) else {
311 continue;
312 };
313
314 let Some(render_visible_mesh_entities) =
315 view_visible_entities.get::<CustomRenderedEntity>()
316 else {
317 continue;
318 };
319
320 // Initialize the pending queues.
321 let view_pending_custom_mesh_queues =
322 pending_custom_mesh_queues.prepare_for_new_frame(view.retained_view_entity);
323
324 // First, remove meshes that need to be respecialized, and those that were removed, from the bins.
325 for &main_entity in dirty_specializations
326 .iter_to_dequeue(view.retained_view_entity, render_visible_mesh_entities)
327 {
328 opaque_phase.remove(main_entity);
329 }
330
331 // Find all the custom rendered entities that are visible from this
332 // view.
333 for (render_entity, visible_entity) in dirty_specializations.iter_to_queue(
334 view.retained_view_entity,
335 render_visible_mesh_entities,
336 &view_pending_custom_mesh_queues.prev_frame,
337 ) {
338 // Get the mesh instance
339 let Some(mesh_instance) = render_mesh_instances.render_mesh_queue_data(*visible_entity)
340 else {
341 // We couldn't fetch the mesh, probably because it hasn't been
342 // loaded yet. Add the entity to the list of pending custom
343 // meshes and bail.
344 view_pending_custom_mesh_queues
345 .current_frame
346 .insert((*render_entity, *visible_entity));
347 continue;
348 };
349
350 // Get the mesh data
351 let Some(mesh) = render_meshes.get(mesh_instance.mesh_asset_id()) else {
352 continue;
353 };
354
355 let Some(mesh_slabs) = mesh_allocator.mesh_slabs(&mesh_instance.mesh_asset_id()) else {
356 continue;
357 };
358
359 // Specialize the key for the current mesh entity
360 // For this example we only specialize based on the mesh topology
361 // but you could have more complex keys and that's where you'd need to create those keys
362 let mut mesh_key = view_key;
363 mesh_key |= MeshPipelineKey::from_primitive_topology_and_strip_index(
364 mesh.primitive_topology(),
365 mesh.index_format(),
366 );
367
368 // Finally, we can specialize the pipeline based on the key
369 let pipeline_id = specialized_mesh_pipelines
370 .specialize(
371 &pipeline_cache,
372 &custom_mesh_pipeline,
373 mesh_key,
374 &mesh.layout,
375 )
376 // This should never happen with this example, but if your pipeline
377 // specialization can fail you need to handle the error here
378 .expect("Failed to specialize mesh pipeline");
379
380 // Bump the change tick so that Bevy is forced to rebuild the bin.
381 let next_change_tick = change_tick.get() + 1;
382 change_tick.set(next_change_tick);
383
384 // Add the mesh with our specialized pipeline
385 opaque_phase.add(
386 Opaque3dBatchSetKey {
387 draw_function,
388 pipeline: pipeline_id,
389 material_bind_group_index: None,
390 slabs: mesh_slabs,
391 lightmap_slab: None,
392 },
393 // For this example we can use the mesh asset id as the bin key,
394 // but you can use any asset_id as a key
395 Opaque3dBinKey {
396 asset_id: mesh_instance.mesh_asset_id().into(),
397 },
398 (*render_entity, *visible_entity),
399 mesh_instance.current_uniform_index,
400 // This example supports batching and multi draw indirect,
401 // but if your pipeline doesn't support it you can use
402 // `BinnedRenderPhaseType::UnbatchableMesh`
403 BinnedRenderPhaseType::mesh(
404 mesh_instance.should_batch(),
405 &gpu_preprocessing_support,
406 ),
407 );
408 }
409 }
410}Trait Implementations§
Source§impl Clone for RenderVisibleEntities
impl Clone for RenderVisibleEntities
Source§fn clone(&self) -> RenderVisibleEntities
fn clone(&self) -> RenderVisibleEntities
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Component for RenderVisibleEntities
impl Component for RenderVisibleEntities
Source§const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
Source§type Mutability = Mutable
type Mutability = Mutable
Component<Mutability = Mutable>,
while immutable components will instead have Component<Mutability = Immutable>. Read moreSource§fn register_required_components(
_requiree: ComponentId,
required_components: &mut RequiredComponentsRegistrator<'_, '_>,
)
fn register_required_components( _requiree: ComponentId, required_components: &mut RequiredComponentsRegistrator<'_, '_>, )
Source§fn clone_behavior() -> ComponentCloneBehavior
fn clone_behavior() -> ComponentCloneBehavior
Source§fn relationship_accessor() -> Option<ComponentRelationshipAccessor<RenderVisibleEntities>>
fn relationship_accessor() -> Option<ComponentRelationshipAccessor<RenderVisibleEntities>>
ComponentRelationshipAccessor required for working with relationships in dynamic contexts. Read moreSource§fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_discard() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_discard() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn map_entities<E>(_this: &mut Self, _mapper: &mut E)where
E: EntityMapper,
fn map_entities<E>(_this: &mut Self, _mapper: &mut E)where
E: EntityMapper,
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 moreSource§impl Debug for RenderVisibleEntities
impl Debug for RenderVisibleEntities
Source§impl Default for RenderVisibleEntities
impl Default for RenderVisibleEntities
Source§fn default() -> RenderVisibleEntities
fn default() -> RenderVisibleEntities
Auto Trait Implementations§
impl Freeze for RenderVisibleEntities
impl RefUnwindSafe for RenderVisibleEntities
impl Send for RenderVisibleEntities
impl Sync for RenderVisibleEntities
impl Unpin for RenderVisibleEntities
impl UnsafeUnpin for RenderVisibleEntities
impl UnwindSafe for RenderVisibleEntities
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<C> Bundle for Cwhere
C: Component,
impl<C> Bundle for Cwhere
C: Component,
fn component_ids( components: &mut ComponentsRegistrator<'_>, ) -> impl Iterator<Item = ComponentId> + use<C>
Source§fn get_component_ids(
components: &Components,
) -> impl Iterator<Item = Option<ComponentId>>
fn get_component_ids( components: &Components, ) -> impl Iterator<Item = Option<ComponentId>>
Source§impl<C> BundleFromComponents for Cwhere
C: Component,
impl<C> BundleFromComponents for Cwhere
C: Component,
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ConditionalSend for Twhere
T: Send,
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
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
Source§impl<C> DynamicBundle for Cwhere
C: Component,
impl<C> DynamicBundle for Cwhere
C: Component,
Source§unsafe fn get_components(
ptr: MovingPtr<'_, C>,
func: &mut impl FnMut(StorageType, OwningPtr<'_>),
) -> <C as DynamicBundle>::Effect
unsafe fn get_components( ptr: MovingPtr<'_, C>, func: &mut impl FnMut(StorageType, OwningPtr<'_>), ) -> <C as DynamicBundle>::Effect
Source§unsafe fn apply_effect(
_ptr: MovingPtr<'_, MaybeUninit<C>>,
_entity: &mut EntityWorldMut<'_>,
)
unsafe fn apply_effect( _ptr: MovingPtr<'_, MaybeUninit<C>>, _entity: &mut EntityWorldMut<'_>, )
Source§impl<T> ErasedBundleTemplate for T
impl<T> ErasedBundleTemplate for T
Source§unsafe fn apply(
&self,
context: &mut TemplateContext<'_, '_>,
) -> Result<(), BevyError>
unsafe fn apply( &self, context: &mut TemplateContext<'_, '_>, ) -> Result<(), BevyError>
entity. Read moreSource§fn clone_template(&self) -> Box<dyn ErasedBundleTemplate>
fn clone_template(&self) -> Box<dyn ErasedBundleTemplate>
Clone.Source§impl<T> ErasedComponentTemplate for T
impl<T> ErasedComponentTemplate for T
Source§unsafe fn apply(
&self,
context: &mut TemplateContext<'_, '_>,
bundle_writer: &mut BundleWriter<'_>,
) -> Result<(), BevyError>
unsafe fn apply( &self, context: &mut TemplateContext<'_, '_>, bundle_writer: &mut BundleWriter<'_>, ) -> Result<(), BevyError>
entity. Read moreSource§fn clone_template(&self) -> Box<dyn ErasedComponentTemplate>
fn clone_template(&self) -> Box<dyn ErasedComponentTemplate>
Clone.impl<T> ErasedDestructor for Twhere
T: 'static,
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> FromTemplate for T
impl<T> FromTemplate for T
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<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,
impl<T> HitDataExtra for T
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<G> PatchFromTemplate for Gwhere
G: FromTemplate,
impl<G> PatchFromTemplate for Gwhere
G: FromTemplate,
Source§fn patch<F>(func: F) -> TemplatePatch<F, <G as PatchFromTemplate>::Template>
fn patch<F>(func: F) -> TemplatePatch<F, <G as PatchFromTemplate>::Template>
func, and turns it into a TemplatePatch.Source§impl<T> PatchTemplate for Twhere
T: Template,
impl<T> PatchTemplate for Twhere
T: Template,
Source§fn patch_template<F>(func: F) -> TemplatePatch<F, T>
fn patch_template<F>(func: F) -> TemplatePatch<F, 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.impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
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().impl<T> Settings for T
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.Source§impl<T> Template for T
impl<T> Template for T
Source§fn build_template(
&self,
_context: &mut TemplateContext<'_, '_>,
) -> Result<<T as Template>::Output, BevyError>
fn build_template( &self, _context: &mut TemplateContext<'_, '_>, ) -> Result<<T as Template>::Output, BevyError>
entity context to produce a Template::Output.Source§fn clone_template(&self) -> T
fn clone_template(&self) -> T
Clone.