Commit 6ef0038f571e25d81a49f54ba09b7cbc59bfe080

Authored by seungho baek
1 parent f7e4ed1a

Change to use ModelLoader instead of Gltf2Loader and DliLoader

Change-Id: Ib9a64eef388799d4534d86f95b20735bc03a7fdd
examples/scene3d/scene3d-example.cpp
... ... @@ -19,8 +19,7 @@
19 19 #include <dirent.h>
20 20 #include <cstring>
21 21 #include <string_view>
22   -#include "dali-scene3d/public-api/loader/dli-loader.h"
23   -#include "dali-scene3d/public-api/loader/gltf2-loader.h"
  22 +#include "dali-scene3d/public-api/loader/model-loader.h"
24 23 #include "dali-scene3d/public-api/loader/light-parameters.h"
25 24 #include "dali-scene3d/public-api/loader/load-result.h"
26 25 #include "dali-scene3d/public-api/loader/shader-definition-factory.h"
... ... @@ -141,7 +140,7 @@ void ConfigureBlendShapeShaders(ResourceBundle&amp; resources, const SceneDefinition
141 140 }
142 141 }
143 142  
144   -Actor LoadScene(std::string sceneName, CameraActor camera, std::vector<AnimationDefinition>* animations, Animation& animation)
  143 +Actor LoadScene(std::string sceneName, CameraActor camera, std::vector<Dali::Animation>& generatedAnimations, Animation& animation)
