@@ -389,7 +389,7 @@ bool MeshAssetInstance::update_transforms()
389389{
390390 bool res = scene_object::update_transforms ();
391391
392- if (res)
392+ if (res|| need_update_mats )
393393 {
394394
395395// node_buffer.data().clear();
@@ -407,21 +407,23 @@ bool MeshAssetInstance::update_transforms()
407407 if (!info.primitive_global )
408408 info.primitive_global = std::make_shared<AABB>();
409409
410-
411- mat4x4 mat = nodes[index].asset_node ->mesh_matrix *global_transform;
412- info.primitive_global ->apply_transform (p, mat );
410+ mat4x4 prev_mat = info. global_mat ;
411+ info. global_mat = nodes[index].asset_node ->mesh_matrix *global_transform;
412+ info.primitive_global ->apply_transform (p, info. global_mat );
413413
414414 auto &my_node = gpu_nodes[info.mesh_info .GetNode_offset () - nodes_handle.get_offset ()];
415- my_node.node_global_matrix = mat;
416- my_node.node_inverse_matrix = mat;
415+ my_node.node_global_matrix = info.global_mat ;
416+ my_node.node_global_matrix_prev = prev_mat;
417+
418+ my_node.node_inverse_matrix = info.global_mat ;
417419 my_node.node_inverse_matrix .inverse ();
418420
419421
420422 my_node.aabb .min = info.primitive ->get_min ();
421423 my_node.aabb .max = info.primitive ->get_max ();
422424
423425
424-
426+ need_update_mats = prev_mat != info. global_mat ;
425427
426428 }
427429
@@ -579,9 +581,11 @@ nodes.emplace_back(node);
579581
580582 info.primitive_global = std::make_shared<AABB>();
581583
582- mat4x4 mat = nodes.back ().asset_node ->mesh_matrix * global_transform;
583584
584- info.primitive_global ->apply_transform (info.primitive , mat);
585+
586+ info.global_mat = nodes.back ().asset_node ->mesh_matrix * global_transform;
587+
588+ info.primitive_global ->apply_transform (info.primitive , info.global_mat );
585589
586590
587591 // node_buffer[node->index] = mat;
@@ -591,11 +595,12 @@ nodes.emplace_back(node);
591595 info.mesh_info .GetVertex_offset () = UINT (mesh_asset->vertex_handle .get_offset () + mesh_asset->meshes [m].vertex_offset ) ;
592596
593597 auto &my_node = gpu_nodes[UINT (info.mesh_info .GetNode_offset () - nodes_handle.get_offset ())];
594- my_node.node_global_matrix = mat ;
595- my_node.node_inverse_matrix = mat ;
598+ my_node.node_global_matrix = info. global_mat ;
599+ my_node.node_inverse_matrix = info. global_mat ;
596600 my_node.node_inverse_matrix .inverse ();
597601
598-
602+ my_node.node_global_matrix_prev = info.global_mat ;
603+
599604 my_node.aabb .min = info.primitive ->get_min ();
600605 my_node.aabb .max = info.primitive ->get_max ();
601606
0 commit comments