Обнаружил весьма существенную утечку памяти в 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();

Так всё работает правильно и без лишних утечек.

МоБи SDK баг: утечка при добавлении ключей
Метки:        

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *