2 * Copyright (c) 2022 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.
20 #include <dali-scene3d/public-api/loader/mesh-definition.h>
21 #include <dali-scene3d/public-api/loader/buffer-definition.h>
22 #include <dali-test-suite-utils.h>
25 using namespace Dali::Scene3D::Loader;
27 int UtcDaliMeshDefinitionBlobApplyMinMaxBothMinMaxApplied(void)
29 using Container = std::vector<float>;
31 Container buffer = { 4.0f, 6.0f, 8.0f, 10.0f, 12.0f };
32 Container minValues = { 5.0f };
33 Container maxValues = { 10.0f };
34 Container result = {5.0f, 6.0f, 8.0f, 10.0f, 10.0f};
36 MeshDefinition::Blob::ApplyMinMax(minValues, maxValues, 5, buffer.data());
38 for( auto i = 0u; i < result.size(); ++i)
40 DALI_TEST_EQUALS(buffer[i], result[i], TEST_LOCATION);
46 int UtcDaliMeshDefinitionBlobApplyMinMaxOnlyMin(void)
48 using Container = std::vector<float>;
50 Container buffer = { 4.0f, 6.0f, 8.0f, 10.0f, 12.0f };
51 Container minValues = { 5.0f };
52 Container maxValues = {};
53 Container result = {5.0f, 6.0f, 8.0f, 10.0f, 12.0f};
55 MeshDefinition::Blob::ApplyMinMax(minValues, maxValues, 5, buffer.data());
57 for( auto i = 0u; i < result.size(); ++i)
59 DALI_TEST_EQUALS(buffer[i], result[i], TEST_LOCATION);
65 int UtcDaliMeshDefinitionBlobApplyMinMaxOnlyMax(void)
67 using Container = std::vector<float>;
69 Container buffer = { 4.0f, 6.0f, 8.0f, 10.0f, 12.0f };
70 Container minValues = { };
71 Container maxValues = { 10.0f };
72 Container result = {4.0f, 6.0f, 8.0f, 10.0f, 10.0f};
74 MeshDefinition::Blob::ApplyMinMax(minValues, maxValues, 5, buffer.data());
76 for( auto i = 0u; i < result.size(); ++i)
78 DALI_TEST_EQUALS(buffer[i], result[i], TEST_LOCATION);
84 int UtcDaliMeshDefinitionBlobApplyMinMaxBothEmpty(void)
86 using Container = std::vector<float>;
88 Container buffer = { 4.0f, 6.0f, 8.0f, 10.0f, 12.0f };
91 Container result = {4.0f, 6.0f, 8.0f, 10.0f, 12.0f};
93 MeshDefinition::Blob::ApplyMinMax(minValues, maxValues, 5, buffer.data());
95 for( auto i = 0u; i < result.size(); ++i)
97 DALI_TEST_EQUALS(buffer[i], result[i], TEST_LOCATION);
103 int UtcDaliMeshDefinitionByteSkinWeight(void)
105 float data8[8] = {0.003922, 0.062745, 0.250980, 0.098039, 0.937255, 0.749020, 0.741176, 0.937255};
107 BufferDefinition bufferDefinition;
108 bufferDefinition.mUri = "data:application/base64,ARBAGe+/ve+/vT9hc2RmYXNkZmFzZGZhc2RmYXNkZmE=";
109 bufferDefinition.mByteLength = 32;
110 BufferDefinition::Vector buffers;
111 buffers.push_back(std::move(bufferDefinition));
113 MeshDefinition meshDefinition;
114 meshDefinition.mFlags = MeshDefinition::U16_JOINT_IDS | MeshDefinition::U8_WEIGHT;
115 MeshDefinition::SparseBlob sparseBlob;
116 meshDefinition.mPositions =
117 MeshDefinition::Accessor{
118 std::move(MeshDefinition::Blob{0, 12, 0, (uint16_t)12, std::vector<float>(), std::vector<float>()}), std::move(sparseBlob), 0};
119 meshDefinition.mJoints0 =
120 MeshDefinition::Accessor{
121 std::move(MeshDefinition::Blob{0, 16, 0, (uint16_t)16, std::vector<float>(), std::vector<float>()}), std::move(sparseBlob), 0};
122 meshDefinition.mWeights0 =
123 MeshDefinition::Accessor{
124 std::move(MeshDefinition::Blob{0, 8, 0, (uint16_t)8, std::vector<float>(), std::vector<float>()}), std::move(sparseBlob), 0};
126 MeshDefinition::RawData rawData = meshDefinition.LoadRaw("", buffers);
128 DALI_TEST_EQUALS(rawData.mAttribs.size(), 4, TEST_LOCATION);
129 DALI_TEST_EQUALS(rawData.mAttribs[3].mName, "aWeights", TEST_LOCATION);
130 DALI_TEST_EQUALS(rawData.mAttribs[3].mNumElements, 2, TEST_LOCATION);
131 float* value = reinterpret_cast<float*>(rawData.mAttribs[3].mData.data());
132 for(uint32_t i = 0; i < rawData.mAttribs[3].mNumElements * 4; ++i)
134 DALI_TEST_EQUALS(*value, data8[i], TEST_LOCATION);
140 int UtcDaliMeshDefinitionShortSkinWeight(void)
142 float data8[8] = {0.062516, 0.098634, 0.749752, 0.936492, 0.741207, 0.379873, 0.392386, 0.380468};
144 BufferDefinition bufferDefinition;
145 bufferDefinition.mUri = "data:application/base64,ARBAGe+/ve+/vT9hc2RmYXNkZmFzZGZhc2RmYXNkZmE=";
146 bufferDefinition.mByteLength = 32;
147 BufferDefinition::Vector buffers;
148 buffers.push_back(std::move(bufferDefinition));
150 MeshDefinition meshDefinition;
151 meshDefinition.mFlags = MeshDefinition::U16_JOINT_IDS | MeshDefinition::U16_WEIGHT;
152 MeshDefinition::SparseBlob sparseBlob;
153 meshDefinition.mPositions =
154 MeshDefinition::Accessor{
155 std::move(MeshDefinition::Blob{0, 12, 0, (uint16_t)12, std::vector<float>(), std::vector<float>()}), std::move(sparseBlob), 0};
156 meshDefinition.mJoints0 =
157 MeshDefinition::Accessor{
158 std::move(MeshDefinition::Blob{0, 16, 0, (uint16_t)16, std::vector<float>(), std::vector<float>()}), std::move(sparseBlob), 0};
159 meshDefinition.mWeights0 =
160 MeshDefinition::Accessor{
161 std::move(MeshDefinition::Blob{0, 16, 0, (uint16_t)16, std::vector<float>(), std::vector<float>()}), std::move(sparseBlob), 0};
163 MeshDefinition::RawData rawData = meshDefinition.LoadRaw("", buffers);
165 DALI_TEST_EQUALS(rawData.mAttribs.size(), 4, TEST_LOCATION);
166 DALI_TEST_EQUALS(rawData.mAttribs[3].mName, "aWeights", TEST_LOCATION);
167 DALI_TEST_EQUALS(rawData.mAttribs[3].mNumElements, 2, TEST_LOCATION);
168 float* value = reinterpret_cast<float*>(rawData.mAttribs[3].mData.data());
169 for(uint32_t i = 0; i < rawData.mAttribs[3].mNumElements * 4; ++i)
171 DALI_TEST_EQUALS(*value, data8[i], TEST_LOCATION);