1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

FTI - Add multimesh_instances_reset_physics_interpolation()

This commit is contained in:
lawnjelly
2025-06-29 17:22:54 +01:00
parent 4ad11b6af3
commit 1c8ef479b4
9 changed files with 36 additions and 0 deletions

View File

@@ -2484,6 +2484,7 @@ void RenderingServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("multimesh_set_physics_interpolated", "multimesh", "interpolated"), &RenderingServer::multimesh_set_physics_interpolated);
ClassDB::bind_method(D_METHOD("multimesh_set_physics_interpolation_quality", "multimesh", "quality"), &RenderingServer::multimesh_set_physics_interpolation_quality);
ClassDB::bind_method(D_METHOD("multimesh_instance_reset_physics_interpolation", "multimesh", "index"), &RenderingServer::multimesh_instance_reset_physics_interpolation);
ClassDB::bind_method(D_METHOD("multimesh_instances_reset_physics_interpolation", "multimesh"), &RenderingServer::multimesh_instances_reset_physics_interpolation);
BIND_ENUM_CONSTANT(MULTIMESH_TRANSFORM_2D);
BIND_ENUM_CONSTANT(MULTIMESH_TRANSFORM_3D);

View File

@@ -512,6 +512,7 @@ public:
virtual void multimesh_set_physics_interpolated(RID p_multimesh, bool p_interpolated) = 0;
virtual void multimesh_set_physics_interpolation_quality(RID p_multimesh, MultimeshPhysicsInterpolationQuality p_quality) = 0;
virtual void multimesh_instance_reset_physics_interpolation(RID p_multimesh, int p_index) = 0;
virtual void multimesh_instances_reset_physics_interpolation(RID p_multimesh) = 0;
virtual void multimesh_set_visible_instances(RID p_multimesh, int p_visible) = 0;
virtual int multimesh_get_visible_instances(RID p_multimesh) const = 0;

View File

@@ -424,6 +424,7 @@ public:
FUNC2(multimesh_set_physics_interpolated, RID, bool)
FUNC2(multimesh_set_physics_interpolation_quality, RID, MultimeshPhysicsInterpolationQuality)
FUNC2(multimesh_instance_reset_physics_interpolation, RID, int)
FUNC1(multimesh_instances_reset_physics_interpolation, RID)
FUNC2(multimesh_set_visible_instances, RID, int)
FUNC1RC(int, multimesh_get_visible_instances, RID)

View File

@@ -329,6 +329,17 @@ void RendererMeshStorage::multimesh_instance_reset_physics_interpolation(RID p_m
}
}
void RendererMeshStorage::multimesh_instances_reset_physics_interpolation(RID p_multimesh) {
MultiMeshInterpolator *mmi = _multimesh_get_interpolator(p_multimesh);
if (mmi && mmi->_data_curr.size()) {
// We don't want to invoke COW here, so copy the data directly.
ERR_FAIL_COND(mmi->_data_prev.size() != mmi->_data_curr.size());
float *w = mmi->_data_prev.ptrw();
const float *r = mmi->_data_curr.ptr();
memcpy(w, r, sizeof(float) * mmi->_data_curr.size());
}
}
void RendererMeshStorage::multimesh_set_visible_instances(RID p_multimesh, int p_visible) {
return _multimesh_set_visible_instances(p_multimesh, p_visible);
}

View File

@@ -152,6 +152,7 @@ public:
virtual void multimesh_set_physics_interpolated(RID p_multimesh, bool p_interpolated);
virtual void multimesh_set_physics_interpolation_quality(RID p_multimesh, RS::MultimeshPhysicsInterpolationQuality p_quality);
virtual void multimesh_instance_reset_physics_interpolation(RID p_multimesh, int p_index);
virtual void multimesh_instances_reset_physics_interpolation(RID p_multimesh);
virtual void multimesh_set_visible_instances(RID p_multimesh, int p_visible);
virtual int multimesh_get_visible_instances(RID p_multimesh) const;