From 5a1d5af07b88571411ba0c17969dad0e1a59cca0 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Thu, 21 Aug 2025 15:37:37 +0800 Subject: [PATCH 01/33] =?UTF-8?q?aibarglow=E3=80=81roundedrectflowlight?= =?UTF-8?q?=E7=AD=89=E6=95=88=E6=9E=9C=E7=A7=BB=E6=A4=8D=E5=88=B0=E6=96=B0?= =?UTF-8?q?=E9=80=9A=E8=B7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lingzhengyang --- BUILD.gn | 1 + include/ge_frame_gradient_shader_mask.h | 51 ++++++ include/ge_shader_filter_params.h | 85 +++++++++ include/ge_visual_effect_impl.h | 126 ++++++++++++- src/ge_frame_gradient_shader_mask.cpp | 121 +++++++++++++ src/ge_render.cpp | 56 +++++- src/ge_visual_effect.cpp | 8 + src/ge_visual_effect_impl.cpp | 98 +++++++++- test/unittest/BUILD.gn | 2 + .../ge_frame_gradient_shader_mask_test.cpp | 170 ++++++++++++++++++ 10 files changed, 714 insertions(+), 4 deletions(-) create mode 100644 include/ge_frame_gradient_shader_mask.h create mode 100644 src/ge_frame_gradient_shader_mask.cpp create mode 100644 test/unittest/ge_frame_gradient_shader_mask_test.cpp diff --git a/BUILD.gn b/BUILD.gn index 340b28c..1f9cd06 100755 --- a/BUILD.gn +++ b/BUILD.gn @@ -70,6 +70,7 @@ ohos_source_set("graphics_effect_src") { "src/ge_edge_light_shader_filter.cpp", "src/ge_external_dynamic_loader.cpp", "src/ge_filter_composer.cpp", + "src/ge_frame_gradient_shader_mask.cpp", "src/ge_grey_shader_filter.cpp", "src/ge_kawase_blur_shader_filter.cpp", "src/ge_linear_gradient_blur_shader_filter.cpp", diff --git a/include/ge_frame_gradient_shader_mask.h b/include/ge_frame_gradient_shader_mask.h new file mode 100644 index 0000000..520ecf1 --- /dev/null +++ b/include/ge_frame_gradient_shader_mask.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef GRAPHICS_EFFECT_GE_FRAME_GRADIENT_MASK_H +#define GRAPHICS_EFFECT_GE_FRAME_GRADIENT_MASK_H + +#include "draw/canvas.h" +#include "ge_shader_mask.h" +#include "ge_shader_filter_params.h" +#include "ge_log.h" + +namespace OHOS { +namespace Rosen { +namespace Drawing { + +class GE_EXPORT GEFrameGradientShaderMask : public GEShaderMask { +public: + GEFrameGradientShaderMask(const GEFrameGradientMaskParams& param); + GEFrameGradientShaderMask(const GEFrameGradientShaderMask&) = delete; + GEFrameGradientShaderMask operator=(const GEFrameGradientShaderMask&) = delete; + GEFrameGradientShaderMask(GEFrameGradientShaderMask&&) = delete; + GEFrameGradientShaderMask& operator=(GEFrameGradientShaderMask&&) = delete; + ~GEFrameGradientShaderMask() override = default; + + + std::shared_ptr GenerateDrawingShader(float width, float height) const override; + std::shared_ptr GenerateDrawingShaderHasNormal(float width, float height) const override; + +private: + void MakeFrameGradientMaskShaderEffect() const; + Vector4f gradientBezierControlPoints_; + float cornerRadius_ = 0.0f; + float frameWidth_ = 0.0f; +}; +} // Drawing +} // namespace Rosen +} // namespace OHOS + +#endif // GRAPHICS_EFFECT_GE_FRAME_GRADIENT_MASK_H \ No newline at end of file diff --git a/include/ge_shader_filter_params.h b/include/ge_shader_filter_params.h index 25b5b4a..126372b 100644 --- a/include/ge_shader_filter_params.h +++ b/include/ge_shader_filter_params.h @@ -17,6 +17,7 @@ #include #include +#include #include #include "common/rs_vector2.h" @@ -520,6 +521,90 @@ struct GEBorderLightShaderParams { float cornerRadius = 0.0f; }; +const char GEX_SHADER_AIBAR_GLOW[] = "AIBarGlow"; +const char GEX_SHADER_AIBAR_GLOW_LTWH[] = "AIBarGlow_LTWH"; +const char GEX_SHADER_AIBAR_GLOW_STRECTCH_FACTOR[] = "AIBarGlow_StretchFactor"; +const char GEX_SHADER_AIBAR_GLOW_BAR_ANGLE[] = "AIBarGlow_BarAngle"; +const char GEX_SHADER_AIBAR_GLOW_COLOR0[] = "AIBarGlow_Color0"; +const char GEX_SHADER_AIBAR_GLOW_COLOR1[] = "AIBarGlow_Color1"; +const char GEX_SHADER_AIBAR_GLOW_COLOR2[] = "AIBarGlow_Color2"; +const char GEX_SHADER_AIBAR_GLOW_COLOR3[] = "AIBarGlow_Color3"; +const char GEX_SHADER_AIBAR_GLOW_POS0[] = "AIBarGlow_Position0"; +const char GEX_SHADER_AIBAR_GLOW_POS1[] = "AIBarGlow_Position1"; +const char GEX_SHADER_AIBAR_GLOW_POS2[] = "AIBarGlow_Position2"; +const char GEX_SHADER_AIBAR_GLOW_POS3[] = "AIBarGlow_Position3"; +const char GEX_SHADER_AIBAR_GLOW_STRENGTH[] = "AIBarGlow_Strength"; +const char GEX_SHADER_AIBAR_GLOW_BRIGHTNESS[] = "AIBarGlow_Brightness"; +const char GEX_SHADER_AIBAR_GLOW_PROGRESS[] = "AIBarGlow_Progress"; +struct GEXAIBarGlowEffectParams { + Vector4f LTWH; + float stretchFactor = 0.0f; + float barAngle = 0.0f; + std::array colors; + std::array, 4> positions; + Vector4f strengths; + float brightness; + float progress; +} + +const char GEX_SHADER_ROUNDED_RECT_FLOWLIGHT[] = "RoundedRectFlowlight"; +const char GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_START_END_POS[] = "RoundedRectFlowlight_StartEndPosition"; +const char GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_WAVE_LENGTH[] = "RoundedRectFlowlight_WaveLength"; +const char GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_WAVE_TOP[] = "RoundedRectFlowlight_WaveTop"; +const char GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_CORNER_RADIUS[] = "RoundedRectFlowlight_CornerRadius"; +const char GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_BRIGHTNESS[] = "RoundedRectFlowlight_Brightness"; +const char GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_SCALE[] = "RoundedRectFlowlight_Scale"; +const char GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_SHARPING[] = "RoundedRectFlowlight_Sharping"; +const char GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_FEATHERING[] = "RoundedRectFlowlight_Feathering"; +const char GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_FEATHERING_BEZIER_CONTROL_POINTS[] = + "RoundedRectFlowlight_FeatheringBezierControlPoints"; +const char GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_GRADIENT_BEZIER_CONTROL_POINTS[] = + "RoundedRectFlowlight_GradientBezierControlPoints"; +const char GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_COLOR[] = "RoundedRectFlowlight_Color"; +const char GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_PROGRESS[] = "RoundedRectFlowlight_Progress"; +struct GEXRoundedRectFlowlightEffectParams { + std::pair startEndPosition; + float waveLength = 0.0f; + float waveTop = 0.0f; + float cornerRadius = 0.0f; + float brightness = 0.0f; + float scale = 0.0f; + float sharping = 0.0f; + float feathering = 0.0f; + Vector4f featheringBezierControlPoints; + Vector4f gradientBezierControlPoints; + Vector4f color; + float progress = 0.0f; +} + +const char GEX_SHADER_GRADIENT_FLOW_COLORS[] = "GradientFlowColors"; +const char GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR0[] = "GradientFlowColors_Color0"; +const char GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR1[] = "GradientFlowColors_Color1"; +const char GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR2[] = "GradientFlowColors_Color2"; +const char GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR3[] = "GradientFlowColors_Color3"; +const char GEX_SHADER_GRADIENT_FLOW_COLORS_GRADIENT_BEGIN[] = "GradientFlowColors_GradientBegin"; +const char GEX_SHADER_GRADIENT_FLOW_COLORS_GRADIENT_END[] = "GradientFlowColors_GradientEnd"; +const char GEX_SHADER_GRADIENT_FLOW_COLORS_EFFECT_ALPHA[] = "GradientFlowColors_EffectAlpha"; +const char GEX_SHADER_GRADIENT_FLOW_COLORS_PROGRESS[] = "GradientFlowColors_Progress"; +struct GEXGradientFlowColorsEffectParams { + std::array colors; + float gradientBegin = 0.0f; + float gradientEnd = 0.0f; + float effectAlpha = 0.0f; + float progress = 0.0f; +} + +const char GE_MASK_FRAME_GRADIENT[] = "FrameGradientMask"; +const char GE_MASK_FRAME_GRADIENT_GRADIENT_BEZIER_CONTROL_POINTS[] = + "FrameGradientMask_GradientBezierControlPoints"; +const char GE_MASK_FRAME_GRADIENT_CORNER_RADIUS[] = "FrameGradientMask_CornerRadius"; +const char GE_MASK_FRAME_GRADIENT_FRAME_WIDTH[] = "FrameGradientMask_FrameWidth"; +struct GEFrameGradientMaskParams { + Vector4f gradientBezierControlPoints; + float cornerRadius = 0.0f; + float frameWidth = 0.0f; +} + } // namespace Drawing } // namespace Rosen } // namespace OHOS diff --git a/include/ge_visual_effect_impl.h b/include/ge_visual_effect_impl.h index 98765f4..09c7437 100644 --- a/include/ge_visual_effect_impl.h +++ b/include/ge_visual_effect_impl.h @@ -15,7 +15,11 @@ #ifndef GRAPHICS_EFFECT_GE_VISUAL_EFFECT_IMPL_H #define GRAPHICS_EFFECT_GE_VISUAL_EFFECT_IMPL_H +#include +#include +#include #include +#include #include #include @@ -23,6 +27,7 @@ #include "ge_shader_filter.h" #include "ge_shader_filter_params.h" #include "ge_visual_effect.h" +#include "ge_log.h" #include "common/rs_vector3.h" #include "common/rs_vector4.h" @@ -55,6 +60,7 @@ public: PIXEL_MAP_MASK, RADIAL_GRADIENT_MASK, WAVE_GRADIENT_MASK, + FRAME_GRADIENT_MASK, // Shader DOT_MATRIX, FLOW_LIGHT_SWEEP, @@ -73,6 +79,9 @@ public: VARIABLE_RADIUS_BLUR, COLOR_GRADIENT_EFFECT, LIGHT_CAVE, + AIBAR_GLOW, + ROUNDED_RECT_FLOWLIGHT, + GRADIENT_FLOW_COLORS, MAX }; @@ -80,6 +89,19 @@ public: ~GEVisualEffectImpl(); + template + using TagMap = std::map&, const auto&)>>; + + template + void applyPropertyParams(const std::string& tag, const auto& value, std::shared_ptr& params, const TagMap& tagMap) { + auto it = tagMap.find(tag); + if (it != tagMap.end()) { + it->second(params, value); + } else { + GE_LOGE("GEVisualEffectImpl Tag %{public}c not found", tag.c_str()); + } + } + void SetParam(const std::string& tag, int32_t param); void SetParam(const std::string& tag, int64_t param); void SetParam(const std::string& tag, float param); @@ -412,6 +434,46 @@ public: return borderLightParams_; } + void MakeAIBarGlowEffectParams() + { + AIBarGlowEffectParams_ = std::make_shared(); + } + + const std::shared_ptr& GetAIBarGlowEffectParams() const + { + return AIBarGlowEffectParams_; + } + + void MakeRoundedRectFlowlightEffectParams() + { + roundedRectFlowlightEffectParams_ = std::make_shared(); + } + + const std::shared_ptr& GetRoundedRectFlowlightEffectParams() const + { + return roundedRectFlowlightEffectParams_; + } + + void MakeGradientFlowColorsEffectParams() + { + gradientFlowColorsEffectParams_ = std::make_shared(); + } + + const std::shared_ptr& GetGradientFlowColorsEffectParams() const + { + return gradientFlowColorsEffectParams_; + } + + void MakeFrameGradientMaskParams() + { + frameGradientMaskParams_ = std::make_shared(); + } + + const std::shared_ptr& GetFrameGradientMaskParams() const + { + return frameGradientMaskParams_; + } + private: static std::map> g_initialMap; std::shared_ptr cacheAnyPtr_ = nullptr; @@ -457,6 +519,65 @@ private: void SetBorderLightParams(const std::string& tag, const Vector4f& param); void SetBorderLightParams(const std::string& tag, float param); + #define ADD_TAG_HANDLER(type, tag, member) \ + tagMap[tag] = [](std::shared_ptr¶ms, const auto& value) { \ + params->member = value;\ + } + + TagMap AIBarGlowEffectTagMap_{ + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_LTWH, LTWH), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_STRECTCH_FACTOR, stretchFactor), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_BAR_ANGLE, barAngle), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_COLOR0, colors[0]), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_COLOR1, colors[1]), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_COLOR2, colors[2]), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_COLOR3, colors[3]), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_POS0, positions[0]), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_POS1, positions[1]), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_POS2, positions[2]), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_POS3, positions[3]), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_BRIGHTNESS, brightness), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_PROGRESS, progress), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_STRENGTH, strengths), + } + + TagMap roundedRectFlowlightEffectTagMap_{ + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_START_END_POS, startEndPosition), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_WAVE_LENGTH, waveLength), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_WAVE_TOP, waveTop), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_CORNER_RADIUS, cornerRadius), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_BRIGHTNESS, brightness), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_SCALE, scale), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_SHARPING, sharping), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_FEATHERING, feathering), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_FEATHERING_BEZIER_CONTROL_POINTS, + featheringBezierControlPoints), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_GRADIENT_BEZIER_CONTROL_POINTS, + gradientBezierControlPoints), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_COLOR, color), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_PROGRESS, progress), + } + + TagMap gradientFlowColorsEffectTagMap_{ + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR0, colors[0]), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR1, colors[1]), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR2, colors[2]), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR3, colors[3]), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_GRADIENT_BEGIN, gradientBegin), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_GRADIENT_END, gradientEnd), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_EFFECT_ALPHA, effectAlpha), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_PROGRESS, progress), + } + + TagMap frameGradientMaskTagMap_{ + ADD_TAG_HANDLER(GEFrameGradientMaskParams, GE_MASK_FRAME_GRADIENT_GRADIENT_BEZIER_CONTROL_POINTS, + gradientBezierControlPoints), + ADD_TAG_HANDLER(GEFrameGradientMaskParams, GE_MASK_FRAME_GRADIENT_CORNER_RADIUS, cornerRadius), + ADD_TAG_HANDLER(GEFrameGradientMaskParams, GE_MASK_FRAME_GRADIENT_FRAME_WIDTH, frameWidth), + } + + #undef ADD_TAG_HANDLER + FilterType filterType_ = GEVisualEffectImpl::FilterType::NONE; // ShaderFilter Params @@ -492,10 +613,13 @@ private: std::shared_ptr colorGradientEffectParams_ = nullptr; std::shared_ptr lightCaveShaderParams_ = nullptr; std::shared_ptr borderLightParams_ = nullptr; + std::shared_ptr AIBarGlowEffectParams_ = nullptr; + std::shared_ptr roundedRectFlowlightEffectParams_ = nullptr; + std::shared_ptr gradientFlowColorsEffectParams_ = nullptr; + std::shared_ptr frameGradientMaskParams_ = nullptr; }; } // namespace Drawing } // namespace Rosen } // namespace OHOS - #endif // GRAPHICS_EFFECT_GE_VISUAL_EFFECT_IMPL_H diff --git a/src/ge_frame_gradient_shader_mask.cpp b/src/ge_frame_gradient_shader_mask.cpp new file mode 100644 index 0000000..e8c0a39 --- /dev/null +++ b/src/ge_frame_gradient_shader_mask.cpp @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "ge_log.h" +#include "ge_frame_gradient_shader_mask.h" + +namespace OHOS { +namespace Rosen { +namespace Drawing { +namespace{ +thread_local static std::shared_ptr frameGradientMaskShaderEffect_ = nullptr; +} +GEFrameGradientShaderMask::GEFrameGradientShaderMask(const GEFrameGradientMaskParams& param) : + gradientBezierControlPoints_(param.gradientBezierControlPoints), cornerRadius_(param.cornerRadius), frameWidth_(param.frameWidth) + {} + +std::shared_ptr GEFrameGradientShaderMask::GenerateDrawingShader(float width, float height) const +{ + MakeFrameGradientMaskShaderEffect(); + if (!frameGradientMaskShaderEffect_ || cornerRadius_ < 0.0 || frameWidth_ < 0.0 || width <= 0.0 || height <= 0.0) { + LOGE("GEFrameGradientShaderMask::GenerateDrawingShader create builder error"); + return nullptr; + } + auto maskBuilder = std::make_shared(frameGradientMaskShaderEffect_); + maskBuilder->SetUniform("iResolution", width, height); + std::array gradientBezier = {gradientBezierControlPoints_[0], gradientBezierControlPoints_[1], + gradientBezierControlPoints_[2], gradientBezierControlPoints_[3]} + maskBuilder->SetUniform("gradientBezierControlPoints", gradientBezier.data(), 4); + maskBuilder->SetUniform("cornerRadius", cornerRadius_); + maskBuilder->SetUniform("frameWidth", frameWidth_); + auto maskShader = maskBuilder->MakeShader(nullptr, false); + if (!maskShader) { + LOGE("GEFrameGradientShaderMask::GenerateDrawingShader effect error"); + } + return maskShader; +} + +std::shared_ptr GEFrameGradientShaderMask::GenerateDrawingShaderHasNormal(float width, float height) const +{ + MakeFrameGradientMaskShaderEffect(); + if (!frameGradientMaskShaderEffect_ || cornerRadius_ < 0.0 || frameWidth_ < 0.0 || width <= 0.0 || height <= 0.0) { + LOGE("GEFrameGradientShaderMask::GenerateDrawingShader create builder error"); + return nullptr; + } + auto maskBuilder = std::make_shared(frameGradientMaskShaderEffect_); + maskBuilder->SetUniform("iResolution", width, height); + std::array gradientBezier = {gradientBezierControlPoints_[0], gradientBezierControlPoints_[1], + gradientBezierControlPoints_[2], gradientBezierControlPoints_[3]} + maskBuilder->SetUniform("gradientBezierControlPoints", gradientBezier.data(), 4); + maskBuilder->SetUniform("cornerRadius", cornerRadius_); + maskBuilder->SetUniform("frameWidth", frameWidth_); + auto maskShader = maskBuilder->MakeShader(nullptr, false); + if (!maskShader) { + LOGE("GEFrameGradientShaderMask::GenerateDrawingShaderHasNormal effect error"); + } + return maskShader; +} + +void GEFrameGradientShaderMask::MakeFrameGradientMaskShaderEffect() const +{ + if (frameGradientMaskShaderEffect_) { + return ; + } + + static const std::string maskString(R"( + uniform half2 iResolution; + uniform half4 gradientBezierControlPoints; + uniform half frameWidth; + uniform half cornerRadius; + + half sdRoundedBox(half2 p, half2 b, half r) + { + half2 q = abs(p) - b + r; + return (min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - r); + } + + half cubicBezierInterpolation(half4 controlPoints, half t) + { + // [(1-t)^3 * {0,0} + 3(1-t)^2 * t * CP.xy + 3t^2 * (1-t) * CP.zw + t^3 * {1,1}].y + half2 XY = controlPoints.yw + controlPoints.yw + controlPoints.yw; + return (((1.0 + XY.x - XY.y) * t - XY.x - XY.x + XY.y) * t + XY.x) * t; + } + + half4 main(float2 fragCoord) { + half2 uv = fragCoord.xy / iResolution.xy; + half screenRatio = iResolution.x / iResolution.y; + uv = uv * 2.0 - 1.0; + uv.x *= screenRatio; + half sdfRRect = + abs(sdRoundedBox(uv.xy, vec2(screenRatio, 1.0), + clamp(cornerRadius, 0.0, min(screenRatio, 1.0)))); + sdfRRect = (sdfRRect - frameWidth) / (-frameWidth - 1e-6); + sdfRRect = cubicBezierInterpolation(gradientBezierControlPoints, clamp(sdfRRect, 0.0, 1.0)); + return half4(sdfRRect); + } + )"); + + frameGradientMaskShaderEffect_ = Drawing::RuntimeEffect::CreateForShader(maskString); + if (frameGradientMaskShaderEffect_ == nullptr) { + LOGE("GEFrameGradientShaderMask::MakeFrameGradientMaskShaderEffect error"); + } + +} + +} // namespace Drawing +} // namespace Rosen +} // namespace OHOS \ No newline at end of file diff --git a/src/ge_render.cpp b/src/ge_render.cpp index 413f251..ca11c4e 100755 --- a/src/ge_render.cpp +++ b/src/ge_render.cpp @@ -142,7 +142,61 @@ static std::unordered_map g_shade out = std::make_shared(*params); return out; } - } + }, + {GEVisualEffectImpl::FilterType::AIBAR_GLOW, [] (std::shared_ptr ve) + { + std::shared_ptr out = nullptr; + const auto& params = ve->GetAIBarGlowEffectParams(); + if (!ve || !params) { + return out; + } + auto type = static_cast(Drawing::GEVisualEffectImpl::FilterType::AIBAR_GLOW); + auto impl = GEExternalDynamicLoader::GetInstance().CreateGEXObjectByType( + type, sizeof(GEXAIBarGlowEffectParams), static_cast(params.get())); + if (!impl) { + GE_LOGE("GEXAIBarGlowEffect::CreateDynamicImpl create object failed."); + return out; + } + std::shared_ptr dmShader(static_cast(impl)); + return dmShader; + } + }, + {GEVisualEffectImpl::FilterType::ROUNDED_RECT_FLOWLIGHT, [] (std::shared_ptr ve) + { + std::shared_ptr out = nullptr; + const auto& params = ve->GetRoundedRectFlowlightEffectParams(); + if (!ve || !params) { + return out; + } + auto type = static_cast(Drawing::GEVisualEffectImpl::FilterType::ROUNDED_RECT_FLOWLIGHT); + auto impl = GEExternalDynamicLoader::GetInstance().CreateGEXObjectByType( + type, sizeof(GEXRoundedRectFlowlightEffectParams), static_cast(params.get())); + if (!impl) { + GE_LOGE("GEXRoundedRectFlowlightEffect::CreateDynamicImpl create object failed."); + return out; + } + std::shared_ptr dmShader(static_cast(impl)); + return dmShader; + } + }, + {GEVisualEffectImpl::FilterType::GRADIENT_FLOW_COLORS, [] (std::shared_ptr ve) + { + std::shared_ptr out = nullptr; + const auto& params = ve->GetFrameGradientMaskParams(); + if (!ve || !params) { + return out; + } + auto type = static_cast(Drawing::GEVisualEffectImpl::FilterType::GRADIENT_FLOW_COLORS); + auto impl = GEExternalDynamicLoader::GetInstance().CreateGEXObjectByType( + type, sizeof(GEXGradientFlowColorsEffectParams), static_cast(params.get())); + if (!impl) { + GE_LOGE("GEXGradientFlowColorsEffect::CreateDynamicImpl create object failed."); + return out; + } + std::shared_ptr dmShader(static_cast(impl)); + return dmShader; + } + }, }; GERender::GERender() {} diff --git a/src/ge_visual_effect.cpp b/src/ge_visual_effect.cpp index 3ef84bc..2d6edb4 100644 --- a/src/ge_visual_effect.cpp +++ b/src/ge_visual_effect.cpp @@ -22,6 +22,7 @@ #include "ge_ripple_shader_mask.h" #include "ge_double_ripple_shader_mask.h" #include "ge_wave_gradient_shader_mask.h" +#include "ge_frame_gradient_shader_mask.h" namespace OHOS { namespace Rosen { @@ -170,6 +171,13 @@ const std::shared_ptr GEVisualEffect::GenerateShaderMask( } return std::make_shared(*waveParams); } + case GEVisualEffectImpl::FilterType::FRAME_GRADIENT_MASK: { + auto frameParams = impl->GetFrameGradientMaskParams(); + if (frameParams == nullptr) { + return nullptr; + } + return std::make_shared(*frameParams); + } default: return nullptr; } diff --git a/src/ge_visual_effect_impl.cpp b/src/ge_visual_effect_impl.cpp index 6d9db34..0591c09 100644 --- a/src/ge_visual_effect_impl.cpp +++ b/src/ge_visual_effect_impl.cpp @@ -16,7 +16,6 @@ #include "ge_shader_filter_params.h" #include "ge_visual_effect_impl.h" -#include "ge_log.h" #include "ge_external_dynamic_loader.h" #include "common/rs_vector4.h" #include "common/rs_vector3.h" @@ -199,7 +198,32 @@ std::map> GEVisualEf impl->SetFilterType(GEVisualEffectImpl::FilterType::BORDER_LIGHT); impl->MakeBorderLightParams(); } - } + }, + { GEX_SHADER_AIBAR_GLOW, + [](GEVisualEffectImpl* impl) { + impl->SetFilterType(GEVisualEffectImpl::FilterType::AIBAR_GLOW); + impl->MakeAIBarGlowEffectParams(); + } + }, + { GEX_SHADER_ROUNDED_RECT_FLOWLIGHT, + [](GEVisualEffectImpl* impl) { + impl->SetFilterType(GEVisualEffectImpl::FilterType::ROUNDED_RECT_FLOWLIGHT); + impl->MakeRoundedRectFlowlightEffectParams(); + } + }, + { GEX_SHADER_GRADIENT_FLOW_COLORS, + [](GEVisualEffectImpl* impl) { + impl->SetFilterType(GEVisualEffectImpl::FilterType::GRADIENT_FLOW_COLORS); + impl->MakeGradientFlowColorsEffectParams(); + } + }, + { GEX_MASK_FRAME_GRADIENT, + [](GEVisualEffectImpl* impl) { + impl->SetFilterType(GEVisualEffectImpl::FilterType::FRAME_GRADIENT_MASK); + impl->MakeFrameGradientMaskParams(); + } + }, + }; GEVisualEffectImpl::GEVisualEffectImpl(const std::string& name) @@ -409,6 +433,34 @@ void GEVisualEffectImpl::SetParam(const std::string& tag, float param) SetBorderLightParams(tag, param); break; } + case FilterType::FRAME_GRADIENT_MASK: { + if (frameGradientMaskParams_ == nullptr) { + return; + } + applyPropertyParams(tag, param, frameGradientMaskParams_, frameGradientMaskTagMap_); + break; + } + case FilterType::AIBAR_GLOW: { + if (AIBarGlowEffectParams_ == nullptr) { + return; + } + applyPropertyParams(tag, param, AIBarGlowEffectParams_, AIBarGlowEffectTagMap_); + break; + } + case FilterType::ROUNDED_RECT_FLOWLIGHT: { + if (roundedRectFlowlightEffectParams_ == nullptr) { + return; + } + applyPropertyParams(tag, param, roundedRectFlowlightEffectParams_, roundedRectFlowlightEffectTagMap_); + break; + } + case FilterType::GRADIENT_FLOW_COLORS: { + if (gradientFlowColorsEffectParams_ == nullptr) { + return; + } + applyPropertyParams(tag, param, gradientFlowColorsEffectParams_, gradientFlowColorsEffectTagMap_); + break; + } default: break; } @@ -530,6 +582,20 @@ void GEVisualEffectImpl::SetParam(const std::string& tag, const std::pair + +#include "ge_frame_gradient_shader_mask.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { +namespace Rosen { +namespace Drawing { + +class GEFrameGradientShaderMaskTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void GEFrameGradientShaderMaskTest::SetUpTestCase(void) {} + +void GEFrameGradientShaderMaskTest::TearDownTestCase(void) {} + +void GEFrameGradientShaderMaskTest::SetUp() {} + +void GEFrameGradientShaderMaskTest::TearDown() {} + +/** + * @tc.name: GenerateDrawingShader_001 + * @tc.desc: Verify the GenerateDrawingShader function + * @tc.type: FUNC + */ +HWTEST_F(GEFrameGradientShaderMaskTest, GenerateDrawingShader_001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShader_001 start"; + + GEFrameGradientMaskParams param; + param.gradientBezierControlPoints = {0.0f, 0.0f, 0.0f, 0.0f}; + param.cornerRadius = 0.0f; + param.frameWidth = 0.0f; + + GEFrameGradientShaderMask mask(param); + auto shaderEffect = gePixelMapShaderMask->GenerateDrawingShader(50.f, 50.f); + EXPECT_EQ(shaderEffect, nullptr); + + GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShader_001 end"; +} + +/** + * @tc.name: GenerateDrawingShader_002 + * @tc.desc: Verify the GenerateDrawingShader function + * @tc.type: FUNC + */ +HWTEST_F(GEFrameGradientShaderMaskTest, GenerateDrawingShader_002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShader_002 start"; + + GEFrameGradientMaskParams param; + param.gradientBezierControlPoints = {0.0f, 0.0f, 0.0f, 0.0f}; + param.cornerRadius = -1.0f; + param.frameWidth = 0.0f; + + GEFrameGradientShaderMask mask(param); + auto shaderEffect = gePixelMapShaderMask->GenerateDrawingShader(50.f, 50.f); + EXPECT_EQ(shaderEffect, nullptr); + + GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShader_002 end"; +} + +/** + * @tc.name: GenerateDrawingShader_003 + * @tc.desc: Verify the GenerateDrawingShader function + * @tc.type: FUNC + */ +HWTEST_F(GEFrameGradientShaderMaskTest, GenerateDrawingShader_003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShader_003 start"; + + GEFrameGradientMaskParams param; + param.gradientBezierControlPoints = {0.0f, 0.0f, 0.0f, 0.0f}; + param.cornerRadius = 0.0f; + param.frameWidth = -1.0f; + + GEFrameGradientShaderMask mask(param); + auto shaderEffect = gePixelMapShaderMask->GenerateDrawingShader(50.f, 50.f); + EXPECT_EQ(shaderEffect, nullptr); + + GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShader_003 end"; +} + +/** + * @tc.name: GenerateDrawingShaderHasNormal_001 + * @tc.desc: Verify the GenerateDrawingShaderHasNormal function + * @tc.type: FUNC + */ +HWTEST_F(GEFrameGradientShaderMaskTest, GenerateDrawingShaderHasNormal_001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShaderHasNormal_001 start"; + + GEFrameGradientMaskParams param; + param.gradientBezierControlPoints = {0.0f, 0.0f, 0.0f, 0.0f}; + param.cornerRadius = 0.0f; + param.frameWidth = 0.0f; + + GEFrameGradientShaderMask mask(param); + auto shaderEffect = gePixelMapShaderMask->GenerateDrawingShaderHasNormal(50.f, 50.f); + EXPECT_EQ(shaderEffect, nullptr); + + GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShaderHasNormal_001 end"; +} + +/** + * @tc.name: GenerateDrawingShaderHasNormal_002 + * @tc.desc: Verify the GenerateDrawingShaderHasNormal function + * @tc.type: FUNC + */ +HWTEST_F(GEFrameGradientShaderMaskTest, GenerateDrawingShaderHasNormal_002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShaderHasNormal_002 start"; + + GEFrameGradientMaskParams param; + param.gradientBezierControlPoints = {0.0f, 0.0f, 0.0f, 0.0f}; + param.cornerRadius = -1.0f; + param.frameWidth = 0.0f; + + GEFrameGradientShaderMask mask(param); + auto shaderEffect = gePixelMapShaderMask->GenerateDrawingShaderHasNormal(50.f, 50.f); + EXPECT_EQ(shaderEffect, nullptr); + + GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShaderHasNormal_002 end"; +} + +/** + * @tc.name: GenerateDrawingShaderHasNormal_003 + * @tc.desc: Verify the GenerateDrawingShader function + * @tc.type: FUNC + */ +HWTEST_F(GEFrameGradientShaderMaskTest, GenerateDrawingShaderHasNormal_003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShaderHasNormal_003 start"; + + GEFrameGradientMaskParams param; + param.gradientBezierControlPoints = {0.0f, 0.0f, 0.0f, 0.0f}; + param.cornerRadius = 0.0f; + param.frameWidth = -1.0f; + + GEFrameGradientShaderMask mask(param); + auto shaderEffect = gePixelMapShaderMask->GenerateDrawingShader(50.f, 50.f); + EXPECT_EQ(shaderEffect, nullptr); + + GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShaderHasNormal_003 end"; +} +} // namespace Drawing +} // namespace Rosen +} // namespace OHOS -- Gitee From 17855a1fed96c1aff66fabe1fd9d7f7c3f9bb900 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Thu, 21 Aug 2025 14:14:29 +0000 Subject: [PATCH 02/33] update include/ge_visual_effect_impl.h. Signed-off-by: lingzhengyang --- include/ge_visual_effect_impl.h | 100 ++++++++++++++++++-------------- 1 file changed, 58 insertions(+), 42 deletions(-) diff --git a/include/ge_visual_effect_impl.h b/include/ge_visual_effect_impl.h index 09c7437..992494e 100644 --- a/include/ge_visual_effect_impl.h +++ b/include/ge_visual_effect_impl.h @@ -90,7 +90,7 @@ public: ~GEVisualEffectImpl(); template - using TagMap = std::map&, const auto&)>>; + using TagMap = std::map&, const std::any&)>>; template void applyPropertyParams(const std::string& tag, const auto& value, std::shared_ptr& params, const TagMap& tagMap) { @@ -519,61 +519,77 @@ private: void SetBorderLightParams(const std::string& tag, const Vector4f& param); void SetBorderLightParams(const std::string& tag, float param); - #define ADD_TAG_HANDLER(type, tag, member) \ - tagMap[tag] = [](std::shared_ptr¶ms, const auto& value) { \ - params->member = value;\ - } + #define ADD_TAG_HANDLER(type, tag, member, valueType) \ + {#tag, [](std::shared_ptr¶ms, const std::any& value) { \ + params->member = std::any_cast(value);\ + }} + + using PairFloat = std::pair; TagMap AIBarGlowEffectTagMap_{ - ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_LTWH, LTWH), - ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_STRECTCH_FACTOR, stretchFactor), - ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_BAR_ANGLE, barAngle), - ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_COLOR0, colors[0]), - ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_COLOR1, colors[1]), - ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_COLOR2, colors[2]), - ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_COLOR3, colors[3]), - ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_POS0, positions[0]), - ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_POS1, positions[1]), - ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_POS2, positions[2]), - ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_POS3, positions[3]), - ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_BRIGHTNESS, brightness), - ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_PROGRESS, progress), - ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_STRENGTH, strengths), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_LTWH, LTWH, Vector4f), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_STRECTCH_FACTOR, + stretchFactor, float), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_BAR_ANGLE, barAngle, float), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_COLOR0, colors[0], Vector4f), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_COLOR1, colors[1], Vector4f), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_COLOR2, colors[2], Vector4f), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_COLOR3, colors[3], Vector4f), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_POS0, positions[0], PairFloat), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_POS1, positions[1], PairFloat), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_POS2, positions[2], PairFloat), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_POS3, positions[3], PairFloat), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_BRIGHTNESS, brightness, float), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_PROGRESS, progress, float), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_STRENGTH, strengths, Vector4f), } TagMap roundedRectFlowlightEffectTagMap_{ - ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_START_END_POS, startEndPosition), - ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_WAVE_LENGTH, waveLength), - ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_WAVE_TOP, waveTop), - ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_CORNER_RADIUS, cornerRadius), - ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_BRIGHTNESS, brightness), - ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_SCALE, scale), - ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_SHARPING, sharping), - ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_FEATHERING, feathering), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_START_END_POS, + startEndPosition, PairFloat), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_WAVE_LENGTH, + waveLength, float), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_WAVE_TOP, + waveTop, float), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_CORNER_RADIUS, + cornerRadius, float), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_BRIGHTNESS, + brightness, float), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_SCALE, + scale, float), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_SHARPING, + sharping, float), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_FEATHERING, + feathering, float), ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_FEATHERING_BEZIER_CONTROL_POINTS, - featheringBezierControlPoints), + featheringBezierControlPoints, Vector4f), ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_GRADIENT_BEZIER_CONTROL_POINTS, - gradientBezierControlPoints), - ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_COLOR, color), - ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_PROGRESS, progress), + gradientBezierControlPoints, Vector4f), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_COLOR, + color, Vector4f), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_PROGRESS, + progress, float), } TagMap gradientFlowColorsEffectTagMap_{ - ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR0, colors[0]), - ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR1, colors[1]), - ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR2, colors[2]), - ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR3, colors[3]), - ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_GRADIENT_BEGIN, gradientBegin), - ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_GRADIENT_END, gradientEnd), - ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_EFFECT_ALPHA, effectAlpha), - ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_PROGRESS, progress), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR0, colors[0], Vector4f), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR1, colors[1], Vector4f), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR2, colors[2], Vector4f), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR3, colors[3], Vector4f), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_GRADIENT_BEGIN, + gradientBegin, float), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_GRADIENT_END, + gradientEnd, float), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_EFFECT_ALPHA, + effectAlpha, float), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_PROGRESS, progress, float), } TagMap frameGradientMaskTagMap_{ ADD_TAG_HANDLER(GEFrameGradientMaskParams, GE_MASK_FRAME_GRADIENT_GRADIENT_BEZIER_CONTROL_POINTS, - gradientBezierControlPoints), - ADD_TAG_HANDLER(GEFrameGradientMaskParams, GE_MASK_FRAME_GRADIENT_CORNER_RADIUS, cornerRadius), - ADD_TAG_HANDLER(GEFrameGradientMaskParams, GE_MASK_FRAME_GRADIENT_FRAME_WIDTH, frameWidth), + gradientBezierControlPoints, Vector4f), + ADD_TAG_HANDLER(GEFrameGradientMaskParams, GE_MASK_FRAME_GRADIENT_CORNER_RADIUS, cornerRadius, float), + ADD_TAG_HANDLER(GEFrameGradientMaskParams, GE_MASK_FRAME_GRADIENT_FRAME_WIDTH, frameWidth, float), } #undef ADD_TAG_HANDLER -- Gitee From 9bee659a81c4df3673dfd12122898ab51b05410a Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Thu, 21 Aug 2025 14:17:56 +0000 Subject: [PATCH 03/33] update src/ge_visual_effect_impl.cpp. Signed-off-by: lingzhengyang --- src/ge_visual_effect_impl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ge_visual_effect_impl.cpp b/src/ge_visual_effect_impl.cpp index 0591c09..a01d5af 100644 --- a/src/ge_visual_effect_impl.cpp +++ b/src/ge_visual_effect_impl.cpp @@ -217,7 +217,7 @@ std::map> GEVisualEf impl->MakeGradientFlowColorsEffectParams(); } }, - { GEX_MASK_FRAME_GRADIENT, + { GE_MASK_FRAME_GRADIENT, [](GEVisualEffectImpl* impl) { impl->SetFilterType(GEVisualEffectImpl::FilterType::FRAME_GRADIENT_MASK); impl->MakeFrameGradientMaskParams(); -- Gitee From 53ae47ebff2d7034be951bef72ff6fdcbe8e82cb Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Thu, 21 Aug 2025 14:19:01 +0000 Subject: [PATCH 04/33] update src/ge_frame_gradient_shader_mask.cpp. Signed-off-by: lingzhengyang --- src/ge_frame_gradient_shader_mask.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ge_frame_gradient_shader_mask.cpp b/src/ge_frame_gradient_shader_mask.cpp index e8c0a39..34dbd66 100644 --- a/src/ge_frame_gradient_shader_mask.cpp +++ b/src/ge_frame_gradient_shader_mask.cpp @@ -38,7 +38,7 @@ std::shared_ptr GEFrameGradientShaderMask::GenerateDrawingShader(f auto maskBuilder = std::make_shared(frameGradientMaskShaderEffect_); maskBuilder->SetUniform("iResolution", width, height); std::array gradientBezier = {gradientBezierControlPoints_[0], gradientBezierControlPoints_[1], - gradientBezierControlPoints_[2], gradientBezierControlPoints_[3]} + gradientBezierControlPoints_[2], gradientBezierControlPoints_[3]}; maskBuilder->SetUniform("gradientBezierControlPoints", gradientBezier.data(), 4); maskBuilder->SetUniform("cornerRadius", cornerRadius_); maskBuilder->SetUniform("frameWidth", frameWidth_); -- Gitee From 5e097f46a7d8283103450dc3ad0754b4a78eb8a9 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Thu, 21 Aug 2025 14:19:12 +0000 Subject: [PATCH 05/33] update src/ge_frame_gradient_shader_mask.cpp. Signed-off-by: lingzhengyang --- src/ge_frame_gradient_shader_mask.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ge_frame_gradient_shader_mask.cpp b/src/ge_frame_gradient_shader_mask.cpp index 34dbd66..9b0abb8 100644 --- a/src/ge_frame_gradient_shader_mask.cpp +++ b/src/ge_frame_gradient_shader_mask.cpp @@ -59,7 +59,7 @@ std::shared_ptr GEFrameGradientShaderMask::GenerateDrawingShaderHa auto maskBuilder = std::make_shared(frameGradientMaskShaderEffect_); maskBuilder->SetUniform("iResolution", width, height); std::array gradientBezier = {gradientBezierControlPoints_[0], gradientBezierControlPoints_[1], - gradientBezierControlPoints_[2], gradientBezierControlPoints_[3]} + gradientBezierControlPoints_[2], gradientBezierControlPoints_[3]}; maskBuilder->SetUniform("gradientBezierControlPoints", gradientBezier.data(), 4); maskBuilder->SetUniform("cornerRadius", cornerRadius_); maskBuilder->SetUniform("frameWidth", frameWidth_); -- Gitee From 82484a1af7d69c265273ab4b6cbc6100c2b5f248 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Thu, 21 Aug 2025 14:19:47 +0000 Subject: [PATCH 06/33] update include/ge_shader_filter_params.h. Signed-off-by: lingzhengyang --- include/ge_shader_filter_params.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/ge_shader_filter_params.h b/include/ge_shader_filter_params.h index 126372b..b533870 100644 --- a/include/ge_shader_filter_params.h +++ b/include/ge_shader_filter_params.h @@ -545,7 +545,7 @@ struct GEXAIBarGlowEffectParams { Vector4f strengths; float brightness; float progress; -} +}; const char GEX_SHADER_ROUNDED_RECT_FLOWLIGHT[] = "RoundedRectFlowlight"; const char GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_START_END_POS[] = "RoundedRectFlowlight_StartEndPosition"; @@ -575,7 +575,7 @@ struct GEXRoundedRectFlowlightEffectParams { Vector4f gradientBezierControlPoints; Vector4f color; float progress = 0.0f; -} +}; const char GEX_SHADER_GRADIENT_FLOW_COLORS[] = "GradientFlowColors"; const char GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR0[] = "GradientFlowColors_Color0"; @@ -592,7 +592,7 @@ struct GEXGradientFlowColorsEffectParams { float gradientEnd = 0.0f; float effectAlpha = 0.0f; float progress = 0.0f; -} +}; const char GE_MASK_FRAME_GRADIENT[] = "FrameGradientMask"; const char GE_MASK_FRAME_GRADIENT_GRADIENT_BEZIER_CONTROL_POINTS[] = @@ -603,7 +603,7 @@ struct GEFrameGradientMaskParams { Vector4f gradientBezierControlPoints; float cornerRadius = 0.0f; float frameWidth = 0.0f; -} +}; } // namespace Drawing } // namespace Rosen -- Gitee From 6c06fcc7503e5da5b1ae288662669696430fd899 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Thu, 21 Aug 2025 14:20:27 +0000 Subject: [PATCH 07/33] update include/ge_visual_effect_impl.h. Signed-off-by: lingzhengyang --- include/ge_visual_effect_impl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/ge_visual_effect_impl.h b/include/ge_visual_effect_impl.h index 992494e..25dc353 100644 --- a/include/ge_visual_effect_impl.h +++ b/include/ge_visual_effect_impl.h @@ -98,7 +98,7 @@ public: if (it != tagMap.end()) { it->second(params, value); } else { - GE_LOGE("GEVisualEffectImpl Tag %{public}c not found", tag.c_str()); + GE_LOGE("GEVisualEffectImpl Tag %{public}s not found", tag.c_str()); } } -- Gitee From 5dbd006be66dfffa8166d180757c453e4b82ebe0 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Fri, 22 Aug 2025 01:55:11 +0000 Subject: [PATCH 08/33] update include/ge_visual_effect_impl.h. Signed-off-by: lingzhengyang --- include/ge_visual_effect_impl.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/include/ge_visual_effect_impl.h b/include/ge_visual_effect_impl.h index 25dc353..7fe91e1 100644 --- a/include/ge_visual_effect_impl.h +++ b/include/ge_visual_effect_impl.h @@ -93,7 +93,7 @@ public: using TagMap = std::map&, const std::any&)>>; template - void applyPropertyParams(const std::string& tag, const auto& value, std::shared_ptr& params, const TagMap& tagMap) { + void applyPropertyParams(const std::string& tag, const std::any& value, std::shared_ptr& params, const TagMap& tagMap) { auto it = tagMap.find(tag); if (it != tagMap.end()) { it->second(params, value); @@ -542,7 +542,7 @@ private: ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_BRIGHTNESS, brightness, float), ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_PROGRESS, progress, float), ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_STRENGTH, strengths, Vector4f), - } + }; TagMap roundedRectFlowlightEffectTagMap_{ ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_START_END_POS, @@ -569,7 +569,7 @@ private: color, Vector4f), ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_PROGRESS, progress, float), - } + }; TagMap gradientFlowColorsEffectTagMap_{ ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR0, colors[0], Vector4f), @@ -583,14 +583,14 @@ private: ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_EFFECT_ALPHA, effectAlpha, float), ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_PROGRESS, progress, float), - } + }; TagMap frameGradientMaskTagMap_{ ADD_TAG_HANDLER(GEFrameGradientMaskParams, GE_MASK_FRAME_GRADIENT_GRADIENT_BEZIER_CONTROL_POINTS, gradientBezierControlPoints, Vector4f), ADD_TAG_HANDLER(GEFrameGradientMaskParams, GE_MASK_FRAME_GRADIENT_CORNER_RADIUS, cornerRadius, float), ADD_TAG_HANDLER(GEFrameGradientMaskParams, GE_MASK_FRAME_GRADIENT_FRAME_WIDTH, frameWidth, float), - } + }; #undef ADD_TAG_HANDLER -- Gitee From 777b4cb3633ba4765ebfbb59f4511b9ded63da1b Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Fri, 22 Aug 2025 03:10:44 +0000 Subject: [PATCH 09/33] update test/unittest/ge_frame_gradient_shader_mask_test.cpp. Signed-off-by: lingzhengyang --- test/unittest/ge_frame_gradient_shader_mask_test.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/unittest/ge_frame_gradient_shader_mask_test.cpp b/test/unittest/ge_frame_gradient_shader_mask_test.cpp index 618e229..f25a28a 100644 --- a/test/unittest/ge_frame_gradient_shader_mask_test.cpp +++ b/test/unittest/ge_frame_gradient_shader_mask_test.cpp @@ -55,7 +55,7 @@ HWTEST_F(GEFrameGradientShaderMaskTest, GenerateDrawingShader_001, TestSize.Leve param.frameWidth = 0.0f; GEFrameGradientShaderMask mask(param); - auto shaderEffect = gePixelMapShaderMask->GenerateDrawingShader(50.f, 50.f); + auto shaderEffect = mask.GenerateDrawingShader(50.f, 50.f); EXPECT_EQ(shaderEffect, nullptr); GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShader_001 end"; @@ -76,7 +76,7 @@ HWTEST_F(GEFrameGradientShaderMaskTest, GenerateDrawingShader_002, TestSize.Leve param.frameWidth = 0.0f; GEFrameGradientShaderMask mask(param); - auto shaderEffect = gePixelMapShaderMask->GenerateDrawingShader(50.f, 50.f); + auto shaderEffect = mask.GenerateDrawingShader(50.f, 50.f); EXPECT_EQ(shaderEffect, nullptr); GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShader_002 end"; @@ -97,7 +97,7 @@ HWTEST_F(GEFrameGradientShaderMaskTest, GenerateDrawingShader_003, TestSize.Leve param.frameWidth = -1.0f; GEFrameGradientShaderMask mask(param); - auto shaderEffect = gePixelMapShaderMask->GenerateDrawingShader(50.f, 50.f); + auto shaderEffect = mask.GenerateDrawingShader(50.f, 50.f); EXPECT_EQ(shaderEffect, nullptr); GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShader_003 end"; @@ -118,7 +118,7 @@ HWTEST_F(GEFrameGradientShaderMaskTest, GenerateDrawingShaderHasNormal_001, Test param.frameWidth = 0.0f; GEFrameGradientShaderMask mask(param); - auto shaderEffect = gePixelMapShaderMask->GenerateDrawingShaderHasNormal(50.f, 50.f); + auto shaderEffect = mask.GenerateDrawingShaderHasNormal(50.f, 50.f); EXPECT_EQ(shaderEffect, nullptr); GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShaderHasNormal_001 end"; @@ -139,7 +139,7 @@ HWTEST_F(GEFrameGradientShaderMaskTest, GenerateDrawingShaderHasNormal_002, Test param.frameWidth = 0.0f; GEFrameGradientShaderMask mask(param); - auto shaderEffect = gePixelMapShaderMask->GenerateDrawingShaderHasNormal(50.f, 50.f); + auto shaderEffect = mask.GenerateDrawingShaderHasNormal(50.f, 50.f); EXPECT_EQ(shaderEffect, nullptr); GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShaderHasNormal_002 end"; @@ -160,7 +160,7 @@ HWTEST_F(GEFrameGradientShaderMaskTest, GenerateDrawingShaderHasNormal_003, Test param.frameWidth = -1.0f; GEFrameGradientShaderMask mask(param); - auto shaderEffect = gePixelMapShaderMask->GenerateDrawingShader(50.f, 50.f); + auto shaderEffect = mask.GenerateDrawingShader(50.f, 50.f); EXPECT_EQ(shaderEffect, nullptr); GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShaderHasNormal_003 end"; -- Gitee From 266c0671369021e8b348464abaf52a827296edfa Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Fri, 22 Aug 2025 07:33:29 +0000 Subject: [PATCH 10/33] update include/ge_shader_filter_params.h. Signed-off-by: lingzhengyang --- include/ge_shader_filter_params.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/include/ge_shader_filter_params.h b/include/ge_shader_filter_params.h index b533870..3a16d8b 100644 --- a/include/ge_shader_filter_params.h +++ b/include/ge_shader_filter_params.h @@ -521,6 +521,8 @@ struct GEBorderLightShaderParams { float cornerRadius = 0.0f; }; +constexpr int ARRAY_SIZE_FOUR = 4; + const char GEX_SHADER_AIBAR_GLOW[] = "AIBarGlow"; const char GEX_SHADER_AIBAR_GLOW_LTWH[] = "AIBarGlow_LTWH"; const char GEX_SHADER_AIBAR_GLOW_STRECTCH_FACTOR[] = "AIBarGlow_StretchFactor"; @@ -540,8 +542,8 @@ struct GEXAIBarGlowEffectParams { Vector4f LTWH; float stretchFactor = 0.0f; float barAngle = 0.0f; - std::array colors; - std::array, 4> positions; + std::array colors; + std::array, ARRAY_SIZE_FOUR> positions; Vector4f strengths; float brightness; float progress; @@ -587,7 +589,7 @@ const char GEX_SHADER_GRADIENT_FLOW_COLORS_GRADIENT_END[] = "GradientFlowColors_ const char GEX_SHADER_GRADIENT_FLOW_COLORS_EFFECT_ALPHA[] = "GradientFlowColors_EffectAlpha"; const char GEX_SHADER_GRADIENT_FLOW_COLORS_PROGRESS[] = "GradientFlowColors_Progress"; struct GEXGradientFlowColorsEffectParams { - std::array colors; + std::array colors; float gradientBegin = 0.0f; float gradientEnd = 0.0f; float effectAlpha = 0.0f; -- Gitee From 905fb68b92bc01e91ea4dc79efb75f56d9f54490 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Fri, 22 Aug 2025 07:34:41 +0000 Subject: [PATCH 11/33] update src/ge_frame_gradient_shader_mask.cpp. Signed-off-by: lingzhengyang --- src/ge_frame_gradient_shader_mask.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ge_frame_gradient_shader_mask.cpp b/src/ge_frame_gradient_shader_mask.cpp index 9b0abb8..3fbb480 100644 --- a/src/ge_frame_gradient_shader_mask.cpp +++ b/src/ge_frame_gradient_shader_mask.cpp @@ -23,6 +23,7 @@ namespace Rosen { namespace Drawing { namespace{ thread_local static std::shared_ptr frameGradientMaskShaderEffect_ = nullptr; +constexpr int ARRAY_SIZE_FOUR = 4; } GEFrameGradientShaderMask::GEFrameGradientShaderMask(const GEFrameGradientMaskParams& param) : gradientBezierControlPoints_(param.gradientBezierControlPoints), cornerRadius_(param.cornerRadius), frameWidth_(param.frameWidth) @@ -37,7 +38,7 @@ std::shared_ptr GEFrameGradientShaderMask::GenerateDrawingShader(f } auto maskBuilder = std::make_shared(frameGradientMaskShaderEffect_); maskBuilder->SetUniform("iResolution", width, height); - std::array gradientBezier = {gradientBezierControlPoints_[0], gradientBezierControlPoints_[1], + std::array gradientBezier = {gradientBezierControlPoints_[0], gradientBezierControlPoints_[1], gradientBezierControlPoints_[2], gradientBezierControlPoints_[3]}; maskBuilder->SetUniform("gradientBezierControlPoints", gradientBezier.data(), 4); maskBuilder->SetUniform("cornerRadius", cornerRadius_); @@ -58,9 +59,9 @@ std::shared_ptr GEFrameGradientShaderMask::GenerateDrawingShaderHa } auto maskBuilder = std::make_shared(frameGradientMaskShaderEffect_); maskBuilder->SetUniform("iResolution", width, height); - std::array gradientBezier = {gradientBezierControlPoints_[0], gradientBezierControlPoints_[1], + std::array gradientBezier = {gradientBezierControlPoints_[0], gradientBezierControlPoints_[1], gradientBezierControlPoints_[2], gradientBezierControlPoints_[3]}; - maskBuilder->SetUniform("gradientBezierControlPoints", gradientBezier.data(), 4); + maskBuilder->SetUniform("gradientBezierControlPoints", gradientBezier.data(), ARRAY_SIZE_FOUR); maskBuilder->SetUniform("cornerRadius", cornerRadius_); maskBuilder->SetUniform("frameWidth", frameWidth_); auto maskShader = maskBuilder->MakeShader(nullptr, false); -- Gitee From fcc10b3179aa432aa13689afdf040194d7752ddb Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Fri, 22 Aug 2025 07:36:02 +0000 Subject: [PATCH 12/33] update src/ge_frame_gradient_shader_mask.cpp. Signed-off-by: lingzhengyang --- src/ge_frame_gradient_shader_mask.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ge_frame_gradient_shader_mask.cpp b/src/ge_frame_gradient_shader_mask.cpp index 3fbb480..097bb1c 100644 --- a/src/ge_frame_gradient_shader_mask.cpp +++ b/src/ge_frame_gradient_shader_mask.cpp @@ -40,7 +40,7 @@ std::shared_ptr GEFrameGradientShaderMask::GenerateDrawingShader(f maskBuilder->SetUniform("iResolution", width, height); std::array gradientBezier = {gradientBezierControlPoints_[0], gradientBezierControlPoints_[1], gradientBezierControlPoints_[2], gradientBezierControlPoints_[3]}; - maskBuilder->SetUniform("gradientBezierControlPoints", gradientBezier.data(), 4); + maskBuilder->SetUniform("gradientBezierControlPoints", gradientBezier.data(), ARRAY_SIZE_FOUR); maskBuilder->SetUniform("cornerRadius", cornerRadius_); maskBuilder->SetUniform("frameWidth", frameWidth_); auto maskShader = maskBuilder->MakeShader(nullptr, false); -- Gitee From 3ecddcfab307dca7589062691d3b603c91eb36e4 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Fri, 22 Aug 2025 07:38:59 +0000 Subject: [PATCH 13/33] update include/ge_visual_effect_impl.h. Signed-off-by: lingzhengyang --- include/ge_visual_effect_impl.h | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/include/ge_visual_effect_impl.h b/include/ge_visual_effect_impl.h index 7fe91e1..afff2eb 100644 --- a/include/ge_visual_effect_impl.h +++ b/include/ge_visual_effect_impl.h @@ -27,7 +27,6 @@ #include "ge_shader_filter.h" #include "ge_shader_filter_params.h" #include "ge_visual_effect.h" -#include "ge_log.h" #include "common/rs_vector3.h" #include "common/rs_vector4.h" @@ -92,16 +91,6 @@ public: template using TagMap = std::map&, const std::any&)>>; - template - void applyPropertyParams(const std::string& tag, const std::any& value, std::shared_ptr& params, const TagMap& tagMap) { - auto it = tagMap.find(tag); - if (it != tagMap.end()) { - it->second(params, value); - } else { - GE_LOGE("GEVisualEffectImpl Tag %{public}s not found", tag.c_str()); - } - } - void SetParam(const std::string& tag, int32_t param); void SetParam(const std::string& tag, int64_t param); void SetParam(const std::string& tag, float param); @@ -521,7 +510,7 @@ private: #define ADD_TAG_HANDLER(type, tag, member, valueType) \ {#tag, [](std::shared_ptr¶ms, const std::any& value) { \ - params->member = std::any_cast(value);\ + params->member = std::any_cast(value); \ }} using PairFloat = std::pair; @@ -561,9 +550,11 @@ private: sharping, float), ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_FEATHERING, feathering, float), - ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_FEATHERING_BEZIER_CONTROL_POINTS, + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, + GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_FEATHERING_BEZIER_CONTROL_POINTS, featheringBezierControlPoints, Vector4f), - ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_GRADIENT_BEZIER_CONTROL_POINTS, + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, + GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_GRADIENT_BEZIER_CONTROL_POINTS, gradientBezierControlPoints, Vector4f), ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_COLOR, color, Vector4f), -- Gitee From 5f0b4766e2ab15c244d805e7c7e3f0804379fba7 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Fri, 22 Aug 2025 07:40:30 +0000 Subject: [PATCH 14/33] update src/ge_visual_effect_impl.cpp. Signed-off-by: lingzhengyang --- src/ge_visual_effect_impl.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/ge_visual_effect_impl.cpp b/src/ge_visual_effect_impl.cpp index a01d5af..ee39500 100644 --- a/src/ge_visual_effect_impl.cpp +++ b/src/ge_visual_effect_impl.cpp @@ -236,6 +236,18 @@ GEVisualEffectImpl::GEVisualEffectImpl(const std::string& name) GEVisualEffectImpl::~GEVisualEffectImpl() {} +template + void GEVisualEffectImpl::applyPropertyParams(const std::string& tag, const std::any& value, + std::shared_ptr& params, const TagMap& tagMap) { + auto it = tagMap.find(tag); + if (it != tagMap.end()) { + it->second(params, value); + } else { + GE_LOGE("GEVisualEffectImpl Tag %{public}s not found", tag.c_str()); + } + } + + void GEVisualEffectImpl::SetParam(const std::string& tag, int32_t param) { switch (filterType_) { -- Gitee From 9e98248e35568ad05c7542378a2954dc93ed2b24 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Fri, 22 Aug 2025 07:40:53 +0000 Subject: [PATCH 15/33] update include/ge_visual_effect_impl.h. Signed-off-by: lingzhengyang --- include/ge_visual_effect_impl.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/ge_visual_effect_impl.h b/include/ge_visual_effect_impl.h index afff2eb..b096a62 100644 --- a/include/ge_visual_effect_impl.h +++ b/include/ge_visual_effect_impl.h @@ -91,6 +91,10 @@ public: template using TagMap = std::map&, const std::any&)>>; + template + void GEVisualEffectImpl::applyPropertyParams(const std::string& tag, const std::any& value, + std::shared_ptr& params, const TagMap& tagMap); + void SetParam(const std::string& tag, int32_t param); void SetParam(const std::string& tag, int64_t param); void SetParam(const std::string& tag, float param); -- Gitee From 0c8a053d8b4cce4088943ba0fb8708c3a414ad30 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Fri, 22 Aug 2025 07:42:03 +0000 Subject: [PATCH 16/33] update src/ge_visual_effect_impl.cpp. Signed-off-by: lingzhengyang --- src/ge_visual_effect_impl.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/ge_visual_effect_impl.cpp b/src/ge_visual_effect_impl.cpp index ee39500..6409369 100644 --- a/src/ge_visual_effect_impl.cpp +++ b/src/ge_visual_effect_impl.cpp @@ -16,6 +16,7 @@ #include "ge_shader_filter_params.h" #include "ge_visual_effect_impl.h" +#include "ge_log.h" #include "ge_external_dynamic_loader.h" #include "common/rs_vector4.h" #include "common/rs_vector3.h" @@ -237,15 +238,15 @@ GEVisualEffectImpl::GEVisualEffectImpl(const std::string& name) GEVisualEffectImpl::~GEVisualEffectImpl() {} template - void GEVisualEffectImpl::applyPropertyParams(const std::string& tag, const std::any& value, - std::shared_ptr& params, const TagMap& tagMap) { - auto it = tagMap.find(tag); - if (it != tagMap.end()) { - it->second(params, value); - } else { - GE_LOGE("GEVisualEffectImpl Tag %{public}s not found", tag.c_str()); - } +void GEVisualEffectImpl::applyPropertyParams(const std::string& tag, const std::any& value, + std::shared_ptr& params, const TagMap& tagMap) { + auto it = tagMap.find(tag); + if (it != tagMap.end()) { + it->second(params, value); + } else { + GE_LOGE("GEVisualEffectImpl Tag %{public}s not found", tag.c_str()); } +} void GEVisualEffectImpl::SetParam(const std::string& tag, int32_t param) -- Gitee From 638b3a280b86625de251223b77d906c4e0fb3b7a Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Fri, 22 Aug 2025 07:43:18 +0000 Subject: [PATCH 17/33] update src/ge_frame_gradient_shader_mask.cpp. Signed-off-by: lingzhengyang --- src/ge_frame_gradient_shader_mask.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ge_frame_gradient_shader_mask.cpp b/src/ge_frame_gradient_shader_mask.cpp index 097bb1c..aa6e8f7 100644 --- a/src/ge_frame_gradient_shader_mask.cpp +++ b/src/ge_frame_gradient_shader_mask.cpp @@ -21,12 +21,13 @@ namespace OHOS { namespace Rosen { namespace Drawing { -namespace{ +namespace { thread_local static std::shared_ptr frameGradientMaskShaderEffect_ = nullptr; constexpr int ARRAY_SIZE_FOUR = 4; } GEFrameGradientShaderMask::GEFrameGradientShaderMask(const GEFrameGradientMaskParams& param) : - gradientBezierControlPoints_(param.gradientBezierControlPoints), cornerRadius_(param.cornerRadius), frameWidth_(param.frameWidth) + gradientBezierControlPoints_(param.gradientBezierControlPoints), + cornerRadius_(param.cornerRadius), frameWidth_(param.frameWidth) {} std::shared_ptr GEFrameGradientShaderMask::GenerateDrawingShader(float width, float height) const @@ -114,7 +115,6 @@ void GEFrameGradientShaderMask::MakeFrameGradientMaskShaderEffect() const if (frameGradientMaskShaderEffect_ == nullptr) { LOGE("GEFrameGradientShaderMask::MakeFrameGradientMaskShaderEffect error"); } - } } // namespace Drawing -- Gitee From 64415f554ebd7455ec97c7f4ecc82e355650d2a1 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Fri, 22 Aug 2025 09:30:22 +0000 Subject: [PATCH 18/33] update src/ge_frame_gradient_shader_mask.cpp. Signed-off-by: lingzhengyang --- src/ge_frame_gradient_shader_mask.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ge_frame_gradient_shader_mask.cpp b/src/ge_frame_gradient_shader_mask.cpp index aa6e8f7..768293f 100644 --- a/src/ge_frame_gradient_shader_mask.cpp +++ b/src/ge_frame_gradient_shader_mask.cpp @@ -23,7 +23,6 @@ namespace Rosen { namespace Drawing { namespace { thread_local static std::shared_ptr frameGradientMaskShaderEffect_ = nullptr; -constexpr int ARRAY_SIZE_FOUR = 4; } GEFrameGradientShaderMask::GEFrameGradientShaderMask(const GEFrameGradientMaskParams& param) : gradientBezierControlPoints_(param.gradientBezierControlPoints), -- Gitee From 1ff9ebb8700e3e08da59519d7ca0b910d8e30fdd Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Fri, 22 Aug 2025 09:35:05 +0000 Subject: [PATCH 19/33] update src/ge_visual_effect_impl.cpp. Signed-off-by: lingzhengyang --- src/ge_visual_effect_impl.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/ge_visual_effect_impl.cpp b/src/ge_visual_effect_impl.cpp index 6409369..d04592f 100644 --- a/src/ge_visual_effect_impl.cpp +++ b/src/ge_visual_effect_impl.cpp @@ -238,8 +238,8 @@ GEVisualEffectImpl::GEVisualEffectImpl(const std::string& name) GEVisualEffectImpl::~GEVisualEffectImpl() {} template -void GEVisualEffectImpl::applyPropertyParams(const std::string& tag, const std::any& value, - std::shared_ptr& params, const TagMap& tagMap) { +void GEVisualEffectImpl::applyTagParams(const std::string& tag, const std::any& value, std::shared_ptr& params, const TagMap& tagMap) +{ auto it = tagMap.find(tag); if (it != tagMap.end()) { it->second(params, value); @@ -450,28 +450,28 @@ void GEVisualEffectImpl::SetParam(const std::string& tag, float param) if (frameGradientMaskParams_ == nullptr) { return; } - applyPropertyParams(tag, param, frameGradientMaskParams_, frameGradientMaskTagMap_); + applyTagParams(tag, param, frameGradientMaskParams_, frameGradientMaskTagMap_); break; } case FilterType::AIBAR_GLOW: { if (AIBarGlowEffectParams_ == nullptr) { return; } - applyPropertyParams(tag, param, AIBarGlowEffectParams_, AIBarGlowEffectTagMap_); + applyTagParams(tag, param, AIBarGlowEffectParams_, AIBarGlowEffectTagMap_); break; } case FilterType::ROUNDED_RECT_FLOWLIGHT: { if (roundedRectFlowlightEffectParams_ == nullptr) { return; } - applyPropertyParams(tag, param, roundedRectFlowlightEffectParams_, roundedRectFlowlightEffectTagMap_); + applyTagParams(tag, param, roundedRectFlowlightEffectParams_, roundedRectFlowlightEffectTagMap_); break; } case FilterType::GRADIENT_FLOW_COLORS: { if (gradientFlowColorsEffectParams_ == nullptr) { return; } - applyPropertyParams(tag, param, gradientFlowColorsEffectParams_, gradientFlowColorsEffectTagMap_); + applyTagParams(tag, param, gradientFlowColorsEffectParams_, gradientFlowColorsEffectTagMap_); break; } default: @@ -599,14 +599,14 @@ void GEVisualEffectImpl::SetParam(const std::string& tag, const std::pair Date: Fri, 22 Aug 2025 09:35:52 +0000 Subject: [PATCH 20/33] update include/ge_visual_effect_impl.h. Signed-off-by: lingzhengyang --- include/ge_visual_effect_impl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/ge_visual_effect_impl.h b/include/ge_visual_effect_impl.h index b096a62..65a61d0 100644 --- a/include/ge_visual_effect_impl.h +++ b/include/ge_visual_effect_impl.h @@ -92,7 +92,7 @@ public: using TagMap = std::map&, const std::any&)>>; template - void GEVisualEffectImpl::applyPropertyParams(const std::string& tag, const std::any& value, + void applyTagParams(const std::string& tag, const std::any& value, std::shared_ptr& params, const TagMap& tagMap); void SetParam(const std::string& tag, int32_t param); -- Gitee From 53b8b81600a6cc0a2b5dec7ee0b5e83182b965ae Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Fri, 22 Aug 2025 09:36:21 +0000 Subject: [PATCH 21/33] update src/ge_visual_effect_impl.cpp. Signed-off-by: lingzhengyang --- src/ge_visual_effect_impl.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ge_visual_effect_impl.cpp b/src/ge_visual_effect_impl.cpp index d04592f..1066e08 100644 --- a/src/ge_visual_effect_impl.cpp +++ b/src/ge_visual_effect_impl.cpp @@ -238,7 +238,8 @@ GEVisualEffectImpl::GEVisualEffectImpl(const std::string& name) GEVisualEffectImpl::~GEVisualEffectImpl() {} template -void GEVisualEffectImpl::applyTagParams(const std::string& tag, const std::any& value, std::shared_ptr& params, const TagMap& tagMap) +void GEVisualEffectImpl::applyTagParams(const std::string& tag, const std::any& value, + std::shared_ptr& params, const TagMap& tagMap) { auto it = tagMap.find(tag); if (it != tagMap.end()) { -- Gitee From 2e7881cca7f93fbb4aee39e4f1ea12e73be820c9 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Fri, 22 Aug 2025 14:29:00 +0000 Subject: [PATCH 22/33] update include/ge_visual_effect_impl.h. Signed-off-by: lingzhengyang --- include/ge_visual_effect_impl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/ge_visual_effect_impl.h b/include/ge_visual_effect_impl.h index 65a61d0..76b5541 100644 --- a/include/ge_visual_effect_impl.h +++ b/include/ge_visual_effect_impl.h @@ -513,7 +513,7 @@ private: void SetBorderLightParams(const std::string& tag, float param); #define ADD_TAG_HANDLER(type, tag, member, valueType) \ - {#tag, [](std::shared_ptr¶ms, const std::any& value) { \ + {tag, [](std::shared_ptr¶ms, const std::any& value) { \ params->member = std::any_cast(value); \ }} -- Gitee From 3f1ec69a47b48cc60937c7c37d3abddf86c3497c Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Fri, 22 Aug 2025 15:31:27 +0000 Subject: [PATCH 23/33] update src/ge_visual_effect_impl.cpp. Signed-off-by: lingzhengyang --- src/ge_visual_effect_impl.cpp | 36 +++++------------------------------ 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/src/ge_visual_effect_impl.cpp b/src/ge_visual_effect_impl.cpp index 1066e08..3cc0b8e 100644 --- a/src/ge_visual_effect_impl.cpp +++ b/src/ge_visual_effect_impl.cpp @@ -241,11 +241,15 @@ template void GEVisualEffectImpl::applyTagParams(const std::string& tag, const std::any& value, std::shared_ptr& params, const TagMap& tagMap) { + if (!params) { + GE_LOGE("GEVisualEffectImpl params for tag %{public}s not found", tag.c_str()); + return; + } auto it = tagMap.find(tag); if (it != tagMap.end()) { it->second(params, value); } else { - GE_LOGE("GEVisualEffectImpl Tag %{public}s not found", tag.c_str()); + GE_LOGE("GEVisualEffectImpl tag %{public}s not found", tag.c_str()); } } @@ -448,30 +452,18 @@ void GEVisualEffectImpl::SetParam(const std::string& tag, float param) break; } case FilterType::FRAME_GRADIENT_MASK: { - if (frameGradientMaskParams_ == nullptr) { - return; - } applyTagParams(tag, param, frameGradientMaskParams_, frameGradientMaskTagMap_); break; } case FilterType::AIBAR_GLOW: { - if (AIBarGlowEffectParams_ == nullptr) { - return; - } applyTagParams(tag, param, AIBarGlowEffectParams_, AIBarGlowEffectTagMap_); break; } case FilterType::ROUNDED_RECT_FLOWLIGHT: { - if (roundedRectFlowlightEffectParams_ == nullptr) { - return; - } applyTagParams(tag, param, roundedRectFlowlightEffectParams_, roundedRectFlowlightEffectTagMap_); break; } case FilterType::GRADIENT_FLOW_COLORS: { - if (gradientFlowColorsEffectParams_ == nullptr) { - return; - } applyTagParams(tag, param, gradientFlowColorsEffectParams_, gradientFlowColorsEffectTagMap_); break; } @@ -597,16 +589,10 @@ void GEVisualEffectImpl::SetParam(const std::string& tag, const std::pair Date: Fri, 22 Aug 2025 15:35:21 +0000 Subject: [PATCH 24/33] update src/ge_frame_gradient_shader_mask.cpp. Signed-off-by: lingzhengyang --- src/ge_frame_gradient_shader_mask.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/ge_frame_gradient_shader_mask.cpp b/src/ge_frame_gradient_shader_mask.cpp index 768293f..542fa29 100644 --- a/src/ge_frame_gradient_shader_mask.cpp +++ b/src/ge_frame_gradient_shader_mask.cpp @@ -24,9 +24,10 @@ namespace Drawing { namespace { thread_local static std::shared_ptr frameGradientMaskShaderEffect_ = nullptr; } -GEFrameGradientShaderMask::GEFrameGradientShaderMask(const GEFrameGradientMaskParams& param) : - gradientBezierControlPoints_(param.gradientBezierControlPoints), - cornerRadius_(param.cornerRadius), frameWidth_(param.frameWidth) +GEFrameGradientShaderMask::GEFrameGradientShaderMask(const GEFrameGradientMaskParams& param) + : gradientBezierControlPoints_(param.gradientBezierControlPoints), + cornerRadius_(param.cornerRadius), + frameWidth_(param.frameWidth) {} std::shared_ptr GEFrameGradientShaderMask::GenerateDrawingShader(float width, float height) const @@ -38,8 +39,8 @@ std::shared_ptr GEFrameGradientShaderMask::GenerateDrawingShader(f } auto maskBuilder = std::make_shared(frameGradientMaskShaderEffect_); maskBuilder->SetUniform("iResolution", width, height); - std::array gradientBezier = {gradientBezierControlPoints_[0], gradientBezierControlPoints_[1], - gradientBezierControlPoints_[2], gradientBezierControlPoints_[3]}; + std::array gradientBezier = {gradientBezierControlPoints_[0], + gradientBezierControlPoints_[1], gradientBezierControlPoints_[2], gradientBezierControlPoints_[3]}; maskBuilder->SetUniform("gradientBezierControlPoints", gradientBezier.data(), ARRAY_SIZE_FOUR); maskBuilder->SetUniform("cornerRadius", cornerRadius_); maskBuilder->SetUniform("frameWidth", frameWidth_); @@ -59,8 +60,8 @@ std::shared_ptr GEFrameGradientShaderMask::GenerateDrawingShaderHa } auto maskBuilder = std::make_shared(frameGradientMaskShaderEffect_); maskBuilder->SetUniform("iResolution", width, height); - std::array gradientBezier = {gradientBezierControlPoints_[0], gradientBezierControlPoints_[1], - gradientBezierControlPoints_[2], gradientBezierControlPoints_[3]}; + std::array gradientBezier = {gradientBezierControlPoints_[0], + gradientBezierControlPoints_[1], gradientBezierControlPoints_[2], gradientBezierControlPoints_[3]}; maskBuilder->SetUniform("gradientBezierControlPoints", gradientBezier.data(), ARRAY_SIZE_FOUR); maskBuilder->SetUniform("cornerRadius", cornerRadius_); maskBuilder->SetUniform("frameWidth", frameWidth_); -- Gitee From 23778d28bfe6260fd0c300ef0e16abdb9891795f Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Sun, 24 Aug 2025 13:45:07 +0000 Subject: [PATCH 25/33] update include/ge_visual_effect_impl.h. Signed-off-by: lingzhengyang --- include/ge_visual_effect_impl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/ge_visual_effect_impl.h b/include/ge_visual_effect_impl.h index 76b5541..c6cfbec 100644 --- a/include/ge_visual_effect_impl.h +++ b/include/ge_visual_effect_impl.h @@ -92,7 +92,7 @@ public: using TagMap = std::map&, const std::any&)>>; template - void applyTagParams(const std::string& tag, const std::any& value, + void ApplyTagParams(const std::string& tag, const std::any& value, std::shared_ptr& params, const TagMap& tagMap); void SetParam(const std::string& tag, int32_t param); -- Gitee From abf9c4e831dad252f338a69cc046d15987c1171e Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Sun, 24 Aug 2025 13:45:44 +0000 Subject: [PATCH 26/33] update src/ge_visual_effect_impl.cpp. Signed-off-by: lingzhengyang --- src/ge_visual_effect_impl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ge_visual_effect_impl.cpp b/src/ge_visual_effect_impl.cpp index 3cc0b8e..500df9a 100644 --- a/src/ge_visual_effect_impl.cpp +++ b/src/ge_visual_effect_impl.cpp @@ -238,7 +238,7 @@ GEVisualEffectImpl::GEVisualEffectImpl(const std::string& name) GEVisualEffectImpl::~GEVisualEffectImpl() {} template -void GEVisualEffectImpl::applyTagParams(const std::string& tag, const std::any& value, +void GEVisualEffectImpl::ApplyTagParams(const std::string& tag, const std::any& value, std::shared_ptr& params, const TagMap& tagMap) { if (!params) { -- Gitee From ff3d02e99d6c77ff6fd9509d1432949a0ee8be14 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Tue, 26 Aug 2025 07:48:46 +0000 Subject: [PATCH 27/33] update src/ge_visual_effect_impl.cpp. Signed-off-by: lingzhengyang --- src/ge_visual_effect_impl.cpp | 78 +++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/src/ge_visual_effect_impl.cpp b/src/ge_visual_effect_impl.cpp index c5fbd67..ea3e254 100644 --- a/src/ge_visual_effect_impl.cpp +++ b/src/ge_visual_effect_impl.cpp @@ -24,6 +24,84 @@ namespace OHOS { namespace Rosen { namespace Drawing { +namespace{ +#define ADD_TAG_HANDLER(type, tag, member, valueType) \ + {tag, [](std::shared_ptr¶ms, const std::any& value) { \ + params->member = std::any_cast(value); \ + }} + +using PairFloat = std::pair; + +GEVisualEffectImpl::TagMap AIBarGlowEffectTagMap_{ + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_LTWH, LTWH, Vector4f), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_STRECTCH_FACTOR, + stretchFactor, float), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_BAR_ANGLE, barAngle, float), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_COLOR0, colors[0], Vector4f), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_COLOR1, colors[1], Vector4f), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_COLOR2, colors[2], Vector4f), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_COLOR3, colors[3], Vector4f), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_POS0, positions[0], PairFloat), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_POS1, positions[1], PairFloat), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_POS2, positions[2], PairFloat), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_POS3, positions[3], PairFloat), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_BRIGHTNESS, brightness, float), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_PROGRESS, progress, float), + ADD_TAG_HANDLER(GEXAIBarGlowEffectParams, GEX_SHADER_AIBAR_GLOW_STRENGTH, strengths, Vector4f), +}; + +GEVisualEffectImpl::TagMap roundedRectFlowlightEffectTagMap_{ + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_START_END_POS, + startEndPosition, PairFloat), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_WAVE_LENGTH, + waveLength, float), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_WAVE_TOP, + waveTop, float), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_CORNER_RADIUS, + cornerRadius, float), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_BRIGHTNESS, + brightness, float), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_SCALE, + scale, float), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_SHARPING, + sharping, float), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_FEATHERING, + feathering, float), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, + GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_FEATHERING_BEZIER_CONTROL_POINTS, + featheringBezierControlPoints, Vector4f), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, + GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_GRADIENT_BEZIER_CONTROL_POINTS, + gradientBezierControlPoints, Vector4f), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_COLOR, + color, Vector4f), + ADD_TAG_HANDLER(GEXRoundedRectFlowlightEffectParams, GEX_SHADER_ROUNDED_RECT_FLOWLIGHT_PROGRESS, + progress, float), +}; + +GEVisualEffectImpl::TagMap gradientFlowColorsEffectTagMap_{ + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR0, colors[0], Vector4f), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR1, colors[1], Vector4f), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR2, colors[2], Vector4f), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_COLOR3, colors[3], Vector4f), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_GRADIENT_BEGIN, + gradientBegin, float), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_GRADIENT_END, + gradientEnd, float), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_EFFECT_ALPHA, + effectAlpha, float), + ADD_TAG_HANDLER(GEXGradientFlowColorsEffectParams, GEX_SHADER_GRADIENT_FLOW_COLORS_PROGRESS, progress, float), +}; + +GEVisualEffectImpl::TagMap frameGradientMaskTagMap_{ + ADD_TAG_HANDLER(GEFrameGradientMaskParams, GE_MASK_FRAME_GRADIENT_GRADIENT_BEZIER_CONTROL_POINTS, + gradientBezierControlPoints, Vector4f), + ADD_TAG_HANDLER(GEFrameGradientMaskParams, GE_MASK_FRAME_GRADIENT_CORNER_RADIUS, cornerRadius, float), + ADD_TAG_HANDLER(GEFrameGradientMaskParams, GE_MASK_FRAME_GRADIENT_FRAME_WIDTH, frameWidth, float), +}; + +#undef ADD_TAG_HANDLER +} std::map> GEVisualEffectImpl::g_initialMap = { { GE_FILTER_KAWASE_BLUR, -- Gitee From 21c02bf27f729ea0574ee59b5c6af63a5241efb6 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Tue, 26 Aug 2025 07:52:34 +0000 Subject: [PATCH 28/33] update include/ge_frame_gradient_shader_mask.h. Signed-off-by: lingzhengyang --- include/ge_frame_gradient_shader_mask.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/ge_frame_gradient_shader_mask.h b/include/ge_frame_gradient_shader_mask.h index 520ecf1..385d50b 100644 --- a/include/ge_frame_gradient_shader_mask.h +++ b/include/ge_frame_gradient_shader_mask.h @@ -27,7 +27,7 @@ namespace Drawing { class GE_EXPORT GEFrameGradientShaderMask : public GEShaderMask { public: - GEFrameGradientShaderMask(const GEFrameGradientMaskParams& param); + explicit GEFrameGradientShaderMask(const GEFrameGradientMaskParams& param); GEFrameGradientShaderMask(const GEFrameGradientShaderMask&) = delete; GEFrameGradientShaderMask operator=(const GEFrameGradientShaderMask&) = delete; GEFrameGradientShaderMask(GEFrameGradientShaderMask&&) = delete; -- Gitee From 14f1ad825838baa181d8bf0cb1b5842ae2057e68 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Tue, 26 Aug 2025 07:52:54 +0000 Subject: [PATCH 29/33] update include/ge_frame_gradient_shader_mask.h. Signed-off-by: lingzhengyang --- include/ge_frame_gradient_shader_mask.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/ge_frame_gradient_shader_mask.h b/include/ge_frame_gradient_shader_mask.h index 385d50b..4e098ae 100644 --- a/include/ge_frame_gradient_shader_mask.h +++ b/include/ge_frame_gradient_shader_mask.h @@ -34,7 +34,6 @@ public: GEFrameGradientShaderMask& operator=(GEFrameGradientShaderMask&&) = delete; ~GEFrameGradientShaderMask() override = default; - std::shared_ptr GenerateDrawingShader(float width, float height) const override; std::shared_ptr GenerateDrawingShaderHasNormal(float width, float height) const override; -- Gitee From cdfdd2cd1bfa7f2f1997815756a0fa111a343734 Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Tue, 26 Aug 2025 07:55:35 +0000 Subject: [PATCH 30/33] update src/ge_render.cpp. Signed-off-by: lingzhengyang --- src/ge_render.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/ge_render.cpp b/src/ge_render.cpp index ca11c4e..0d3452a 100755 --- a/src/ge_render.cpp +++ b/src/ge_render.cpp @@ -146,8 +146,11 @@ static std::unordered_map g_shade {GEVisualEffectImpl::FilterType::AIBAR_GLOW, [] (std::shared_ptr ve) { std::shared_ptr out = nullptr; + if (!ve) { + return out; + } const auto& params = ve->GetAIBarGlowEffectParams(); - if (!ve || !params) { + if (params == nullptr) { return out; } auto type = static_cast(Drawing::GEVisualEffectImpl::FilterType::AIBAR_GLOW); @@ -164,8 +167,11 @@ static std::unordered_map g_shade {GEVisualEffectImpl::FilterType::ROUNDED_RECT_FLOWLIGHT, [] (std::shared_ptr ve) { std::shared_ptr out = nullptr; + if (!ve) { + return out; + } const auto& params = ve->GetRoundedRectFlowlightEffectParams(); - if (!ve || !params) { + if (params == nullptr) { return out; } auto type = static_cast(Drawing::GEVisualEffectImpl::FilterType::ROUNDED_RECT_FLOWLIGHT); @@ -182,8 +188,11 @@ static std::unordered_map g_shade {GEVisualEffectImpl::FilterType::GRADIENT_FLOW_COLORS, [] (std::shared_ptr ve) { std::shared_ptr out = nullptr; - const auto& params = ve->GetFrameGradientMaskParams(); - if (!ve || !params) { + if (!ve) { + return out; + } + const auto& params = ve->GetGradientFlowColorsEffectParams(); + if (params == nullptr) { return out; } auto type = static_cast(Drawing::GEVisualEffectImpl::FilterType::GRADIENT_FLOW_COLORS); -- Gitee From 7d0a965625882c9df86b1c34e10274fd235e6e2e Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Tue, 26 Aug 2025 07:57:56 +0000 Subject: [PATCH 31/33] update src/ge_visual_effect_impl.cpp. Signed-off-by: lingzhengyang --- src/ge_visual_effect_impl.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/ge_visual_effect_impl.cpp b/src/ge_visual_effect_impl.cpp index ea3e254..4b8b18c 100644 --- a/src/ge_visual_effect_impl.cpp +++ b/src/ge_visual_effect_impl.cpp @@ -531,19 +531,19 @@ void GEVisualEffectImpl::SetParam(const std::string& tag, float param) break; } case FilterType::FRAME_GRADIENT_MASK: { - applyTagParams(tag, param, frameGradientMaskParams_, frameGradientMaskTagMap_); + ApplyTagParams(tag, param, frameGradientMaskParams_, frameGradientMaskTagMap_); break; } case FilterType::AIBAR_GLOW: { - applyTagParams(tag, param, AIBarGlowEffectParams_, AIBarGlowEffectTagMap_); + ApplyTagParams(tag, param, AIBarGlowEffectParams_, AIBarGlowEffectTagMap_); break; } case FilterType::ROUNDED_RECT_FLOWLIGHT: { - applyTagParams(tag, param, roundedRectFlowlightEffectParams_, roundedRectFlowlightEffectTagMap_); + ApplyTagParams(tag, param, roundedRectFlowlightEffectParams_, roundedRectFlowlightEffectTagMap_); break; } case FilterType::GRADIENT_FLOW_COLORS: { - applyTagParams(tag, param, gradientFlowColorsEffectParams_, gradientFlowColorsEffectTagMap_); + ApplyTagParams(tag, param, gradientFlowColorsEffectParams_, gradientFlowColorsEffectTagMap_); break; } default: @@ -668,11 +668,11 @@ void GEVisualEffectImpl::SetParam(const std::string& tag, const std::pair Date: Tue, 26 Aug 2025 08:44:29 +0000 Subject: [PATCH 32/33] update src/ge_visual_effect_impl.cpp. Signed-off-by: lingzhengyang --- src/ge_visual_effect_impl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ge_visual_effect_impl.cpp b/src/ge_visual_effect_impl.cpp index 4b8b18c..71fbdd5 100644 --- a/src/ge_visual_effect_impl.cpp +++ b/src/ge_visual_effect_impl.cpp @@ -24,7 +24,7 @@ namespace OHOS { namespace Rosen { namespace Drawing { -namespace{ +namespace { #define ADD_TAG_HANDLER(type, tag, member, valueType) \ {tag, [](std::shared_ptr¶ms, const std::any& value) { \ params->member = std::any_cast(value); \ -- Gitee From 4191a570cf4c53b0876363d4e6d141ac6866f17c Mon Sep 17 00:00:00 2001 From: lingzhengyang Date: Tue, 26 Aug 2025 13:04:42 +0000 Subject: [PATCH 33/33] update test/unittest/ge_frame_gradient_shader_mask_test.cpp. Signed-off-by: lingzhengyang --- test/unittest/ge_frame_gradient_shader_mask_test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/unittest/ge_frame_gradient_shader_mask_test.cpp b/test/unittest/ge_frame_gradient_shader_mask_test.cpp index f25a28a..442dc8b 100644 --- a/test/unittest/ge_frame_gradient_shader_mask_test.cpp +++ b/test/unittest/ge_frame_gradient_shader_mask_test.cpp @@ -55,7 +55,7 @@ HWTEST_F(GEFrameGradientShaderMaskTest, GenerateDrawingShader_001, TestSize.Leve param.frameWidth = 0.0f; GEFrameGradientShaderMask mask(param); - auto shaderEffect = mask.GenerateDrawingShader(50.f, 50.f); + auto shaderEffect = mask.GenerateDrawingShader(0.f, 50.f); EXPECT_EQ(shaderEffect, nullptr); GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShader_001 end"; @@ -118,7 +118,7 @@ HWTEST_F(GEFrameGradientShaderMaskTest, GenerateDrawingShaderHasNormal_001, Test param.frameWidth = 0.0f; GEFrameGradientShaderMask mask(param); - auto shaderEffect = mask.GenerateDrawingShaderHasNormal(50.f, 50.f); + auto shaderEffect = mask.GenerateDrawingShaderHasNormal(0.f, 50.f); EXPECT_EQ(shaderEffect, nullptr); GTEST_LOG_(INFO) << "GEVisualEffectTest GenerateDrawingShaderHasNormal_001 end"; -- Gitee