diff options
author | Haoyu Qiu <timothyqiu32@gmail.com> | 2021-10-06 23:25:11 +0800 |
---|---|---|
committer | Haoyu Qiu <timothyqiu32@gmail.com> | 2021-10-06 23:25:11 +0800 |
commit | d000ce91306bd53d8ff9fa48b6050c27297c6c77 (patch) | |
tree | 52080013af6a1226f31ae4cd4c99d4258eb757ca /scene/3d | |
parent | 18c912c332261ab074e34899318f745aff9921c2 (diff) |
Re-prepare RenderingServer if SoftDynamicBody mesh changed
Diffstat (limited to 'scene/3d')
-rw-r--r-- | scene/3d/soft_dynamic_body_3d.cpp | 5 | ||||
-rw-r--r-- | scene/3d/soft_dynamic_body_3d.h | 2 |
2 files changed, 4 insertions, 3 deletions
diff --git a/scene/3d/soft_dynamic_body_3d.cpp b/scene/3d/soft_dynamic_body_3d.cpp index 21f9b0a35d..9fceb21790 100644 --- a/scene/3d/soft_dynamic_body_3d.cpp +++ b/scene/3d/soft_dynamic_body_3d.cpp @@ -411,8 +411,9 @@ void SoftDynamicBody3D::_draw_soft_mesh() { return; } - if (!rendering_server_handler.is_ready()) { - rendering_server_handler.prepare(get_mesh()->get_rid(), 0); + const RID mesh_rid = get_mesh()->get_rid(); + if (!rendering_server_handler.is_ready(mesh_rid)) { + rendering_server_handler.prepare(mesh_rid, 0); /// Necessary in order to render the mesh correctly (Soft body nodes are in global space) simulation_started = true; diff --git a/scene/3d/soft_dynamic_body_3d.h b/scene/3d/soft_dynamic_body_3d.h index 0b4b3021cd..5e7fbfe29e 100644 --- a/scene/3d/soft_dynamic_body_3d.h +++ b/scene/3d/soft_dynamic_body_3d.h @@ -50,7 +50,7 @@ class SoftDynamicBodyRenderingServerHandler : public RenderingServerHandler { private: SoftDynamicBodyRenderingServerHandler(); - bool is_ready() { return mesh.is_valid(); } + bool is_ready(RID p_mesh_rid) const { return mesh.is_valid() && mesh == p_mesh_rid; } void prepare(RID p_mesh_rid, int p_surface); void clear(); void open(); |