1 #ifndef DALI_TOOLKIT_INTERNAL_GLTF_LOADER_H
\r
2 #define DALI_TOOLKIT_INTERNAL_GLTF_LOADER_H
\r
5 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
\r
7 * Licensed under the Apache License, Version 2.0 (the "License");
\r
8 * you may not use this file except in compliance with the License.
\r
9 * You may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * Unless required by applicable law or agreed to in writing, software
\r
14 * distributed under the License is distributed on an "AS IS" BASIS,
\r
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 * See the License for the specific language governing permissions and
\r
17 * limitations under the License.
\r
21 // EXTERNAL INCLUDES
\r
22 #include <dali/public-api/actors/layer.h>
\r
23 #include <dali/public-api/animation/animation.h>
\r
24 #include <dali/public-api/common/vector-wrapper.h>
\r
25 #include <dali/public-api/rendering/renderer.h>
\r
26 #include <dali/public-api/rendering/shader.h>
\r
28 // INTERNAL INCLUDES
\r
29 #include <dali-toolkit/devel-api/builder/json-parser.h>
\r
30 #include <dali-toolkit/internal/controls/scene3d-view/scene3d-view-impl.h>
\r
32 using namespace Dali;
\r
46 METALLICROUGHNESS_SHADER,
\r
47 BASECOLOR_METALLICROUGHNESS_SHADER,
\r
49 BASECOLOR_NORMAL_SHADER,
\r
50 METALLICROUGHNESS_NORMAL_SHADER,
\r
51 BASECOLOR_METALLICROUGHNESS_NORMAL_SHADER,
\r
53 BASECOLOR_OCCLUSION_SHADER,
\r
54 METALLICROUGHNESS_OCCLUSION_SHADER,
\r
55 BASECOLOR_METALLICROUGHNESS_OCCLUSION_SHADER,
\r
56 NORMAL_OCCLUSION_SHADER,
\r
57 BASECOLOR_NORMAL_OCCLUSION_SHADER,
\r
58 METALLICROUGHNESS_NORMAL_OCCLUSION_SHADER,
\r
59 BASECOLOR_METALLICROUGHNESS_NORMAL_OCCLUSION_SHADER,
\r
61 BASECOLOR_EMIT_SHADER,
\r
62 METALLICROUGHNESS_EMIT_SHADER,
\r
63 BASECOLOR_METALLICROUGHNESS_EMIT_SHADER,
\r
65 BASECOLOR_NORMAL_EMIT_SHADER,
\r
66 METALLICROUGHNESS_NORMAL_EMIT_SHADER,
\r
67 BASECOLOR_METALLICROUGHNESS_NORMAL_EMIT_SHADER,
\r
68 OCCLUSION_EMIT_SHADER,
\r
69 BASECOLOR_OCCLUSION_EMIT_SHADER,
\r
70 METALLICROUGHNESS_OCCLUSION_EMIT_SHADER,
\r
71 BASECOLOR_METALLICROUGHNESS_OCCLUSION_EMIT_SHADER,
\r
72 NORMAL_OCCLUSION_EMIT_SHADER,
\r
73 BASECOLOR_NORMAL_OCCLUSION_EMIT_SHADER,
\r
74 METALLICROUGHNESS_NORMAL_OCCLUSION_EMIT_SHADER,
\r
75 BASECOLOR_METALLICROUGHNESS_NORMAL_OCCLUSION_EMIT_SHADER,
\r
77 IBL_BASECOLOR_SHADER,
\r
78 IBL_METALLICROUGHNESS_SHADER,
\r
79 IBL_BASECOLOR_METALLICROUGHNESS_SHADER,
\r
81 IBL_BASECOLOR_NORMAL_SHADER,
\r
82 IBL_METALLICROUGHNESS_NORMAL_SHADER,
\r
83 IBL_BASECOLOR_METALLICROUGHNESS_NORMAL_SHADER,
\r
84 IBL_OCCLUSION_SHADER,
\r
85 IBL_BASECOLOR_OCCLUSION_SHADER,
\r
86 IBL_METALLICROUGHNESS_OCCLUSION_SHADER,
\r
87 IBL_BASECOLOR_METALLICROUGHNESS_OCCLUSION_SHADER,
\r
88 IBL_NORMAL_OCCLUSION_SHADER,
\r
89 IBL_BASECOLOR_NORMAL_OCCLUSION_SHADER,
\r
90 IBL_METALLICROUGHNESS_NORMAL_OCCLUSION_SHADER,
\r
91 IBL_BASECOLOR_METALLICROUGHNESS_NORMAL_OCCLUSION_SHADER,
\r
93 IBL_BASECOLOR_EMIT_SHADER,
\r
94 IBL_METALLICROUGHNESS_EMIT_SHADER,
\r
95 IBL_BASECOLOR_METALLICROUGHNESS_EMIT_SHADER,
\r
96 IBL_NORMAL_EMIT_SHADER,
\r
97 IBL_BASECOLOR_NORMAL_EMIT_SHADER,
\r
98 IBL_METALLICROUGHNESS_NORMAL_EMIT_SHADER,
\r
99 IBL_BASECOLOR_METALLICROUGHNESS_NORMAL_EMIT_SHADER,
\r
100 IBL_OCCLUSION_EMIT_SHADER,
\r
101 IBL_BASECOLOR_OCCLUSION_EMIT_SHADER,
\r
102 IBL_METALLICROUGHNESS_OCCLUSION_EMIT_SHADER,
\r
103 IBL_BASECOLOR_METALLICROUGHNESS_OCCLUSION_EMIT_SHADER,
\r
104 IBL_NORMAL_OCCLUSION_EMIT_SHADER,
\r
105 IBL_BASECOLOR_NORMAL_OCCLUSION_EMIT_SHADER,
\r
106 IBL_METALLICROUGHNESS_NORMAL_OCCLUSION_EMIT_SHADER,
\r
107 IBL_BASECOLOR_METALLICROUGHNESS_NORMAL_OCCLUSION_EMIT_SHADER,
\r
108 SHADER_TYPE_MAX = IBL_BASECOLOR_METALLICROUGHNESS_NORMAL_OCCLUSION_EMIT_SHADER
\r
124 int32_t byteLength;
\r
129 struct BufferViewInfo
\r
146 int32_t byteOffset;
\r
147 int32_t byteLength;
\r
148 int32_t byteStride;
\r
165 int32_t samplerIdx;
\r
168 struct PbrTextureInfo
\r
185 struct MaterialInfo
\r
188 : baseColorFactor(1, 1, 1, 1),
\r
189 metallicFactor(1.0),
\r
190 roughnessFactor(1.0),
\r
191 emissiveFactor(0.0, 0.0, 0.0),
\r
192 alphaMode("OPAQUE"),
\r
194 doubleSided(false),
\r
203 Vector4 baseColorFactor;
\r
204 float metallicFactor;
\r
205 float roughnessFactor;
\r
206 Vector3 emissiveFactor;
\r
207 std::string alphaMode;
\r
211 PbrTextureInfo baseColorTexture;
\r
212 PbrTextureInfo metallicRoughnessTexture;
\r
213 PbrTextureInfo normalTexture;
\r
214 PbrTextureInfo occlusionTexture;
\r
215 PbrTextureInfo emissiveTexture;
\r
218 //need to add max, min
\r
221 struct AccessorInfo
\r
240 int32_t bufferView;
\r
241 int32_t byteOffset;
\r
242 int32_t componentType;
\r
249 //need to add max, min
\r
269 std::vector<int32_t> TEXCOORD;
\r
270 std::vector<int32_t> COLOR;
\r
288 int32_t indicesIdx;
\r
289 int32_t materialsIdx;
\r
295 Attribute attribute;
\r
296 //need to add max, min
\r
299 struct AnimationChannelInfo
\r
301 AnimationChannelInfo()
\r
308 ~AnimationChannelInfo()
\r
313 int32_t targetNode;
\r
317 struct AnimationSamplerInfo
\r
319 AnimationSamplerInfo()
\r
326 ~AnimationSamplerInfo()
\r
332 std::string interpolation;
\r
335 struct AnimationInfo
\r
347 std::vector<AnimationChannelInfo> channelArray;
\r
348 std::vector<AnimationSamplerInfo> samplerArray;
\r
351 struct OrthographicInfo
\r
361 ~OrthographicInfo()
\r
371 struct PerspectiveInfo
\r
374 : aspectRatio(0.0f),
\r
405 OrthographicInfo orthographic;
\r
406 PerspectiveInfo perspective;
\r
411 * Loader is a class to parse glTf, to load data from file, and to generate Scene.
\r
412 * This glTF loader supports glTF 2.0 features.
\r
414 * @remarks glTF loader didn't support such features.
\r
415 * - Sparse accessor
\r
417 * - Skeletal Animation
\r
418 * These features will be supported soon.
\r
425 * @brief Create an uninitialized Loader.
\r
430 * @brief Destructor
\r
435 * @brief Load Scene3dView from scene format file(e.g., glTF).
\r
436 * @param[in] filePath Path of scene format file.
\r
437 * @param[in] scene3dView Scene3dView data loaded from file.
\r
438 * @return true if scene is successfully loaded
\r
440 bool LoadScene(const std::string& filePath, Internal::Scene3dView& scene3dView);
\r
443 bool ParseGltf(const std::string& filePath);
\r
446 bool CreateScene(Internal::Scene3dView& scene3dView);
\r
448 void LoadCamera(Scene3dView& scene3dView);
\r
449 bool LoadOrthoGraphic(const TreeNode& camera, CameraInfo& cameraInfo);
\r
450 bool LoadPerspective(const TreeNode& camera, CameraInfo& cameraInfo);
\r
452 bool LoadSceneNodes(Scene3dView& scene3dView);
\r
453 Actor AddNode(Scene3dView& scene3dView, uint32_t index);
\r
454 void SetActorCache(Actor& actor, uint32_t index);
\r
455 bool SetTextureAndSampler(TextureSet& textureSet, int32_t textureIdx, std::string& toShader, std::string shader, int32_t& addIdx);
\r
457 bool LoadAnimation(Scene3dView& scene3dView);
\r
458 bool LoadAnimationChannels(const TreeNode& animation, AnimationInfo& animationInfo);
\r
459 bool LoadAnimationSamplers(const TreeNode& animation, AnimationInfo& animationInfo);
\r
462 Dali::Toolkit::JsonParser mParser;
\r
463 const TreeNode* mNodes;
\r
464 const TreeNode* mRoot;
\r
468 std::vector<Actor> mActorCache;
\r
469 Shader mShaderCache[ShaderType::SHADER_TYPE_MAX + 1];
\r
471 std::vector<BufferInfo> mBufferArray;
\r
472 std::vector<BufferViewInfo> mBufferViewArray;
\r
473 std::vector<AccessorInfo> mAccessorArray;
\r
475 std::vector<MeshInfo> mMeshArray;
\r
476 std::vector<MaterialInfo> mMaterialArray;
\r
477 std::vector<TextureInfo> mTextureArray;
\r
479 std::vector<Texture> mSourceArray;
\r
480 std::vector<Sampler> mSamplerArray;
\r
485 } //namespace Internal
\r
487 } //namespace Toolkit
\r
491 #endif // DALI_TOOLKIT_INTERNAL_GLTF_LOADER_H
\r