From 67f36ff0482d82a3a537cb393fd238eb3ee671cb Mon Sep 17 00:00:00 2001 From: Bruno Dilly Date: Wed, 31 Oct 2012 21:02:43 +0000 Subject: [PATCH] ephysics: avoid many unecessary allocs / free on collision detection Only allocates data when it has a callback registered. SVN revision: 78725 --- legacy/ephysics/src/lib/ephysics_body.cpp | 7 +++++-- legacy/ephysics/src/lib/ephysics_private.h | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/legacy/ephysics/src/lib/ephysics_body.cpp b/legacy/ephysics/src/lib/ephysics_body.cpp index 7cc3652471..d7c25ee793 100644 --- a/legacy/ephysics/src/lib/ephysics_body.cpp +++ b/legacy/ephysics/src/lib/ephysics_body.cpp @@ -1347,7 +1347,7 @@ ephysics_body_contact_processed(EPhysics_Body *body, EPhysics_Body *contact_body double rate; int wy, wh; - if ((!body) || (!contact_body)) + if ((!body) || (!contact_body) || (body->collision_cb < 1)) return; collision = (EPhysics_Body_Collision *)calloc( @@ -2845,6 +2845,8 @@ ephysics_body_event_callback_add(EPhysics_Body *body, EPhysics_Callback_Body_Typ cb->data = (void *)data; body->callbacks = eina_inlist_append(body->callbacks, EINA_INLIST_GET(cb)); + if (type == EPHYSICS_CALLBACK_BODY_COLLISION) + body->collision_cb++; } EAPI void * @@ -2866,8 +2868,9 @@ ephysics_body_event_callback_del(EPhysics_Body *body, EPhysics_Callback_Body_Typ cb_data = cb->data; _ephysics_body_event_callback_del(body, cb); + if (type == EPHYSICS_CALLBACK_BODY_COLLISION) + body->collision_cb--; break; - } return cb_data; diff --git a/legacy/ephysics/src/lib/ephysics_private.h b/legacy/ephysics/src/lib/ephysics_private.h index 2114a2b40f..4f070a1699 100644 --- a/legacy/ephysics/src/lib/ephysics_private.h +++ b/legacy/ephysics/src/lib/ephysics_private.h @@ -114,6 +114,7 @@ struct _EPhysics_Body { int cloth_columns; int cloth_rows; int material_index; + int collision_cb; EPhysics_Body_Soft_Body_Data *soft_data; struct { int triangle;