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/rendering/renderer.h>
\r
25 #include <dali/public-api/rendering/shader.h>
\r
27 // INTERNAL INCLUDES
\r
28 #include <dali-toolkit/devel-api/builder/json-parser.h>
\r
29 #include <dali-toolkit/internal/controls/scene3d-view/scene3d-view-impl.h>
\r
31 using namespace Dali;
\r
45 METALLICROUGHNESS_SHADER,
\r
46 BASECOLOR_METALLICROUGHNESS_SHADER,
\r
48 BASECOLOR_NORMAL_SHADER,
\r
49 METALLICROUGHNESS_NORMAL_SHADER,
\r
50 BASECOLOR_METALLICROUGHNESS_NORMAL_SHADER,
\r
52 BASECOLOR_OCCLUSION_SHADER,
\r
53 METALLICROUGHNESS_OCCLUSION_SHADER,
\r
54 BASECOLOR_METALLICROUGHNESS_OCCLUSION_SHADER,
\r
55 NORMAL_OCCLUSION_SHADER,
\r
56 BASECOLOR_NORMAL_OCCLUSION_SHADER,
\r
57 METALLICROUGHNESS_NORMAL_OCCLUSION_SHADER,
\r
58 BASECOLOR_METALLICROUGHNESS_NORMAL_OCCLUSION_SHADER,
\r
60 BASECOLOR_EMIT_SHADER,
\r
61 METALLICROUGHNESS_EMIT_SHADER,
\r
62 BASECOLOR_METALLICROUGHNESS_EMIT_SHADER,
\r
64 BASECOLOR_NORMAL_EMIT_SHADER,
\r
65 METALLICROUGHNESS_NORMAL_EMIT_SHADER,
\r
66 BASECOLOR_METALLICROUGHNESS_NORMAL_EMIT_SHADER,
\r
67 OCCLUSION_EMIT_SHADER,
\r
68 BASECOLOR_OCCLUSION_EMIT_SHADER,
\r
69 METALLICROUGHNESS_OCCLUSION_EMIT_SHADER,
\r
70 BASECOLOR_METALLICROUGHNESS_OCCLUSION_EMIT_SHADER,
\r
71 NORMAL_OCCLUSION_EMIT_SHADER,
\r
72 BASECOLOR_NORMAL_OCCLUSION_EMIT_SHADER,
\r
73 METALLICROUGHNESS_NORMAL_OCCLUSION_EMIT_SHADER,
\r
74 BASECOLOR_METALLICROUGHNESS_NORMAL_OCCLUSION_EMIT_SHADER,
\r
76 IBL_BASECOLOR_SHADER,
\r
77 IBL_METALLICROUGHNESS_SHADER,
\r
78 IBL_BASECOLOR_METALLICROUGHNESS_SHADER,
\r
80 IBL_BASECOLOR_NORMAL_SHADER,
\r
81 IBL_METALLICROUGHNESS_NORMAL_SHADER,
\r
82 IBL_BASECOLOR_METALLICROUGHNESS_NORMAL_SHADER,
\r
83 IBL_OCCLUSION_SHADER,
\r
84 IBL_BASECOLOR_OCCLUSION_SHADER,
\r
85 IBL_METALLICROUGHNESS_OCCLUSION_SHADER,
\r
86 IBL_BASECOLOR_METALLICROUGHNESS_OCCLUSION_SHADER,
\r
87 IBL_NORMAL_OCCLUSION_SHADER,
\r
88 IBL_BASECOLOR_NORMAL_OCCLUSION_SHADER,
\r
89 IBL_METALLICROUGHNESS_NORMAL_OCCLUSION_SHADER,
\r
90 IBL_BASECOLOR_METALLICROUGHNESS_NORMAL_OCCLUSION_SHADER,
\r
92 IBL_BASECOLOR_EMIT_SHADER,
\r
93 IBL_METALLICROUGHNESS_EMIT_SHADER,
\r
94 IBL_BASECOLOR_METALLICROUGHNESS_EMIT_SHADER,
\r
95 IBL_NORMAL_EMIT_SHADER,
\r
96 IBL_BASECOLOR_NORMAL_EMIT_SHADER,
\r
97 IBL_METALLICROUGHNESS_NORMAL_EMIT_SHADER,
\r
98 IBL_BASECOLOR_METALLICROUGHNESS_NORMAL_EMIT_SHADER,
\r
99 IBL_OCCLUSION_EMIT_SHADER,
\r
100 IBL_BASECOLOR_OCCLUSION_EMIT_SHADER,
\r
101 IBL_METALLICROUGHNESS_OCCLUSION_EMIT_SHADER,
\r
102 IBL_BASECOLOR_METALLICROUGHNESS_OCCLUSION_EMIT_SHADER,
\r
103 IBL_NORMAL_OCCLUSION_EMIT_SHADER,
\r
104 IBL_BASECOLOR_NORMAL_OCCLUSION_EMIT_SHADER,
\r
105 IBL_METALLICROUGHNESS_NORMAL_OCCLUSION_EMIT_SHADER,
\r
106 IBL_BASECOLOR_METALLICROUGHNESS_NORMAL_OCCLUSION_EMIT_SHADER,
\r
107 SHADER_TYPE_MAX = IBL_BASECOLOR_METALLICROUGHNESS_NORMAL_OCCLUSION_EMIT_SHADER
\r
123 int32_t byteLength;
\r
128 struct BufferViewInfo
\r
145 int32_t byteOffset;
\r
146 int32_t byteLength;
\r
147 int32_t byteStride;
\r
164 int32_t samplerIdx;
\r
167 struct PbrTextureInfo
\r
184 struct MaterialInfo
\r
187 : baseColorFactor(1, 1, 1, 1),
\r
188 metallicFactor(1.0),
\r
189 roughnessFactor(1.0),
\r
190 emissiveFactor(0.0, 0.0, 0.0),
\r
191 alphaMode("OPAQUE"),
\r
193 doubleSided(false),
\r
202 Vector4 baseColorFactor;
\r
203 float metallicFactor;
\r
204 float roughnessFactor;
\r
205 Vector3 emissiveFactor;
\r
206 std::string alphaMode;
\r
210 PbrTextureInfo baseColorTexture;
\r
211 PbrTextureInfo metallicRoughnessTexture;
\r
212 PbrTextureInfo normalTexture;
\r
213 PbrTextureInfo occlusionTexture;
\r
214 PbrTextureInfo emissiveTexture;
\r
217 //need to add max, min
\r
220 struct AccessorInfo
\r
239 int32_t bufferView;
\r
240 int32_t byteOffset;
\r
241 int32_t componentType;
\r
248 //need to add max, min
\r
268 std::vector<int32_t> TEXCOORD;
\r
269 std::vector<int32_t> COLOR;
\r
287 int32_t indicesIdx;
\r
288 int32_t materialsIdx;
\r
294 Attribute attribute;
\r
295 //need to add max, min
\r
298 struct AnimationChannelInfo
\r
300 AnimationChannelInfo()
\r
307 ~AnimationChannelInfo()
\r
312 int32_t targetNode;
\r
316 struct AnimationSamplerInfo
\r
318 AnimationSamplerInfo()
\r
325 ~AnimationSamplerInfo()
\r
331 std::string interpolation;
\r
334 struct AnimationInfo
\r
346 std::vector<AnimationChannelInfo> channelArray;
\r
347 std::vector<AnimationSamplerInfo> samplerArray;
\r
350 struct OrthographicInfo
\r
360 ~OrthographicInfo()
\r
370 struct PerspectiveInfo
\r
373 : aspectRatio(0.0f),
\r
404 OrthographicInfo orthographic;
\r
405 PerspectiveInfo perspective;
\r
410 * Loader is a class to parse glTf, to load data from file, and to generate Scene.
\r
411 * This glTF loader supports glTF 2.0 features.
\r
413 * @remarks glTF loader didn't support such features.
\r
414 * - Sparse accessor
\r
416 * - Skeletal Animation
\r
417 * These features will be supported soon.
\r
424 * @brief Create an uninitialized Loader.
\r
429 * @brief Destructor
\r
434 * @brief Load Scene3dView from scene format file(e.g., glTF).
\r
435 * @param[in] filePath Path of scene format file.
\r
436 * @param[in] scene3dView Scene3dView data loaded from file.
\r
437 * @return true if scene is successfully loaded
\r
439 bool LoadScene(const std::string& filePath, Internal::Scene3dView& scene3dView);
\r
442 bool ParseGltf(const std::string& filePath);
\r
445 bool CreateScene(Internal::Scene3dView& scene3dView);
\r
447 void LoadCamera(Scene3dView& scene3dView);
\r
448 bool LoadOrthoGraphic(const TreeNode& camera, CameraInfo& cameraInfo);
\r
449 bool LoadPerspective(const TreeNode& camera, CameraInfo& cameraInfo);
\r
451 bool LoadSceneNodes(Scene3dView& scene3dView);
\r
452 Actor AddNode(Scene3dView& scene3dView, uint32_t index);
\r
453 void SetActorCache(Actor& actor, uint32_t index);
\r
454 bool SetTextureAndSampler(TextureSet& textureSet, int32_t textureIdx, std::string& toShader, std::string shader, int32_t& addIdx);
\r
456 bool LoadAnimation(Scene3dView& scene3dView);
\r
457 bool LoadAnimationChannels(const TreeNode& animation, AnimationInfo& animationInfo);
\r
458 bool LoadAnimationSamplers(const TreeNode& animation, AnimationInfo& animationInfo);
\r
461 Dali::Toolkit::JsonParser mParser;
\r
462 const TreeNode* mNodes;
\r
463 const TreeNode* mRoot;
\r
467 std::vector<Actor> mActorCache;
\r
468 Shader mShaderCache[ShaderType::SHADER_TYPE_MAX + 1];
\r
470 std::vector<BufferInfo> mBufferArray;
\r
471 std::vector<BufferViewInfo> mBufferViewArray;
\r
472 std::vector<AccessorInfo> mAccessorArray;
\r
474 std::vector<MeshInfo> mMeshArray;
\r
475 std::vector<MaterialInfo> mMaterialArray;
\r
476 std::vector<TextureInfo> mTextureArray;
\r
478 std::vector<Texture> mSourceArray;
\r
479 std::vector<Sampler> mSamplerArray;
\r
484 } //namespace Internal
\r
486 } //namespace Toolkit
\r
490 #endif // DALI_TOOLKIT_INTERNAL_GLTF_LOADER_H
\r