@@ -3,7 +3,7 @@ use nohash_hasher::IntMap;
33use vec1:: smallvec_v1:: SmallVec1 ;
44
55use re_chunk_store:: LatestAtQuery ;
6- use re_entity_db:: { EntityPath , EntityTree } ;
6+ use re_entity_db:: { EntityDb , EntityPath , EntityTree } ;
77use re_types:: ArchetypeName ;
88
99use crate :: {
@@ -239,7 +239,7 @@ impl TransformForest {
239239 /// entities are transformed relative to it.
240240 pub fn new (
241241 recording : & re_entity_db:: EntityDb ,
242- transform_cache : & TransformResolutionCache ,
242+ transform_cache : & mut TransformResolutionCache ,
243243 time_query : & LatestAtQuery ,
244244 ) -> Self {
245245 re_tracing:: profile_function!( ) ;
@@ -256,6 +256,7 @@ impl TransformForest {
256256 } ;
257257 tree. entity_tree_gather_transforms_recursive (
258258 entity_tree,
259+ recording,
259260 time_query,
260261 // Ignore potential pinhole camera at the root of the view, since it is regarded as being "above" this root.
261262 // TODO(andreas): Should we warn about that?
@@ -271,9 +272,10 @@ impl TransformForest {
271272 fn entity_tree_gather_transforms_recursive (
272273 & mut self ,
273274 subtree : & EntityTree ,
275+ entity_db : & EntityDb ,
274276 query : & LatestAtQuery ,
275277 transform_root_from_parent : TransformInfo ,
276- transforms_for_timeline : & CachedTransformsForTimeline ,
278+ transforms_for_timeline : & mut CachedTransformsForTimeline ,
277279 ) {
278280 let root = transform_root_from_parent. root ;
279281 let root_from_parent = transform_root_from_parent. target_from_source ;
@@ -287,7 +289,8 @@ impl TransformForest {
287289 for child_tree in subtree. children . values ( ) {
288290 let child_path = & child_tree. path ;
289291
290- let transforms_at_entity = transforms_at ( child_path, query, transforms_for_timeline) ;
292+ let transforms_at_entity =
293+ transforms_at ( child_path, entity_db, query, transforms_for_timeline) ;
291294
292295 let root_from_child =
293296 root_from_parent * transforms_at_entity. parent_from_entity_tree_transform ;
@@ -313,11 +316,11 @@ impl TransformForest {
313316 // Collect & compute poses.
314317 let root_from_instances = compute_root_from_instances (
315318 target_from_source,
316- transforms_at_entity. entity_from_instance_poses ,
319+ transforms_at_entity. entity_from_instance_poses . as_ref ( ) ,
317320 ) ;
318321 let root_from_archetype = compute_root_from_archetype (
319322 target_from_source,
320- transforms_at_entity. entity_from_instance_poses ,
323+ transforms_at_entity. entity_from_instance_poses . as_ref ( ) ,
321324 ) ;
322325
323326 let transform_root_from_child = TransformInfo {
@@ -329,6 +332,7 @@ impl TransformForest {
329332
330333 self . entity_tree_gather_transforms_recursive (
331334 child_tree,
335+ entity_db,
332336 query,
333337 transform_root_from_child,
334338 transforms_for_timeline,
@@ -656,17 +660,18 @@ fn pinhole3d_from_image_plane(
656660
657661/// Resolved transforms at an entity.
658662#[ derive( Default ) ]
659- struct TransformsAtEntity < ' a > {
663+ struct TransformsAtEntity {
660664 parent_from_entity_tree_transform : glam:: Affine3A ,
661- entity_from_instance_poses : Option < & ' a PoseTransformArchetypeMap > ,
662- pinhole_projection : Option < & ' a ResolvedPinholeProjection > ,
665+ entity_from_instance_poses : Option < PoseTransformArchetypeMap > ,
666+ pinhole_projection : Option < ResolvedPinholeProjection > ,
663667}
664668
665- fn transforms_at < ' a > (
669+ fn transforms_at (
666670 entity_path : & EntityPath ,
671+ entity_db : & EntityDb ,
667672 query : & LatestAtQuery ,
668- transforms_for_timeline : & ' a CachedTransformsForTimeline ,
669- ) -> TransformsAtEntity < ' a > {
673+ transforms_for_timeline : & mut CachedTransformsForTimeline ,
674+ ) -> TransformsAtEntity {
670675 // This is called very frequently, don't put a profile scope here.
671676
672677 let Some ( entity_transforms) = transforms_for_timeline
@@ -676,13 +681,17 @@ fn transforms_at<'a>(
676681 } ;
677682
678683 let parent_from_entity_tree_transform = entity_transforms
679- . latest_at_transform ( query)
684+ . latest_at_transform ( entity_db , query)
680685 // TODO(RR-2511): Don't ignore target frame.
681686 . map_or ( glam:: Affine3A :: IDENTITY , |source_to_target| {
682687 source_to_target. transform
683688 } ) ;
684- let entity_from_instance_poses = entity_transforms. latest_at_instance_poses_all ( query) ;
685- let pinhole_projection = entity_transforms. latest_at_pinhole ( query) ;
689+ let entity_from_instance_poses = entity_transforms
690+ . latest_at_instance_poses ( entity_db, query)
691+ . cloned ( ) ;
692+ let pinhole_projection = entity_transforms
693+ . latest_at_pinhole ( entity_db, query)
694+ . cloned ( ) ;
686695
687696 TransformsAtEntity {
688697 parent_from_entity_tree_transform,
@@ -800,13 +809,10 @@ mod tests {
800809 fn test_simple_entity_hierarchy ( ) {
801810 let test_scene = entity_hierarchy_test_scene ( ) ;
802811 let mut transform_cache = TransformResolutionCache :: default ( ) ;
803- transform_cache. add_chunks (
804- & test_scene,
805- test_scene. storage_engine ( ) . store ( ) . iter_chunks ( ) ,
806- ) ;
812+ transform_cache. add_chunks ( test_scene. storage_engine ( ) . store ( ) . iter_chunks ( ) ) ;
807813
808814 let query = LatestAtQuery :: latest ( TimelineName :: log_tick ( ) ) ;
809- let transform_forest = TransformForest :: new ( & test_scene, & transform_cache, & query) ;
815+ let transform_forest = TransformForest :: new ( & test_scene, & mut transform_cache, & query) ;
810816
811817 let all_entity_paths = test_scene
812818 . entity_paths ( )
@@ -935,10 +941,10 @@ mod tests {
935941 . unwrap ( ) ;
936942
937943 let mut transform_cache = TransformResolutionCache :: default ( ) ;
938- transform_cache. add_chunks ( & entity_db , entity_db. storage_engine ( ) . store ( ) . iter_chunks ( ) ) ;
944+ transform_cache. add_chunks ( entity_db. storage_engine ( ) . store ( ) . iter_chunks ( ) ) ;
939945
940946 let query = LatestAtQuery :: latest ( TimelineName :: log_tick ( ) ) ;
941- let transform_forest = TransformForest :: new ( & entity_db, & transform_cache, & query) ;
947+ let transform_forest = TransformForest :: new ( & entity_db, & mut transform_cache, & query) ;
942948
943949 let target = TransformFrameIdHash :: from_entity_path ( & EntityPath :: from ( "box" ) ) ;
944950 let sources = [ TransformFrameIdHash :: from_entity_path ( & EntityPath :: from (
0 commit comments