Skip to content

Commit

Permalink
tester.cc - add MSFT_lods test case
Browse files Browse the repository at this point in the history
  • Loading branch information
ptc-tgamper committed Feb 5, 2024
1 parent f1bdf43 commit c3bbe97
Showing 1 changed file with 61 additions and 0 deletions.
61 changes: 61 additions & 0 deletions tests/tester.cc
Original file line number Diff line number Diff line change
Expand Up @@ -926,3 +926,64 @@ TEST_CASE("zero-sized-bin-chunk-glb", "[issue-440]") {

REQUIRE(true == ret);
}

TEST_CASE("serialize-lods", "[issue-xxx]") {
// Stream to serialize to
std::stringstream os;

{
tinygltf::Model m;

m.nodes.resize(3);
// Add Node 1 and Node 2 as lods to Node 0
m.nodes[0].lods.push_back(1);
m.nodes[0].lods.push_back(2);

// Add Material 1 and Material 2 as lods to Material 0
m.materials.resize(3);
m.materials[0].lods.push_back(1);
m.materials[0].lods.push_back(2);

tinygltf::Scene scene;
// Scene uses Node 0 as root node
scene.nodes.push_back(0);
// Add scene to the model
m.scenes.push_back(scene);

// Serialize model to output stream
tinygltf::TinyGLTF ctx;
bool ret = ctx.WriteGltfSceneToStream(&m, os, false, false);
REQUIRE(true == ret);
}

{
tinygltf::Model m;
tinygltf::TinyGLTF ctx;
// Parse the serialized model
bool ok = ctx.LoadASCIIFromString(&m, nullptr, nullptr, os.str().c_str(), os.str().size(), "");
REQUIRE(true == ok);

// Make sure all three materials are there
REQUIRE(3 == m.materials.size());
// Make sure the first material has both lod materials
REQUIRE(2 == m.materials[0].lods.size());
// Make sure the order is still the same after serialization and deserialization
CHECK(1 == m.materials[0].lods[0]);
CHECK(2 == m.materials[0].lods[1]);

// Make sure the single scene is there
REQUIRE(1 == m.scenes.size());
// Make sure all three nodes are there
REQUIRE(3 == m.nodes.size());
// Make sure the single root node of the scene is there
REQUIRE(1 == m.scenes[0].nodes.size());
REQUIRE(0 == m.scenes[0].nodes[0]);
// Retrieve the scene root node
const tinygltf::Node& node = m.nodes[m.scenes[0].nodes[0]];
// Make sure the single root node has both lod nodes
REQUIRE(2 == node.lods.size());
// Make sure the order is still the same after serialization and deserialization
CHECK(1 == node.lods[0]);
CHECK(2 == node.lods[1]);
}
}

0 comments on commit c3bbe97

Please sign in to comment.