Improve performance for shapeless objects when using Jolt Physics

This commit is contained in:
Mikael Hermansson
2025-07-03 14:14:00 +02:00
parent efb40c1524
commit 63021bb4aa
4 changed files with 14 additions and 1 deletions

View File

@@ -57,6 +57,11 @@ JPH::BroadPhaseLayer JoltArea3D::_get_broad_phase_layer() const {
JPH::ObjectLayer JoltArea3D::_get_object_layer() const {
ERR_FAIL_NULL_V(space, 0);
if (jolt_shape == nullptr || jolt_shape->GetType() == JPH::EShapeType::Empty) {
// No point doing collision checks against a shapeless object.
return space->map_to_object_layer(_get_broad_phase_layer(), 0, 0);
}
return space->map_to_object_layer(_get_broad_phase_layer(), collision_layer, collision_mask);
}

View File

@@ -93,6 +93,11 @@ JPH::BroadPhaseLayer JoltBody3D::_get_broad_phase_layer() const {
JPH::ObjectLayer JoltBody3D::_get_object_layer() const {
ERR_FAIL_NULL_V(space, 0);
if (jolt_shape == nullptr || jolt_shape->GetType() == JPH::EShapeType::Empty) {
// No point doing collision checks against a shapeless object.
return space->map_to_object_layer(_get_broad_phase_layer(), 0, 0);
}
return space->map_to_object_layer(_get_broad_phase_layer(), collision_layer, collision_mask);
}

View File

@@ -167,6 +167,9 @@ void JoltShapedObject3D::_dequeue_needs_optimization() {
void JoltShapedObject3D::_shapes_changed() {
commit_shapes(false);
}
void JoltShapedObject3D::_shapes_committed() {
_update_object_layer();
}

View File

@@ -68,7 +68,7 @@ protected:
void _dequeue_needs_optimization();
virtual void _shapes_changed();
virtual void _shapes_committed() {}
virtual void _shapes_committed();
virtual void _space_changing() override;
public: