END_TEST;
}
+int UtcDaliCoreRemoveSceneObjectAndClearSceneN(void)
+{
+ TestApplication application;
+ tet_infoline("Testing Dali::Integration::Core::ClearScene with scene object removed scene");
+
+ application.GetScene().SetBackgroundColor(Color::MAGENTA);
+
+ // Dummy rendering several frames.
+ application.SendNotification();
+ application.Render();
+ application.SendNotification();
+ application.Render();
+
+ Dali::Integration::Scene newScene = Dali::Integration::Scene::New(Size(480.0f, 800.0f));
+ DALI_TEST_CHECK(newScene);
+ application.AddScene(newScene);
+
+ // 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();
+
+ DALI_TEST_CHECK(!cmdTrace.FindMethod("BeginRenderPass"));
+
+ auto& core = application.GetCore();
+
+ // Create BeginRenderPass both scenes
+ core.ClearScene(newScene);
+ DALI_TEST_CHECK(cmdTrace.FindMethod("BeginRenderPass"));
+ cmdTrace.Reset();
+
+ core.ClearScene(application.GetScene());
+ DALI_TEST_CHECK(cmdTrace.FindMethod("BeginRenderPass"));
+
+ // Dummy rendering several frames.
+ application.SendNotification();
+ application.Render();
+ application.SendNotification();
+ application.Render();
+
+ cmdTrace.Reset();
+
+ newScene.RemoveSceneObject(); // Scene's scene graph lifecycle is NOT managed by scene handle
+
+ DALI_TEST_CHECK(!cmdTrace.FindMethod("BeginRenderPass"));
+
+ // 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();
+
+ newScene.Discard();
+ newScene.Reset();
+
+ application.SendNotification();
+ application.Render(0);
+
+ END_TEST;
+}
+
int UtcDaliCoreClearSceneN(void)
{
TestApplication application;
if(!sceneObject)
{
// May not be a scene object if the window is being removed.
+ DALI_LOG_ERROR("Scene was empty handle. Skip PreRenderScene\n");
return;
}
return;
}
- if(!sceneObject || sceneObject->IsRenderingSkipped())
+ if(sceneObject->IsRenderingSkipped())
{
// We don't need to calculate dirty rects
- if(!sceneObject)
- {
- DALI_LOG_ERROR("Scene was empty handle. Skip pre-rendering\n");
- }
- else
- {
- DALI_LOG_RELEASE_INFO("RenderingSkipped was set true. Skip pre-rendering\n");
- }
+ DALI_LOG_RELEASE_INFO("RenderingSkipped was set true. Skip pre-rendering\n");
return;
}
{
RenderItem& item = renderList->GetItem(listIndex);
+ // For now, we don't allow to rendering nodeless renderer.
+ DALI_ASSERT_DEBUG(item.mNode && "RenderItem should have node!");
+
// Get NodeInformation as const l-value, to reduce memory access operations.
const SceneGraph::PartialRenderingData::NodeInfomations& nodeInfo = item.GetPartialRenderingDataNodeInfomations();
DirtyRectKey dirtyRectKey(item.mNode, item.mRenderer);
// If the item refers to updated node or renderer.
if(item.mIsUpdated ||
- (item.mNode &&
- (item.mNode->Updated() || (item.mRenderer && item.mRenderer->Updated()))))
+ (item.mNode->Updated() || (item.mRenderer && item.mRenderer->Updated())))
{
item.mIsUpdated = false; /// DevNote : Reset flag here, since RenderItem could be reused by renderList.ReuseCachedItems().
SceneGraph::Scene* sceneObject = sceneInternal.GetSceneObject();
if(!sceneObject)
{
+ DALI_LOG_ERROR("Scene was empty handle. Skip ClearScene\n");
return;
}