fix: compose camera viewport within parent render area
This commit is contained in:
@@ -537,6 +537,54 @@ TEST(SceneRenderer_Test, ResolvesNormalizedCameraViewportRectToPerRequestRenderA
|
||||
EXPECT_EQ(renderArea.height, 240);
|
||||
}
|
||||
|
||||
TEST(SceneRenderer_Test, ComposesCameraViewportRectWithinExistingSurfaceRenderArea) {
|
||||
Scene scene("SceneRendererNestedViewportRectScene");
|
||||
|
||||
GameObject* cameraObject = scene.CreateGameObject("Camera");
|
||||
auto* camera = cameraObject->AddComponent<CameraComponent>();
|
||||
camera->SetPrimary(true);
|
||||
camera->SetDepth(2.0f);
|
||||
camera->SetViewportRect(XCEngine::Math::Rect(0.25f, 0.1f, 0.5f, 0.4f));
|
||||
|
||||
RenderSurface surface(800, 600);
|
||||
surface.SetRenderArea(XCEngine::Math::RectInt(100, 50, 400, 300));
|
||||
|
||||
SceneRenderer renderer;
|
||||
const std::vector<CameraRenderRequest> requests =
|
||||
renderer.BuildRenderRequests(scene, nullptr, CreateValidContext(), surface);
|
||||
|
||||
ASSERT_EQ(requests.size(), 1u);
|
||||
const XCEngine::Math::RectInt renderArea = requests[0].surface.GetRenderArea();
|
||||
EXPECT_EQ(renderArea.x, 200);
|
||||
EXPECT_EQ(renderArea.y, 80);
|
||||
EXPECT_EQ(renderArea.width, 200);
|
||||
EXPECT_EQ(renderArea.height, 120);
|
||||
}
|
||||
|
||||
TEST(SceneRenderer_Test, PreservesExistingSurfaceRenderAreaForFullViewportCamera) {
|
||||
Scene scene("SceneRendererFullViewportNestedSurfaceScene");
|
||||
|
||||
GameObject* cameraObject = scene.CreateGameObject("Camera");
|
||||
auto* camera = cameraObject->AddComponent<CameraComponent>();
|
||||
camera->SetPrimary(true);
|
||||
camera->SetDepth(2.0f);
|
||||
camera->SetViewportRect(XCEngine::Math::Rect(0.0f, 0.0f, 1.0f, 1.0f));
|
||||
|
||||
RenderSurface surface(1024, 768);
|
||||
surface.SetRenderArea(XCEngine::Math::RectInt(80, 120, 320, 240));
|
||||
|
||||
SceneRenderer renderer;
|
||||
const std::vector<CameraRenderRequest> requests =
|
||||
renderer.BuildRenderRequests(scene, nullptr, CreateValidContext(), surface);
|
||||
|
||||
ASSERT_EQ(requests.size(), 1u);
|
||||
const XCEngine::Math::RectInt renderArea = requests[0].surface.GetRenderArea();
|
||||
EXPECT_EQ(renderArea.x, 80);
|
||||
EXPECT_EQ(renderArea.y, 120);
|
||||
EXPECT_EQ(renderArea.width, 320);
|
||||
EXPECT_EQ(renderArea.height, 240);
|
||||
}
|
||||
|
||||
TEST(CameraRenderer_Test, UsesResolvedRenderAreaForCameraViewportDimensions) {
|
||||
Scene scene("CameraRendererViewportRectScene");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user