Integrating github/staging through commit 5f214be
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
#include <AzCore/UnitTest/TestTypes.h>
|
||||
#include <AzCore/Console/IConsole.h>
|
||||
#include <AzCore/Console/Console.h>
|
||||
#include <AzCore/Name/NameDictionary.h>
|
||||
#include <AzFramework/Visibility/OctreeSystemComponent.h>
|
||||
#include <random>
|
||||
|
||||
@@ -25,8 +26,13 @@ namespace UnitTest
|
||||
{
|
||||
public:
|
||||
void SetUp() override
|
||||
{
|
||||
AllocatorsFixture::SetUp();
|
||||
{
|
||||
// Create the SystemAllocator if not available
|
||||
if (!AZ::AllocatorInstance<AZ::SystemAllocator>::IsReady())
|
||||
{
|
||||
AZ::AllocatorInstance<AZ::SystemAllocator>::Create();
|
||||
m_ownsSystemAllocator = true;
|
||||
}
|
||||
|
||||
m_console = aznew AZ::Console();
|
||||
AZ::Interface<AZ::IConsole>::Register(m_console);
|
||||
@@ -41,12 +47,18 @@ namespace UnitTest
|
||||
m_console->PerformCommand("bg_octreeNodeMinEntries 1");
|
||||
m_console->PerformCommand("bg_octreeMaxWorldExtents 1"); // Create a -1,-1,-1 to 1,1,1 world volume
|
||||
|
||||
if (!AZ::NameDictionary::IsReady())
|
||||
{
|
||||
AZ::NameDictionary::Create();
|
||||
}
|
||||
m_octreeSystemComponent = new OctreeSystemComponent;
|
||||
IVisibilityScene* visScene = m_octreeSystemComponent->CreateVisibilityScene(AZ::Name("OctreeUnitTestScene"));
|
||||
m_octreeScene = azdynamic_cast<OctreeScene*>(visScene);
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{
|
||||
// Restore octreeSystemComponent cvars for any future tests or benchmarks that might get executed
|
||||
//Restore octreeSystemComponent cvars for any future tests or benchmarks that might get executed
|
||||
AZStd::string commandString;
|
||||
commandString.format("bg_octreeNodeMaxEntries %u", m_savedMaxEntries);
|
||||
m_console->PerformCommand(commandString.c_str());
|
||||
@@ -55,17 +67,31 @@ namespace UnitTest
|
||||
commandString.format("bg_octreeMaxWorldExtents %f", m_savedBounds);
|
||||
m_console->PerformCommand(commandString.c_str());
|
||||
|
||||
m_octreeSystemComponent->DestroyVisibilityScene(m_octreeScene);
|
||||
delete m_octreeSystemComponent;
|
||||
m_octreeSystemComponent = nullptr;
|
||||
|
||||
AZ::NameDictionary::Destroy();
|
||||
|
||||
AZ::Interface<AZ::IConsole>::Unregister(m_console);
|
||||
delete m_console;
|
||||
AllocatorsFixture::TearDown();
|
||||
m_console = nullptr;
|
||||
|
||||
// Destroy system allocator only if it was created by this environment
|
||||
if (m_ownsSystemAllocator)
|
||||
{
|
||||
AZ::AllocatorInstance<AZ::SystemAllocator>::Destroy();
|
||||
m_ownsSystemAllocator = false;
|
||||
}
|
||||
}
|
||||
|
||||
bool m_ownsSystemAllocator = false;
|
||||
OctreeSystemComponent* m_octreeSystemComponent = nullptr;
|
||||
OctreeScene* m_octreeScene = nullptr;
|
||||
uint32_t m_savedMaxEntries = 0;
|
||||
uint32_t m_savedMinEntries = 0;
|
||||
float m_savedBounds = 0.0f;
|
||||
AZ::Console* m_console = nullptr;
|
||||
AZ::Console* m_console;
|
||||
};
|
||||
|
||||
TEST_F(OctreeTests, InsertDeleteSingleEntry)
|
||||
@@ -73,14 +99,16 @@ namespace UnitTest
|
||||
AzFramework::VisibilityEntry visEntry;
|
||||
visEntry.m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3::CreateZero(), AZ::Vector3::CreateOne());
|
||||
|
||||
m_octreeSystemComponent->InsertOrUpdateEntry(visEntry);
|
||||
m_octreeScene->InsertOrUpdateEntry(visEntry);
|
||||
EXPECT_TRUE(visEntry.m_internalNode != nullptr);
|
||||
EXPECT_TRUE(visEntry.m_internalNodeIndex == 0);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 1);
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 1);
|
||||
|
||||
m_octreeSystemComponent->RemoveEntry(visEntry);
|
||||
m_octreeScene->RemoveEntry(visEntry);
|
||||
EXPECT_TRUE(visEntry.m_internalNode == nullptr);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 0);
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 0);
|
||||
|
||||
EXPECT_TRUE(true); //TEST
|
||||
}
|
||||
|
||||
TEST_F(OctreeTests, InsertDeleteSplitMerge)
|
||||
@@ -90,37 +118,37 @@ namespace UnitTest
|
||||
visEntry[1].m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3( 0.1f), AZ::Vector3( 0.4f));
|
||||
visEntry[2].m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3( 0.6f), AZ::Vector3( 0.9f));
|
||||
|
||||
m_octreeSystemComponent->InsertOrUpdateEntry(visEntry[0]);
|
||||
m_octreeScene->InsertOrUpdateEntry(visEntry[0]);
|
||||
EXPECT_TRUE(visEntry[0].m_internalNode != nullptr);
|
||||
EXPECT_TRUE(visEntry[0].m_internalNodeIndex == 0);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 1);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetNodeCount() == 1);
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 1);
|
||||
EXPECT_TRUE(m_octreeScene->GetNodeCount() == 1);
|
||||
|
||||
m_octreeSystemComponent->InsertOrUpdateEntry(visEntry[1]); // This should force a split of the root node
|
||||
m_octreeScene->InsertOrUpdateEntry(visEntry[1]); // This should force a split of the root node
|
||||
EXPECT_TRUE(visEntry[1].m_internalNode != nullptr);
|
||||
EXPECT_TRUE(visEntry[1].m_internalNodeIndex == 0);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 2);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetNodeCount() == 1 + m_octreeSystemComponent->GetChildNodeCount());
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 2);
|
||||
EXPECT_TRUE(m_octreeScene->GetNodeCount() == 1 + m_octreeScene->GetChildNodeCount());
|
||||
|
||||
m_octreeSystemComponent->InsertOrUpdateEntry(visEntry[2]); // This should force a split of the roots +/+/+ child node
|
||||
m_octreeScene->InsertOrUpdateEntry(visEntry[2]); // This should force a split of the roots +/+/+ child node
|
||||
EXPECT_TRUE(visEntry[2].m_internalNode != nullptr);
|
||||
EXPECT_TRUE(visEntry[2].m_internalNodeIndex == 0);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 3);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetNodeCount() == 1 + (2 * m_octreeSystemComponent->GetChildNodeCount()));
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 3);
|
||||
EXPECT_TRUE(m_octreeScene->GetNodeCount() == 1 + (2 * m_octreeScene->GetChildNodeCount()));
|
||||
|
||||
m_octreeSystemComponent->RemoveEntry(visEntry[2]);
|
||||
m_octreeScene->RemoveEntry(visEntry[2]);
|
||||
EXPECT_TRUE(visEntry[2].m_internalNode == nullptr);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 2);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetNodeCount() == 1 + m_octreeSystemComponent->GetChildNodeCount());
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 2);
|
||||
EXPECT_TRUE(m_octreeScene->GetNodeCount() == 1 + m_octreeScene->GetChildNodeCount());
|
||||
|
||||
m_octreeSystemComponent->RemoveEntry(visEntry[1]);
|
||||
m_octreeScene->RemoveEntry(visEntry[1]);
|
||||
EXPECT_TRUE(visEntry[1].m_internalNode == nullptr);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 1);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetNodeCount() == 1);
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 1);
|
||||
EXPECT_TRUE(m_octreeScene->GetNodeCount() == 1);
|
||||
|
||||
m_octreeSystemComponent->RemoveEntry(visEntry[0]);
|
||||
m_octreeScene->RemoveEntry(visEntry[0]);
|
||||
EXPECT_TRUE(visEntry[0].m_internalNode == nullptr);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 0);
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 0);
|
||||
}
|
||||
|
||||
TEST_F(OctreeTests, UpdateSingleEntry)
|
||||
@@ -128,23 +156,23 @@ namespace UnitTest
|
||||
AzFramework::VisibilityEntry visEntry;
|
||||
visEntry.m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3::CreateZero(), AZ::Vector3::CreateOne());
|
||||
|
||||
m_octreeSystemComponent->InsertOrUpdateEntry(visEntry);
|
||||
m_octreeScene->InsertOrUpdateEntry(visEntry);
|
||||
EXPECT_TRUE(visEntry.m_internalNode != nullptr);
|
||||
EXPECT_TRUE(visEntry.m_internalNodeIndex == 0);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 1);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetNodeCount() == 1);
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 1);
|
||||
EXPECT_TRUE(m_octreeScene->GetNodeCount() == 1);
|
||||
|
||||
visEntry.m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3(-0.5f), AZ::Vector3(0.5f));
|
||||
m_octreeSystemComponent->InsertOrUpdateEntry(visEntry);
|
||||
m_octreeScene->InsertOrUpdateEntry(visEntry);
|
||||
EXPECT_TRUE(visEntry.m_internalNode != nullptr);
|
||||
EXPECT_TRUE(visEntry.m_internalNodeIndex == 0);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 1);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetNodeCount() == 1);
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 1);
|
||||
EXPECT_TRUE(m_octreeScene->GetNodeCount() == 1);
|
||||
|
||||
m_octreeSystemComponent->RemoveEntry(visEntry);
|
||||
m_octreeScene->RemoveEntry(visEntry);
|
||||
EXPECT_TRUE(visEntry.m_internalNode == nullptr);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 0);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetNodeCount() == 1);
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 0);
|
||||
EXPECT_TRUE(m_octreeScene->GetNodeCount() == 1);
|
||||
}
|
||||
|
||||
TEST_F(OctreeTests, UpdateSplitMerge)
|
||||
@@ -154,92 +182,92 @@ namespace UnitTest
|
||||
visEntry[1].m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3( 0.1f), AZ::Vector3( 0.4f));
|
||||
visEntry[2].m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3( 0.6f), AZ::Vector3( 0.9f));
|
||||
|
||||
m_octreeSystemComponent->InsertOrUpdateEntry(visEntry[0]);
|
||||
m_octreeScene->InsertOrUpdateEntry(visEntry[0]);
|
||||
EXPECT_TRUE(visEntry[0].m_internalNode != nullptr);
|
||||
EXPECT_TRUE(visEntry[0].m_internalNodeIndex == 0);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 1);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetNodeCount() == 1);
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 1);
|
||||
EXPECT_TRUE(m_octreeScene->GetNodeCount() == 1);
|
||||
|
||||
m_octreeSystemComponent->InsertOrUpdateEntry(visEntry[1]); // This should force a split of the root node
|
||||
m_octreeScene->InsertOrUpdateEntry(visEntry[1]); // This should force a split of the root node
|
||||
EXPECT_TRUE(visEntry[1].m_internalNode != nullptr);
|
||||
EXPECT_TRUE(visEntry[1].m_internalNodeIndex == 0);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 2);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetNodeCount() == 1 + m_octreeSystemComponent->GetChildNodeCount());
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 2);
|
||||
EXPECT_TRUE(m_octreeScene->GetNodeCount() == 1 + m_octreeScene->GetChildNodeCount());
|
||||
|
||||
m_octreeSystemComponent->InsertOrUpdateEntry(visEntry[2]); // This should force a split of the roots +/+/+ child node
|
||||
m_octreeScene->InsertOrUpdateEntry(visEntry[2]); // This should force a split of the roots +/+/+ child node
|
||||
EXPECT_TRUE(visEntry[2].m_internalNode != nullptr);
|
||||
EXPECT_TRUE(visEntry[2].m_internalNodeIndex == 0);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 3);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetNodeCount() == 1 + (2 * m_octreeSystemComponent->GetChildNodeCount()));
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 3);
|
||||
EXPECT_TRUE(m_octreeScene->GetNodeCount() == 1 + (2 * m_octreeScene->GetChildNodeCount()));
|
||||
|
||||
visEntry[1].m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3(-0.9f), AZ::Vector3(-0.6f));
|
||||
visEntry[2].m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3( 0.1f), AZ::Vector3( 0.4f));
|
||||
visEntry[0].m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3( 0.6f), AZ::Vector3( 0.9f));
|
||||
m_octreeSystemComponent->InsertOrUpdateEntry(visEntry[0]);
|
||||
m_octreeSystemComponent->InsertOrUpdateEntry(visEntry[1]);
|
||||
m_octreeSystemComponent->InsertOrUpdateEntry(visEntry[2]);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 3);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetNodeCount() == 1 + (2 * m_octreeSystemComponent->GetChildNodeCount()));
|
||||
m_octreeScene->InsertOrUpdateEntry(visEntry[0]);
|
||||
m_octreeScene->InsertOrUpdateEntry(visEntry[1]);
|
||||
m_octreeScene->InsertOrUpdateEntry(visEntry[2]);
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 3);
|
||||
EXPECT_TRUE(m_octreeScene->GetNodeCount() == 1 + (2 * m_octreeScene->GetChildNodeCount()));
|
||||
|
||||
m_octreeSystemComponent->RemoveEntry(visEntry[2]);
|
||||
m_octreeScene->RemoveEntry(visEntry[2]);
|
||||
EXPECT_TRUE(visEntry[2].m_internalNode == nullptr);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 2);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetNodeCount() == 1 + m_octreeSystemComponent->GetChildNodeCount());
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 2);
|
||||
EXPECT_TRUE(m_octreeScene->GetNodeCount() == 1 + m_octreeScene->GetChildNodeCount());
|
||||
|
||||
m_octreeSystemComponent->RemoveEntry(visEntry[1]);
|
||||
m_octreeScene->RemoveEntry(visEntry[1]);
|
||||
EXPECT_TRUE(visEntry[1].m_internalNode == nullptr);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 1);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetNodeCount() == 1);
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 1);
|
||||
EXPECT_TRUE(m_octreeScene->GetNodeCount() == 1);
|
||||
|
||||
m_octreeSystemComponent->RemoveEntry(visEntry[0]);
|
||||
m_octreeScene->RemoveEntry(visEntry[0]);
|
||||
EXPECT_TRUE(visEntry[0].m_internalNode == nullptr);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetEntryCount() == 0);
|
||||
EXPECT_TRUE(m_octreeSystemComponent->GetNodeCount() == 1);
|
||||
EXPECT_TRUE(m_octreeScene->GetEntryCount() == 0);
|
||||
EXPECT_TRUE(m_octreeScene->GetNodeCount() == 1);
|
||||
}
|
||||
|
||||
void AppendEntries(AZStd::vector<VisibilityEntry*>& gatheredEntries, const AzFramework::IVisibilitySystem::NodeData& nodeData)
|
||||
void AppendEntries(AZStd::vector<VisibilityEntry*>& gatheredEntries, const AzFramework::IVisibilityScene::NodeData& nodeData)
|
||||
{
|
||||
gatheredEntries.insert(gatheredEntries.end(), nodeData.m_entries.begin(), nodeData.m_entries.end());
|
||||
}
|
||||
|
||||
template <typename BoundType>
|
||||
void EnumerateSingleEntryHelper(OctreeSystemComponent* octreeSystemComponent, const BoundType& bounds)
|
||||
void EnumerateSingleEntryHelper(IVisibilityScene* visScene, const BoundType& bounds)
|
||||
{
|
||||
AzFramework::VisibilityEntry visEntry;
|
||||
visEntry.m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3::CreateZero(), AZ::Vector3::CreateOne());
|
||||
|
||||
AZStd::vector<VisibilityEntry*> gatheredEntries;
|
||||
octreeSystemComponent->Enumerate(bounds, [&gatheredEntries](const AzFramework::IVisibilitySystem::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
visScene->Enumerate(bounds, [&gatheredEntries](const AzFramework::IVisibilityScene::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
EXPECT_TRUE(gatheredEntries.empty());
|
||||
|
||||
octreeSystemComponent->InsertOrUpdateEntry(visEntry);
|
||||
octreeSystemComponent->Enumerate(bounds, [&gatheredEntries](const AzFramework::IVisibilitySystem::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
visScene->InsertOrUpdateEntry(visEntry);
|
||||
visScene->Enumerate(bounds, [&gatheredEntries](const AzFramework::IVisibilityScene::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
EXPECT_TRUE(gatheredEntries.size() == 1);
|
||||
EXPECT_TRUE(gatheredEntries[0] == &visEntry);
|
||||
|
||||
visEntry.m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3(-0.5f), AZ::Vector3(0.5f));
|
||||
octreeSystemComponent->InsertOrUpdateEntry(visEntry);
|
||||
visScene->InsertOrUpdateEntry(visEntry);
|
||||
gatheredEntries.clear();
|
||||
octreeSystemComponent->Enumerate(bounds, [&gatheredEntries](const AzFramework::IVisibilitySystem::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
visScene->Enumerate(bounds, [&gatheredEntries](const AzFramework::IVisibilityScene::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
EXPECT_TRUE(gatheredEntries.size() == 1);
|
||||
EXPECT_TRUE(gatheredEntries[0] == &visEntry);
|
||||
|
||||
octreeSystemComponent->RemoveEntry(visEntry);
|
||||
visScene->RemoveEntry(visEntry);
|
||||
gatheredEntries.clear();
|
||||
octreeSystemComponent->Enumerate(bounds, [&gatheredEntries](const AzFramework::IVisibilitySystem::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
visScene->Enumerate(bounds, [&gatheredEntries](const AzFramework::IVisibilityScene::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
EXPECT_TRUE(gatheredEntries.empty());
|
||||
}
|
||||
|
||||
TEST_F(OctreeTests, EnumerateSphereSingleEntry)
|
||||
{
|
||||
AZ::Sphere bounds = AZ::Sphere::CreateUnitSphere();
|
||||
EnumerateSingleEntryHelper(m_octreeSystemComponent, bounds);
|
||||
EnumerateSingleEntryHelper(m_octreeScene, bounds);
|
||||
}
|
||||
|
||||
TEST_F(OctreeTests, EnumerateAabbSingleEntry)
|
||||
{
|
||||
AZ::Aabb bounds = AZ::Aabb::CreateFromMinMax(AZ::Vector3(-1.0f), AZ::Vector3(1.0f));
|
||||
EnumerateSingleEntryHelper(m_octreeSystemComponent, bounds);
|
||||
EnumerateSingleEntryHelper(m_octreeScene, bounds);
|
||||
}
|
||||
|
||||
TEST_F(OctreeTests, EnumerateFrustumSingleEntry)
|
||||
@@ -248,14 +276,14 @@ namespace UnitTest
|
||||
AZ::Quaternion frustumDirection = AZ::Quaternion::CreateIdentity();
|
||||
AZ::Transform frustumTransform = AZ::Transform::CreateFromQuaternionAndTranslation(frustumDirection, frustumOrigin);
|
||||
AZ::Frustum bounds = AZ::Frustum(AZ::ViewFrustumAttributes(frustumTransform, 1.0f, 2.0f * atanf(0.5f), 1.0f, 3.0f));
|
||||
EnumerateSingleEntryHelper(m_octreeSystemComponent, bounds);
|
||||
EnumerateSingleEntryHelper(m_octreeScene, bounds);
|
||||
}
|
||||
|
||||
// bound1 should cover the entire spatial hash
|
||||
// bound2 should not cross into the positive Y-axis
|
||||
// bound3 should only intersect the region inside 0.6, 0.6, 0.6 to 0.9, 0.9, 0.9
|
||||
template <typename BoundType>
|
||||
void EnumerateMultipleEntriesHelper(OctreeSystemComponent* octreeSystemComponent, const BoundType& bound1, const BoundType& bound2, const BoundType& bound3)
|
||||
void EnumerateMultipleEntriesHelper(IVisibilityScene* visScene, const BoundType& bound1, const BoundType& bound2, const BoundType& bound3)
|
||||
{
|
||||
AZStd::vector<VisibilityEntry*> gatheredEntries;
|
||||
|
||||
@@ -264,50 +292,50 @@ namespace UnitTest
|
||||
visEntry[1].m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3( 0.1f), AZ::Vector3( 0.4f));
|
||||
visEntry[2].m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3( 0.6f), AZ::Vector3( 0.9f));
|
||||
|
||||
octreeSystemComponent->InsertOrUpdateEntry(visEntry[0]);
|
||||
octreeSystemComponent->InsertOrUpdateEntry(visEntry[1]);
|
||||
octreeSystemComponent->InsertOrUpdateEntry(visEntry[2]);
|
||||
visScene->InsertOrUpdateEntry(visEntry[0]);
|
||||
visScene->InsertOrUpdateEntry(visEntry[1]);
|
||||
visScene->InsertOrUpdateEntry(visEntry[2]);
|
||||
|
||||
gatheredEntries.clear();
|
||||
octreeSystemComponent->Enumerate(bound1, [&gatheredEntries](const AzFramework::IVisibilitySystem::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
visScene->Enumerate(bound1, [&gatheredEntries](const AzFramework::IVisibilityScene::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
EXPECT_TRUE(gatheredEntries.size() == 3);
|
||||
|
||||
gatheredEntries.clear();
|
||||
octreeSystemComponent->Enumerate(bound2, [&gatheredEntries](const AzFramework::IVisibilitySystem::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
visScene->Enumerate(bound2, [&gatheredEntries](const AzFramework::IVisibilityScene::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
EXPECT_TRUE(gatheredEntries.size() == 1);
|
||||
EXPECT_TRUE(gatheredEntries[0] == &(visEntry[0]));
|
||||
|
||||
gatheredEntries.clear();
|
||||
octreeSystemComponent->Enumerate(bound3, [&gatheredEntries](const AzFramework::IVisibilitySystem::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
visScene->Enumerate(bound3, [&gatheredEntries](const AzFramework::IVisibilityScene::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
EXPECT_TRUE(gatheredEntries.size() == 1);
|
||||
EXPECT_TRUE(gatheredEntries[0] == &(visEntry[2]));
|
||||
|
||||
visEntry[1].m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3(-0.9f), AZ::Vector3(-0.6f));
|
||||
visEntry[2].m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3( 0.1f), AZ::Vector3( 0.4f));
|
||||
visEntry[0].m_boundingVolume = AZ::Aabb::CreateFromMinMax(AZ::Vector3( 0.6f), AZ::Vector3( 0.9f));
|
||||
octreeSystemComponent->InsertOrUpdateEntry(visEntry[0]);
|
||||
octreeSystemComponent->InsertOrUpdateEntry(visEntry[1]);
|
||||
octreeSystemComponent->InsertOrUpdateEntry(visEntry[2]);
|
||||
visScene->InsertOrUpdateEntry(visEntry[0]);
|
||||
visScene->InsertOrUpdateEntry(visEntry[1]);
|
||||
visScene->InsertOrUpdateEntry(visEntry[2]);
|
||||
|
||||
gatheredEntries.clear();
|
||||
octreeSystemComponent->Enumerate(bound1, [&gatheredEntries](const AzFramework::IVisibilitySystem::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
visScene->Enumerate(bound1, [&gatheredEntries](const AzFramework::IVisibilityScene::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
EXPECT_TRUE(gatheredEntries.size() == 3);
|
||||
|
||||
gatheredEntries.clear();
|
||||
octreeSystemComponent->Enumerate(bound2, [&gatheredEntries](const AzFramework::IVisibilitySystem::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
visScene->Enumerate(bound2, [&gatheredEntries](const AzFramework::IVisibilityScene::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
EXPECT_TRUE(gatheredEntries.size() == 1);
|
||||
EXPECT_TRUE(gatheredEntries[0] == &(visEntry[1]));
|
||||
|
||||
gatheredEntries.clear();
|
||||
octreeSystemComponent->Enumerate(bound3, [&gatheredEntries](const AzFramework::IVisibilitySystem::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
visScene->Enumerate(bound3, [&gatheredEntries](const AzFramework::IVisibilityScene::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
EXPECT_TRUE(gatheredEntries.size() == 1);
|
||||
EXPECT_TRUE(gatheredEntries[0] == &(visEntry[0]));
|
||||
|
||||
octreeSystemComponent->RemoveEntry(visEntry[0]);
|
||||
octreeSystemComponent->RemoveEntry(visEntry[1]);
|
||||
octreeSystemComponent->RemoveEntry(visEntry[2]);
|
||||
visScene->RemoveEntry(visEntry[0]);
|
||||
visScene->RemoveEntry(visEntry[1]);
|
||||
visScene->RemoveEntry(visEntry[2]);
|
||||
gatheredEntries.clear();
|
||||
octreeSystemComponent->Enumerate(bound1, [&gatheredEntries](const AzFramework::IVisibilitySystem::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
visScene->Enumerate(bound1, [&gatheredEntries](const AzFramework::IVisibilityScene::NodeData& nodeData) { AppendEntries(gatheredEntries, nodeData); });
|
||||
EXPECT_TRUE(gatheredEntries.empty());
|
||||
}
|
||||
|
||||
@@ -316,7 +344,7 @@ namespace UnitTest
|
||||
AZ::Sphere bound1 = AZ::Sphere::CreateUnitSphere();
|
||||
AZ::Sphere bound2 = AZ::Sphere(AZ::Vector3(-0.5f), 0.5f);
|
||||
AZ::Sphere bound3 = AZ::Sphere(AZ::Vector3(0.75f), 0.2f);
|
||||
EnumerateMultipleEntriesHelper(m_octreeSystemComponent, bound1, bound2, bound3);
|
||||
EnumerateMultipleEntriesHelper(m_octreeScene, bound1, bound2, bound3);
|
||||
}
|
||||
|
||||
TEST_F(OctreeTests, EnumerateAabbMultipleEntries)
|
||||
@@ -324,7 +352,7 @@ namespace UnitTest
|
||||
AZ::Aabb bound1 = AZ::Aabb::CreateFromMinMax(AZ::Vector3(-1.0f), AZ::Vector3( 1.0f));
|
||||
AZ::Aabb bound2 = AZ::Aabb::CreateFromMinMax(AZ::Vector3(-1.0f), AZ::Vector3(-0.5f));
|
||||
AZ::Aabb bound3 = AZ::Aabb::CreateFromMinMax(AZ::Vector3( 0.6f), AZ::Vector3( 0.9f));
|
||||
EnumerateMultipleEntriesHelper(m_octreeSystemComponent, bound1, bound2, bound3);
|
||||
EnumerateMultipleEntriesHelper(m_octreeScene, bound1, bound2, bound3);
|
||||
}
|
||||
|
||||
TEST_F(OctreeTests, EnumerateFrustumMultipleEntries)
|
||||
@@ -335,6 +363,6 @@ namespace UnitTest
|
||||
AZ::Frustum bound1 = AZ::Frustum(AZ::ViewFrustumAttributes(frustumTransform, 1.0f, 2.0f * atanf(0.5f), 1.0f, 3.0f));
|
||||
AZ::Frustum bound2 = AZ::Frustum(AZ::ViewFrustumAttributes(frustumTransform, 1.0f, 2.0f * atanf(0.5f), 1.0f, 2.0f));
|
||||
AZ::Frustum bound3 = AZ::Frustum(AZ::ViewFrustumAttributes(frustumTransform, 1.0f, 2.0f * atanf(0.5f), 2.6f, 2.9f));
|
||||
EnumerateMultipleEntriesHelper(m_octreeSystemComponent, bound1, bound2, bound3);
|
||||
EnumerateMultipleEntriesHelper(m_octreeScene, bound1, bound2, bound3);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user