mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-05-06 19:01:21 +03:00
Merge branch 'nifosg_tests' into 'master'
Add tests for NifOsg::Loader See merge request OpenMW/openmw!2421
This commit is contained in:
commit
aed0ad6b83
38 changed files with 927 additions and 658 deletions
|
@ -50,7 +50,9 @@ void readVFS(std::unique_ptr<VFS::Archive>&& anArchive, const std::filesystem::p
|
|||
if (isNIF(name))
|
||||
{
|
||||
// std::cout << "Decoding: " << name << std::endl;
|
||||
Nif::NIFFile temp_nif(myManager.get(name), archivePath / name);
|
||||
Nif::NIFFile file(archivePath / name);
|
||||
Nif::Reader reader(file);
|
||||
reader.parse(myManager.get(name));
|
||||
}
|
||||
else if (isBSA(name))
|
||||
{
|
||||
|
@ -120,7 +122,7 @@ int main(int argc, char** argv)
|
|||
if (!parseOptions(argc, argv, files))
|
||||
return 1;
|
||||
|
||||
Nif::NIFFile::setLoadUnsupportedFiles(true);
|
||||
Nif::Reader::setLoadUnsupportedFiles(true);
|
||||
// std::cout << "Reading Files" << std::endl;
|
||||
for (const auto& path : files)
|
||||
{
|
||||
|
@ -129,7 +131,9 @@ int main(int argc, char** argv)
|
|||
if (isNIF(path))
|
||||
{
|
||||
// std::cout << "Decoding: " << name << std::endl;
|
||||
Nif::NIFFile temp_nif(Files::openConstrainedFileStream(path), path);
|
||||
Nif::NIFFile file(path);
|
||||
Nif::Reader reader(file);
|
||||
reader.parse(Files::openConstrainedFileStream(path));
|
||||
}
|
||||
else if (isBSA(path))
|
||||
{
|
||||
|
|
|
@ -616,7 +616,7 @@ namespace MWRender
|
|||
MWBase::Environment::get().getWindowManager()->setCullMask(mask);
|
||||
NifOsg::Loader::setHiddenNodeMask(Mask_UpdateVisitor);
|
||||
NifOsg::Loader::setIntersectionDisabledNodeMask(Mask_Effect);
|
||||
Nif::NIFFile::setLoadUnsupportedFiles(Settings::Manager::getBool("load unsupported nif files", "Models"));
|
||||
Nif::Reader::setLoadUnsupportedFiles(Settings::Manager::getBool("load unsupported nif files", "Models"));
|
||||
|
||||
mStateUpdater->setFogEnd(mViewDistance);
|
||||
|
||||
|
|
|
@ -85,6 +85,8 @@ file(GLOB UNITTEST_SRC_FILES
|
|||
fx/technique.cpp
|
||||
|
||||
esm3/readerscache.cpp
|
||||
|
||||
nifosg/testnifloader.cpp
|
||||
)
|
||||
|
||||
source_group(apps\\openmw_test_suite FILES openmw_test_suite.cpp ${UNITTEST_SRC_FILES})
|
||||
|
|
72
apps/openmw_test_suite/nif/node.hpp
Normal file
72
apps/openmw_test_suite/nif/node.hpp
Normal file
|
@ -0,0 +1,72 @@
|
|||
#ifndef OPENMW_TEST_SUITE_NIF_NODE_H
|
||||
#define OPENMW_TEST_SUITE_NIF_NODE_H
|
||||
|
||||
#include <components/nif/data.hpp>
|
||||
#include <components/nif/node.hpp>
|
||||
|
||||
namespace Nif::Testing
|
||||
{
|
||||
inline void init(Transformation& value)
|
||||
{
|
||||
value = Transformation::getIdentity();
|
||||
}
|
||||
|
||||
inline void init(Extra& value)
|
||||
{
|
||||
value.next = ExtraPtr(nullptr);
|
||||
}
|
||||
|
||||
inline void init(Named& value)
|
||||
{
|
||||
value.extra = ExtraPtr(nullptr);
|
||||
value.extralist = ExtraList();
|
||||
value.controller = ControllerPtr(nullptr);
|
||||
}
|
||||
|
||||
inline void init(Node& value)
|
||||
{
|
||||
init(static_cast<Named&>(value));
|
||||
value.flags = 0;
|
||||
init(value.trafo);
|
||||
value.hasBounds = false;
|
||||
value.isBone = false;
|
||||
}
|
||||
|
||||
inline void init(NiGeometry& value)
|
||||
{
|
||||
init(static_cast<Node&>(value));
|
||||
value.data = NiGeometryDataPtr(nullptr);
|
||||
value.skin = NiSkinInstancePtr(nullptr);
|
||||
}
|
||||
|
||||
inline void init(NiTriShape& value)
|
||||
{
|
||||
init(static_cast<NiGeometry&>(value));
|
||||
value.recType = RC_NiTriShape;
|
||||
}
|
||||
|
||||
inline void init(NiTriStrips& value)
|
||||
{
|
||||
init(static_cast<NiGeometry&>(value));
|
||||
value.recType = RC_NiTriStrips;
|
||||
}
|
||||
|
||||
inline void init(NiSkinInstance& value)
|
||||
{
|
||||
value.data = NiSkinDataPtr(nullptr);
|
||||
value.root = NodePtr(nullptr);
|
||||
}
|
||||
|
||||
inline void init(Controller& value)
|
||||
{
|
||||
value.next = ControllerPtr(nullptr);
|
||||
value.flags = 0;
|
||||
value.frequency = 0;
|
||||
value.phase = 0;
|
||||
value.timeStart = 0;
|
||||
value.timeStop = 0;
|
||||
value.target = NamedPtr(nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,3 +1,5 @@
|
|||
#include "../nif/node.hpp"
|
||||
|
||||
#include <components/bullethelpers/processtrianglecallback.hpp>
|
||||
#include <components/nif/data.hpp>
|
||||
#include <components/nif/extra.hpp>
|
||||
|
@ -260,71 +262,9 @@ static bool operator==(const btCollisionShape& lhs, const btCollisionShape& rhs)
|
|||
namespace
|
||||
{
|
||||
using namespace testing;
|
||||
using namespace Nif::Testing;
|
||||
using NifBullet::BulletNifLoader;
|
||||
|
||||
void init(Nif::Transformation& value)
|
||||
{
|
||||
value = Nif::Transformation::getIdentity();
|
||||
}
|
||||
|
||||
void init(Nif::Extra& value)
|
||||
{
|
||||
value.next = Nif::ExtraPtr(nullptr);
|
||||
}
|
||||
|
||||
void init(Nif::Named& value)
|
||||
{
|
||||
value.extra = Nif::ExtraPtr(nullptr);
|
||||
value.extralist = Nif::ExtraList();
|
||||
value.controller = Nif::ControllerPtr(nullptr);
|
||||
}
|
||||
|
||||
void init(Nif::Node& value)
|
||||
{
|
||||
init(static_cast<Nif::Named&>(value));
|
||||
value.flags = 0;
|
||||
init(value.trafo);
|
||||
value.hasBounds = false;
|
||||
value.parents.push_back(nullptr);
|
||||
value.isBone = false;
|
||||
}
|
||||
|
||||
void init(Nif::NiGeometry& value)
|
||||
{
|
||||
init(static_cast<Nif::Node&>(value));
|
||||
value.data = Nif::NiGeometryDataPtr(nullptr);
|
||||
value.skin = Nif::NiSkinInstancePtr(nullptr);
|
||||
}
|
||||
|
||||
void init(Nif::NiTriShape& value)
|
||||
{
|
||||
init(static_cast<Nif::NiGeometry&>(value));
|
||||
value.recType = Nif::RC_NiTriShape;
|
||||
}
|
||||
|
||||
void init(Nif::NiTriStrips& value)
|
||||
{
|
||||
init(static_cast<Nif::NiGeometry&>(value));
|
||||
value.recType = Nif::RC_NiTriStrips;
|
||||
}
|
||||
|
||||
void init(Nif::NiSkinInstance& value)
|
||||
{
|
||||
value.data = Nif::NiSkinDataPtr(nullptr);
|
||||
value.root = Nif::NodePtr(nullptr);
|
||||
}
|
||||
|
||||
void init(Nif::Controller& value)
|
||||
{
|
||||
value.next = Nif::ControllerPtr(nullptr);
|
||||
value.flags = 0;
|
||||
value.frequency = 0;
|
||||
value.phase = 0;
|
||||
value.timeStart = 0;
|
||||
value.timeStop = 0;
|
||||
value.target = Nif::NamedPtr(nullptr);
|
||||
}
|
||||
|
||||
void copy(const btTransform& src, Nif::Transformation& dst)
|
||||
{
|
||||
dst.pos = osg::Vec3f(src.getOrigin().x(), src.getOrigin().y(), src.getOrigin().z());
|
||||
|
@ -333,31 +273,9 @@ namespace
|
|||
dst.rotation.mValues[column][row] = src.getBasis().getRow(row)[column];
|
||||
}
|
||||
|
||||
struct NifFileMock : Nif::File
|
||||
{
|
||||
MOCK_METHOD(Nif::Record*, getRecord, (std::size_t), (const, override));
|
||||
MOCK_METHOD(std::size_t, numRecords, (), (const, override));
|
||||
MOCK_METHOD(Nif::Record*, getRoot, (std::size_t), (const, override));
|
||||
MOCK_METHOD(std::size_t, numRoots, (), (const, override));
|
||||
MOCK_METHOD(std::string, getString, (uint32_t), (const, override));
|
||||
MOCK_METHOD(void, setUseSkinning, (bool), (override));
|
||||
MOCK_METHOD(bool, getUseSkinning, (), (const, override));
|
||||
MOCK_METHOD(std::filesystem::path, getFilename, (), (const, override));
|
||||
MOCK_METHOD(std::string, getHash, (), (const, override));
|
||||
MOCK_METHOD(unsigned int, getVersion, (), (const, override));
|
||||
MOCK_METHOD(unsigned int, getUserVersion, (), (const, override));
|
||||
MOCK_METHOD(unsigned int, getBethVersion, (), (const, override));
|
||||
};
|
||||
|
||||
struct RecordMock : Nif::Record
|
||||
{
|
||||
MOCK_METHOD(void, read, (Nif::NIFStream * nif), (override));
|
||||
};
|
||||
|
||||
struct TestBulletNifLoader : Test
|
||||
{
|
||||
BulletNifLoader mLoader;
|
||||
const StrictMock<const NifFileMock> mNifFile;
|
||||
Nif::Node mNode;
|
||||
Nif::Node mNode2;
|
||||
Nif::NiNode mNiNode;
|
||||
|
@ -412,16 +330,15 @@ namespace
|
|||
= { osg::Vec3f(0, 0, 0), osg::Vec3f(1, 0, 0), osg::Vec3f(1, 1, 0), osg::Vec3f(0, 1, 0) };
|
||||
mNiTriStripsData.strips = { { 0, 1, 2, 3 } };
|
||||
mNiTriStrips.data = Nif::NiGeometryDataPtr(&mNiTriStripsData);
|
||||
|
||||
EXPECT_CALL(mNifFile, getHash()).WillOnce(Return(mHash));
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(TestBulletNifLoader, for_zero_num_roots_should_return_default)
|
||||
{
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(0));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
Resource::BulletShape expected;
|
||||
|
||||
|
@ -432,10 +349,11 @@ namespace
|
|||
|
||||
TEST_F(TestBulletNifLoader, should_ignore_nullptr_root)
|
||||
{
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(nullptr));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(nullptr);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
Resource::BulletShape expected;
|
||||
|
||||
|
@ -444,10 +362,11 @@ namespace
|
|||
|
||||
TEST_F(TestBulletNifLoader, for_default_root_nif_node_should_return_default)
|
||||
{
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
Resource::BulletShape expected;
|
||||
|
||||
|
@ -458,10 +377,11 @@ namespace
|
|||
{
|
||||
mNode.recType = Nif::RC_RootCollisionNode;
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
Resource::BulletShape expected;
|
||||
|
||||
|
@ -470,10 +390,11 @@ namespace
|
|||
|
||||
TEST_F(TestBulletNifLoader, for_default_root_nif_node_and_filename_starting_with_x_should_return_default)
|
||||
{
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("xtest.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("xtest.nif");
|
||||
file.mRoots.push_back(&mNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
Resource::BulletShape expected;
|
||||
|
||||
|
@ -489,10 +410,11 @@ namespace
|
|||
mNode.bounds.box.extents = osg::Vec3f(1, 2, 3);
|
||||
mNode.bounds.box.center = osg::Vec3f(-1, -2, -3);
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
Resource::BulletShape expected;
|
||||
expected.mCollisionBox.mExtents = osg::Vec3f(1, 2, 3);
|
||||
|
@ -515,10 +437,11 @@ namespace
|
|||
mNode.parents.push_back(&mNiNode);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNode) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
Resource::BulletShape expected;
|
||||
expected.mCollisionBox.mExtents = osg::Vec3f(1, 2, 3);
|
||||
|
@ -547,10 +470,11 @@ namespace
|
|||
mNiNode.bounds.box.center = osg::Vec3f(-4, -5, -6);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNode) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
Resource::BulletShape expected;
|
||||
expected.mCollisionBox.mExtents = osg::Vec3f(1, 2, 3);
|
||||
|
@ -585,10 +509,11 @@ namespace
|
|||
mNiNode.bounds.box.center = osg::Vec3f(-7, -8, -9);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNode), Nif::NodePtr(&mNode2) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
Resource::BulletShape expected;
|
||||
expected.mCollisionBox.mExtents = osg::Vec3f(1, 2, 3);
|
||||
|
@ -623,10 +548,11 @@ namespace
|
|||
mNiNode.bounds.box.center = osg::Vec3f(-7, -8, -9);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNode), Nif::NodePtr(&mNode2) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
Resource::BulletShape expected;
|
||||
expected.mCollisionBox.mExtents = osg::Vec3f(4, 5, 6);
|
||||
|
@ -647,10 +573,11 @@ namespace
|
|||
mNode.bounds.box.extents = osg::Vec3f(1, 2, 3);
|
||||
mNode.bounds.box.center = osg::Vec3f(-1, -2, -3);
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
Resource::BulletShape expected;
|
||||
expected.mCollisionBox.mExtents = osg::Vec3f(1, 2, 3);
|
||||
|
@ -661,10 +588,11 @@ namespace
|
|||
|
||||
TEST_F(TestBulletNifLoader, for_tri_shape_root_node_should_return_shape_with_triangle_mesh_shape)
|
||||
{
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiTriShape));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiTriShape);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -682,10 +610,11 @@ namespace
|
|||
mNiTriShape.bounds.box.extents = osg::Vec3f(1, 2, 3);
|
||||
mNiTriShape.bounds.box.center = osg::Vec3f(-1, -2, -3);
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiTriShape));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiTriShape);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
Resource::BulletShape expected;
|
||||
expected.mCollisionBox.mExtents = osg::Vec3f(1, 2, 3);
|
||||
|
@ -699,10 +628,11 @@ namespace
|
|||
mNiTriShape.parents.push_back(&mNiNode);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -719,10 +649,11 @@ namespace
|
|||
mNiNode2.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
mNiTriShape.parents.push_back(&mNiNode2);
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -739,10 +670,11 @@ namespace
|
|||
mNiNode.children
|
||||
= Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape), Nif::NodePtr(&mNiTriShape2) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 1), btVector3(1, 0, 1), btVector3(1, 1, 1));
|
||||
|
@ -760,10 +692,11 @@ namespace
|
|||
mNiTriShape.parents.push_back(&mNiNode);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("xtest.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("xtest.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -779,10 +712,11 @@ namespace
|
|||
copy(mTransform, mNiTriShape.trafo);
|
||||
mNiTriShape.trafo.scale = 3;
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiTriShape));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("xtest.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("xtest.nif");
|
||||
file.mRoots.push_back(&mNiTriShape);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -806,10 +740,11 @@ namespace
|
|||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
mNiNode.trafo.scale = 4;
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("xtest.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("xtest.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -840,10 +775,11 @@ namespace
|
|||
Nif::NodePtr(&mNiTriShape2),
|
||||
}));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("xtest.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("xtest.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -876,10 +812,11 @@ namespace
|
|||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
mNiNode.trafo.scale = 4;
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -912,10 +849,11 @@ namespace
|
|||
}));
|
||||
mNiNode.trafo.scale = 4;
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(
|
||||
|
@ -943,11 +881,12 @@ namespace
|
|||
mNiTriShape.parents.push_back(&mNiNode);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(2));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getRoot(1)).WillOnce(Return(&mNiTriShape2));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("xtest.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("xtest.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mRoots.push_back(&mNiTriShape2);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -974,10 +913,11 @@ namespace
|
|||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
mNiNode.recType = Nif::RC_AvoidNode;
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -993,10 +933,11 @@ namespace
|
|||
mNiTriShape.parents.push_back(&mNiNode);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
Resource::BulletShape expected;
|
||||
|
||||
|
@ -1011,10 +952,11 @@ namespace
|
|||
mNiTriShape.parents.push_back(&mNiNode);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
Resource::BulletShape expected;
|
||||
|
||||
|
@ -1030,10 +972,11 @@ namespace
|
|||
mNiTriShape.parents.push_back(&mNiNode);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -1054,10 +997,11 @@ namespace
|
|||
mNiTriShape.parents.push_back(&mNiNode);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -1077,10 +1021,11 @@ namespace
|
|||
mNiTriShape.parents.push_back(&mNiNode);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -1101,10 +1046,11 @@ namespace
|
|||
mNiTriShape.parents.push_back(&mNiNode);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -1131,10 +1077,11 @@ namespace
|
|||
mNiNode.children = Nif::NodeList(
|
||||
std::vector<Nif::NodePtr>({ Nif::NodePtr(&niTriShape), Nif::NodePtr(&emptyCollisionNode) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -1154,10 +1101,11 @@ namespace
|
|||
mNiTriShape.parents.push_back(&mNiNode);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
Resource::BulletShape expected;
|
||||
|
||||
|
@ -1177,10 +1125,11 @@ namespace
|
|||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiNode2) }));
|
||||
mNiNode.recType = Nif::RC_NiNode;
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -1194,10 +1143,11 @@ namespace
|
|||
{
|
||||
mNiTriShape.data = Nif::NiGeometryDataPtr(&mNiTriStripsData);
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiTriShape));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiTriShape);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
const Resource::BulletShape expected;
|
||||
|
||||
|
@ -1206,10 +1156,11 @@ namespace
|
|||
|
||||
TEST_F(TestBulletNifLoader, for_tri_strips_root_node_should_return_shape_with_triangle_mesh_shape)
|
||||
{
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiTriStrips));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiTriStrips);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -1224,10 +1175,11 @@ namespace
|
|||
{
|
||||
mNiTriStrips.data = Nif::NiGeometryDataPtr(&mNiTriShapeData);
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiTriStrips));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiTriStrips);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
const Resource::BulletShape expected;
|
||||
|
||||
|
@ -1238,10 +1190,11 @@ namespace
|
|||
{
|
||||
mNiTriStripsData.strips.clear();
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiTriStrips));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiTriStrips);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
const Resource::BulletShape expected;
|
||||
|
||||
|
@ -1252,10 +1205,11 @@ namespace
|
|||
{
|
||||
mNiTriStripsData.strips.front() = { 0, 1 };
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiTriStrips));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiTriStrips);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
const Resource::BulletShape expected;
|
||||
|
||||
|
@ -1269,10 +1223,11 @@ namespace
|
|||
mNiNode.recType = Nif::RC_AvoidNode;
|
||||
mNiTriStripsData.strips.front() = { 0, 1 };
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiTriStrips));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("test.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&mNiTriStrips);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
const Resource::BulletShape expected;
|
||||
|
||||
|
@ -1285,10 +1240,11 @@ namespace
|
|||
mNiTriStrips.parents.push_back(&mNiNode);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriStrips) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(1));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("xtest.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("xtest.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
const Resource::BulletShape expected;
|
||||
|
||||
|
@ -1301,11 +1257,12 @@ namespace
|
|||
mNiTriShape.parents.push_back(&mNiNode);
|
||||
mNiNode.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(2));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getRoot(1)).WillOnce(Return(&mNiTriStrips));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("xtest.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("xtest.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mRoots.push_back(&mNiTriStrips);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles(new btTriangleMesh(false));
|
||||
triangles->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
@ -1330,11 +1287,12 @@ namespace
|
|||
mNiNode2.children = Nif::NodeList(std::vector<Nif::NodePtr>({ Nif::NodePtr(&mNiTriShape) }));
|
||||
mNiNode2.trafo.scale = 3;
|
||||
|
||||
EXPECT_CALL(mNifFile, numRoots()).WillOnce(Return(2));
|
||||
EXPECT_CALL(mNifFile, getRoot(0)).WillOnce(Return(&mNiNode));
|
||||
EXPECT_CALL(mNifFile, getRoot(1)).WillOnce(Return(&mNiNode2));
|
||||
EXPECT_CALL(mNifFile, getFilename()).WillOnce(Return("xtest.nif"));
|
||||
const auto result = mLoader.load(mNifFile);
|
||||
Nif::NIFFile file("xtest.nif");
|
||||
file.mRoots.push_back(&mNiNode);
|
||||
file.mRoots.push_back(&mNiNode2);
|
||||
file.mHash = mHash;
|
||||
|
||||
const auto result = mLoader.load(file);
|
||||
|
||||
std::unique_ptr<btTriangleMesh> triangles1(new btTriangleMesh(false));
|
||||
triangles1->addTriangle(btVector3(0, 0, 0), btVector3(1, 0, 0), btVector3(1, 1, 0));
|
||||
|
|
231
apps/openmw_test_suite/nifosg/testnifloader.cpp
Normal file
231
apps/openmw_test_suite/nifosg/testnifloader.cpp
Normal file
|
@ -0,0 +1,231 @@
|
|||
#include "../nif/node.hpp"
|
||||
|
||||
#include <components/nif/node.hpp>
|
||||
#include <components/nif/property.hpp>
|
||||
#include <components/nifosg/nifloader.hpp>
|
||||
#include <components/resource/imagemanager.hpp>
|
||||
#include <components/sceneutil/serialize.hpp>
|
||||
#include <components/vfs/manager.hpp>
|
||||
|
||||
#include <gmock/gmock.h>
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <boost/format.hpp>
|
||||
|
||||
#include <osgDB/Registry>
|
||||
|
||||
#include <array>
|
||||
#include <limits>
|
||||
#include <sstream>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
|
||||
namespace
|
||||
{
|
||||
using namespace testing;
|
||||
using namespace NifOsg;
|
||||
using namespace Nif::Testing;
|
||||
|
||||
struct BaseNifOsgLoaderTest
|
||||
{
|
||||
VFS::Manager mVfs{ false };
|
||||
Resource::ImageManager mImageManager{ &mVfs };
|
||||
const osgDB::ReaderWriter* mReaderWriter = osgDB::Registry::instance()->getReaderWriterForExtension("osgt");
|
||||
osg::ref_ptr<osgDB::Options> mOptions = new osgDB::Options;
|
||||
|
||||
BaseNifOsgLoaderTest()
|
||||
{
|
||||
SceneUtil::registerSerializers();
|
||||
|
||||
if (mReaderWriter == nullptr)
|
||||
throw std::runtime_error("osgt reader writer is not found");
|
||||
|
||||
mOptions->setPluginStringData("fileType", "Ascii");
|
||||
mOptions->setPluginStringData("WriteImageHint", "UseExternal");
|
||||
}
|
||||
|
||||
std::string serialize(const osg::Node& node) const
|
||||
{
|
||||
std::stringstream stream;
|
||||
mReaderWriter->writeNode(node, stream, mOptions);
|
||||
std::string result;
|
||||
for (std::string line; std::getline(stream, line);)
|
||||
{
|
||||
if (line.starts_with('#'))
|
||||
continue;
|
||||
boost::trim_right(line);
|
||||
result += line;
|
||||
result += '\n';
|
||||
}
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
struct NifOsgLoaderTest : Test, BaseNifOsgLoaderTest
|
||||
{
|
||||
};
|
||||
|
||||
TEST_F(NifOsgLoaderTest, shouldLoadFileWithDefaultNode)
|
||||
{
|
||||
Nif::Node node;
|
||||
init(node);
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&node);
|
||||
auto result = Loader::load(file, &mImageManager);
|
||||
EXPECT_EQ(serialize(*result), R"(
|
||||
osg::Group {
|
||||
UniqueID 1
|
||||
DataVariance STATIC
|
||||
UserDataContainer TRUE {
|
||||
osg::DefaultUserDataContainer {
|
||||
UniqueID 2
|
||||
UDC_UserObjects 1 {
|
||||
osg::StringValueObject {
|
||||
UniqueID 3
|
||||
Name "fileHash"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Children 1 {
|
||||
osg::Group {
|
||||
UniqueID 4
|
||||
DataVariance STATIC
|
||||
UserDataContainer TRUE {
|
||||
osg::DefaultUserDataContainer {
|
||||
UniqueID 5
|
||||
UDC_UserObjects 1 {
|
||||
osg::UIntValueObject {
|
||||
UniqueID 6
|
||||
Name "recIndex"
|
||||
Value 4294967295
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
)");
|
||||
}
|
||||
|
||||
std::string formatOsgNodeForShaderProperty(std::string_view shaderPrefix)
|
||||
{
|
||||
static constexpr const char format[] = R"(
|
||||
osg::Group {
|
||||
UniqueID 1
|
||||
DataVariance STATIC
|
||||
UserDataContainer TRUE {
|
||||
osg::DefaultUserDataContainer {
|
||||
UniqueID 2
|
||||
UDC_UserObjects 1 {
|
||||
osg::StringValueObject {
|
||||
UniqueID 3
|
||||
Name "fileHash"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Children 1 {
|
||||
osg::Group {
|
||||
UniqueID 4
|
||||
DataVariance STATIC
|
||||
UserDataContainer TRUE {
|
||||
osg::DefaultUserDataContainer {
|
||||
UniqueID 5
|
||||
UDC_UserObjects 3 {
|
||||
osg::UIntValueObject {
|
||||
UniqueID 6
|
||||
Name "recIndex"
|
||||
Value 4294967295
|
||||
}
|
||||
osg::StringValueObject {
|
||||
UniqueID 7
|
||||
Name "shaderPrefix"
|
||||
Value "%s"
|
||||
}
|
||||
osg::BoolValueObject {
|
||||
UniqueID 8
|
||||
Name "shaderRequired"
|
||||
Value TRUE
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
StateSet TRUE {
|
||||
osg::StateSet {
|
||||
UniqueID 9
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
)";
|
||||
return (boost::format(format) % shaderPrefix).str();
|
||||
}
|
||||
|
||||
struct ShaderPrefixParams
|
||||
{
|
||||
unsigned int mShaderType;
|
||||
std::string_view mExpectedShaderPrefix;
|
||||
};
|
||||
|
||||
struct NifOsgLoaderBSShaderPrefixTest : TestWithParam<ShaderPrefixParams>, BaseNifOsgLoaderTest
|
||||
{
|
||||
static constexpr std::array sParams = {
|
||||
ShaderPrefixParams{ static_cast<unsigned int>(Nif::BSShaderType::ShaderType_Default), "nv_default" },
|
||||
ShaderPrefixParams{ static_cast<unsigned int>(Nif::BSShaderType::ShaderType_NoLighting), "nv_nolighting" },
|
||||
ShaderPrefixParams{ static_cast<unsigned int>(Nif::BSShaderType::ShaderType_Tile), "nv_default" },
|
||||
ShaderPrefixParams{ std::numeric_limits<unsigned int>::max(), "nv_default" },
|
||||
};
|
||||
};
|
||||
|
||||
TEST_P(NifOsgLoaderBSShaderPrefixTest, shouldAddShaderPrefix)
|
||||
{
|
||||
Nif::Node node;
|
||||
init(node);
|
||||
Nif::BSShaderPPLightingProperty property;
|
||||
property.recType = Nif::RC_BSShaderPPLightingProperty;
|
||||
property.textureSet = nullptr;
|
||||
property.controller = nullptr;
|
||||
property.type = GetParam().mShaderType;
|
||||
node.props.push_back(Nif::RecordPtrT<Nif::Property>(&property));
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&node);
|
||||
auto result = Loader::load(file, &mImageManager);
|
||||
EXPECT_EQ(serialize(*result), formatOsgNodeForShaderProperty(GetParam().mExpectedShaderPrefix));
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P(Params, NifOsgLoaderBSShaderPrefixTest, ValuesIn(NifOsgLoaderBSShaderPrefixTest::sParams));
|
||||
|
||||
struct NifOsgLoaderBSLightingShaderPrefixTest : TestWithParam<ShaderPrefixParams>, BaseNifOsgLoaderTest
|
||||
{
|
||||
static constexpr std::array sParams = {
|
||||
ShaderPrefixParams{
|
||||
static_cast<unsigned int>(Nif::BSLightingShaderType::ShaderType_Default), "nv_default" },
|
||||
ShaderPrefixParams{ static_cast<unsigned int>(Nif::BSLightingShaderType::ShaderType_Cloud), "nv_default" },
|
||||
ShaderPrefixParams{ std::numeric_limits<unsigned int>::max(), "nv_default" },
|
||||
};
|
||||
};
|
||||
|
||||
TEST_P(NifOsgLoaderBSLightingShaderPrefixTest, shouldAddShaderPrefix)
|
||||
{
|
||||
Nif::Node node;
|
||||
init(node);
|
||||
Nif::BSLightingShaderProperty property;
|
||||
property.recType = Nif::RC_BSLightingShaderProperty;
|
||||
property.mTextureSet = nullptr;
|
||||
property.controller = nullptr;
|
||||
property.type = GetParam().mShaderType;
|
||||
node.props.push_back(Nif::RecordPtrT<Nif::Property>(&property));
|
||||
Nif::NIFFile file("test.nif");
|
||||
file.mRoots.push_back(&node);
|
||||
auto result = Loader::load(file, &mImageManager);
|
||||
EXPECT_EQ(serialize(*result), formatOsgNodeForShaderProperty(GetParam().mExpectedShaderPrefix));
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P(
|
||||
Params, NifOsgLoaderBSLightingShaderPrefixTest, ValuesIn(NifOsgLoaderBSLightingShaderPrefixTest::sParams));
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue