From: jmm Date: Mon, 20 Jan 2025 13:09:21 +0000 (+0900) Subject: Fix background blur double downscaling X-Git-Tag: accepted/tizen/unified/20250123.054026~2^2~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2610fe08d85fde180126e5191afe2322f02a9b2c;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git Fix background blur double downscaling Change-Id: Ib58d31033282b2d062be3a017040d81ce7b0a224 --- diff --git a/dali-toolkit/internal/controls/render-effects/blur-effect-impl.cpp b/dali-toolkit/internal/controls/render-effects/blur-effect-impl.cpp index c39aec040f..d3321262d8 100644 --- a/dali-toolkit/internal/controls/render-effects/blur-effect-impl.cpp +++ b/dali-toolkit/internal/controls/render-effects/blur-effect-impl.cpp @@ -75,6 +75,7 @@ BlurEffectImpl::BlurEffectImpl(bool isBackground) mInternalRoot(Actor::New()), mDownscaleFactor(BLUR_EFFECT_DOWNSCALE_FACTOR), mPixelRadius(BLUR_EFFECT_PIXEL_RADIUS), + mDownscaledPixelRadius(static_cast(BLUR_EFFECT_PIXEL_RADIUS * BLUR_EFFECT_DOWNSCALE_FACTOR)), mBellCurveWidth(Math::MACHINE_EPSILON_1), mSkipBlur(false), mIsBackground(isBackground) @@ -86,6 +87,7 @@ BlurEffectImpl::BlurEffectImpl(float downscaleFactor, uint32_t blurRadius, bool mInternalRoot(Actor::New()), mDownscaleFactor(downscaleFactor), mPixelRadius(blurRadius), + mDownscaledPixelRadius(BLUR_EFFECT_PIXEL_RADIUS), mBellCurveWidth(Math::MACHINE_EPSILON_1), mSkipBlur(false), mIsBackground(isBackground) @@ -113,9 +115,9 @@ BlurEffectImpl::BlurEffectImpl(float downscaleFactor, uint32_t blurRadius, bool mPixelRadius = fixedBlurRadius; } - mPixelRadius = static_cast(mPixelRadius * mDownscaleFactor); + mDownscaledPixelRadius = static_cast(mPixelRadius * mDownscaleFactor); - if(DALI_UNLIKELY((mPixelRadius >> 1) < MINIMUM_GPU_ARRAY_SIZE)) + if(DALI_UNLIKELY((mDownscaledPixelRadius >> 1) < MINIMUM_GPU_ARRAY_SIZE)) { mSkipBlur = true; DALI_LOG_ERROR("Blur radius is too small. This blur will be ignored.\n"); @@ -194,8 +196,8 @@ void BlurEffectImpl::OnInitialize() // Calculate bell curve width { - const float epsilon = 1e-2f / (mPixelRadius * 2); - const float localOffset = (mPixelRadius * 2) - 1; + const float epsilon = 1e-2f / (mDownscaledPixelRadius * 2); + const float localOffset = (mDownscaledPixelRadius * 2) - 1; float lowerBoundBellCurveWidth = Math::MACHINE_EPSILON_10000; float upperBoundBellCurveWidth = MAXIMUM_BELL_CURVE_WIDTH; @@ -223,7 +225,7 @@ void BlurEffectImpl::OnInitialize() // shader std::ostringstream fragmentStringStream; - fragmentStringStream << "#define NUM_SAMPLES " << (mPixelRadius >> 1) << "\n"; + fragmentStringStream << "#define NUM_SAMPLES " << (mDownscaledPixelRadius >> 1) << "\n"; fragmentStringStream << SHADER_BLUR_EFFECT_FRAG; std::string fragmentSource(fragmentStringStream.str()); @@ -426,7 +428,7 @@ void BlurEffectImpl::ApplyRenderTaskSourceActor(RenderTask sourceRenderTask, con void BlurEffectImpl::SetShaderConstants(uint32_t downsampledWidth, uint32_t downsampledHeight) { - const uint32_t sampleCount = mPixelRadius >> 1; // compression + const uint32_t sampleCount = mDownscaledPixelRadius >> 1; // compression const uint32_t kernelSize = sampleCount * 4 - 1; const uint32_t halfKernelSize = kernelSize / 2 + 1; // Gaussian curve is symmetric diff --git a/dali-toolkit/internal/controls/render-effects/blur-effect-impl.h b/dali-toolkit/internal/controls/render-effects/blur-effect-impl.h index c60ce241ac..655b184714 100644 --- a/dali-toolkit/internal/controls/render-effects/blur-effect-impl.h +++ b/dali-toolkit/internal/controls/render-effects/blur-effect-impl.h @@ -188,6 +188,7 @@ private: // Variables float mDownscaleFactor; uint32_t mPixelRadius; + uint32_t mDownscaledPixelRadius; float mBellCurveWidth; bool mSkipBlur : 1;