How does NavPower handle memory allocation?
Most clients prefer to pass in a block of memory when the NavPower system is initialized and allow the NavPower system to perform all
of its dynamic memory allocation from within that block. This ensures that NavPower won't cause any fragmentation in the system heap.
The amount of memory required by the NavPower system is typically less than 1 MB, though that will vary based on the number of dynamic
objects created at runtime.
How does resource loading work?
Resources such as the NavGraphs are created by the build process as chunks of binary data. The client loads these binary chunks at
runtime and calls AddResource() to supply them to the NavPower system. This technique allows very high-performance resource loading
since the NavPower system only needs to adjust pointer locations before using a new resource. Optionally, the resource loading supports
format conversion such as endian swapping so that the same resource can be used on a range of platforms.
What type of streaming support does the NavPower system have?
The NavPower system has full streaming support with the ability for NavGraphs to connect up with previously loaded NavGraphs. All of
the dynamically created objects such as obstacles, jump connections, movers, etc. automatically react appropriately to a new NavGraph being
loaded or unloaded in their vicinity. Additionally, the entire NavPower world can be relocated spatially, a technique used by some engines
to keep the active portion of the world close to the origin for maximum floating-point accuracy.
What type of thread safety and multi-core support does the NavPower system have?
Starting with NavPower v1.1 the NavPower system has been fully thread safe with the ability to perform all of the movement simulation
on a helper thread while, for example, issuing commands from the main thread or adding resources from a loading thread. Starting with NavPower
v2.0 the NavPower system adds asynchronous calls for all of the other numerically intensive operations such as dynamic obstacle creation.
This allows almost all of the NavPower processing to be offloaded to a separate core or hardware thread.
|