sceneView.UseFramebuffer(true);
DALI_TEST_EQUALS(baseRenderTaskCount + 1u, taskList.GetTaskCount(), TEST_LOCATION);
- DALI_TEST_EQUALS(0, taskList.GetTask(baseRenderTaskCount - 1u).GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN, taskList.GetTask(baseRenderTaskCount - 1u).GetOrderIndex(), TEST_LOCATION);
DALI_TEST_EQUALS(SCENE_ORDER_INDEX, taskList.GetTask(baseRenderTaskCount).GetOrderIndex(), TEST_LOCATION);
Scene3D::Light light = Scene3D::Light::New();
Dali::DevelActor::LookAt(light, Vector3(1.0f, 0.0f, 0.0f));
light.EnableShadow(true);
- tet_printf("Do not create rendertask until light is scene on");
+ tet_printf("Do not create rendertask until light is scene on\n");
DALI_TEST_EQUALS(baseRenderTaskCount + 1u, taskList.GetTaskCount(), TEST_LOCATION);
sceneView.Add(light);
- tet_printf("Create shadowmap rendertask after light is scene on");
+ tet_printf("Create shadowmap rendertask after light is scene on\n");
DALI_TEST_EQUALS(baseRenderTaskCount + 2u, taskList.GetTaskCount(), TEST_LOCATION);
- DALI_TEST_EQUALS(0, taskList.GetTask(baseRenderTaskCount - 1u).GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN, taskList.GetTask(baseRenderTaskCount - 1u).GetOrderIndex(), TEST_LOCATION);
DALI_TEST_EQUALS(SCENE_ORDER_INDEX, taskList.GetTask(baseRenderTaskCount).GetOrderIndex(), TEST_LOCATION);
- DALI_TEST_EQUALS(SHADOW_ORDER_INDEX, taskList.GetTask(baseRenderTaskCount + 1u).GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(0, taskList.GetTask(baseRenderTaskCount + 1u).GetOrderIndex(), TEST_LOCATION);
application.SendNotification();
- tet_printf("Check render task list sorted");
- DALI_TEST_EQUALS(SHADOW_ORDER_INDEX, taskList.GetTask(baseRenderTaskCount).GetOrderIndex(), TEST_LOCATION);
- DALI_TEST_EQUALS(SCENE_ORDER_INDEX, taskList.GetTask(baseRenderTaskCount + 1u).GetOrderIndex(), TEST_LOCATION);
+ tet_printf("Check render task list sorted\n");
+ DALI_TEST_EQUALS(INT32_MIN, taskList.GetTask(baseRenderTaskCount).GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 1, taskList.GetTask(baseRenderTaskCount + 1u).GetOrderIndex(), TEST_LOCATION);
light.EnableShadow(false);
- tet_printf("Check shadowmap rendertask removed");
+ tet_printf("Check shadowmap rendertask removed\n");
+
DALI_TEST_EQUALS(baseRenderTaskCount + 1u, taskList.GetTaskCount(), TEST_LOCATION);
- DALI_TEST_EQUALS(0, taskList.GetTask(baseRenderTaskCount - 1u).GetOrderIndex(), TEST_LOCATION);
- DALI_TEST_EQUALS(SCENE_ORDER_INDEX, taskList.GetTask(baseRenderTaskCount).GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN, taskList.GetTask(baseRenderTaskCount - 1u).GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 1, taskList.GetTask(baseRenderTaskCount).GetOrderIndex(), TEST_LOCATION);
END_TEST;
}
\ No newline at end of file
DALI_TEST_EQUALS(panel.IsShadowReceiving(), false, TEST_LOCATION);
END_TEST;
-}
\ No newline at end of file
+}
+
+int UtcDaliPanelRenderTaskOrdering(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline("UtcDaliPanelRenderTaskOrdering");
+
+ Integration::Scene scene = application.GetScene();
+ RenderTaskList taskList = scene.GetRenderTaskList();
+
+ uint32_t defaultTaskCount = taskList.GetTaskCount();
+ RenderTask defaultRenderTask = taskList.GetTask(defaultTaskCount - 1);
+ tet_printf("default Task Cnt : %d\n", defaultTaskCount);
+
+ Scene3D::SceneView sceneView = Scene3D::SceneView::New();
+ sceneView.UseFramebuffer(true);
+ scene.Add(sceneView);
+
+ uint32_t afterSceneViewTaskCount = taskList.GetTaskCount();
+ RenderTask sceneViewRenderTask = taskList.GetTask(afterSceneViewTaskCount - 1);
+ tet_printf("after SceneView Task cnt : %d\n", afterSceneViewTaskCount);
+ DALI_TEST_CHECK(afterSceneViewTaskCount == defaultTaskCount + 1);
+
+ Scene3D::Panel panel = Scene3D::Panel::New();
+ sceneView.Add(panel);
+
+ uint32_t afterPanelTaskCount = taskList.GetTaskCount();
+ RenderTask panelRenderTask = taskList.GetTask(afterPanelTaskCount - 1);
+ tet_printf("after Panel Task cnt : %d\n", afterPanelTaskCount);
+ DALI_TEST_CHECK(afterPanelTaskCount == afterSceneViewTaskCount + 1);
+
+ Control control1 = Control::New();
+ control1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+ control1.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
+ control1.SetRenderEffect(BackgroundBlurEffect::New());
+
+ panel.Add(control1);
+
+ uint32_t afterBlurEffectTaskCount = taskList.GetTaskCount();
+ RenderTask blurSourceRenderTask = taskList.GetTask(afterBlurEffectTaskCount - 3);
+ RenderTask blurHorizontalRenderTask = taskList.GetTask(afterBlurEffectTaskCount - 2);
+ RenderTask blurVerticalRenderTask = taskList.GetTask(afterBlurEffectTaskCount - 1);
+ tet_printf("after blurEffect Task cnt : %d\n", afterBlurEffectTaskCount);
+ DALI_TEST_CHECK(afterBlurEffectTaskCount == afterPanelTaskCount + 3);
+
+ tet_printf("defaultRenderTask order : %d\n", defaultRenderTask.GetOrderIndex());
+ tet_printf("sceneViewRenderTask order : %d\n", sceneViewRenderTask.GetOrderIndex());
+ tet_printf("panelRenderTask order : %d\n", panelRenderTask.GetOrderIndex());
+ tet_printf("blurSourceRenderTask order : %d\n", blurSourceRenderTask.GetOrderIndex());
+ tet_printf("blurHorizontalRenderTask order : %d\n", blurHorizontalRenderTask.GetOrderIndex());
+ tet_printf("blurVerticalRenderTask order : %d\n", blurVerticalRenderTask.GetOrderIndex());
+
+ DALI_TEST_EQUALS(INT32_MIN, defaultRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(0, sceneViewRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(90, panelRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(0, blurSourceRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(0, blurHorizontalRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(0, blurVerticalRenderTask.GetOrderIndex(), TEST_LOCATION);
+
+ application.SendNotification();
+
+ tet_printf("defaultRenderTask order : %d\n", defaultRenderTask.GetOrderIndex());
+ tet_printf("sceneViewRenderTask order : %d\n", sceneViewRenderTask.GetOrderIndex());
+ tet_printf("panelRenderTask order : %d\n", panelRenderTask.GetOrderIndex());
+ tet_printf("blurSourceRenderTask order : %d\n", blurSourceRenderTask.GetOrderIndex());
+ tet_printf("blurHorizontalRenderTask order : %d\n", blurHorizontalRenderTask.GetOrderIndex());
+ tet_printf("blurVerticalRenderTask order : %d\n", blurVerticalRenderTask.GetOrderIndex());
+
+ DALI_TEST_EQUALS(INT32_MIN, defaultRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 4, sceneViewRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 3, panelRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN, blurSourceRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 1, blurHorizontalRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 2, blurVerticalRenderTask.GetOrderIndex(), TEST_LOCATION);
+
+ END_TEST;
+}
END_TEST;
}
+
+int UtcDaliSceneViewRenderTaskOrdering(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline("UtcDaliPanelRenderTaskOrdering");
+
+ Integration::Scene scene = application.GetScene();
+ RenderTaskList taskList = scene.GetRenderTaskList();
+
+ uint32_t defaultTaskCount = taskList.GetTaskCount();
+ RenderTask defaultRenderTask = taskList.GetTask(defaultTaskCount - 1);
+ tet_printf("default Task Cnt : %d\n", defaultTaskCount);
+
+ Scene3D::SceneView sceneView = Scene3D::SceneView::New();
+ sceneView.UseFramebuffer(true);
+ scene.Add(sceneView);
+
+ uint32_t afterSceneViewTaskCount = taskList.GetTaskCount();
+ RenderTask sceneViewRenderTask = taskList.GetTask(afterSceneViewTaskCount - 1);
+ tet_printf("after SceneView Task cnt : %d\n", afterSceneViewTaskCount);
+ DALI_TEST_CHECK(afterSceneViewTaskCount == defaultTaskCount + 1);
+
+ Control control1 = Control::New();
+ control1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+ control1.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
+ control1.SetRenderEffect(BackgroundBlurEffect::New());
+
+ sceneView.Add(control1);
+
+ uint32_t afterBlurEffectTaskCount = taskList.GetTaskCount();
+ RenderTask blurSourceRenderTask = taskList.GetTask(afterBlurEffectTaskCount - 3);
+ RenderTask blurHorizontalRenderTask = taskList.GetTask(afterBlurEffectTaskCount - 2);
+ RenderTask blurVerticalRenderTask = taskList.GetTask(afterBlurEffectTaskCount - 1);
+ tet_printf("after blurEffect Task cnt : %d\n", afterBlurEffectTaskCount);
+ DALI_TEST_CHECK(afterBlurEffectTaskCount == afterSceneViewTaskCount + 3);
+
+ tet_printf("defaultRenderTask order : %d\n", defaultRenderTask.GetOrderIndex());
+ tet_printf("sceneViewRenderTask order : %d\n", sceneViewRenderTask.GetOrderIndex());
+ tet_printf("blurSourceRenderTask order : %d\n", blurSourceRenderTask.GetOrderIndex());
+ tet_printf("blurHorizontalRenderTask order : %d\n", blurHorizontalRenderTask.GetOrderIndex());
+ tet_printf("blurVerticalRenderTask order : %d\n", blurVerticalRenderTask.GetOrderIndex());
+
+ DALI_TEST_EQUALS(INT32_MIN, defaultRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(0, sceneViewRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(0, blurSourceRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(0, blurHorizontalRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(0, blurVerticalRenderTask.GetOrderIndex(), TEST_LOCATION);
+
+ application.SendNotification();
+
+ tet_printf("defaultRenderTask order : %d\n", defaultRenderTask.GetOrderIndex());
+ tet_printf("sceneViewRenderTask order : %d\n", sceneViewRenderTask.GetOrderIndex());
+ tet_printf("blurSourceRenderTask order : %d\n", blurSourceRenderTask.GetOrderIndex());
+ tet_printf("blurHorizontalRenderTask order : %d\n", blurHorizontalRenderTask.GetOrderIndex());
+ tet_printf("blurVerticalRenderTask order : %d\n", blurVerticalRenderTask.GetOrderIndex());
+
+ DALI_TEST_EQUALS(INT32_MIN, defaultRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 3, sceneViewRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN, blurSourceRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 1, blurHorizontalRenderTask.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 2, blurVerticalRenderTask.GetOrderIndex(), TEST_LOCATION);
+
+ END_TEST;
+}
return handle;
}
+ OffScreenRenderable::Type GetOffScreenRenderableType() override
+ {
+ return OffScreenRenderable::Type::NONE;
+ }
+
+ void GetOffScreenRenderTasks(std::vector<Dali::RenderTask>& tasks, bool isForward) override
+ {}
+
protected:
TestRenderEffectImpl()
: mOnActivated(false)
END_TEST;
}
+
+int UtcDaliRenderEffectRenderTaskOrdering(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline("UtcDaliRenderEffectRenderTaskOrdering");
+
+ Integration::Scene scene = application.GetScene();
+ RenderTaskList taskList = scene.GetRenderTaskList();
+
+ Control control1 = Control::New();
+ control1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+ control1.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
+
+ tet_printf("render task cnt : %d\n", taskList.GetTaskCount());
+
+ // Add render effect during scene on.
+ control1.SetRenderEffect(BackgroundBlurEffect::New());
+
+ tet_printf("render task cnt after set : %d\n", taskList.GetTaskCount());
+ DALI_TEST_EQUALS(1, taskList.GetTaskCount(), TEST_LOCATION);
+
+ scene.Add(control1);
+
+ tet_printf("render task cnt after add : %d\n", taskList.GetTaskCount());
+ DALI_TEST_EQUALS(4, taskList.GetTaskCount(), TEST_LOCATION);
+
+ Dali::RenderTask sourceTaskControl1 = taskList.GetTask(taskList.GetTaskCount() - 3);
+ Dali::RenderTask horizontalBlurTaskControl1 = taskList.GetTask(taskList.GetTaskCount() - 2);
+ Dali::RenderTask verticalBlurTaskControl1 = taskList.GetTask(taskList.GetTaskCount() - 1);
+
+ tet_printf("order : %d\n", sourceTaskControl1.GetOrderIndex());
+ tet_printf("order : %d\n", horizontalBlurTaskControl1.GetOrderIndex());
+ tet_printf("order : %d\n", verticalBlurTaskControl1.GetOrderIndex());
+
+ DALI_TEST_EQUALS(0, sourceTaskControl1.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(0, horizontalBlurTaskControl1.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(0, verticalBlurTaskControl1.GetOrderIndex(), TEST_LOCATION);
+
+ application.SendNotification();
+
+ tet_printf("order af : %d\n", sourceTaskControl1.GetOrderIndex());
+ tet_printf("order af : %d\n", horizontalBlurTaskControl1.GetOrderIndex());
+ tet_printf("order af : %d\n", verticalBlurTaskControl1.GetOrderIndex());
+
+ DALI_TEST_EQUALS(INT32_MIN, sourceTaskControl1.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 1, horizontalBlurTaskControl1.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 2, verticalBlurTaskControl1.GetOrderIndex(), TEST_LOCATION);
+
+ Control control2 = Control::New();
+ control2.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+ control2.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
+
+ tet_printf("render task cnt : %d\n", taskList.GetTaskCount());
+
+ // Add render effect during scene on.
+ control2.SetRenderEffect(BackgroundBlurEffect::New());
+
+ tet_printf("render task cnt after set : %d\n", taskList.GetTaskCount());
+
+ scene.Add(control2);
+
+ DALI_TEST_EQUALS(7, taskList.GetTaskCount(), TEST_LOCATION);
+
+ tet_printf("render task cnt after add : %d\n", taskList.GetTaskCount());
+
+ Dali::RenderTask sourceTaskControl2 = taskList.GetTask(taskList.GetTaskCount() - 3);
+ Dali::RenderTask horizontalBlurTaskControl2 = taskList.GetTask(taskList.GetTaskCount() - 2);
+ Dali::RenderTask verticalBlurTaskControl2 = taskList.GetTask(taskList.GetTaskCount() - 1);
+
+
+ tet_printf("order after1 : %d\n", sourceTaskControl1.GetOrderIndex());
+ tet_printf("order after1 : %d\n", horizontalBlurTaskControl1.GetOrderIndex());
+ tet_printf("order after1 : %d\n", verticalBlurTaskControl1.GetOrderIndex());
+
+ tet_printf("order after1 : %d\n", sourceTaskControl2.GetOrderIndex());
+ tet_printf("order after1 : %d\n", horizontalBlurTaskControl2.GetOrderIndex());
+ tet_printf("order after1 : %d\n", verticalBlurTaskControl2.GetOrderIndex());
+
+ DALI_TEST_EQUALS(0, sourceTaskControl2.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(0, horizontalBlurTaskControl2.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(0, verticalBlurTaskControl2.GetOrderIndex(), TEST_LOCATION);
+
+ application.SendNotification();
+
+ tet_printf("order after2 : %d\n", sourceTaskControl1.GetOrderIndex());
+ tet_printf("order after2 : %d\n", horizontalBlurTaskControl1.GetOrderIndex());
+ tet_printf("order after2 : %d\n", verticalBlurTaskControl1.GetOrderIndex());
+
+ tet_printf("order after2 : %d\n", sourceTaskControl2.GetOrderIndex());
+ tet_printf("order after2 : %d\n", horizontalBlurTaskControl2.GetOrderIndex());
+ tet_printf("order after2 : %d\n", verticalBlurTaskControl2.GetOrderIndex());
+
+ DALI_TEST_EQUALS(INT32_MIN, sourceTaskControl1.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 1, horizontalBlurTaskControl1.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 2, verticalBlurTaskControl1.GetOrderIndex(), TEST_LOCATION);
+
+ DALI_TEST_EQUALS(INT32_MIN + 3, sourceTaskControl2.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 4, horizontalBlurTaskControl2.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 5, verticalBlurTaskControl2.GetOrderIndex(), TEST_LOCATION);
+
+ control2.Add(control1);
+
+ sourceTaskControl1 = taskList.GetTask(taskList.GetTaskCount() - 3);
+ horizontalBlurTaskControl1 = taskList.GetTask(taskList.GetTaskCount() - 2);
+ verticalBlurTaskControl1 = taskList.GetTask(taskList.GetTaskCount() - 1);
+
+ tet_printf("order after3 : %d\n", sourceTaskControl1.GetOrderIndex());
+ tet_printf("order after3 : %d\n", horizontalBlurTaskControl1.GetOrderIndex());
+ tet_printf("order after3 : %d\n", verticalBlurTaskControl1.GetOrderIndex());
+
+ tet_printf("order after3 : %d\n", sourceTaskControl2.GetOrderIndex());
+ tet_printf("order after3 : %d\n", horizontalBlurTaskControl2.GetOrderIndex());
+ tet_printf("order after3 : %d\n", verticalBlurTaskControl2.GetOrderIndex());
+
+ DALI_TEST_EQUALS(0, sourceTaskControl1.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(0, horizontalBlurTaskControl1.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(0, verticalBlurTaskControl1.GetOrderIndex(), TEST_LOCATION);
+
+ DALI_TEST_EQUALS(INT32_MIN + 3, sourceTaskControl2.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 4, horizontalBlurTaskControl2.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 5, verticalBlurTaskControl2.GetOrderIndex(), TEST_LOCATION);
+
+ application.SendNotification();
+
+ tet_printf("order after4 : %d\n", sourceTaskControl1.GetOrderIndex());
+ tet_printf("order after4 : %d\n", horizontalBlurTaskControl1.GetOrderIndex());
+ tet_printf("order after4 : %d\n", verticalBlurTaskControl1.GetOrderIndex());
+
+ tet_printf("order after4 : %d\n", sourceTaskControl2.GetOrderIndex());
+ tet_printf("order after4 : %d\n", horizontalBlurTaskControl2.GetOrderIndex());
+ tet_printf("order after4 : %d\n", verticalBlurTaskControl2.GetOrderIndex());
+
+ DALI_TEST_EQUALS(INT32_MIN + 3, sourceTaskControl1.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 4, horizontalBlurTaskControl1.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 5, verticalBlurTaskControl1.GetOrderIndex(), TEST_LOCATION);
+
+ DALI_TEST_EQUALS(INT32_MIN, sourceTaskControl2.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 1, horizontalBlurTaskControl2.GetOrderIndex(), TEST_LOCATION);
+ DALI_TEST_EQUALS(INT32_MIN + 2, verticalBlurTaskControl2.GetOrderIndex(), TEST_LOCATION);
+
+ END_TEST;
+}
+
#include <dali-toolkit/public-api/controls/control-impl.h>
#include <dali/devel-api/actors/actor-devel.h>
#include <dali/integration-api/adaptor-framework/adaptor.h>
-#include <dali/integration-api/debug.h>
#include <dali/public-api/math/math-utils.h>
#include <dali/public-api/object/type-registry-helper.h>
#include <dali/public-api/object/type-registry.h>
return value;
}
+Dali::Actor Panel::GetOffScreenRenderableSourceActor()
+{
+ return (mRootLayer) ? mRootLayer : Dali::Actor();
+}
+
+bool Panel::IsOffScreenRenderTaskExclusive()
+{
+ return (mRenderTask) ? mRenderTask.IsExclusive() : false;
+}
+
///////////////////////////////////////////////////////////
//
// Private methods
scaleConstraint.Apply();
UpdateProperties();
+ SetOffScreenRenderableType(OffScreenRenderable::Type::FORWARD);
}
void Panel::OnSceneConnection(int depth)
Control::OnSceneDisconnection();
}
+void Panel::GetOffScreenRenderTasks(std::vector<Dali::RenderTask>& tasks, bool isForward)
+{
+ tasks.clear();
+ if(isForward)
+ {
+ if(mRenderTask)
+ {
+ tasks.push_back(mRenderTask);
+ }
+ }
+}
+
void Panel::SetTransparent(bool transparent)
{
if(mIsTransparent != transparent)
*/
static Property::Value GetProperty(BaseObject* object, Property::Index index);
+ /**
+ * @copydoc Toolkit::Internal::Control::GetOffScreenRenderableSourceActor
+ */
+ Dali::Actor GetOffScreenRenderableSourceActor() override;
+
+ /**
+ * @copydoc Toolkit::Internal::Control::IsOffScreenRenderTaskExclusive
+ */
+ bool IsOffScreenRenderTaskExclusive() override;
+
protected:
/**
* @brief Constructs a new Panel.
*/
void OnSceneDisconnection() override;
+ /**
+ * @copydoc CustomActorImpl::SetFirstOrderIndex()
+ */
+ void GetOffScreenRenderTasks(std::vector<Dali::RenderTask>& tasks, bool isForward) override;
+
private:
/**
* @brief Sets whether the plane is transparent or not.
if(mUseFrameBuffer != useFramebuffer)
{
mUseFrameBuffer = useFramebuffer;
+ SetOffScreenRenderableType((mUseFrameBuffer) ? OffScreenRenderable::Type::FORWARD : OffScreenRenderable::Type::NONE);
UpdateRenderTask();
+ RequestRenderTaskReorder();
}
}
return value;
}
+Dali::Actor SceneView::GetOffScreenRenderableSourceActor()
+{
+ return (mRootLayer) ? mRootLayer : Dali::Actor();
+}
+
+bool SceneView::IsOffScreenRenderTaskExclusive()
+{
+ return (mRenderTask) ? mRenderTask.IsExclusive() : false;
+}
+
///////////////////////////////////////////////////////////
//
// Private methods
mRenderTask.SetExclusive(true);
mRenderTask.SetInputEnabled(true);
mRenderTask.SetCullMode(false);
- mRenderTask.SetOrderIndex(SCENE_ORDER_INDEX);
mRenderTask.SetScreenToFrameBufferMappingActor(Self());
UpdateRenderTask();
Control::OnSceneDisconnection();
}
+void SceneView::GetOffScreenRenderTasks(std::vector<Dali::RenderTask>& tasks, bool isForward)
+{
+ tasks.clear();
+ if(isForward)
+ {
+ if(mShadowMapRenderTask)
+ {
+ tasks.push_back(mShadowMapRenderTask);
+ }
+ if(mRenderTask)
+ {
+ tasks.push_back(mRenderTask);
+ }
+ }
+}
+
void SceneView::OnInitialize()
{
Actor self = Self();
mDefaultCamera.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
AddCamera(mDefaultCamera);
UpdateCamera(mDefaultCamera);
+
+ if(mUseFrameBuffer)
+ {
+ SetOffScreenRenderableType(OffScreenRenderable::Type::FORWARD);
+ }
}
void SceneView::OnChildAdd(Actor& child)
}
else
{
+ mRenderTask.SetOrderIndex(SCENE_ORDER_INDEX);
+
mRenderTask.SetViewportGuideActor(Self());
if(mRenderTask.GetFrameBuffer())
{
mShadowMapRenderTask.SetClearColor(Color::WHITE);
mShadowMapRenderTask.SetRenderPassTag(10);
mShadowMapRenderTask.SetCameraActor(GetImplementation(mShadowLight).GetCamera());
+ }
+
+ if(!mUseFrameBuffer)
+ {
mShadowMapRenderTask.SetOrderIndex(SHADOW_ORDER_INDEX);
}
*/
static Property::Value GetProperty(BaseObject* object, Property::Index index);
+ /**
+ * @copydoc Toolkit::Internal::Control::GetOffScreenRenderableSourceActor
+ */
+ Dali::Actor GetOffScreenRenderableSourceActor() override;
+
+ /**
+ * @copydoc Toolkit::Internal::Control::IsOffScreenRenderTaskExclusive
+ */
+ bool IsOffScreenRenderTaskExclusive() override;
+
protected:
/**
* @brief Constructs a new SceneView.
*/
void OnSceneDisconnection() override;
+ /**
+ * @copydoc CustomActorImpl::GetOffScreenRenderTasks()
+ */
+ void GetOffScreenRenderTasks(std::vector<Dali::RenderTask>& tasks, bool isForward) override;
+
/**
* @copydoc Toolkit::Control::OnInitialize()
*/
#include <dali/public-api/render-tasks/render-task-list.h>
#include <dali/public-api/rendering/renderer.h>
#include <dali/public-api/rendering/shader.h>
+#include <dali/public-api/actors/custom-actor-impl.h>
-//INTERNAL INCLUDES
+// INTERNAL INCLUDES
#include <dali-toolkit/devel-api/controls/control-depth-index-ranges.h>
#include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
#include <dali-toolkit/internal/controls/control/control-renderers.h>
#include <dali-toolkit/internal/graphics/builtin-shader-extern-gen.h>
+#include <dali-toolkit/public-api/controls/control-impl.h>
namespace
{
// Default values
static constexpr float BLUR_EFFECT_DOWNSCALE_FACTOR = 0.4f;
static constexpr uint32_t BLUR_EFFECT_PIXEL_RADIUS = 10u;
-static constexpr int32_t BLUR_EFFECT_ORDER_INDEX = 101;
static constexpr float MINIMUM_DOWNSCALE_FACTOR = 0.1f;
static constexpr float MAXIMUM_DOWNSCALE_FACTOR = 1.0f;
return handle;
}
+OffScreenRenderable::Type BlurEffectImpl::GetOffScreenRenderableType()
+{
+ return mSkipBlur ? OffScreenRenderable::NONE : OffScreenRenderable::BACKWARD;
+}
+
+void BlurEffectImpl::GetOffScreenRenderTasks(std::vector<Dali::RenderTask>& tasks, bool isForward)
+{
+ tasks.clear();
+ if(!isForward && mIsBackground)
+ {
+ bool isExclusiveRequired = false;
+ Dali::Actor sourceActor = GetOwnerControl();
+ while(sourceActor.GetParent())
+ {
+ sourceActor = sourceActor.GetParent();
+ Toolkit::Control control = Toolkit::Control::DownCast(sourceActor);
+ if(control && GetImplementation(control).GetOffScreenRenderableType() == OffScreenRenderable::Type::FORWARD)
+ {
+ sourceActor = GetImplementation(control).GetOffScreenRenderableSourceActor();
+ isExclusiveRequired = GetImplementation(control).IsOffScreenRenderTaskExclusive();
+ break;
+ }
+ }
+ mSourceRenderTask.SetSourceActor(sourceActor);
+ mSourceRenderTask.SetExclusive(isExclusiveRequired);
+
+ if(mSourceRenderTask)
+ {
+ tasks.push_back(mSourceRenderTask);
+ }
+ if(mHorizontalBlurTask)
+ {
+ tasks.push_back(mHorizontalBlurTask);
+ }
+ if(mVerticalBlurTask)
+ {
+ tasks.push_back(mVerticalBlurTask);
+ }
+ }
+}
+
void BlurEffectImpl::OnInitialize()
{
if(DALI_UNLIKELY(mSkipBlur))
{
mSourceRenderTask.SetSourceActor(sourceControl);
}
- mSourceRenderTask.SetOrderIndex(BLUR_EFFECT_ORDER_INDEX);
mSourceRenderTask.SetCameraActor(mRenderFullSizeCamera);
mSourceRenderTask.SetFrameBuffer(mInputBackgroundFrameBuffer);
mSourceRenderTask.SetInputEnabled(false);
SetRendererTexture(mHorizontalBlurActor.GetRendererAt(0), mInputBackgroundFrameBuffer);
mHorizontalBlurTask = taskList.CreateTask();
mHorizontalBlurTask.SetSourceActor(mHorizontalBlurActor);
- mHorizontalBlurTask.SetOrderIndex(BLUR_EFFECT_ORDER_INDEX + 1);
mHorizontalBlurTask.SetExclusive(true);
mHorizontalBlurTask.SetInputEnabled(false);
mHorizontalBlurTask.SetCameraActor(mRenderDownsampledCamera);
SetRendererTexture(mVerticalBlurActor.GetRendererAt(0), mTemporaryFrameBuffer);
mVerticalBlurTask = taskList.CreateTask();
mVerticalBlurTask.SetSourceActor(mVerticalBlurActor);
- mVerticalBlurTask.SetOrderIndex(BLUR_EFFECT_ORDER_INDEX + 2);
mVerticalBlurTask.SetExclusive(true);
mVerticalBlurTask.SetInputEnabled(false);
mVerticalBlurTask.SetCameraActor(mRenderDownsampledCamera);
*/
static BlurEffectImplPtr New(float downscaleFactor, uint32_t blurRadius, bool isBackground);
+ /**
+ * @copydoc Toolkit::Internal::RenderEffectImpl::GetOffScreenRenderableType
+ */
+ OffScreenRenderable::Type GetOffScreenRenderableType() override;
+
+ /**
+ * @copydoc Toolkit::Internal::RenderEffectImpl::GetOffScreenRenderTasks
+ */
+ void GetOffScreenRenderTasks(std::vector<Dali::RenderTask>& tasks, bool isForward) override;
+
protected:
/**
* @brief Creates an uninitialized blur effect implementation
*/
bool IsActivated() const;
+ /**
+ * @brief Retrieves OffScreenRenderableType of this RenderEffect.
+ *
+ * @return OffScreenRenderableType for this RenderEffect.
+ */
+ virtual OffScreenRenderable::Type GetOffScreenRenderableType() = 0;
+
+ /**
+ * @brief Retrieves the off-screen RenderTasks associated with the RenderEffect.
+ * This method returns the internal RenderTasks held by the RenderEffect. This tasks are
+ * used for off-screen rendering, and the system will assign order index to each
+ * tasks based on the render order.
+ *
+ * RenderEffect with a non-NONE OffScreenRenderableType should override this method to
+ * provide their render tasks.
+ *
+ * @param[out] tasks A list of RenderTasks to be populated with the RenderEffect's forward
+ * or backward off-screen RenderTask.
+ * @param[in] isForward Indicates whether to retrieve forward (true) or backward (false)
+ * RenderTasks.
+ */
+ virtual void GetOffScreenRenderTasks(std::vector<Dali::RenderTask>& tasks, bool isForward) = 0;
+
protected:
/**
* @copydoc Dali::Toolkit::RenderEffect::RenderEffect
Dali::Toolkit::Control ownerControl(GetOwner());
object->SetOwnerControl(ownerControl);
+
+ SetOffScreenRenderableType(object->GetOffScreenRenderableType());
}
}
}
}
mImpl->mRenderEffect.Reset();
}
+ SetOffScreenRenderableType(OffScreenRenderable::NONE);
}
void Control::SetResourceReady()
controlDataImpl.ResourceReady();
}
+Dali::Actor Control::GetOffScreenRenderableSourceActor()
+{
+ // Need to override this in FORWARD OffScreenRenderable
+ return Dali::Actor();
+}
+
+bool Control::IsOffScreenRenderTaskExclusive()
+{
+ return false;
+}
+
std::shared_ptr<Toolkit::DevelControl::ControlAccessible> Control::GetAccessibleObject()
{
return mImpl->GetAccessibleObject();
// @todo size negotiate background to new size, animate as well?
}
+void Control::GetOffScreenRenderTasks(std::vector<Dali::RenderTask>& tasks, bool isForward)
+{
+ if(mImpl->mRenderEffect)
+ {
+ Toolkit::Internal::RenderEffectImpl* object = dynamic_cast<Toolkit::Internal::RenderEffectImpl*>(mImpl->mRenderEffect.GetObjectPtr());
+ object->GetOffScreenRenderTasks(tasks, isForward);
+ }
+}
+
bool Control::OnKeyEvent(const KeyEvent& event)
{
return false; // Do not consume
*/
void SetResourceReady();
+ /**
+ * @brief Retrieves SourceActor of the OffScreenRenderable.
+ *
+ * @SINCE_2_3.43
+ * @return SourceActor of the OffScreenRenderable.
+ */
+ virtual Dali::Actor GetOffScreenRenderableSourceActor();
+
+ /**
+ * @brief Retrieves whether the OffScreen RenderTasks is exclusive or not.
+ * The SourceActor of an OffScreen RenderTask can also become the SourceActor of another Actor's OffScreen RenderTask.
+ * To draw the SourceActor multitimes, the exclusive information is required.
+ *
+ * @SINCE_2_3.43
+ * @return True if the RenderTask is exclusive.
+ */
+ virtual bool IsOffScreenRenderTaskExclusive();
+
// Accessibility
/**
*/
void OnSizeAnimation(Animation& animation, const Vector3& targetSize) override;
+ /**
+ * @copydoc CustomActorImpl::GetOffScreenRenderTasks()
+ */
+ void GetOffScreenRenderTasks(std::vector<Dali::RenderTask>& tasks, bool isForward) override;
+
/**
* @copydoc CustomActorImpl::OnRelayout()
*/