+RenderTaskPtr RenderTaskList::GetOverlayTask() const
+{
+ RenderTaskPtr overlayRenderTask;
+ if(mOverlayRenderTask)
+ {
+ overlayRenderTask = mOverlayRenderTask;
+ }
+ return overlayRenderTask;
+}
+
+void RenderTaskList::SetExclusive(RenderTask* task, bool exclusive)
+{
+ // Check to see if this rendertask has an entry?
+ for(auto exclusiveIt = mExclusives.begin(); exclusiveIt != mExclusives.end(); ++exclusiveIt)
+ {
+ if(exclusiveIt->renderTaskPtr == task)
+ {
+ if(!exclusive)
+ {
+ mExclusives.erase(exclusiveIt);
+ break;
+ }
+ else
+ {
+ exclusiveIt->actor.SetActor(task->GetSourceActor());
+ exclusive = false;
+ break;
+ }
+ }
+ }
+ if(exclusive)
+ {
+ Exclusive exclusiveSlot;
+ exclusiveSlot.renderTaskPtr = task;
+ exclusiveSlot.actor.SetActor(task->GetSourceActor());
+ mExclusives.emplace_back(std::move(exclusiveSlot));
+ }
+}
+
+RenderTaskList::RenderTaskList()
+: mEventThreadServices(EventThreadServices::Get()),
+ mDefaults(*Stage::GetCurrent()),
+ mSceneObject(nullptr)
+{
+}
+
+RenderTaskList::~RenderTaskList()
+{
+ if(EventThreadServices::IsCoreRunning() && mSceneObject)
+ {
+ // Remove the render task list using a message to the update manager
+ RemoveRenderTaskListMessage(mEventThreadServices.GetUpdateManager(), *mSceneObject);
+ }
+}
+
+void RenderTaskList::Initialize()
+{
+ // Create a new render task list, Keep a const pointer to the render task list.
+ mSceneObject = SceneGraph::RenderTaskList::New();
+
+ OwnerPointer<SceneGraph::RenderTaskList> transferOwnership(const_cast<SceneGraph::RenderTaskList*>(mSceneObject));
+ AddRenderTaskListMessage(mEventThreadServices.GetUpdateManager(), transferOwnership);
+
+ // set the callback to call us back when tasks are completed
+ mSceneObject->SetCompleteNotificationInterface(this);
+}
+
+void RenderTaskList::NotifyCompleted()