Обнаружил весьма существенную утечку памяти в MotionBuilder 2010 при добавлении ключей в анимированное свойство вещественного числа — FBPropertyAnimatableDouble.
Вот моё тестовое свойство, предназначено для вывода значений качества объекта. Хотя в данном случае назначение свойства не так важно.
1 | FBPropertyAnimatableDouble Quality; |
?нициализирую это свойство для объекта в конструкторе
1 | FBPropertyPublish( this, Quality, "Quality", NULL, NULL ); |
Прежде чем работать с ним, подготавливаю анимационную кривую свойства
1 2 3 | Quality.SetMinMax( 0.0, 1.0 ); Quality.SetAnimated(true); |
? теперь стало быть можно и добавлять в него значения
1 | Quality.GetAnimationNode()->KeyAdd(time, &value); |
?менно такой вариант добавления ключей в свойство порождает весьма масштабные утечки памяти! Например после 9 тыс. кадров простого добавления ключей таким способом, МоБи скушает порядка 2,5 Гб оперативной памяти!!
Выход из данной ситуацию заключается в добавлении ключей непосредственно на кривую анимационной ноды:
1 2 3 4 5 6 7 | HFBFCurve fcurve = Quality.GetAnimationNode()->FCurve; fcurve->EditBegin(); fcurve->KeyAdd(time, quality); fcurve->EditEnd(); |
Так всё работает правильно и без лишних утечек.