Update all docs mentioning leaves
This commit is contained in:
parent
1d7c44af25
commit
1e1bfed549
@ -95,7 +95,7 @@ mod serial {
|
|||||||
///
|
///
|
||||||
/// Third party plugins should ensure that this is used in concert with
|
/// Third party plugins should ensure that this is used in concert with
|
||||||
/// [`sync_simple_transforms`](super::sync_simple_transforms) and
|
/// [`sync_simple_transforms`](super::sync_simple_transforms) and
|
||||||
/// [`compute_transform_leaves`](super::mark_dirty_trees).
|
/// [`mark_dirty_trees`](super::mark_dirty_trees).
|
||||||
pub fn propagate_parent_transforms(
|
pub fn propagate_parent_transforms(
|
||||||
mut root_query: Query<
|
mut root_query: Query<
|
||||||
(Entity, &Children, Ref<Transform>, &mut GlobalTransform),
|
(Entity, &Children, Ref<Transform>, &mut GlobalTransform),
|
||||||
@ -265,7 +265,7 @@ mod parallel {
|
|||||||
///
|
///
|
||||||
/// Third party plugins should ensure that this is used in concert with
|
/// Third party plugins should ensure that this is used in concert with
|
||||||
/// [`sync_simple_transforms`](super::sync_simple_transforms) and
|
/// [`sync_simple_transforms`](super::sync_simple_transforms) and
|
||||||
/// [`compute_transform_leaves`](super::compute_transform_leaves).
|
/// [`mark_dirty_trees`](super::mark_dirty_trees).
|
||||||
pub fn propagate_parent_transforms(
|
pub fn propagate_parent_transforms(
|
||||||
mut queue: Local<WorkQueue>,
|
mut queue: Local<WorkQueue>,
|
||||||
mut orphaned: RemovedComponents<ChildOf>,
|
mut orphaned: RemovedComponents<ChildOf>,
|
||||||
@ -455,21 +455,6 @@ mod parallel {
|
|||||||
// visiting disjoint entities in parallel, which is safe.
|
// visiting disjoint entities in parallel, which is safe.
|
||||||
#[expect(unsafe_code, reason = "Mutating disjoint entities in parallel")]
|
#[expect(unsafe_code, reason = "Mutating disjoint entities in parallel")]
|
||||||
let children_iter = unsafe {
|
let children_iter = unsafe {
|
||||||
// Performance note: iter_many tests every child to see if it meets the query. For
|
|
||||||
// leaf nodes, this unfortunately means we have the pay the price of checking every
|
|
||||||
// child, even if it is a leaf node and is skipped.
|
|
||||||
//
|
|
||||||
// To ensure this is still the fastest design, I tried removing the second pass
|
|
||||||
// (`compute_transform_leaves`) and instead simply doing that here. However, that
|
|
||||||
// proved to be much slower than two pass for a few reasons:
|
|
||||||
// - it's less cache friendly and is outright slower than the tight loop in the
|
|
||||||
// second pass
|
|
||||||
// - it prevents parallelism, as all children must be iterated in series
|
|
||||||
//
|
|
||||||
// The only way I can see to make this faster when there are many leaf nodes is to
|
|
||||||
// speed up archetype checking to make the iterator skip leaf entities more quickly,
|
|
||||||
// or encoding the hierarchy level as a component. That, or use some kind of change
|
|
||||||
// detection to mark dirty subtrees when the transform is mutated.
|
|
||||||
nodes.iter_many_unique_unsafe(UniqueEntityIter::from_iterator_unchecked(
|
nodes.iter_many_unique_unsafe(UniqueEntityIter::from_iterator_unchecked(
|
||||||
p_children.iter(),
|
p_children.iter(),
|
||||||
))
|
))
|
||||||
@ -519,7 +504,7 @@ mod parallel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Alias for a large, repeatedly used query. Queries for transform entities that have both a
|
/// Alias for a large, repeatedly used query. Queries for transform entities that have both a
|
||||||
/// parent and children, thus they are neither roots nor leaves.
|
/// parent and possibly children, thus they are not roots.
|
||||||
type NodeQuery<'w, 's> = Query<
|
type NodeQuery<'w, 's> = Query<
|
||||||
'w,
|
'w,
|
||||||
's,
|
's,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user