98 lines
3.0 KiB
C++
98 lines
3.0 KiB
C++
|
|
#include <gtest/gtest.h>
|
||
|
|
|
||
|
|
#include <XCEngine/Resources/Model/Model.h>
|
||
|
|
|
||
|
|
using namespace XCEngine::Resources;
|
||
|
|
using namespace XCEngine::Math;
|
||
|
|
|
||
|
|
namespace {
|
||
|
|
|
||
|
|
TEST(Model, DefaultConstructor) {
|
||
|
|
Model model;
|
||
|
|
EXPECT_EQ(model.GetType(), ResourceType::Model);
|
||
|
|
EXPECT_FALSE(model.HasRootNode());
|
||
|
|
EXPECT_EQ(model.GetRootNodeIndex(), kInvalidModelNodeIndex);
|
||
|
|
EXPECT_TRUE(model.GetNodes().Empty());
|
||
|
|
EXPECT_TRUE(model.GetMeshBindings().Empty());
|
||
|
|
EXPECT_TRUE(model.GetMaterialBindings().Empty());
|
||
|
|
EXPECT_EQ(model.GetMemorySize(), 0u);
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(Model, AddGraphDataUpdatesState) {
|
||
|
|
Model model;
|
||
|
|
|
||
|
|
IResource::ConstructParams params;
|
||
|
|
params.name = "robot.fbx";
|
||
|
|
params.path = "Library/Artifacts/aa/main.xcmodel";
|
||
|
|
params.guid = ResourceGUID::Generate(params.path);
|
||
|
|
model.Initialize(params);
|
||
|
|
|
||
|
|
model.SetRootNodeIndex(0u);
|
||
|
|
|
||
|
|
ModelNode rootNode;
|
||
|
|
rootNode.name = "Root";
|
||
|
|
rootNode.parentIndex = -1;
|
||
|
|
rootNode.meshBindingStart = 0u;
|
||
|
|
rootNode.meshBindingCount = 1u;
|
||
|
|
rootNode.localPosition = Vector3(1.0f, 2.0f, 3.0f);
|
||
|
|
rootNode.localScale = Vector3(1.0f, 1.5f, 2.0f);
|
||
|
|
model.AddNode(rootNode);
|
||
|
|
|
||
|
|
ModelMeshBinding meshBinding;
|
||
|
|
meshBinding.meshLocalID = 11u;
|
||
|
|
meshBinding.materialBindingStart = 0u;
|
||
|
|
meshBinding.materialBindingCount = 2u;
|
||
|
|
model.AddMeshBinding(meshBinding);
|
||
|
|
|
||
|
|
ModelMaterialBinding materialBinding0;
|
||
|
|
materialBinding0.slotIndex = 0u;
|
||
|
|
materialBinding0.materialLocalID = 21u;
|
||
|
|
model.AddMaterialBinding(materialBinding0);
|
||
|
|
|
||
|
|
ModelMaterialBinding materialBinding1;
|
||
|
|
materialBinding1.slotIndex = 1u;
|
||
|
|
materialBinding1.materialLocalID = 22u;
|
||
|
|
model.AddMaterialBinding(materialBinding1);
|
||
|
|
|
||
|
|
ASSERT_TRUE(model.HasRootNode());
|
||
|
|
EXPECT_EQ(model.GetRootNodeIndex(), 0u);
|
||
|
|
ASSERT_EQ(model.GetNodes().Size(), 1u);
|
||
|
|
EXPECT_EQ(model.GetNodes()[0].name, "Root");
|
||
|
|
EXPECT_EQ(model.GetNodes()[0].localPosition, Vector3(1.0f, 2.0f, 3.0f));
|
||
|
|
EXPECT_EQ(model.GetNodes()[0].localScale, Vector3(1.0f, 1.5f, 2.0f));
|
||
|
|
ASSERT_EQ(model.GetMeshBindings().Size(), 1u);
|
||
|
|
EXPECT_EQ(model.GetMeshBindings()[0].meshLocalID, 11u);
|
||
|
|
ASSERT_EQ(model.GetMaterialBindings().Size(), 2u);
|
||
|
|
EXPECT_EQ(model.GetMaterialBindings()[1].materialLocalID, 22u);
|
||
|
|
EXPECT_GT(model.GetMemorySize(), 0u);
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(Model, ReleaseClearsGraphData) {
|
||
|
|
Model model;
|
||
|
|
|
||
|
|
IResource::ConstructParams params;
|
||
|
|
params.name = "robot.fbx";
|
||
|
|
params.path = "Library/Artifacts/aa/main.xcmodel";
|
||
|
|
params.guid = ResourceGUID::Generate(params.path);
|
||
|
|
model.Initialize(params);
|
||
|
|
|
||
|
|
model.SetRootNodeIndex(0u);
|
||
|
|
|
||
|
|
ModelNode node;
|
||
|
|
node.name = "Root";
|
||
|
|
model.AddNode(node);
|
||
|
|
model.AddMeshBinding(ModelMeshBinding{ 3u, 0u, 0u });
|
||
|
|
model.AddMaterialBinding(ModelMaterialBinding{ 0u, 7u });
|
||
|
|
|
||
|
|
model.Release();
|
||
|
|
|
||
|
|
EXPECT_FALSE(model.IsValid());
|
||
|
|
EXPECT_FALSE(model.HasRootNode());
|
||
|
|
EXPECT_TRUE(model.GetNodes().Empty());
|
||
|
|
EXPECT_TRUE(model.GetMeshBindings().Empty());
|
||
|
|
EXPECT_TRUE(model.GetMaterialBindings().Empty());
|
||
|
|
EXPECT_EQ(model.GetMemorySize(), 0u);
|
||
|
|
}
|
||
|
|
|
||
|
|
} // namespace
|