scaleConstraint.Apply();
UpdateProperties();
- SetOffScreenRenderableType(OffScreenRenderable::Type::FORWARD);
+ RegisterOffScreenRenderableType(OffScreenRenderable::Type::FORWARD);
}
void Panel::OnSceneConnection(int depth)
{
if(mUseFrameBuffer != useFramebuffer)
{
+ UnregisterOffScreenRenderableType((mUseFrameBuffer) ? OffScreenRenderable::Type::FORWARD : OffScreenRenderable::Type::NONE);
mUseFrameBuffer = useFramebuffer;
- SetOffScreenRenderableType((mUseFrameBuffer) ? OffScreenRenderable::Type::FORWARD : OffScreenRenderable::Type::NONE);
+ RegisterOffScreenRenderableType((mUseFrameBuffer) ? OffScreenRenderable::Type::FORWARD : OffScreenRenderable::Type::NONE);
UpdateRenderTask();
RequestRenderTaskReorder();
}
AddCamera(mDefaultCamera);
UpdateCamera(mDefaultCamera);
- if(mUseFrameBuffer)
- {
- SetOffScreenRenderableType(OffScreenRenderable::Type::FORWARD);
- }
+ RegisterOffScreenRenderableType((mUseFrameBuffer) ? OffScreenRenderable::Type::FORWARD : OffScreenRenderable::Type::NONE);
}
void SceneView::OnChildAdd(Actor& child)
{
if(mOffScreenRenderingImpl)
{
- mOffScreenRenderingImpl->ClearOwnerControl();
- mOffScreenRenderingImpl.reset();
+ auto tempOffscreenRenderingImpl = std::move(mOffScreenRenderingImpl);
+ tempOffscreenRenderingImpl->ClearOwnerControl();
}
}
else if(mOffScreenRenderingType == DevelControl::OffScreenRenderingType::NONE)
ownerControl.Add(mCamera);
Renderer maskRenderer = GetTargetRenderer();
ownerControl.GetImplementation().SetCacheRenderer(maskRenderer);
- ownerControl.GetImplementation().SetOffScreenRenderableType(OffScreenRenderable::Type::FORWARD);
+ ownerControl.GetImplementation().RegisterOffScreenRenderableType(OffScreenRenderable::Type::FORWARD);
Vector2 size = GetTargetSize();
mCamera.SetPerspectiveProjection(size);
void MaskEffectImpl::OnDeactivate()
{
+ Toolkit::Control control = GetOwnerControl();
+ if(DALI_LIKELY(control))
+ {
+ control.GetImplementation().RemoveCacheRenderer();
+ control.GetImplementation().UnregisterOffScreenRenderableType(OffScreenRenderable::Type::FORWARD);
+ }
+
mCamera.Unparent();
mMaskTargetFrameBuffer.Reset();
mMaskSourceFrameBuffer.Reset();
Toolkit::Control control = GetOwnerControl();
control.GetImplementation().SetCacheRenderer(renderer);
- control.GetImplementation().SetOffScreenRenderableType(OffScreenRenderable::Type::FORWARD);
+ control.GetImplementation().RegisterOffScreenRenderableType(OffScreenRenderable::Type::FORWARD);
mRenderTask.SetScreenToFrameBufferMappingActor(control);
}
if(DALI_LIKELY(control))
{
control.GetImplementation().RemoveCacheRenderer();
- control.GetImplementation().SetOffScreenRenderableType(OffScreenRenderable::Type::NONE);
+ control.GetImplementation().UnregisterOffScreenRenderableType(OffScreenRenderable::Type::FORWARD);
mCamera.Unparent();
}
{
if(!IsActivated() && IsActivateValid())
{
- mIsActivated = true;
-
Dali::Toolkit::Control ownerControl = mOwnerControl.GetHandle();
DALI_LOG_INFO(gRenderEffectLogFilter, Debug::General, "[RenderEffect:%p] Activated! [ID:%d]\n", this, ownerControl ? ownerControl.GetProperty<int>(Actor::Property::ID) : -1);
DALI_LOG_ERROR("RenderEffect Could not be activated due to ownerControl's SceneHolder is not exist\n");
return;
}
+ mIsActivated = true;
+
mPlacementSceneHolder = sceneHolder;
// Activate logic for subclass.
void RenderEffectImpl::Deactivate()
{
- if(IsActivated() || !IsActivateValid())
+ if(IsActivated())
{
mIsActivated = false;
Internal::RenderEffectImpl* object = dynamic_cast<Internal::RenderEffectImpl*>(effect.GetObjectPtr());
DALI_ASSERT_ALWAYS(object && "Given render effect is not valid.");
- SetOffScreenRenderableType(object->GetOffScreenRenderableType());
+ RegisterOffScreenRenderableType(object->GetOffScreenRenderableType());
Dali::Toolkit::Control ownerControl(GetOwner());
object->SetOwnerControl(ownerControl);
{
if(mImpl->mRenderEffect)
{
- mImpl->mRenderEffect.Get()->ClearOwnerControl();
+ RenderEffectImplPtr effectImpl = std::move(mImpl->mRenderEffect);
+
+ // Reset handle first to avoid circular reference
mImpl->mRenderEffect.Reset();
+
+ UnregisterOffScreenRenderableType(effectImpl->GetOffScreenRenderableType());
+ effectImpl->ClearOwnerControl();
}
- SetOffScreenRenderableType(OffScreenRenderable::NONE);
}
void Control::SetResourceReady()