diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2022-12-17 12:21:01 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2022-12-17 12:21:01 +0100 |
commit | 13593d8644286278004242dd6c2bd27a15ab9162 (patch) | |
tree | c9b0c163407f992785e349641e4b773a4f9d40d7 /drivers | |
parent | 791e742af7337bfe3107552612d19b6d53b3d8fc (diff) | |
parent | b7088bbf5276a9d991724f697df970ec30a57c2f (diff) |
Merge pull request #70087 from clayjohn/mesh-aabb
Cache mesh AABB when modified by skeleton and update instance AABB when skeleton changes
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gles3/storage/mesh_storage.cpp | 4 | ||||
-rw-r--r-- | drivers/gles3/storage/mesh_storage.h | 1 |
2 files changed, 4 insertions, 1 deletions
diff --git a/drivers/gles3/storage/mesh_storage.cpp b/drivers/gles3/storage/mesh_storage.cpp index 5bbbc7b91b..9b9efb0ba2 100644 --- a/drivers/gles3/storage/mesh_storage.cpp +++ b/drivers/gles3/storage/mesh_storage.cpp @@ -528,7 +528,7 @@ AABB MeshStorage::mesh_get_aabb(RID p_mesh, RID p_skeleton) { Skeleton *skeleton = skeleton_owner.get_or_null(p_skeleton); - if (!skeleton || skeleton->size == 0) { + if (!skeleton || skeleton->size == 0 || mesh->skeleton_aabb_version == skeleton->version) { return mesh->aabb; } @@ -622,6 +622,8 @@ AABB MeshStorage::mesh_get_aabb(RID p_mesh, RID p_skeleton) { } } + mesh->aabb = aabb; + mesh->skeleton_aabb_version = skeleton->version; return aabb; } diff --git a/drivers/gles3/storage/mesh_storage.h b/drivers/gles3/storage/mesh_storage.h index 0f30814928..0b6b861b5b 100644 --- a/drivers/gles3/storage/mesh_storage.h +++ b/drivers/gles3/storage/mesh_storage.h @@ -126,6 +126,7 @@ struct Mesh { AABB aabb; AABB custom_aabb; + uint64_t skeleton_aabb_version = 0; Vector<RID> material_cache; |