From 696b3a6bd6d527d2eadec1103c58e4751f76a980 Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Mon, 24 Mar 2025 19:30:59 +0900 Subject: [PATCH] Ensure to SceneObject initialized Change-Id: Ia8a6a842840def7a758adaf45f0957e0a6a171de Signed-off-by: Eunki, Hong --- .../dali-internal/utc-Dali-Internal-Core.cpp | 49 +++++++++++++++++++ .../internal/render/common/render-manager.cpp | 7 +++ 2 files changed, 56 insertions(+) diff --git a/automated-tests/src/dali-internal/utc-Dali-Internal-Core.cpp b/automated-tests/src/dali-internal/utc-Dali-Internal-Core.cpp index 971ff2300..8791c40f7 100644 --- a/automated-tests/src/dali-internal/utc-Dali-Internal-Core.cpp +++ b/automated-tests/src/dali-internal/utc-Dali-Internal-Core.cpp @@ -249,3 +249,52 @@ int UtcDaliCoreClearScene(void) DALI_TEST_CHECK(contTrace.FindMethod("PresentRenderTarget")); END_TEST; } + +int UtcDaliCoreClearSceneN(void) +{ + TestApplication application; + tet_infoline("Testing Dali::Integration::Core::ClearScene with invalid scene"); + + application.GetScene().SetBackgroundColor(Color::MAGENTA); + + // Dummy rendering several frames. + application.SendNotification(); + application.Render(); + application.SendNotification(); + application.Render(); + + TestGraphicsController& controller = application.GetGraphicsController(); + auto& cmdTrace = controller.mCommandBufferCallStack; + + cmdTrace.Enable(true); + cmdTrace.EnableLogging(true); + + cmdTrace.Reset(); + + // Create new scene befoer Render(), and after SendNotification() + application.SendNotification(); + Dali::Integration::Scene newScene = Dali::Integration::Scene::New(Size(480.0f, 800.0f)); + application.Render(); + + DALI_TEST_CHECK(!cmdTrace.FindMethod("BeginRenderPass")); + + auto& core = application.GetCore(); + + // Do not create BeginRenderPass for invalid scene + core.ClearScene(newScene); + DALI_TEST_CHECK(!cmdTrace.FindMethod("BeginRenderPass")); + + core.ClearScene(application.GetScene()); + DALI_TEST_CHECK(cmdTrace.FindMethod("BeginRenderPass")); + + cmdTrace.Reset(); + + // Frame update once. Now newScene is valid + application.SendNotification(); + application.Render(); + + core.ClearScene(newScene); + DALI_TEST_CHECK(cmdTrace.FindMethod("BeginRenderPass")); + + END_TEST; +} diff --git a/dali/internal/render/common/render-manager.cpp b/dali/internal/render/common/render-manager.cpp index 44a229220..d9d6bac34 100644 --- a/dali/internal/render/common/render-manager.cpp +++ b/dali/internal/render/common/render-manager.cpp @@ -1396,6 +1396,13 @@ void RenderManager::ClearScene(Integration::Scene scene) return; } + // TODO : Optimize might be required here! For now, the number of connected scene is small. So it looks enough. + auto iter = std::find(mImpl->sceneContainer.begin(), mImpl->sceneContainer.end(), sceneObject); + if(iter == mImpl->sceneContainer.end()) + { + return; + } + auto& currentClearValues = sceneObject->GetGraphicsRenderPassClearValues(); DALI_ASSERT_DEBUG(!currentClearValues.empty()); -- 2.34.1