Tune HavokWrapper - #4
Open
SpaceGT wants to merge 1 commit into
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This replaces the generated Havok thunk pools and runtime slot registry with bridges scoped by callback role and lifetime rather than raw C signature. Rooted callbacks for activation, constraints, contacts, entities, jobs, profiling, uniform grids, wheels, worlds, and AABB phantoms now use fixed bridges that Havok calls directly, without allocating or looking up slots. This is safe because each role reuses the same rooted managed delegate, and registration rejects unexpected target changes.
Phantom callbacks need instance scope, so three shared bridges use the shape handle to find the correct callbacks. Constraint reading and shape-buffer cleanup only live for one native call; each publishes its target under a dedicated mutex, Havok invokes it synchronously, and the wrapper clears it before releasing the lock. Matching each bridge to its real scope removes 33,221 compiled slots and reduces code size, stale targets, and concurrency risks under CoreCLR.