feat: add camera culling masks
This commit is contained in:
@@ -19,6 +19,7 @@ TEST(CameraComponent_Test, DefaultValues) {
|
||||
EXPECT_FLOAT_EQ(camera.GetFarClipPlane(), 1000.0f);
|
||||
EXPECT_TRUE(camera.IsPrimary());
|
||||
EXPECT_EQ(camera.GetClearMode(), CameraClearMode::Auto);
|
||||
EXPECT_EQ(camera.GetCullingMask(), 0xFFFFFFFFu);
|
||||
}
|
||||
|
||||
TEST(CameraComponent_Test, SetterClamping) {
|
||||
@@ -38,6 +39,7 @@ TEST(CameraComponent_Test, SetterClamping) {
|
||||
TEST(CameraComponent_Test, SerializeRoundTripPreservesClearMode) {
|
||||
CameraComponent source;
|
||||
source.SetClearMode(CameraClearMode::DepthOnly);
|
||||
source.SetCullingMask(0x0000000Fu);
|
||||
|
||||
std::stringstream stream;
|
||||
source.Serialize(stream);
|
||||
@@ -46,6 +48,7 @@ TEST(CameraComponent_Test, SerializeRoundTripPreservesClearMode) {
|
||||
target.Deserialize(stream);
|
||||
|
||||
EXPECT_EQ(target.GetClearMode(), CameraClearMode::DepthOnly);
|
||||
EXPECT_EQ(target.GetCullingMask(), 0x0000000Fu);
|
||||
}
|
||||
|
||||
TEST(LightComponent_Test, DefaultValues) {
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
#include <XCEngine/Scene/Scene.h>
|
||||
#include <XCEngine/Core/Math/Vector3.h>
|
||||
|
||||
#include <sstream>
|
||||
|
||||
using namespace XCEngine::Components;
|
||||
using namespace XCEngine::Math;
|
||||
|
||||
@@ -64,6 +66,20 @@ TEST(GameObject_Test, NamedConstructor) {
|
||||
EXPECT_EQ(go.GetName(), "TestObject");
|
||||
}
|
||||
|
||||
TEST(GameObject_Test, Layer_GetSetAndSerializeRoundTrip) {
|
||||
GameObject source("LayeredObject");
|
||||
source.SetLayer(7);
|
||||
|
||||
std::stringstream stream;
|
||||
source.Serialize(stream);
|
||||
|
||||
GameObject target;
|
||||
target.Deserialize(stream);
|
||||
|
||||
EXPECT_EQ(source.GetLayer(), 7u);
|
||||
EXPECT_EQ(target.GetLayer(), 7u);
|
||||
}
|
||||
|
||||
TEST(GameObject_Test, AddComponent_Single) {
|
||||
GameObject go;
|
||||
|
||||
|
||||
@@ -180,6 +180,41 @@ TEST(RenderSceneExtractor_Test, ExtractsBrightestDirectionalLightAsMainLight) {
|
||||
mainLightObject->GetTransform()->GetForward().Normalized() * -1.0f);
|
||||
}
|
||||
|
||||
TEST(RenderSceneExtractor_Test, FiltersVisibleItemsByCameraCullingMask) {
|
||||
Scene scene("CullingMaskScene");
|
||||
|
||||
GameObject* cameraObject = scene.CreateGameObject("Camera");
|
||||
auto* camera = cameraObject->AddComponent<CameraComponent>();
|
||||
camera->SetPrimary(true);
|
||||
camera->SetCullingMask(1u << 5);
|
||||
|
||||
GameObject* visibleObject = scene.CreateGameObject("VisibleLayer5");
|
||||
visibleObject->SetLayer(5);
|
||||
auto* visibleMeshFilter = visibleObject->AddComponent<MeshFilterComponent>();
|
||||
visibleObject->AddComponent<MeshRendererComponent>();
|
||||
Mesh* visibleMesh = CreateTestMesh("Meshes/layer5.mesh");
|
||||
visibleMeshFilter->SetMesh(visibleMesh);
|
||||
|
||||
GameObject* hiddenObject = scene.CreateGameObject("HiddenLayer0");
|
||||
hiddenObject->SetLayer(0);
|
||||
auto* hiddenMeshFilter = hiddenObject->AddComponent<MeshFilterComponent>();
|
||||
hiddenObject->AddComponent<MeshRendererComponent>();
|
||||
Mesh* hiddenMesh = CreateTestMesh("Meshes/layer0.mesh");
|
||||
hiddenMeshFilter->SetMesh(hiddenMesh);
|
||||
|
||||
RenderSceneExtractor extractor;
|
||||
const RenderSceneData sceneData = extractor.Extract(scene, nullptr, 800, 600);
|
||||
|
||||
ASSERT_EQ(sceneData.visibleItems.size(), 1u);
|
||||
EXPECT_EQ(sceneData.visibleItems[0].gameObject, visibleObject);
|
||||
EXPECT_EQ(sceneData.visibleItems[0].mesh, visibleMesh);
|
||||
|
||||
visibleMeshFilter->ClearMesh();
|
||||
hiddenMeshFilter->ClearMesh();
|
||||
delete visibleMesh;
|
||||
delete hiddenMesh;
|
||||
}
|
||||
|
||||
TEST(RenderSceneExtractor_Test, ExtractsSectionLevelVisibleItemsAndSortsByRenderQueue) {
|
||||
Scene scene("SectionScene");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user