2 * Copyright (c) 2021 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.
17 #include "dali-scene-loader/internal/gltf2-asset.h"
20 #include "dali/public-api/math/matrix.h"
22 #define ENUM_STRING_MAPPING(t, x) \
33 constexpr uint32_t ACCESSOR_TYPE_ELEMENT_COUNT[]{
41 static_cast<uint32_t>(-1)};
43 const std::map<std::string_view, AccessorType::Type> ACCESSOR_TYPES{
44 ENUM_STRING_MAPPING(AccessorType, SCALAR),
45 ENUM_STRING_MAPPING(AccessorType, VEC2),
46 ENUM_STRING_MAPPING(AccessorType, VEC3),
47 ENUM_STRING_MAPPING(AccessorType, VEC4),
48 ENUM_STRING_MAPPING(AccessorType, MAT2),
49 ENUM_STRING_MAPPING(AccessorType, MAT3),
50 ENUM_STRING_MAPPING(AccessorType, MAT4),
53 const std::map<std::string_view, AlphaMode::Type> ALPHA_MODE_TYPES{
54 ENUM_STRING_MAPPING(AlphaMode::Type, OPAQUE),
55 ENUM_STRING_MAPPING(AlphaMode::Type, MASK),
56 ENUM_STRING_MAPPING(AlphaMode::Type, BLEND),
59 const std::map<std::string_view, Attribute::Type> ATTRIBUTE_TYPES{
60 ENUM_STRING_MAPPING(Attribute::Type, POSITION),
61 ENUM_STRING_MAPPING(Attribute::Type, NORMAL),
62 ENUM_STRING_MAPPING(Attribute::Type, TANGENT),
63 ENUM_STRING_MAPPING(Attribute::Type, TEXCOORD_0),
64 ENUM_STRING_MAPPING(Attribute::Type, TEXCOORD_1),
65 ENUM_STRING_MAPPING(Attribute::Type, COLOR_0),
66 ENUM_STRING_MAPPING(Attribute::Type, JOINTS_0),
67 ENUM_STRING_MAPPING(Attribute::Type, WEIGHTS_0),
70 const std::map<std::string_view, Animation::Sampler::Interpolation::Type> ANIMATION_SAMPLER_INTERPOLATION{
71 ENUM_STRING_MAPPING(Animation::Sampler::Interpolation::Type, STEP),
72 ENUM_STRING_MAPPING(Animation::Sampler::Interpolation::Type, LINEAR),
73 ENUM_STRING_MAPPING(Animation::Sampler::Interpolation::Type, CUBICSPLINE),
76 const std::map<std::string_view, Animation::Channel::Target::Type> ANIMATION_CHANNEL_TARGET_PATH_TYPES{
77 ENUM_STRING_MAPPING(Animation::Channel::Target::Type, TRANSLATION),
78 ENUM_STRING_MAPPING(Animation::Channel::Target::Type, ROTATION),
79 ENUM_STRING_MAPPING(Animation::Channel::Target::Type, SCALE),
80 ENUM_STRING_MAPPING(Animation::Channel::Target::Type, WEIGHTS),
85 bool Component::IsUnsigned(Type t)
87 return t == UNSIGNED_BYTE || t == UNSIGNED_SHORT || t == UNSIGNED_INT;
90 uint32_t Component::Size(Type t)
108 uint32_t AccessorType::ElementCount(Type t)
110 return ACCESSOR_TYPE_ELEMENT_COUNT[t];
113 AccessorType::Type AccessorType::FromString(const char* s, size_t len)
115 auto iFind = ACCESSOR_TYPES.find(std::string_view(s, len));
116 if(iFind != ACCESSOR_TYPES.end())
118 return iFind->second;
120 return AccessorType::INVALID;
123 AlphaMode::Type AlphaMode::FromString(const char* s, size_t len)
125 auto iFind = ALPHA_MODE_TYPES.find(std::string_view(s, len));
126 if(iFind != ALPHA_MODE_TYPES.end())
128 return iFind->second;
130 return AlphaMode::INVALID;
133 Attribute::Type Attribute::FromString(const char* s, size_t len)
135 auto iFind = ATTRIBUTE_TYPES.find(std::string_view(s, len));
136 if(iFind != ATTRIBUTE_TYPES.end())
138 return iFind->second;
140 return Attribute::INVALID;
143 Animation::Sampler::Interpolation::Type Animation::Sampler::Interpolation::FromString(const char* s, size_t len)
145 auto iFind = ANIMATION_SAMPLER_INTERPOLATION.find(std::string_view(s, len));
146 if(iFind != ANIMATION_SAMPLER_INTERPOLATION.end())
148 return iFind->second;
150 return Animation::Sampler::Interpolation::Type::INVALID;
153 uint32_t ComponentTypedBufferViewClient::GetBytesPerComponent() const
155 return Component::Size(mComponentType);
158 Animation::Channel::Target::Type Animation::Channel::Target::FromString(const char* s, size_t len)
160 std::string target(s, len);
161 std::transform(target.begin(), target.end(), target.begin(), ::toupper);
163 auto iFind = ANIMATION_CHANNEL_TARGET_PATH_TYPES.find(std::string_view(target.c_str(), len));
164 if(iFind != ANIMATION_CHANNEL_TARGET_PATH_TYPES.end())
166 return iFind->second;
168 return Animation::Channel::Target::INVALID;
171 void Node::SetMatrix(const Matrix& m)
173 m.GetTransformComponents(mTranslation, mRotation, mScale);
176 Quaternion ReadQuaternion(const json_value_s& j)
178 return Quaternion(ReadDaliVector<Vector4>(j));