Repository navigation
v0.8.0
0.8.0 (2026-10-31)
Changed
- Breaking: kinds, modes and choices are
int32_t, and flag sets have
uint32_ttypedefs. All 33 kind, mode and choice typedefs, such as
maniLoopPolicy, areint32_t; a negative value is refused like one
past the last value. New flag-set typedefs aremaniGraphSyncFlags,
maniGraphClipFlags,maniRootAxesandmaniMatchEntryFlags, and the
fields that hold them take them, as doesmaniClipSource.loop, now a
maniLoopPolicy. RenameMANI_MATCH_LOOP,MANI_MATCH_NO_JUMPand
MANI_MATCH_MIRROREDtomaniMatchEntryLoop,maniMatchEntryNoJump
andmaniMatchEntryMirrored.maniMorphTargets_GetAttributereturns
-1 past the count, where it returnedUINT32_MAX. Code that keeps a
kind in auint32_tvariable or compares it with an unsigned value
updates its types
(#199). - Breaking: two names follow the family's naming rules.
maniLearnedTrainerReport.iterationisiterationCount, and
maniRootMoveIdentityismaniMakeRootMoveIdentity
(#198). - Breaking: the CPU checks return
bool, andmaniHash64takes an
int64_tcount.maniIsCpuBackendSupportedandmaniCheckCpu
returnboolinstead of anint32_t1 or 0, so a caller comparing
the result with 1 tests it as abool.maniHash64hashes any byte
count up toINT64_MAX; pass the count without narrowing it. Hash
values are unchanged
(#176). - Breaking: a refused call or a "no" clears its outputs. A call on a
builder, a glTF or FBX document or a trainer clears its sizes, counts,
reports, structs and handles before any check, so a failed call never
leaves an earlier call's value to be read as its answer.
maniBuilder_CopyBuilt,maniBuilder_CopySkeletonOrder,
maniGltf_GetMorphWeights,maniFbx_GetMorphWeightsand
maniLearnedTrainer_SaveCheckpointalso zero the caller's array up to
its capacity; a short skeleton order is no longer filled as far as it
goes. A too-small buffer still reports the size or count it needed.
maniBuildGltfClipandmaniBuildFbxClipwriteboundOutonly when
the clip builds.maniClip_GetRootMotionSourceand
maniInfluences_GetCenterclear their output when they return false,
and the name getters of learned models and motion databases clear
lengthOutwhen they return NULL. The headers say what each output
holds after a failure
(#165,
#174). - Breaking: a call refused as busy leaves its outputs. A builder or
trainer call that its own allocator or task hook made is refused with
mani_errorBusyand writes none of its outputs, since they may be the
ones the call in progress is filling.maniOpenGltfand
maniOpenFbxstill set their handle to NULL
(#173). - Breaking: more calls back in from host code are refused as busy.
maniGltf_SupplyBuffer,maniGltf_ReadSpringsand
maniGltf_ReadRagdollreturnmani_errorBusywhen called from the
builder's allocator.maniLearnedTrainer_SaveCheckpointand
maniBuildLearnedModelFromTrainerreturn it when called from the
trainer's allocator or task hooks. While a model is built from a
trainer,maniLearnedTrainer_Train,
maniLearnedTrainer_RestoreCheckpointand
maniDestroyLearnedTraineron that trainer return it too. Each
refusal counts one misuse
(#187,
#197). - The headers say which outputs may be their input:
maniBlendRootMotion'smoveOutmay be one ofmoves,
maniLearnedModel_Project'sstateOutmay bequery, and
maniMorphTargets_ComputeTargetWeights'targetWeightsOutmay be
channelWeights
(#195).
Fixed
maniMorphTargets_ComputeTargetWeightsgave wrong weights when its
output was its own channel weights. It now computes them in place with
the same bits as apart
(#193).maniRetargetMap_RetargetPosegave a wrong pose when the target pose
was the source pose, or shared memory with it. It now refuses any
overlap of the two poses withmani_errorInvalidand writes nothing
(#194).- Destroying a builder or a trainer, or closing a glTF or FBX document,
let the host's free hook call back into the object: a hook could
build on a builder being destroyed, free it twice, or read a closing
document's freed names. Every call from those frees is now refused
withmani_errorBusy, and a closing document reads as empty
(#187). - Host code running while a model was built from a trainer could
destroy or retrain the trainer under the build, which then read freed
memory. The trainer is now marked busy for the whole build
(#197).
Poses, samples, file bytes and format versions do not change. As with
every release before 1.0.0, a graph instance, spring state or trainer
checkpoint saved by 0.7.0 is refused with mani_errorVersion: keep
assets, not saved states, across the upgrade.