X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali%2Futc-Dali-RenderTask.cpp;h=af93507a5946d9bf70184b36ce424421fa24d9e8;hb=refs%2Fchanges%2F75%2F285575%2F2;hp=014311488dd792faa99f62f6ce73c0f9f855e06a;hpb=8ab23366e8533beb2dc21cd66177780e93c62b9f;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/automated-tests/src/dali/utc-Dali-RenderTask.cpp b/automated-tests/src/dali/utc-Dali-RenderTask.cpp index 0143114..af93507 100644 --- a/automated-tests/src/dali/utc-Dali-RenderTask.cpp +++ b/automated-tests/src/dali/utc-Dali-RenderTask.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -174,20 +175,9 @@ Actor CreateRenderableActorSuccess(TestApplication& application, std::string fil return actor; } -Texture CreateTexture(TextureType::Type type, Pixel::Format format, int width, int height) +Texture CreateTexture(void) { - Texture texture = Texture::New(type, format, width, height); - - int bufferSize = width * height * 2; - uint8_t* buffer = reinterpret_cast(malloc(bufferSize)); - PixelData pixelData = PixelData::New(buffer, bufferSize, width, height, format, PixelData::FREE); - texture.Upload(pixelData, 0u, 0u, 0u, 0u, width, height); - return texture; -} - -Texture CreateTexture() -{ - return CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 80, 80); + return Dali::CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 80, 80); } RenderTask CreateRenderTask(TestApplication& application, @@ -646,6 +636,14 @@ int UtcDaliRenderTaskSetExclusive(void) RenderTaskList taskList = application.GetScene().GetRenderTaskList(); + // Creates: + // Root + // Actor1 Layer Layer + // Actor2 Actor3 + + // Task 1 is the default render task, should render from Root, incl Actor2 + // Task 2 uses Actor2 as a source actor (texture id 9) + // Manipulate the GenTextures behaviour, to identify different actors std::vector ids; @@ -1794,7 +1792,7 @@ int UtcDaliRenderTaskSignalFinished(void) tet_infoline("Testing RenderTask::SignalFinished()"); application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE); - TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); + auto& sync = application.GetGraphicsSyncImpl(); CameraActor offscreenCameraActor = CameraActor::New(); @@ -1836,7 +1834,7 @@ int UtcDaliRenderTaskSignalFinished(void) application.SendNotification(); DALI_TEST_CHECK(!finished); - Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); + Integration::GraphicsSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); DALI_TEST_CHECK(lastSyncObj != NULL); application.Render(); @@ -2015,8 +2013,8 @@ int UtcDaliRenderTaskOnce01(void) // SETUP AN OFFSCREEN RENDER TASK application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE); - TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); - TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); + auto& sync = application.GetGraphicsSyncImpl(); + TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); drawTrace.Enable(true); Actor rootActor = Actor::New(); @@ -2036,7 +2034,7 @@ int UtcDaliRenderTaskOnce01(void) DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, true, __LINE__)); - Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); + Integration::GraphicsSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); DALI_TEST_CHECK(lastSyncObj != NULL); sync.SetObjectSynced(lastSyncObj, true); @@ -2053,8 +2051,8 @@ int UtcDaliRenderTaskOnce02(void) // SETUP AN OFFSCREEN RENDER TASK application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE); - TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); - TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); + auto& sync = application.GetGraphicsSyncImpl(); + TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); drawTrace.Enable(true); Actor rootActor = Actor::New(); @@ -2083,7 +2081,7 @@ int UtcDaliRenderTaskOnce02(void) DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, true, __LINE__)); - Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); + Integration::GraphicsSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); DALI_TEST_CHECK(lastSyncObj != NULL); sync.SetObjectSynced(lastSyncObj, true); @@ -2101,8 +2099,8 @@ int UtcDaliRenderTaskOnce03(void) // SETUP A CONTINUOUS OFFSCREEN RENDER TASK application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE); - TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); - TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); + auto& sync = application.GetGraphicsSyncImpl(); + TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); drawTrace.Enable(true); Actor rootActor = Actor::New(); @@ -2123,10 +2121,10 @@ int UtcDaliRenderTaskOnce03(void) newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); application.SendNotification(); - + // drawn sig finished Keep updating DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, true, __LINE__)); - Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); + Integration::GraphicsSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); DALI_TEST_CHECK(lastSyncObj != NULL); sync.SetObjectSynced(lastSyncObj, true); @@ -2145,8 +2143,8 @@ int UtcDaliRenderTaskOnce04(void) // SETUP AN OFFSCREEN RENDER TASK application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE); - TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); - TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); + auto& sync = application.GetGraphicsSyncImpl(); + TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); drawTrace.Enable(true); Actor rootActor = Actor::New(); @@ -2177,10 +2175,10 @@ int UtcDaliRenderTaskOnce04(void) newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); application.SendNotification(); - + // FAILS drawn sig finished Keep updating DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, true, __LINE__)); - Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); + Integration::GraphicsSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); DALI_TEST_CHECK(lastSyncObj != NULL); sync.SetObjectSynced(lastSyncObj, true); @@ -2340,8 +2338,8 @@ int UtcDaliRenderTaskOnceNoSync04(void) application.SendNotification(); DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, false, __LINE__)); - TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); - Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); + auto& sync = application.GetGraphicsSyncImpl(); + Integration::GraphicsSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); DALI_TEST_CHECK(lastSyncObj == NULL); newTask.SetRefreshRate(RenderTask::REFRESH_ONCE); @@ -2467,7 +2465,7 @@ int UtcDaliRenderTaskFinishInvisibleSourceActor(void) tet_infoline("Testing RenderTask::FinishInvisibleSourceActor()"); application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE); - TestGlSyncAbstraction& sync = application.GetGlSyncAbstraction(); + auto& sync = application.GetGraphicsSyncImpl(); CameraActor offscreenCameraActor = CameraActor::New(); @@ -2516,7 +2514,7 @@ int UtcDaliRenderTaskFinishInvisibleSourceActor(void) application.SendNotification(); DALI_TEST_CHECK(!finished); - Integration::GlSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); + Integration::GraphicsSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); DALI_TEST_CHECK(lastSyncObj != NULL); application.Render(); @@ -3482,3 +3480,339 @@ int UtcDaliRenderTaskClippingMode02(void) END_TEST; } + +int UtcDaliRenderTaskUploadOnly(void) +{ + TestApplication application; + + tet_infoline("Testing RenderTask Render Once GlSync, using loaded image"); + + // SETUP AN OFFSCREEN RENDER TASK + application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE); + auto& sync = application.GetGraphicsSyncImpl(); + TraceCallStack& drawTrace = application.GetGlAbstraction().GetDrawTrace(); + drawTrace.Enable(true); + + Actor rootActor = Actor::New(); + application.GetScene().Add(rootActor); + + CameraActor offscreenCameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT)); + application.GetScene().Add(offscreenCameraActor); + Actor secondRootActor = CreateRenderableActorSuccess(application, "aFile.jpg"); + + application.GetScene().Add(secondRootActor); + + RenderTask newTask = CreateRenderTask(application, offscreenCameraActor, rootActor, secondRootActor, RenderTask::REFRESH_ONCE, true); + bool finished = false; + RenderTaskFinished renderTaskFinished(finished); + newTask.FinishedSignal().Connect(&application, renderTaskFinished); + application.SendNotification(); + + DALI_TEST_CHECK(UpdateRender(application, drawTrace, true, finished, false, true, __LINE__)); + + Integration::GraphicsSyncAbstraction::SyncObject* lastSyncObj = sync.GetLastSyncObject(); + DALI_TEST_CHECK(lastSyncObj != NULL); + sync.SetObjectSynced(lastSyncObj, true); + + application.SendNotification(); + application.Render(16, nullptr, true); + + DALI_TEST_CHECK(!finished); + + application.Render(16, nullptr, true); + application.SendNotification(); + + DALI_TEST_CHECK(!finished); + END_TEST; +} + +int UtcDaliRenderTaskSetGetViewportGuideActor(void) +{ + TestApplication application; + tet_infoline("Testing RenderTask with Set/Get ViewportGuideActor"); + + Stage stage = Stage::GetCurrent(); + Vector2 stageSize(stage.GetSize()); + + Actor blue = Actor::New(); + blue[Dali::Actor::Property::NAME] = "Blue"; + blue[Dali::Actor::Property::ANCHOR_POINT] = AnchorPoint::CENTER; + blue[Dali::Actor::Property::PARENT_ORIGIN] = ParentOrigin::CENTER; + blue[Dali::Actor::Property::SIZE] = Vector2(300, 300); + blue[Dali::Actor::Property::POSITION] = Vector2(0, 0); + + stage.Add(blue); + + RenderTaskList renderTaskList = stage.GetRenderTaskList(); + RenderTask renderTask = renderTaskList.CreateTask(); + + renderTask.SetViewportGuideActor(blue); + + Actor actor = renderTask.GetViewportGuideActor(); + DALI_TEST_EQUALS(actor, blue, TEST_LOCATION); + + renderTask.ResetViewportGuideActor(); + actor = renderTask.GetViewportGuideActor(); + + DALI_TEST_CHECK(!actor); + + END_TEST; +} + +int UtcDaliRenderTaskViewportGuideActor(void) +{ + TestApplication application; + tet_infoline("Testing RenderTask with ViewportGuideActor"); + + Stage stage = Stage::GetCurrent(); + Vector2 stageSize(stage.GetSize()); + + Actor blue = Actor::New(); + blue[Dali::Actor::Property::NAME] = "Blue"; + blue[Dali::Actor::Property::ANCHOR_POINT] = AnchorPoint::CENTER; + blue[Dali::Actor::Property::PARENT_ORIGIN] = ParentOrigin::CENTER; + blue[Dali::Actor::Property::SIZE] = Vector2(300, 300); + blue[Dali::Actor::Property::POSITION] = Vector2(0, 0); + + Geometry geometry = Geometry::New(); + Shader shader = Shader::New("vertexSrc", "fragmentSrc"); + Renderer renderer = Renderer::New(geometry, shader); + blue.AddRenderer(renderer); + + stage.Add(blue); + + RenderTaskList renderTaskList = stage.GetRenderTaskList(); + RenderTask renderTask = renderTaskList.CreateTask(); + + Dali::CameraActor cameraActor = Dali::CameraActor::New(stageSize); + cameraActor[Dali::Actor::Property::ANCHOR_POINT] = AnchorPoint::CENTER; + cameraActor[Dali::Actor::Property::PARENT_ORIGIN] = ParentOrigin::CENTER; + stage.Add(cameraActor); + + renderTask.SetExclusive(true); + renderTask.SetInputEnabled(true); + renderTask.SetCameraActor(cameraActor); + renderTask.SetSourceActor(blue); + renderTask.SetViewportGuideActor(blue); + + // Render and notify + application.SendNotification(); + application.Render(16); + + Vector2 viewportPosition = renderTask.GetCurrentViewportPosition(); + Vector2 viewportSize = renderTask.GetCurrentViewportSize(); + + DALI_TEST_EQUALS(viewportSize, Vector2(300, 300), TEST_LOCATION); + DALI_TEST_EQUALS(viewportPosition, Vector2(90, 250), TEST_LOCATION); + + END_TEST; +} + +int UtcDaliRenderTaskViewportGuideActor02(void) +{ + TestApplication application( + TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_HORIZONTAL_DPI, + TestApplication::DEFAULT_VERTICAL_DPI, + true, + true); + TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); + TraceCallStack& callStack = glAbstraction.GetViewportTrace(); + glAbstraction.EnableViewportCallTrace(true); + tet_infoline("Testing RenderTask with ViewportGuideActor02"); + + Stage stage = Stage::GetCurrent(); + Vector2 stageSize(stage.GetSize()); + + // Render and notify + application.SendNotification(); + application.Render(16); + glAbstraction.ResetViewportCallStack(); + + Geometry geometry = Geometry::New(); + Shader shader = Shader::New("vertexSrc", "fragmentSrc"); + Renderer renderer = Renderer::New(geometry, shader); + + Actor blue = Actor::New(); + blue[Dali::Actor::Property::NAME] = "Blue"; + blue[Dali::Actor::Property::ANCHOR_POINT] = AnchorPoint::TOP_LEFT; + blue[Dali::Actor::Property::PARENT_ORIGIN] = ParentOrigin::TOP_LEFT; + blue[Dali::Actor::Property::SIZE] = Vector2(400, 300); + blue[Dali::Actor::Property::POSITION] = Vector2(100, 50); + blue.AddRenderer(renderer); + stage.Add(blue); + + Actor green = Actor::New(); + green[Dali::Actor::Property::NAME] = "Green"; + green[Dali::Actor::Property::ANCHOR_POINT] = AnchorPoint::TOP_LEFT; + green[Dali::Actor::Property::PARENT_ORIGIN] = ParentOrigin::TOP_LEFT; + green[Dali::Actor::Property::SIZE] = Vector2(400, 300); + green[Dali::Actor::Property::POSITION] = Vector2(100, 50); + green.AddRenderer(renderer); + stage.Add(green); + + RenderTaskList renderTaskList = stage.GetRenderTaskList(); + RenderTask renderTask = renderTaskList.CreateTask(); + + Dali::CameraActor cameraActor = Dali::CameraActor::New(stageSize); + cameraActor[Dali::Actor::Property::ANCHOR_POINT] = AnchorPoint::CENTER; + cameraActor[Dali::Actor::Property::PARENT_ORIGIN] = ParentOrigin::CENTER; + stage.Add(cameraActor); + + renderTask.SetExclusive(true); + renderTask.SetInputEnabled(true); + renderTask.SetCameraActor(cameraActor); + renderTask.SetSourceActor(blue); + renderTask.SetViewportGuideActor(blue); + + application.GetScene().SurfaceRotated(static_cast(TestApplication::DEFAULT_SURFACE_HEIGHT), + static_cast(TestApplication::DEFAULT_SURFACE_WIDTH), + 90, + 0); + + // Render and notify + application.SendNotification(); + application.Render(16); + + std::string viewportParams1("50, 100, 300, 400"); // to match newSize + std::string viewportParams2("0, 0, 480, 800"); // to match newSize + + // Check that the viewport is handled properly + DALI_TEST_CHECK(callStack.FindIndexFromMethodAndParams("Viewport", viewportParams1) >= 0); + DALI_TEST_CHECK(callStack.FindIndexFromMethodAndParams("Viewport", viewportParams2) >= 0); + + END_TEST; +} + +int UtcDaliRenderTaskSetPartialUpdate(void) +{ + TestApplication application( + TestApplication::DEFAULT_SURFACE_WIDTH, + TestApplication::DEFAULT_SURFACE_HEIGHT, + TestApplication::DEFAULT_HORIZONTAL_DPI, + TestApplication::DEFAULT_VERTICAL_DPI, + true, + true); + + tet_infoline("Check the damaged rects with render task"); + + const TestGlAbstraction::ScissorParams& glScissorParams(application.GetGlAbstraction().GetScissorParams()); + + Actor actor = CreateRenderableActor(); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f)); + actor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); + application.GetScene().Add(actor); + + Actor rootActor = CreateRenderableActor(); + rootActor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + rootActor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f)); + rootActor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f)); + rootActor.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); + application.GetScene().Add(rootActor); + + CameraActor cameraActor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT)); + cameraActor.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); + cameraActor.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + application.GetScene().Add(cameraActor); + + Texture frameBufferTexture = Texture::New(TextureType::TEXTURE_2D, Pixel::RGB888, 16, 16); + FrameBuffer frameBuffer = FrameBuffer::New(frameBufferTexture.GetWidth(), frameBufferTexture.GetHeight()); + frameBuffer.AttachColorTexture(frameBufferTexture); + + // Create a RenderTask and set a framebuffer + RenderTaskList taskList = application.GetScene().GetRenderTaskList(); + RenderTask newTask = taskList.CreateTask(); + newTask.SetCameraActor(cameraActor); + newTask.SetSourceActor(rootActor); + newTask.SetInputEnabled(false); + newTask.SetClearColor(Vector4(0.f, 0.f, 0.f, 0.f)); + newTask.SetClearEnabled(true); + newTask.SetExclusive(true); + newTask.SetRefreshRate(RenderTask::REFRESH_ALWAYS); + newTask.SetFrameBuffer(frameBuffer); + + application.SendNotification(); + + std::vector> damagedRects; + Rect clippingRect; + + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + // Full update if there is off-screen rendering + clippingRect = Rect(0, 0, TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + + application.RenderWithPartialUpdate(damagedRects, clippingRect); + DALI_TEST_EQUALS(clippingRect.x, glScissorParams.x, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.y, glScissorParams.y, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.width, glScissorParams.width, TEST_LOCATION); + DALI_TEST_EQUALS(clippingRect.height, glScissorParams.height, TEST_LOCATION); + + // Remove framebuffer + newTask.SetFrameBuffer(FrameBuffer()); + + application.SendNotification(); + + damagedRects.clear(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + // Full update + clippingRect = Rect(0, 0, TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + // Set invalid viewport of the render task + newTask.SetViewportSize(Vector2(-100.0f, -100.0f)); + + application.SendNotification(); + + damagedRects.clear(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + // Full update because the camera orientation is changed + clippingRect = Rect(0, 0, TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + newTask.SetViewportSize(Vector2(0.0f, 0.0f)); + + // Change orientation of offscreen camera + cameraActor.SetProperty(Actor::Property::ORIENTATION, Quaternion(Degree(90.0f), Vector3::XAXIS)); + + application.SendNotification(); + + damagedRects.clear(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + // Full update because the camera orientation is changed + clippingRect = Rect(0, 0, TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + // Change camera target + cameraActor.SetTargetPosition(Vector3(10.0f, 10.0f, 0.0f)); + + application.SendNotification(); + + damagedRects.clear(); + application.PreRenderWithPartialUpdate(TestApplication::RENDER_FRAME_INTERVAL, nullptr, damagedRects); + + // Full update because the camera is moved + clippingRect = Rect(0, 0, TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT); + DALI_TEST_EQUALS(damagedRects.size(), 1, TEST_LOCATION); + DALI_TEST_EQUALS>(clippingRect, damagedRects[0], TEST_LOCATION); + + application.RenderWithPartialUpdate(damagedRects, clippingRect); + + END_TEST; +}