DALI_TEST_EQUALS(tasks.GetTask(0u), defaultTask, TEST_LOCATION);
DALI_TEST_EQUALS(tasks.GetTask(1u), newTask, TEST_LOCATION);
+ // Check overlay task removed well
+ DALI_TEST_EQUALS(nullptr, tasks.GetOverlayTask(), TEST_LOCATION);
+
+ application.SendNotification();
+ application.Render();
+
END_TEST;
}
// There should be 2 task by default.
DALI_TEST_EQUALS(tasks.GetTaskCount(), 2u, TEST_LOCATION);
RenderTask overlayTask = tasks.GetTask(1u);
- Viewport overlayViewport = defaultTask.GetViewport();
+ Viewport overlayViewport = overlayTask.GetViewport();
DALI_TEST_EQUALS(defaultViewport, overlayViewport, TEST_LOCATION);
// Resize the scene
scene.SurfaceResized(newSize.width, newSize.height);
Viewport newViewport(0, 0, newSize.x, newSize.y);
DALI_TEST_EQUALS(newViewport, defaultTask.GetViewport(), TEST_LOCATION);
- DALI_TEST_EQUALS(newViewport, defaultTask.GetViewport(), TEST_LOCATION);
+ DALI_TEST_EQUALS(newViewport, overlayTask.GetViewport(), TEST_LOCATION);
END_TEST;
}
mCameraActor.SetActor(cameraActor);
if(cameraActor)
{
- SetCameraMessage(GetEventThreadServices(), GetRenderTaskSceneObject(), &cameraActor->GetNode(), &cameraActor->GetCameraSceneObject());
+ SetCameraMessage(GetEventThreadServices(), GetRenderTaskSceneObject(), &cameraActor->GetCameraSceneObject());
}
else
{
- SetCameraMessage(GetEventThreadServices(), GetRenderTaskSceneObject(), nullptr, nullptr);
+ SetCameraMessage(GetEventThreadServices(), GetRenderTaskSceneObject(), nullptr);
}
// set the actor on exclusive container for hit testing
if(ptr == &task)
{
+ if(mOverlayRenderTask == &task)
+ {
+ mOverlayRenderTask.Reset();
+ }
+
const SceneGraph::RenderTask& sceneObject = task.GetRenderTaskSceneObject();
// delete the task
{
if(*iter == task)
{
+ if(mOverlayRenderTask == task)
+ {
+ mOverlayRenderTask = nullptr;
+ }
+
// Destroy the task
mRenderTasks.Erase(iter);
new(slot) LocalType(&task, &RenderTask::SetSourceNode, node);
}
-inline void SetCameraMessage(EventThreadServices& eventThreadServices, const RenderTask& task, const Node* constNode, const Camera* constCamera)
+inline void SetCameraMessage(EventThreadServices& eventThreadServices, const RenderTask& task, const Camera* constCamera)
{
- using LocalType = MessageValue2<RenderTask, Node*, Camera*>;
+ using LocalType = MessageValue1<RenderTask, Camera*>;
- Node* node = const_cast<Node*>(constNode);
- Camera* camera = const_cast<Camera*>(constCamera);
+ Camera* cameraNode = const_cast<Camera*>(constCamera);
// Reserve memory inside the message queue
uint32_t* slot = eventThreadServices.ReserveMessageSlot(sizeof(LocalType));
// Construct message in the message queue memory; note that delete should not be called on the return value
- new(slot) LocalType(&task, &RenderTask::SetCamera, node, camera);
+ new(slot) LocalType(&task, &RenderTask::SetCamera, cameraNode);
}
inline void SetViewportGuideNodeMessage(EventThreadServices& eventThreadServices, const RenderTask& task, const Node* constNode)
return mExclusive;
}
-void RenderTask::SetCamera(Node* cameraNode, Camera* camera)
+void RenderTask::SetCamera(Camera* cameraNode)
{
if(mCameraNode)
{
}
mCameraNode = cameraNode;
- mCamera = camera;
if(mCameraNode)
{
const Matrix& RenderTask::GetViewMatrix(BufferIndex bufferIndex) const
{
- DALI_ASSERT_DEBUG(nullptr != mCamera);
+ DALI_ASSERT_DEBUG(nullptr != mCameraNode);
- return mCamera->GetViewMatrix(bufferIndex);
+ return mCameraNode->GetViewMatrix(bufferIndex);
}
const SceneGraph::Camera& RenderTask::GetCamera() const
{
- DALI_ASSERT_DEBUG(nullptr != mCamera);
- return *mCamera;
+ DALI_ASSERT_DEBUG(nullptr != mCameraNode);
+ return *mCameraNode;
}
const Matrix& RenderTask::GetProjectionMatrix(BufferIndex bufferIndex) const
{
- DALI_ASSERT_DEBUG(nullptr != mCamera);
+ DALI_ASSERT_DEBUG(nullptr != mCameraNode);
- return mCamera->GetProjectionMatrix(bufferIndex);
+ return mCameraNode->GetProjectionMatrix(bufferIndex);
}
RenderInstruction& RenderTask::PrepareRenderInstruction(BufferIndex updateBufferIndex)
{
- DALI_ASSERT_DEBUG(nullptr != mCamera);
+ DALI_ASSERT_DEBUG(nullptr != mCameraNode);
TASK_LOG(Debug::General);
Viewport viewport;
bool viewportSet = QueryViewport(updateBufferIndex, viewport);
- mRenderInstruction[updateBufferIndex].Reset(mCamera,
+ mRenderInstruction[updateBufferIndex].Reset(mCameraNode,
GetFrameBuffer(),
viewportSet ? &viewport : nullptr,
mClearEnabled ? &GetClearColor(updateBufferIndex) : nullptr);
bool RenderTask::ViewMatrixUpdated()
{
bool retval = false;
- if(mCamera)
+ if(mCameraNode)
{
- retval = mCamera->ViewMatrixUpdated();
+ retval = mCameraNode->ViewMatrixUpdated();
}
return retval;
}
{
mCameraNode = nullptr;
}
+
+ mActive = false; // if either source or camera destroyed, we're no longer active
}
void RenderTask::AddInitializeResetter(ResetterManager& manager) const
mSourceNode(nullptr),
mCameraNode(nullptr),
mViewportGuideNode(nullptr),
- mCamera(nullptr),
mFrameBuffer(nullptr),
mRefreshRate(Dali::RenderTask::DEFAULT_REFRESH_RATE),
mFrameCounter(0u),
// must have a source and camera both connected to scene
mActive = (mSourceNode && mSourceNode->ConnectedToScene() &&
- mCameraNode && mCameraNode->ConnectedToScene() && mCamera);
+ mCameraNode && mCameraNode->ConnectedToScene());
TASK_LOG_FMT(Debug::General, " Source node(%x) active %d. Frame counter: %d\n", mSourceNode, mSourceNode && mSourceNode->ConnectedToScene(), mFrameCounter);
TASK_LOG_FMT(Debug::General, " Camera node(%x) active %d\n", mCameraNode, mCameraNode && mCameraNode->ConnectedToScene());
/**
* Set the camera from which the scene is viewed.
* @param[in] cameraNode that camera is connected with
- * @param[in] camera to use.
*/
- void SetCamera(Node* cameraNode, Camera* camera);
+ void SetCamera(Camera* cameraNode);
/**
* Set the frame-buffer used as a render target.
RenderMessageDispatcher* mRenderMessageDispatcher;
Render::RenderTracker* mRenderSyncTracker;
Node* mSourceNode;
- Node* mCameraNode;
+ SceneGraph::Camera* mCameraNode;
Node* mViewportGuideNode;
- SceneGraph::Camera* mCamera;
Render::FrameBuffer* mFrameBuffer;
RenderInstruction mRenderInstruction[2]; ///< Owned double buffered render instruction. (Double buffered because this owns render commands for the currently drawn frame)