Tests and changelog.
This commit is contained in:
parent
1575b5244e
commit
e1fbb4f064
|
|
@ -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:
|
||||
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue