From: jmm Date: Wed, 28 May 2025 08:21:38 +0000 (+0900) Subject: Remove render effect's size notification X-Git-Tag: accepted/tizen/unified/20250611.121130~2^2^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F82%2F324882%2F4;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git Remove render effect's size notification Change-Id: I983a552b27c513f939a91ed02aa839acdefebbfb Signed-off-by: jmm --- diff --git a/dali-toolkit/internal/controls/render-effects/background-blur-effect-impl.cpp b/dali-toolkit/internal/controls/render-effects/background-blur-effect-impl.cpp index 63ca760434..739a7a23d8 100644 --- a/dali-toolkit/internal/controls/render-effects/background-blur-effect-impl.cpp +++ b/dali-toolkit/internal/controls/render-effects/background-blur-effect-impl.cpp @@ -343,12 +343,12 @@ void BackgroundBlurEffectImpl::OnActivate() { Renderer renderer = mHorizontalBlurActor.GetRendererAt(0u); renderer.SetShader(blurShader); - renderer.RegisterUniqueProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(1.0f / downsampledWidth, 0.0f)); + renderer.RegisterProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(1.0f / downsampledWidth, 0.0f)); } { Renderer renderer = mVerticalBlurActor.GetRendererAt(0u); renderer.SetShader(blurShader); - renderer.RegisterUniqueProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(0.0f, 1.0f / downsampledHeight)); + renderer.RegisterProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(0.0f, 1.0f / downsampledHeight)); } // Inject blurred output to control @@ -392,9 +392,7 @@ void BackgroundBlurEffectImpl::OnRefresh() return; } - mInputBackgroundFrameBuffer.Reset(); - mTemporaryFrameBuffer.Reset(); - mBlurredOutputFrameBuffer.Reset(); + DestroyFrameBuffers(); Vector2 size = GetTargetSize(); uint32_t downsampledWidth = std::max(static_cast(size.width * mDownscaleFactor), 1u); @@ -406,16 +404,25 @@ void BackgroundBlurEffectImpl::OnRefresh() mHorizontalBlurActor.SetProperty(Actor::Property::SIZE, Vector2(downsampledWidth, downsampledHeight)); mVerticalBlurActor.SetProperty(Actor::Property::SIZE, Vector2(downsampledWidth, downsampledHeight)); + // Reset buffers and renderers CreateFrameBuffers(ImageDimensions(downsampledWidth, downsampledHeight)); - SetRendererTexture(GetTargetRenderer(), mBlurredOutputFrameBuffer); - - // Reset shader constants - mHorizontalBlurActor.RegisterProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(1.0f, 0.0f) / downsampledWidth); - mVerticalBlurActor.RegisterProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(0.0f, 1.0f) / downsampledHeight); mSourceRenderTask.SetFrameBuffer(mInputBackgroundFrameBuffer); mHorizontalBlurTask.SetFrameBuffer(mTemporaryFrameBuffer); mVerticalBlurTask.SetFrameBuffer(mBlurredOutputFrameBuffer); + + { + Renderer renderer = mHorizontalBlurActor.GetRendererAt(0); + SetRendererTexture(renderer, mInputBackgroundFrameBuffer); + renderer.RegisterProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(1.0f / downsampledWidth, 0.0f)); + } + { + Renderer renderer = mVerticalBlurActor.GetRendererAt(0); + SetRendererTexture(renderer, mTemporaryFrameBuffer); + renderer.RegisterProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(0.0f, 1.0f / downsampledHeight)); + } + + SetRendererTexture(GetTargetRenderer(), mBlurredOutputFrameBuffer); } void BackgroundBlurEffectImpl::CreateFrameBuffers(const ImageDimensions downsampledSize) diff --git a/dali-toolkit/internal/controls/render-effects/gaussian-blur-effect-impl.cpp b/dali-toolkit/internal/controls/render-effects/gaussian-blur-effect-impl.cpp index be3481dacd..e62bae4e16 100644 --- a/dali-toolkit/internal/controls/render-effects/gaussian-blur-effect-impl.cpp +++ b/dali-toolkit/internal/controls/render-effects/gaussian-blur-effect-impl.cpp @@ -324,12 +324,12 @@ void GaussianBlurEffectImpl::OnActivate() { Renderer renderer = mHorizontalBlurActor.GetRendererAt(0u); renderer.SetShader(blurShader); - renderer.RegisterUniqueProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(1.0f / downsampledWidth, 0.0f)); + renderer.RegisterProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(1.0f / downsampledWidth, 0.0f)); } { Renderer renderer = mVerticalBlurActor.GetRendererAt(0u); renderer.SetShader(blurShader); - renderer.RegisterUniqueProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(0.0f, 1.0f / downsampledHeight)); + renderer.RegisterProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(0.0f, 1.0f / downsampledHeight)); } // Inject blurred output to control @@ -374,9 +374,7 @@ void GaussianBlurEffectImpl::OnRefresh() return; } - mInputFrameBuffer.Reset(); - mTemporaryFrameBuffer.Reset(); - mBlurredOutputFrameBuffer.Reset(); + DestroyFrameBuffers(); Vector2 size = GetTargetSize(); uint32_t downsampledWidth = std::max(static_cast(size.width * mDownscaleFactor), 1u); @@ -388,16 +386,25 @@ void GaussianBlurEffectImpl::OnRefresh() mHorizontalBlurActor.SetProperty(Actor::Property::SIZE, Vector2(downsampledWidth, downsampledHeight)); mVerticalBlurActor.SetProperty(Actor::Property::SIZE, Vector2(downsampledWidth, downsampledHeight)); + // Reset buffers and renderers CreateFrameBuffers(ImageDimensions(downsampledWidth, downsampledHeight)); - SetRendererTexture(GetTargetRenderer(), mBlurredOutputFrameBuffer); - - // Reset shader constants - mHorizontalBlurActor.RegisterProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(1.0f, 0.0f) / downsampledWidth); - mVerticalBlurActor.RegisterProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(0.0f, 1.0f) / downsampledHeight); mSourceRenderTask.SetFrameBuffer(mInputFrameBuffer); mHorizontalBlurTask.SetFrameBuffer(mTemporaryFrameBuffer); mVerticalBlurTask.SetFrameBuffer(mBlurredOutputFrameBuffer); + + { + Renderer renderer = mHorizontalBlurActor.GetRendererAt(0); + SetRendererTexture(renderer, mInputFrameBuffer); + renderer.RegisterProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(1.0f / downsampledWidth, 0.0f)); + } + { + Renderer renderer = mVerticalBlurActor.GetRendererAt(0); + SetRendererTexture(renderer, mTemporaryFrameBuffer); + renderer.RegisterProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(0.0f, 1.0f / downsampledHeight)); + } + + SetRendererTexture(GetTargetRenderer(), mBlurredOutputFrameBuffer); } void GaussianBlurEffectImpl::CreateFrameBuffers(const ImageDimensions downsampledSize) diff --git a/dali-toolkit/internal/controls/render-effects/render-effect-impl.cpp b/dali-toolkit/internal/controls/render-effects/render-effect-impl.cpp index 287f279986..fed1bc208b 100644 --- a/dali-toolkit/internal/controls/render-effects/render-effect-impl.cpp +++ b/dali-toolkit/internal/controls/render-effects/render-effect-impl.cpp @@ -29,11 +29,6 @@ #include #include -namespace -{ -static constexpr float SIZE_STEP_CONDITION = 3.0f; -} // namespace - namespace Dali { namespace Toolkit @@ -48,7 +43,6 @@ Debug::Filter* gRenderEffectLogFilter = Debug::Filter::New(Debug::NoLogging, fal RenderEffectImpl::RenderEffectImpl() : mRenderer(), mOwnerControl(), - mSizeNotification(), mTargetSize(Vector2::ZERO), mIsActivated(false) { @@ -63,8 +57,6 @@ RenderEffectImpl::~RenderEffectImpl() mOwnerControl.Reset(); mPlacementSceneHolder.Reset(); - mSizeNotification.Reset(); - // Don't call Deactivate here, since we cannot call virtual function during destruction. // Deactivate already be called at Control's destructor, and InheritVisibilityChanged signal. } @@ -87,9 +79,6 @@ void RenderEffectImpl::SetOwnerControl(Dali::Toolkit::Control control) ownerControl.InheritedVisibilityChangedSignal().Connect(this, &RenderEffectImpl::OnControlInheritedVisibilityChanged); - mSizeNotification = ownerControl.AddPropertyNotification(Actor::Property::SIZE, StepCondition(SIZE_STEP_CONDITION)); - mSizeNotification.NotifySignal().Connect(this, &RenderEffectImpl::OnSizeSet); - Activate(); // Dev note : Activate after set the owner control. } } @@ -105,9 +94,6 @@ void RenderEffectImpl::ClearOwnerControl() { ownerControl.InheritedVisibilityChangedSignal().Disconnect(this, &RenderEffectImpl::OnControlInheritedVisibilityChanged); - ownerControl.RemovePropertyNotification(mSizeNotification); - mSizeNotification.Reset(); - auto previousOwnerControl = ownerControl; mOwnerControl.Reset(); mPlacementSceneHolder.Reset(); @@ -210,6 +196,34 @@ void RenderEffectImpl::Deactivate() } } +void RenderEffectImpl::Refresh() +{ + Dali::Toolkit::Control ownerControl = mOwnerControl.GetHandle(); + if(ownerControl) + { + const Vector2 targetSize = mTargetSize; + UpdateTargetSize(); + if(mTargetSize != targetSize) + { + if(IsActivateValid()) + { + if(!IsActivated()) + { + Activate(); + } + else + { + OnRefresh(); + } + } + else + { + Deactivate(); + } + } + } +} + bool RenderEffectImpl::IsActivateValid() const { // Activate is valid if @@ -276,34 +290,6 @@ void RenderEffectImpl::UpdateTargetSize() mTargetSize = size; } -void RenderEffectImpl::OnSizeSet(PropertyNotification& source) -{ - Dali::Toolkit::Control ownerControl = mOwnerControl.GetHandle(); - if(ownerControl) - { - const Vector2 targetSize = mTargetSize; - UpdateTargetSize(); - if(mTargetSize != targetSize) - { - if(IsActivateValid()) - { - if(!IsActivated()) - { - Activate(); - } - else - { - OnRefresh(); - } - } - else - { - Deactivate(); - } - } - } -} - void RenderEffectImpl::OnControlInheritedVisibilityChanged(Actor actor, bool visible) { Dali::Toolkit::Control ownerControl = mOwnerControl.GetHandle(); diff --git a/dali-toolkit/internal/controls/render-effects/render-effect-impl.h b/dali-toolkit/internal/controls/render-effects/render-effect-impl.h index 627c9c27cd..5a5307deb3 100644 --- a/dali-toolkit/internal/controls/render-effects/render-effect-impl.h +++ b/dali-toolkit/internal/controls/render-effects/render-effect-impl.h @@ -95,6 +95,11 @@ public: */ void Deactivate(); + /** + * @brief Refreshes rendering + */ + void Refresh(); + protected: /** * @copydoc Dali::Toolkit::RenderEffect::RenderEffect @@ -185,11 +190,6 @@ private: */ void UpdateTargetSize(); - /** - * @brief Callback when the size changes. - */ - void OnSizeSet(PropertyNotification& source); - /** * @brief Callback when the visibility of the actor is changed. * @param[in] actor The actor @@ -203,8 +203,7 @@ private: Dali::WeakHandle mOwnerControl; ///< Weakhandle of owner control. WeakHandle mPlacementSceneHolder; ///< Weakhandle of scene - PropertyNotification mSizeNotification; // Resize/Relayout signal. - Vector2 mTargetSize; // The final size of mOwnerControl + Vector2 mTargetSize; // The final size of mOwnerControl bool mIsActivated : 1; }; diff --git a/dali-toolkit/public-api/controls/control-impl.cpp b/dali-toolkit/public-api/controls/control-impl.cpp index 9677334833..ad0bb256a6 100644 --- a/dali-toolkit/public-api/controls/control-impl.cpp +++ b/dali-toolkit/public-api/controls/control-impl.cpp @@ -684,6 +684,17 @@ void Control::OnSizeSet(const Vector3& targetSize) // Apply FittingMode here mImpl->mSize = Vector2(targetSize); mImpl->RegisterProcessorOnce(); + + // Refresh render effects + if(mImpl->mRenderEffect) + { + mImpl->mRenderEffect->Refresh(); + } + + if(mImpl->mOffScreenRenderingImpl) + { + mImpl->mOffScreenRenderingImpl->Refresh(); + } } void Control::OnSizeAnimation(Animation& animation, const Vector3& targetSize)