/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 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.
return mSourceNode;
}
+void RenderTask::SetViewportGuideNode(Node* node)
+{
+ mViewportGuideNode = node;
+}
+
+Node* RenderTask::GetViewportGuideNode() const
+{
+ return mViewportGuideNode;
+}
+
void RenderTask::SetExclusive(bool exclusive)
{
mExclusive = exclusive;
return true;
}
-void RenderTask::SetClearColor(BufferIndex updateBufferIndex, const Vector4& value)
-{
- mClearColor.Set(updateBufferIndex, value);
-}
-
const Vector4& RenderTask::GetClearColor(BufferIndex bufferIndex) const
{
return mClearColor[bufferIndex];
}
-void RenderTask::BakeClearColor(BufferIndex updateBufferIndex, const Vector4& value)
-{
- mClearColor.Bake(updateBufferIndex, value);
-}
-
void RenderTask::SetClearEnabled(bool enabled)
{
mClearEnabled = enabled;
return mCamera->GetViewMatrix(bufferIndex);
}
-SceneGraph::Camera& RenderTask::GetCamera() const
+const SceneGraph::Camera& RenderTask::GetCamera() const
{
DALI_ASSERT_DEBUG(nullptr != mCamera);
return *mCamera;
return retval;
}
-void RenderTask::SetViewportPosition(BufferIndex updateBufferIndex, const Vector2& value)
+void RenderTask::UpdateViewport(BufferIndex updateBufferIndex, Vector2 sceneSize, Vector3 cameraPosition)
{
- mViewportPosition.Set(updateBufferIndex, value);
+ if(GetViewportGuideNode() && GetViewportGuideNode()->ConnectedToScene())
+ {
+ Vector3 worldPosition = GetViewportGuideNode()->GetWorldPosition(updateBufferIndex);
+ worldPosition -= cameraPosition;
+
+ Vector3 nodeSize = GetViewportGuideNode()->GetSize(updateBufferIndex) * GetViewportGuideNode()->GetWorldScale(updateBufferIndex);
+ Vector2 halfSceneSize(sceneSize.width * 0.5f, sceneSize.height * 0.5f); // World position origin is center of scene
+ Vector3 halfNodeSize(nodeSize * 0.5f);
+ Vector2 screenPosition(halfSceneSize.width + worldPosition.x - halfNodeSize.x,
+ halfSceneSize.height + worldPosition.y - halfNodeSize.y);
+
+ /* This is an implicit constraint - the properties will be dirty until the node
+ * is removed. (RenderTask::Impl manages this)
+ */
+ mViewportPosition.Set(updateBufferIndex, screenPosition);
+ mViewportSize.Set(updateBufferIndex, Vector2(nodeSize));
+ }
}
const Vector2& RenderTask::GetViewportPosition(BufferIndex bufferIndex) const
return mViewportPosition[bufferIndex];
}
-void RenderTask::BakeViewportPosition(BufferIndex updateBufferIndex, const Vector2& value)
-{
- mViewportPosition.Bake(updateBufferIndex, value);
-}
-
-void RenderTask::SetViewportSize(BufferIndex updateBufferIndex, const Vector2& value)
-{
- mViewportSize.Set(updateBufferIndex, value);
-}
-
const Vector2& RenderTask::GetViewportSize(BufferIndex bufferIndex) const
{
return mViewportSize[bufferIndex];
}
-void RenderTask::BakeViewportSize(BufferIndex updateBufferIndex, const Vector2& value)
-{
- mViewportSize.Bake(updateBufferIndex, value);
-}
-
bool RenderTask::GetViewportEnabled(BufferIndex bufferIndex) const
{
if(fabsf(mViewportPosition[bufferIndex].x) > Math::MACHINE_EPSILON_1 ||
mRenderSyncTracker(nullptr),
mSourceNode(nullptr),
mCameraNode(nullptr),
+ mViewportGuideNode(nullptr),
mCamera(nullptr),
mFrameBuffer(nullptr),
mRefreshRate(Dali::RenderTask::DEFAULT_REFRESH_RATE),