Add renderer phase A textured scene path
This commit is contained in:
101
tests/Rendering/unit/test_render_scene_extractor.cpp
Normal file
101
tests/Rendering/unit/test_render_scene_extractor.cpp
Normal file
@@ -0,0 +1,101 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <XCEngine/Components/CameraComponent.h>
|
||||
#include <XCEngine/Components/GameObject.h>
|
||||
#include <XCEngine/Components/MeshFilterComponent.h>
|
||||
#include <XCEngine/Components/MeshRendererComponent.h>
|
||||
#include <XCEngine/Core/Asset/IResource.h>
|
||||
#include <XCEngine/Core/Math/Vector3.h>
|
||||
#include <XCEngine/Rendering/RenderSceneExtractor.h>
|
||||
#include <XCEngine/Scene/Scene.h>
|
||||
#include <XCEngine/Resources/Mesh/Mesh.h>
|
||||
|
||||
using namespace XCEngine::Components;
|
||||
using namespace XCEngine::Math;
|
||||
using namespace XCEngine::Rendering;
|
||||
using namespace XCEngine::Resources;
|
||||
|
||||
namespace {
|
||||
|
||||
Mesh* CreateTestMesh(const char* path) {
|
||||
auto* mesh = new Mesh();
|
||||
IResource::ConstructParams params = {};
|
||||
params.name = "TestMesh";
|
||||
params.path = path;
|
||||
params.guid = ResourceGUID::Generate(path);
|
||||
mesh->Initialize(params);
|
||||
return mesh;
|
||||
}
|
||||
|
||||
TEST(RenderSceneExtractor_Test, SelectsHighestDepthPrimaryCameraAndVisibleObjects) {
|
||||
Scene scene("RenderScene");
|
||||
|
||||
GameObject* cameraObjectA = scene.CreateGameObject("CameraA");
|
||||
auto* cameraA = cameraObjectA->AddComponent<CameraComponent>();
|
||||
cameraA->SetPrimary(true);
|
||||
cameraA->SetDepth(0.0f);
|
||||
|
||||
GameObject* cameraObjectB = scene.CreateGameObject("CameraB");
|
||||
auto* cameraB = cameraObjectB->AddComponent<CameraComponent>();
|
||||
cameraB->SetPrimary(true);
|
||||
cameraB->SetDepth(5.0f);
|
||||
cameraObjectB->GetTransform()->SetLocalPosition(Vector3(2.0f, 3.0f, 4.0f));
|
||||
|
||||
GameObject* visibleObject = scene.CreateGameObject("VisibleQuad");
|
||||
visibleObject->GetTransform()->SetLocalPosition(Vector3(1.0f, 2.0f, 3.0f));
|
||||
auto* meshFilter = visibleObject->AddComponent<MeshFilterComponent>();
|
||||
visibleObject->AddComponent<MeshRendererComponent>();
|
||||
Mesh* visibleMesh = CreateTestMesh("Meshes/visible.mesh");
|
||||
meshFilter->SetMesh(visibleMesh);
|
||||
|
||||
GameObject* hiddenObject = scene.CreateGameObject("HiddenQuad");
|
||||
hiddenObject->SetActive(false);
|
||||
auto* hiddenMeshFilter = hiddenObject->AddComponent<MeshFilterComponent>();
|
||||
hiddenObject->AddComponent<MeshRendererComponent>();
|
||||
Mesh* hiddenMesh = CreateTestMesh("Meshes/hidden.mesh");
|
||||
hiddenMeshFilter->SetMesh(hiddenMesh);
|
||||
|
||||
RenderSceneExtractor extractor;
|
||||
const RenderSceneData sceneData = extractor.Extract(scene, nullptr, 1280, 720);
|
||||
|
||||
ASSERT_TRUE(sceneData.HasCamera());
|
||||
EXPECT_EQ(sceneData.camera, cameraB);
|
||||
EXPECT_EQ(sceneData.cameraData.viewportWidth, 1280u);
|
||||
EXPECT_EQ(sceneData.cameraData.viewportHeight, 720u);
|
||||
EXPECT_EQ(sceneData.cameraData.worldPosition, Vector3(2.0f, 3.0f, 4.0f));
|
||||
|
||||
ASSERT_EQ(sceneData.visibleObjects.size(), 1u);
|
||||
EXPECT_EQ(sceneData.visibleObjects[0].gameObject, visibleObject);
|
||||
EXPECT_EQ(sceneData.visibleObjects[0].mesh, visibleMesh);
|
||||
EXPECT_EQ(sceneData.visibleObjects[0].localToWorld.GetTranslation(), Vector3(1.0f, 2.0f, 3.0f));
|
||||
|
||||
meshFilter->ClearMesh();
|
||||
hiddenMeshFilter->ClearMesh();
|
||||
delete visibleMesh;
|
||||
delete hiddenMesh;
|
||||
}
|
||||
|
||||
TEST(RenderSceneExtractor_Test, OverrideCameraTakesPriority) {
|
||||
Scene scene("OverrideScene");
|
||||
|
||||
GameObject* primaryObject = scene.CreateGameObject("PrimaryCamera");
|
||||
auto* primaryCamera = primaryObject->AddComponent<CameraComponent>();
|
||||
primaryCamera->SetPrimary(true);
|
||||
primaryCamera->SetDepth(10.0f);
|
||||
|
||||
GameObject* overrideObject = scene.CreateGameObject("OverrideCamera");
|
||||
auto* overrideCamera = overrideObject->AddComponent<CameraComponent>();
|
||||
overrideCamera->SetPrimary(false);
|
||||
overrideCamera->SetDepth(-1.0f);
|
||||
|
||||
RenderSceneExtractor extractor;
|
||||
const RenderSceneData sceneData = extractor.Extract(scene, overrideCamera, 640, 480);
|
||||
|
||||
ASSERT_TRUE(sceneData.HasCamera());
|
||||
EXPECT_EQ(sceneData.camera, overrideCamera);
|
||||
EXPECT_NE(sceneData.camera, primaryCamera);
|
||||
EXPECT_EQ(sceneData.cameraData.viewportWidth, 640u);
|
||||
EXPECT_EQ(sceneData.cameraData.viewportHeight, 480u);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
Reference in New Issue
Block a user