145 144 {
146 145 ResourceBundle::PathProvider pathProvider = [](ResourceType::Value type) {
147 146 return Application::GetResourcePath() + RESOURCE_TYPE_DIRS[type];
... ... @@ -149,48 +148,27 @@ Actor LoadScene(std::string sceneName, CameraActor camera, std::vector&lt;Animation
149 148  
150 149 auto path = pathProvider(ResourceType::Mesh) + sceneName;
151 150  
152   - ResourceBundle resources;
153   - SceneDefinition scene;
154   - SceneMetadata metaData;
155   - std::vector<AnimationGroupDefinition> animGroups;
156   - std::vector<CameraParameters> cameraParameters;
157   - std::vector<LightParameters> lights;
  151 + ResourceBundle resources;
  152 + SceneDefinition scene;
  153 + SceneMetadata metaData;
  154 + std::vector<Dali::Scene3D::Loader::AnimationDefinition> animations;
  155 + std::vector<AnimationGroupDefinition> animGroups;
  156 + std::vector<CameraParameters> cameraParameters;
  157 + std::vector<LightParameters> lights;
158 158  
159   - animations->clear();
  159 + animations.clear();
160 160  
161 161 LoadResult output{
162 162 resources,
163 163 scene,
164 164 metaData,
165   - *animations,
  165 + animations,
166 166 animGroups,
167 167 cameraParameters,
168 168 lights};
169 169  
170   - if(sceneName.rfind(DLI_EXTENSION) == sceneName.size() - DLI_EXTENSION.size())
171   - {
172   - DliLoader loader;
173   - DliLoader::InputParams input{
174   - pathProvider(ResourceType::Mesh),
175   - nullptr,
176   - {},
177   - {},
178   - nullptr,
179   - {}};
180   - DliLoader::LoadParams loadParams{input, output};
181   - if(!loader.LoadScene(path, loadParams))
182   - {
183   - ExceptionFlinger(ASSERT_LOCATION) << "Failed to load scene from '" << path << "': " << loader.GetParseError();
184   - }
185   - }
186   - else
187   - {
188   - ShaderDefinitionFactory sdf;
189   - sdf.SetResources(resources);
190   - LoadGltfScene(path, sdf, output);
191   -
192   - resources.mEnvironmentMaps.push_back({});
193   - }
  170 + Dali::Scene3D::Loader::ModelLoader modelLoader(path, pathProvider(ResourceType::Mesh) + "/", output);
  171 + modelLoader.LoadModel(pathProvider);
194 172  
195 173 if(cameraParameters.empty())
196 174 {
... ... @@ -210,20 +188,14 @@ Actor LoadScene(std::string sceneName, CameraActor camera, std::vector&lt;Animation
210 188 {},
211 189 {},
212 190 {}};
213   - Customization::Choices choices;
214 191  
215 192 Actor root = Actor::New();
216 193 SetActorCentered(root);
217 194  
  195 + auto& resourceChoices = modelLoader.GetResourceChoices();
218 196 for(auto iRoot : scene.GetRoots())
219 197 {
220   - auto resourceRefs = resources.CreateRefCounter();
221   - scene.CountResourceRefs(iRoot, choices, resourceRefs);
222   - resources.CountEnvironmentReferences(resourceRefs);
223   -
224   - resources.LoadResources(resourceRefs, pathProvider);
225   -
226   - if(auto actor = scene.CreateNodes(iRoot, choices, nodeParams))
  198 + if(auto actor = scene.CreateNodes(iRoot, resourceChoices, nodeParams))
227 199 {
228 200 scene.ConfigureSkeletonJoints(iRoot, resources.mSkeletons, actor);
229 201 scene.ConfigureSkinningShaders(resources, actor, std::move(nodeParams.mSkinnables));
... ... @@ -235,8 +207,10 @@ Actor LoadScene(std::string sceneName, CameraActor camera, std::vector&lt;Animation
235 207 }
236 208 }
237 209  
238   - if(!animations->empty())
  210 + generatedAnimations.clear();
  211 + if(!animations.empty())
239 212 {
  213 + generatedAnimations.reserve(animations.size());
240 214 auto getActor = [&](const Scene3D::Loader::AnimatedProperty& property)
241 215 {
242 216 Dali::Actor actor;
... ... @@ -255,8 +229,11 @@ Actor LoadScene(std::string sceneName, CameraActor camera, std::vector&lt;Animation
255 229 return actor;
256 230 };
257 231  
258   - animation = (*animations)[0].ReAnimate(getActor);
259   - animation.Play();
  232 + for(auto& animationDefinition : animations)
  233 + {
  234 + generatedAnimations.push_back(animationDefinition.ReAnimate(getActor));
  235 + }
  236 + generatedAnimations[0].Play();
260 237 }
261 238  
262 239 return root;
... ... @@ -466,7 +443,6 @@ void Scene3DExample::OnTap(Dali::Actor actor, const Dali::TapGesture&amp; tap)
466 443  
467 444 auto id = mItemView.GetItemId(actor);
468 445  
469   - Scene3D::Loader::InitializeGltfLoader();
470 446 try
471 447 {
472 448 auto window = mApp.GetWindow();
... ... @@ -474,7 +450,7 @@ void Scene3DExample::OnTap(Dali::Actor actor, const Dali::TapGesture&amp; tap)
474 450 auto renderTasks = window.GetRenderTaskList();
475 451 renderTasks.RemoveTask(mSceneRender);
476 452  
477   - auto scene = LoadScene(mSceneNames[id], mSceneCamera, &mSceneAnimations, mCurrentAnimation);
  453 + auto scene = LoadScene(mSceneNames[id], mSceneCamera, mSceneAnimations, mCurrentAnimation);
478 454  
479 455 auto sceneRender = renderTasks.CreateTask();
480 456 sceneRender.SetCameraActor(mSceneCamera);
... ...
examples/scene3d/scene3d-example.h
... ... @@ -65,8 +65,8 @@ private: // data
65 65 public:
66 66 Dali::Actor mScene;
67 67  
68   - std::vector<Dali::Scene3D::Loader::AnimationDefinition> mSceneAnimations;
69   - Dali::Animation mCurrentAnimation;
  68 + std::vector<Dali::Animation> mSceneAnimations;
  69 + Dali::Animation mCurrentAnimation;
70 70  
71 71 std::unique_ptr<Scene3DExtension> mScene3DExtension;
72 72  
... ...
examples/scene3d/scene3d-extension.h
... ... @@ -93,16 +93,14 @@ private:
93 93 return false;
94 94 }
95 95  
96   - auto root = mSceneLoader->mScene;
97   - auto getActor = [&root](const Dali::Scene3D::Loader::AnimatedProperty& property) {
98   - return root.FindChildByName(property.mNodeName);
99   - };
100   -
101 96 if(mSceneLoader->mSceneAnimations.size() > animationIndex)
102 97 {
103 98 mCurrentAnimationIndex = animationIndex;
104   - mSceneLoader->mCurrentAnimation = mSceneLoader->mSceneAnimations[animationIndex].ReAnimate(getActor);
105   - mSceneLoader->mCurrentAnimation.FinishedSignal().Connect(this, &Scene3DExtension::OnAnimationFinished);
  99 + mSceneLoader->mCurrentAnimation = mSceneLoader->mSceneAnimations[animationIndex];
  100 + if(mSceneLoader->mCurrentAnimation.FinishedSignal().GetConnectionCount() == 0)
  101 + {
  102 + mSceneLoader->mCurrentAnimation.FinishedSignal().Connect(this, &Scene3DExtension::OnAnimationFinished);
  103 + }
106 104 mSceneLoader->mCurrentAnimation.Play();
107 105 }
108 106 }
... ...