Skip to content

Commit

Permalink
Make body_test_motion thread safe for multi-threaded physics
Browse files Browse the repository at this point in the history
Needs proper synchro with the command buffer for thread safety, in case
physics is not running on the main thread.
  • Loading branch information
pouleyKetchoupp committed Oct 6, 2021
1 parent 3e2bb41 commit 11aeaaa
Showing 1 changed file with 2 additions and 9 deletions.
11 changes: 2 additions & 9 deletions servers/physics_2d/physics_2d_server_wrap_mt.h
Original file line number Diff line number Diff line change
Expand Up @@ -251,15 +251,8 @@ class Physics2DServerWrapMT : public Physics2DServer {

FUNC2(body_set_pickable, RID, bool);

bool body_test_motion(RID p_body, const Transform2D &p_from, const Vector2 &p_motion, bool p_infinite_inertia, real_t p_margin = 0.08, MotionResult *r_result = nullptr, bool p_exclude_raycast_shapes = true, const Set<RID> &p_exclude = Set<RID>()) {
ERR_FAIL_COND_V(main_thread != Thread::get_caller_id(), false);
return physics_2d_server->body_test_motion(p_body, p_from, p_motion, p_infinite_inertia, p_margin, r_result, p_exclude_raycast_shapes, p_exclude);
}

int body_test_ray_separation(RID p_body, const Transform2D &p_transform, bool p_infinite_inertia, Vector2 &r_recover_motion, SeparationResult *r_results, int p_result_max, float p_margin = 0.08) {
ERR_FAIL_COND_V(main_thread != Thread::get_caller_id(), false);
return physics_2d_server->body_test_ray_separation(p_body, p_transform, p_infinite_inertia, r_recover_motion, r_results, p_result_max, p_margin);
}
FUNC8R(bool, body_test_motion, RID, const Transform2D &, const Vector2 &, bool, real_t, MotionResult *, bool, const Set<RID> &);
FUNC7R(int, body_test_ray_separation, RID, const Transform2D &, bool, Vector2 &, SeparationResult *, int, float);

// this function only works on physics process, errors and returns null otherwise
Physics2DDirectBodyState *body_get_direct_state(RID p_body) {
Expand Down

0 comments on commit 11aeaaa

Please sign in to comment.