Merge changes I048d8903,Ib84dd28c into devel/master
[platform/core/uifw/dali-toolkit.git] / dali-scene3d / public-api / loader / model-loader.h
1 #ifndef DALI_SCENE3D_LOADER_MODEL_LOADER_H
2 #define DALI_SCENE3D_LOADER_MODEL_LOADER_H
3 /*
4  * Copyright (c) 2023 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 // INTERNAL INCLUDES
21 #include <dali-scene3d/public-api/api.h>
22 #include <dali-scene3d/public-api/loader/load-result.h>
23 #include <dali-scene3d/public-api/loader/scene-definition.h>
24
25 // EXTERNAL INCLUDES
26 #include <string>
27
28 namespace Dali
29 {
30 namespace Scene3D
31 {
32 namespace Loader
33 {
34 namespace Internal
35 {
36 class ModelLoaderImpl;
37 }
38
39 class DALI_SCENE3D_API ModelLoader
40 {
41 public:
42   class InputParameter
43   {
44   };
45
46   /**
47    * @brief ModelLoader Constructor.
48    * @param[in] modelUrl Url of the model file to be loaded
49    * @param[in] resourceDirectoryUrl Url of directory that contains resources.
50    * @param[out] loadResult Loaded result that includes scene tree and resources.
51    */
52   ModelLoader(const std::string& modelUrl, const std::string& resourceDirectoryUrl, Dali::Scene3D::Loader::LoadResult& loadResult);
53
54   /**
55    * @brief Request to load model from model url.
56    * @param[in] pathProvider Path provider that defines resource paths.
57    * @param[in] loadOnlyRawResource If true, load Raw resource only, and do not create Dali::Handle
58    * If false, this loader load Raw resource and create Dali::Handle too.
59    * Default value is false;
60    * @return True if model loading is successfully finished.
61    */
62   bool LoadModel(Dali::Scene3D::Loader::ResourceBundle::PathProvider& pathProvider, bool loadOnlyRawResource = false);
63
64   /**
65    * @brief Set InputParameter.
66    * Thie method store only a pointer of InputParameter.
67    * The object of InputParameter should not be deleted until it is no longer used.
68    * @param[in] inputParameter Input parameters that can be used in loading time.
69    */
70   void SetInputParameter(InputParameter& inputParameter);
71
72   /**
73    * @brief Retrieves loaded scene
74    * @return SceneDefinition that is loaded from file
75    */
76   Dali::Scene3D::Loader::SceneDefinition& GetScene();
77
78   /**
79    * @brief Retrieves resource bundle that includes resource information
80    * @return ResourceBundle for model resources
81    */
82   Dali::Scene3D::Loader::ResourceBundle& GetResources();
83
84   /**
85    * @brief Retrieves loaded AnimationDefinition
86    * @return AnimationDefinition that is loaded from file
87    */
88   std::vector<Dali::Scene3D::Loader::AnimationDefinition>& GetAnimations();
89
90   /**
91    * @brief Retrieves loaded CameraParameters
92    * @return CameraParameters list that is loaded from file
93    */
94   std::vector<Dali::Scene3D::Loader::CameraParameters>& GetCameras();
95
96   /**
97    * @brief Retrieves ResourceChoices
98    * @return Choices for loaded Resources
99    */
100   Dali::Scene3D::Loader::Customization::Choices& GetResourceChoices();
101
102 private:
103   /**
104    * @brief Create model loader for each file format.
105    */
106   void CreateModelLoader();
107
108   /**
109    * @brief Load resource of the model.
110    */
111   void LoadResource(Dali::Scene3D::Loader::ResourceBundle::PathProvider& pathProvider, bool loadOnlyRawResource);
112
113 private:
114   std::string mModelUrl;
115   std::string mResourceDirectoryUrl;
116
117   Dali::Scene3D::Loader::LoadResult             mLoadResult;
118   Dali::Scene3D::Loader::Customization::Choices mResourceChoices;
119
120   std::shared_ptr<Internal::ModelLoaderImpl> mImpl;
121 };
122 } // namespace Loader
123 } // namespace Scene3D
124 } // namespace Dali
125
126 #endif // DALI_SCENE3D_LOADER_MODEL_LOADER_H