Tests and changelog.

This commit is contained in:
Kevin Ring 2024-04-10 16:27:09 +10:00
parent 1575b5244e
commit e1fbb4f064
2 changed files with 120 additions and 1 deletions

View File

@ -15,7 +15,7 @@
- Added `forEachRootNodeInScene`, `addExtensionUsed`, `addExtensionRequired`, `isExtensionUsed`, and `isExtensionRequired` methods to `CesiumGltf::Model`.
- Added `getNodeTransform`, `setNodeTransform`, `removeUnusedTextures`, `removeUnusedSamplers`, `removeUnusedImages`, `removeUnusedAccessors`, `removeUnusedBufferViews`, and `compactBuffers` methods to `GltfUtilities`.
- Added `postprocessGltf` method to `GltfReader`.
- `Model::merge` now returns an `ErrorList`, used to report warnings and errors about the merge process.
- `Model::merge` now merges the `EXT_structural_metadata` and `EXT_mesh_features` extensions. It also now returns an `ErrorList`, used to report warnings and errors about the merge process.
##### Fixes :wrench:

View File

@ -15,6 +15,7 @@
#include <vector>
using namespace CesiumGltf;
using namespace CesiumUtility;
#define DEFAULT_EPSILON 1e-6f
@ -577,3 +578,121 @@ TEST_CASE("Model::addExtensionRequired") {
m.extensionsUsed.end());
}
}
TEST_CASE("Model::merge") {
SECTION("performs a simple merge") {
Model m1;
m1.accessors.emplace_back().name = "m1";
m1.animations.emplace_back().name = "m1";
m1.buffers.emplace_back().name = "m1";
m1.bufferViews.emplace_back().name = "m1";
m1.cameras.emplace_back().name = "m1";
m1.images.emplace_back().name = "m1";
m1.materials.emplace_back().name = "m1";
m1.meshes.emplace_back().name = "m1";
m1.nodes.emplace_back().name = "m1";
m1.samplers.emplace_back().name = "m1";
m1.scenes.emplace_back().name = "m1";
m1.skins.emplace_back().name = "m1";
m1.textures.emplace_back().name = "m1";
Model m2;
m2.accessors.emplace_back().name = "m2";
m2.animations.emplace_back().name = "m2";
m2.buffers.emplace_back().name = "m2";
m2.bufferViews.emplace_back().name = "m2";
m2.cameras.emplace_back().name = "m2";
m2.images.emplace_back().name = "m2";
m2.materials.emplace_back().name = "m2";
m2.meshes.emplace_back().name = "m2";
m2.nodes.emplace_back().name = "m2";
m2.samplers.emplace_back().name = "m2";
m2.scenes.emplace_back().name = "m2";
m2.skins.emplace_back().name = "m2";
m2.textures.emplace_back().name = "m2";
ErrorList errors = m1.merge(std::move(m2));
CHECK(errors.errors.empty());
CHECK(errors.warnings.empty());
REQUIRE(m1.accessors.size() == 2);
CHECK(m1.accessors[0].name == "m1");
CHECK(m1.accessors[1].name == "m2");
REQUIRE(m1.animations.size() == 2);
CHECK(m1.animations[0].name == "m1");
CHECK(m1.animations[1].name == "m2");
REQUIRE(m1.buffers.size() == 2);
CHECK(m1.buffers[0].name == "m1");
CHECK(m1.buffers[1].name == "m2");
REQUIRE(m1.bufferViews.size() == 2);
CHECK(m1.bufferViews[0].name == "m1");
CHECK(m1.bufferViews[1].name == "m2");
REQUIRE(m1.cameras.size() == 2);
CHECK(m1.cameras[0].name == "m1");
CHECK(m1.cameras[1].name == "m2");
REQUIRE(m1.images.size() == 2);
CHECK(m1.images[0].name == "m1");
CHECK(m1.images[1].name == "m2");
REQUIRE(m1.materials.size() == 2);
CHECK(m1.materials[0].name == "m1");
CHECK(m1.materials[1].name == "m2");
REQUIRE(m1.meshes.size() == 2);
CHECK(m1.meshes[0].name == "m1");
CHECK(m1.meshes[1].name == "m2");
REQUIRE(m1.nodes.size() == 2);
CHECK(m1.nodes[0].name == "m1");
CHECK(m1.nodes[1].name == "m2");
REQUIRE(m1.samplers.size() == 2);
CHECK(m1.samplers[0].name == "m1");
CHECK(m1.samplers[1].name == "m2");
REQUIRE(m1.scenes.size() == 2);
CHECK(m1.scenes[0].name == "m1");
CHECK(m1.scenes[1].name == "m2");
REQUIRE(m1.skins.size() == 2);
CHECK(m1.skins[0].name == "m1");
CHECK(m1.skins[1].name == "m2");
REQUIRE(m1.textures.size() == 2);
CHECK(m1.textures[0].name == "m1");
CHECK(m1.textures[1].name == "m2");
}
SECTION("merges default scenes") {
Model m1;
m1.nodes.emplace_back().name = "node1";
m1.nodes.emplace_back().name = "node2";
Scene& scene1 = m1.scenes.emplace_back();
scene1.name = "scene1";
scene1.nodes.push_back(1);
Scene& scene2 = m1.scenes.emplace_back();
scene2.name = "scene2";
scene2.nodes.push_back(1);
scene2.nodes.push_back(0);
m1.scene = 1;
Model m2;
m2.nodes.emplace_back().name = "node3";
m2.nodes.emplace_back().name = "node4";
Scene& scene3 = m2.scenes.emplace_back();
scene3.name = "scene3";
scene3.nodes.push_back(1);
scene3.nodes.push_back(0);
Scene& scene4 = m2.scenes.emplace_back();
scene4.name = "scene4";
scene4.nodes.push_back(1);
m2.scene = 0;
ErrorList errors = m1.merge(std::move(m2));
CHECK(errors.errors.empty());
CHECK(errors.warnings.empty());
REQUIRE(m1.scene >= 0);
REQUIRE(m1.scene < m1.scenes.size());
Scene& defaultScene = m1.scenes[m1.scene];
REQUIRE(defaultScene.nodes.size() == 4);
CHECK(m1.nodes[defaultScene.nodes[0]].name == "node2");
CHECK(m1.nodes[defaultScene.nodes[1]].name == "node1");
CHECK(m1.nodes[defaultScene.nodes[2]].name == "node4");
CHECK(m1.nodes[defaultScene.nodes[3]].name == "node3");
}
}