From e30c43079b04bf20d085615e6a4978bc61da022e Mon Sep 17 00:00:00 2001 From: jmm Date: Thu, 22 May 2025 11:18:10 +0900 Subject: [PATCH] Fix RenderEffectImpl::OnRefresh() to update target texture Change-Id: I4e2927ce83bd408677cbc75f67f271d787e07598 --- .../render-effects/background-blur-effect-impl.cpp | 1 + .../render-effects/gaussian-blur-effect-impl.cpp | 1 + .../controls/render-effects/mask-effect-impl.cpp | 10 ++++++++++ .../render-effects/offscreen-rendering-impl.cpp | 1 + .../render-effects/offscreen-rendering-impl.h | 13 ++++++++++--- 5 files changed, 23 insertions(+), 3 deletions(-) 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 8278a2d04a..63ca760434 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 @@ -407,6 +407,7 @@ void BackgroundBlurEffectImpl::OnRefresh() mVerticalBlurActor.SetProperty(Actor::Property::SIZE, Vector2(downsampledWidth, downsampledHeight)); CreateFrameBuffers(ImageDimensions(downsampledWidth, downsampledHeight)); + SetRendererTexture(GetTargetRenderer(), mBlurredOutputFrameBuffer); // Reset shader constants mHorizontalBlurActor.RegisterProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(1.0f, 0.0f) / downsampledWidth); 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 a448bd4d96..be3481dacd 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 @@ -389,6 +389,7 @@ void GaussianBlurEffectImpl::OnRefresh() mVerticalBlurActor.SetProperty(Actor::Property::SIZE, Vector2(downsampledWidth, downsampledHeight)); CreateFrameBuffers(ImageDimensions(downsampledWidth, downsampledHeight)); + SetRendererTexture(GetTargetRenderer(), mBlurredOutputFrameBuffer); // Reset shader constants mHorizontalBlurActor.RegisterProperty(UNIFORM_BLUR_OFFSET_DIRECTION_NAME.data(), Vector2(1.0f, 0.0f) / downsampledWidth); diff --git a/dali-toolkit/internal/controls/render-effects/mask-effect-impl.cpp b/dali-toolkit/internal/controls/render-effects/mask-effect-impl.cpp index 83231b501d..5387bd7d61 100644 --- a/dali-toolkit/internal/controls/render-effects/mask-effect-impl.cpp +++ b/dali-toolkit/internal/controls/render-effects/mask-effect-impl.cpp @@ -199,6 +199,16 @@ void MaskEffectImpl::OnRefresh() mMaskTargetRenderTask.SetFrameBuffer(mMaskTargetFrameBuffer); mMaskSourceRenderTask.SetFrameBuffer(mMaskSourceFrameBuffer); + + TextureSet textureSet = TextureSet::New(); + + Texture maskSourceTexture = mMaskSourceFrameBuffer.GetColorTexture(); + Texture maskTargetTexture = mMaskTargetFrameBuffer.GetColorTexture(); + + textureSet.SetTexture(maskSourceIndex, maskSourceTexture); + textureSet.SetTexture(maskTargetIndex, maskTargetTexture); + + GetTargetRenderer().SetTextures(textureSet); } void MaskEffectImpl::CreateFrameBuffers(const ImageDimensions size) diff --git a/dali-toolkit/internal/controls/render-effects/offscreen-rendering-impl.cpp b/dali-toolkit/internal/controls/render-effects/offscreen-rendering-impl.cpp index 7d73b48d35..f9574743f2 100644 --- a/dali-toolkit/internal/controls/render-effects/offscreen-rendering-impl.cpp +++ b/dali-toolkit/internal/controls/render-effects/offscreen-rendering-impl.cpp @@ -120,6 +120,7 @@ void OffScreenRenderingImpl::OnRefresh() mCamera.SetPerspectiveProjection(GetTargetSize()); CreateFrameBuffer(); + SetRendererTexture(GetTargetRenderer(), mFrameBuffer); mRenderTask.SetFrameBuffer(mFrameBuffer); } diff --git a/dali-toolkit/internal/controls/render-effects/offscreen-rendering-impl.h b/dali-toolkit/internal/controls/render-effects/offscreen-rendering-impl.h index c000a21254..c1e8d439a4 100644 --- a/dali-toolkit/internal/controls/render-effects/offscreen-rendering-impl.h +++ b/dali-toolkit/internal/controls/render-effects/offscreen-rendering-impl.h @@ -53,6 +53,7 @@ public: * @param[in] type Defines whether effect is enabled or not, and its refresh rate */ OffScreenRenderingImpl(DevelControl::OffScreenRenderingType type); + /** * @brief Set OffScreenRenderingType explicitly * @param[in] type Defines whether effect is enabled or not, and its refresh rate @@ -61,26 +62,31 @@ public: // @copydoc Dali::Toolkit::Internal::RenderEffectImpl::GetOffScreenRenderableType OffScreenRenderable::Type GetOffScreenRenderableType() override; + // @copydoc Dali::Toolkit::Internal::RenderEffectImpl::GetOffScreenRenderTasks void GetOffScreenRenderTasks(std::vector& tasks, bool isForward) override; protected: // @copydoc Dali::Toolkit::Internal::RenderEffectImpl::OnInitialize void OnInitialize() override; + // @copydoc Dali::Toolkit::Internal::RenderEffectImpl::OnActivate void OnActivate() override; + // @copydoc Dali::Toolkit::Internal::RenderEffectImpl::OnDeactivate void OnDeactivate() override; + // @copydoc Dali::Toolkit::Internal::RenderEffectImpl::OnRefresh void OnRefresh() override; private: /** - * @brief Initializes off screen buffer to draw subtree + * @brief Initializes offscreen buffer to draw subtree */ void CreateFrameBuffer(); + /** - * @brief + * @brief Destroys offscreen buffer */ void DestroyFrameBuffer(); @@ -88,8 +94,9 @@ private: * @brief Initializes render task for offscreen rendering */ void CreateRenderTask(); + /** - * @brief + * @brief Destroys render task for offscreen rendering */ void DestroyRenderTask(); -- 2.34.1