c-frame / aframe-physics-system

community-maintained fork of n5ro's aframe-physics-system
https://c-frame.github.io/aframe-physics-system/
MIT License
43 stars 11 forks source link

Memory access fault on constraint creation #43

Closed jackdigitalinsight closed 1 year ago

jackdigitalinsight commented 1 year ago

(Posted to https://github.com/kripken/ammo.js/issues/421 but I guess this is the new active home?)

The attached simple example A-Frame/Ammo scene has a kinematic parent and dynamic child, with functions (to type into the browser console) to attach (add lock constraint), detach (remove constraint), and move the kinematic parent. Running in Chrome on Windows 10, if physics has moved the dynamic child since loading the HTML, the attach() throws a memory fault at Ammo.destroy(bodyTransform) near the end of the ammo-constraint component createConstraint function.

e.g. move() (pushes unattached child away) then attach() throws the fault, while attach(), move(), move(), detach(), move(), attach() (where the child only moves when attached) works

The bodyTransform that is destroyed is set near the top of that function: const bodyTransform = body.getCenterOfMassTransform().inverse().op_mul(targetBody.getWorldTransform()); Does that allocate, or should the function not be destroying it?

If I duplicate the logic of createConstraint() but leave out Ammo.destroy(bodyTransform), (and disable deactivation on child) it seems to work fine. Hopefully not leaking memory.

Thank you.

crash.html.txt

diarmidmackenzie commented 1 year ago

46 should fix this.