2 * Copyright (c) 2022 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include <dali-test-suite-utils.h>
19 #include <dali-scene3d/public-api/loader/animation-definition.h>
20 #include <dali-scene3d/public-api/loader/facial-animation-loader.h>
23 using namespace Dali::Scene3D::Loader;
25 int UtcDaliLoadFacialAnimation(void)
29 AnimationDefinition animDef = LoadFacialAnimation(TEST_RESOURCE_DIR "/facial-blendshape-animation.json");
31 DALI_TEST_EQUAL(animDef.mName, "Facial_Blendshape_Animation");
32 DALI_TEST_EQUAL(animDef.mDuration, 14.966001f);
33 DALI_TEST_EQUAL(animDef.mEndAction, Animation::BAKE);
34 DALI_TEST_EQUAL(animDef.mSpeedFactor, 1.0f);
35 DALI_TEST_EQUAL(animDef.mLoopCount, 1);
36 DALI_TEST_EQUAL(animDef.mProperties.size(), 122);
38 DALI_TEST_EQUAL(animDef.mProperties[0].mNodeName, "GEO_1");
39 DALI_TEST_EQUAL(animDef.mProperties[0].mPropertyName, "uBlendShapeWeight[0]");
40 DALI_TEST_EQUAL(animDef.mProperties[0].mKeyFrames.GetType(), Property::Type::FLOAT);
41 DALI_TEST_EQUAL(animDef.mProperties[0].mTimePeriod.delaySeconds, 0.0f);
42 DALI_TEST_EQUAL(animDef.mProperties[0].mTimePeriod.durationSeconds, 14.966001f);
44 DALI_TEST_EQUAL(animDef.mProperties[69].mNodeName, "GEO_2");
45 DALI_TEST_EQUAL(animDef.mProperties[69].mPropertyName, "uBlendShapeWeight[1]");
46 DALI_TEST_EQUAL(animDef.mProperties[69].mKeyFrames.GetType(), Property::Type::FLOAT);
47 DALI_TEST_EQUAL(animDef.mProperties[69].mTimePeriod.delaySeconds, 0.0f);
48 DALI_TEST_EQUAL(animDef.mProperties[69].mTimePeriod.durationSeconds, 14.966001f);
50 DALI_TEST_EQUAL(animDef.mProperties[86].mNodeName, "GEO_3");
51 DALI_TEST_EQUAL(animDef.mProperties[86].mPropertyName, "uBlendShapeWeight[2]");
52 DALI_TEST_EQUAL(animDef.mProperties[86].mKeyFrames.GetType(), Property::Type::FLOAT);
53 DALI_TEST_EQUAL(animDef.mProperties[86].mTimePeriod.delaySeconds, 0.0f);
54 DALI_TEST_EQUAL(animDef.mProperties[86].mTimePeriod.durationSeconds, 14.966001f);
56 DALI_TEST_EQUAL(animDef.mProperties[100].mNodeName, "GEO_4");
57 DALI_TEST_EQUAL(animDef.mProperties[100].mPropertyName, "uBlendShapeWeight[7]");
58 DALI_TEST_EQUAL(animDef.mProperties[100].mKeyFrames.GetType(), Property::Type::FLOAT);
59 DALI_TEST_EQUAL(animDef.mProperties[100].mTimePeriod.delaySeconds, 0.0f);
60 DALI_TEST_EQUAL(animDef.mProperties[100].mTimePeriod.durationSeconds, 14.966001f);
62 DALI_TEST_EQUAL(animDef.mProperties[121].mNodeName, "GEO_5");
63 DALI_TEST_EQUAL(animDef.mProperties[121].mPropertyName, "uBlendShapeWeight[19]");
64 DALI_TEST_EQUAL(animDef.mProperties[121].mKeyFrames.GetType(), Property::Type::FLOAT);
65 DALI_TEST_EQUAL(animDef.mProperties[121].mTimePeriod.delaySeconds, 0.0f);
66 DALI_TEST_EQUAL(animDef.mProperties[121].mTimePeriod.durationSeconds, 14.966001f);
68 auto actor = Actor::New();
69 actor.SetProperty(Actor::Property::NAME, "GEO_1");
71 char weightNameBuffer[32];
72 char* const pWeightName = weightNameBuffer + snprintf(weightNameBuffer, sizeof(weightNameBuffer), "%s", "uBlendShapeWeight");
73 for(int i = 0; i < 122; i++)
75 snprintf(pWeightName, sizeof(weightNameBuffer) - (pWeightName - weightNameBuffer), "[%d]", i);
76 std::string weightName{weightNameBuffer};
77 actor.RegisterProperty(weightName, 0.0f);
80 auto getActor = [&actor](const std::string& name) {
81 return actor.FindChildByName(name);
84 auto anim = animDef.ReAnimate(getActor);
85 DALI_TEST_EQUAL(anim.GetDuration(), animDef.mDuration);
86 DALI_TEST_EQUAL(anim.GetEndAction(), animDef.mEndAction);
87 DALI_TEST_EQUAL(anim.GetSpeedFactor(), animDef.mSpeedFactor);
88 DALI_TEST_EQUAL(anim.GetLoopCount(), animDef.mLoopCount);