From 1bc5fc8cf001e1825044debfb4189e88c157a476 Mon Sep 17 00:00:00 2001 From: WanShuo Date: Mon, 23 Jun 2025 19:06:19 +0800 Subject: [PATCH 1/3] fix Filter Rotate Signed-off-by: WanShuo --- include/ge_color_gradient_shader_filter.h | 1 + include/ge_shader_filter.h | 7 ++ include/ge_shader_filter_params.h | 8 ++ include/ge_visual_effect.h | 9 +- src/ge_color_gradient_shader_filter.cpp | 60 ++++++++----- src/ge_displacement_distort_shader_filter.cpp | 22 +++-- src/ge_render.cpp | 3 + src/ge_sound_wave_filter.cpp | 17 ++-- src/ge_visual_effect.cpp | 11 ++- test/unittest/BUILD.gn | 1 + .../ge_color_gradient_shader_filter_test.cpp | 23 +++++ test/unittest/ge_render_test.cpp | 4 +- test/unittest/ge_shader_filter_test.cpp | 87 +++++++++++++++++++ test/unittest/ge_sound_wave_filter_test.cpp | 6 +- test/unittest/ge_visual_effect_test.cpp | 23 +++++ 15 files changed, 235 insertions(+), 47 deletions(-) create mode 100644 test/unittest/ge_shader_filter_test.cpp diff --git a/include/ge_color_gradient_shader_filter.h b/include/ge_color_gradient_shader_filter.h index 6d36124..ea5029e 100644 --- a/include/ge_color_gradient_shader_filter.h +++ b/include/ge_color_gradient_shader_filter.h @@ -42,6 +42,7 @@ public: std::string GetDescription(); private: + std::shared_ptr PreProcessColorGradientBuilder(float geoWidth,float geoHeight); std::vector colors_; std::vector positions_; std::vector strengths_; diff --git a/include/ge_shader_filter.h b/include/ge_shader_filter.h index 83179bc..1bb3914 100644 --- a/include/ge_shader_filter.h +++ b/include/ge_shader_filter.h @@ -18,6 +18,7 @@ #include "draw/canvas.h" #include "image/image.h" +#include "ge_shader_filter_params.h" namespace OHOS { namespace Rosen { @@ -35,8 +36,14 @@ public: return hash_; } + void SetShaderFilterCanvasinfo(const Drawing::CanvasInfo& canvasInfo) + { + canvasInfo_ = canvasInfo; + } + protected: uint32_t hash_ = 0; + Drawing::CanvasInfo canvasInfo_; }; } // namespace Rosen } // namespace OHOS diff --git a/include/ge_shader_filter_params.h b/include/ge_shader_filter_params.h index 2585883..02aad90 100644 --- a/include/ge_shader_filter_params.h +++ b/include/ge_shader_filter_params.h @@ -28,6 +28,14 @@ namespace OHOS { namespace Rosen { namespace Drawing { +struct CanvasInfo { + float geoWidth_ = 0.0f; + float geoHeight_ = 0.0f; + float transX_ = 0.0f; + float tranY_ = 0.0f; + Drawing::Matrix mat_; +} + constexpr char GE_FILTER_AI_BAR[] = "AIBAR"; constexpr char GE_FILTER_AI_BAR_LOW[] = "AIBAR_LOW"; constexpr char GE_FILTER_AI_BAR_HIGH[] = "AIBAR_HIGH"; diff --git a/include/ge_visual_effect.h b/include/ge_visual_effect.h index 514e836..d1bdd59 100644 --- a/include/ge_visual_effect.h +++ b/include/ge_visual_effect.h @@ -39,7 +39,8 @@ class GEVisualEffectImpl; class GE_EXPORT GEVisualEffect { public: - GEVisualEffect(const std::string& name, DrawingPaintType type = DrawingPaintType::BRUSH); + GEVisualEffect(const std::string& name, DrawingPaintType type = DrawingPaintType::BRUSH, + const std::optional& canvasInfo = std::nullopt); ~GEVisualEffect(); void SetParam(const std::string& tag, int32_t param); @@ -73,10 +74,16 @@ public: return visualEffectImpl_; } + const Drawing::CanvasInfo GetCanvasInfo() const + { + return canvasInfo_; + } + private: std::string visualEffectName_; DrawingPaintType type_; std::shared_ptr visualEffectImpl_; + Drawing::CanvasInfo canvasInfo_; }; } // namespace Drawing diff --git a/src/ge_color_gradient_shader_filter.cpp b/src/ge_color_gradient_shader_filter.cpp index aeae007..c66eeec 100644 --- a/src/ge_color_gradient_shader_filter.cpp +++ b/src/ge_color_gradient_shader_filter.cpp @@ -51,41 +51,30 @@ std::shared_ptr GEColorGradientShaderFilter::ProcessImage(Drawin float strength[ARRAY_SIZE] = {0.0}; // 0.0 default if (!CheckInParams(color, position, strength, ARRAY_SIZE)) { return image; } - Drawing::Matrix matrix; + Drawing::Matrix matrix = canvasInfo_.mat_; + matrix.PostTranslate(-canvasInfo_.tranX_, -canvasInfo_.tranY_); + Drawing::Matrix invertMatrix; + matrix.Invert(invertMatrix); auto srcImageShader = Drawing::ShaderEffect::CreateImageShader(*image, Drawing::TileMode::CLAMP, - Drawing::TileMode::CLAMP, Drawing::SamplingOptions(Drawing::FilterMode::LINEAR), matrix); + Drawing::TileMode::CLAMP, Drawing::SamplingOptions(Drawing::FilterMode::LINEAR), invertMatrix); if (srcImageShader == nullptr) { LOGE("GEColorGradientShaderFilter::ProcessImage srcImageShader is null"); return image; } - std::shared_ptr builder = nullptr; - if (mask_) { - builder = MakeMaskColorGradientBuilder(); - if (builder == nullptr) { - LOGE("GEColorGradientShaderFilter::ProcessImage mask builder error\n"); - return image; - } - auto maskImageShader = mask_->GenerateDrawingShader(image->GetWidth(), image->GetHeight()); - if (!maskImageShader) { - LOGE("GEColorGradientShaderFilter::ProcessImage maskImageShader is null"); - return image; - } - builder->SetChild("maskImageShader", maskImageShader); - } else { - builder = MakeColorGradientBuilder(); - if (builder == nullptr) { - LOGE("GEColorGradientShaderFilter::ProcessImage builder error\n"); - return image; - } + std::shared_ptr builder = + PreProcessColorGradientBuilder(canvasInfo_.geoWidth_, canvasInfo_.geoHeight_); + if (!builder) { + LOGE("GEColorGradientShaderFilter::ProcessImage mask builder error\n"); + return image; } builder->SetChild("srcImageShader", srcImageShader); - builder->SetUniform("iResolution", image->GetWidth(), image->GetHeight()); + builder->SetUniform("iResolution", canvasInfo_.geoWidth_, canvasInfo_.geoHeight_); builder->SetUniform("color", color, ARRAY_SIZE * COLOR_CHANNEL); builder->SetUniform("position", position, ARRAY_SIZE * POSITION_CHANNEL); builder->SetUniform("strength", strength, ARRAY_SIZE); - auto resultImage = builder->MakeImage(canvas.GetGPUContext().get(), nullptr, image->GetImageInfo(), false); + auto resultImage = builder->MakeImage(canvas.GetGPUContext().get(), &(matrix), image->GetImageInfo(), false); if (resultImage == nullptr) { LOGE("GEColorGradientShaderFilter::ProcessImage resultImage is null"); return image; @@ -228,5 +217,30 @@ std::string GEColorGradientShaderFilter::GetDescription() return "GEColorGradientShaderFilter"; } +std::shared_ptr GEColorGradientShaderFilter::PreProcessColorGradientBuilder( + float geoWidth, float geoHeight) +{ + std::shared_ptr builder = nullptr; + if (mask_) { + builder = MakeMaskColorGradientBuilder(); + if (!builder) { + LOGE("GEColorGradientShaderFilter::PreProcessColorGradientBuilder mask builder error\n"); + return nullptr; + } + auto maskImageShader = mask_->GenerateDrawingShader(geoWidth, geoHeight); + if (!maskImageShader) { + LOGE("GEColorGradientShaderFilter::PreProcessColorGradientBuilder maskImageShader is null"); + return nullptr; + } + builder->SetChild("maskImageShader", maskImageShader); + } else { + builder = MakeColorGradientBuilder(); + if (!builder) { + LOGE("GEColorGradientShaderFilter::PreProcessColorGradientBuilder builder error\n"); + return nullptr; + } + } +} + } // namespace Rosen } // namespace OHOS \ No newline at end of file diff --git a/src/ge_displacement_distort_shader_filter.cpp b/src/ge_displacement_distort_shader_filter.cpp index fe18cea..aa942ae 100644 --- a/src/ge_displacement_distort_shader_filter.cpp +++ b/src/ge_displacement_distort_shader_filter.cpp @@ -34,38 +34,42 @@ std::shared_ptr GEDisplacementDistortFilter::ProcessImage(Drawin return nullptr; } - Drawing::Matrix matrix; + Drawing::Matrix matrix = canvasInfo_.mat_; + matrix.PostTranslate(-canvasInfo_.tranX_, -canvasInfo_.tranY_); + Drawing::Matrix invertMatrix; + matrix.Invert(invertMatrix); auto shader = Drawing::ShaderEffect::CreateImageShader(*image, Drawing::TileMode::CLAMP, - Drawing::TileMode::CLAMP, Drawing::SamplingOptions(Drawing::FilterMode::LINEAR), matrix); + Drawing::TileMode::CLAMP, Drawing::SamplingOptions(Drawing::FilterMode::LINEAR), invertMatrix); auto imageInfo = image->GetImageInfo(); float height = imageInfo.GetHeight(); float width = imageInfo.GetWidth(); if (height < 1e-6 || width < 1e-6 || params_.mask_ == nullptr) { - return nullptr; + return image; } - auto maskEffectShader = params_.mask_->GenerateDrawingShaderHasNormal(width, height); + auto maskEffectShader = + params_.mask_->GenerateDrawingShaderHasNormal(canvasInfo_.geoWidth_, canvasInfo_.geoHeight_); if (!maskEffectShader) { LOGE("GEDisplacementDistortFilter::ProcessImage maskEffectShader generate failed"); - return nullptr; + return image; } auto displacementDistortShader = GetDisplacementDistortEffect(); if (!displacementDistortShader) { LOGE("GEDisplacementDistortFilter::ProcessImage g_displacementdistortShader init failed"); - return nullptr; + return image; } Drawing::RuntimeShaderBuilder builder(displacementDistortShader); builder.SetChild("image", shader); builder.SetChild("maskEffect", maskEffectShader); - builder.SetUniform("iResolution", width, height); + builder.SetUniform("iResolution", canvasInfo_.geoWidth_, canvasInfo_.geoHeight_); builder.SetUniform("factor", params_.factor_.first, params_.factor_.second); - auto invertedImage = builder.MakeImage(canvas.GetGPUContext().get(), nullptr, imageInfo, false); + auto invertedImage = builder.MakeImage(canvas.GetGPUContext().get(), &(matrix), imageInfo, false); if (!invertedImage) { LOGE("GEDisplacementDistortFilter::ProcessImage make image failed"); - return nullptr; + return image; } return invertedImage; } diff --git a/src/ge_render.cpp b/src/ge_render.cpp index 1842b18..e9dd05f 100644 --- a/src/ge_render.cpp +++ b/src/ge_render.cpp @@ -213,6 +213,9 @@ std::vector> GERender::GenerateShaderFilter( default: break; } + if(shaderFilter){ + shaderFilter->SetShaderFilterCanvasinfo(vef->GetCanvasInfo()); + } shaderFilters.push_back(shaderFilter); } return shaderFilters; diff --git a/src/ge_sound_wave_filter.cpp b/src/ge_sound_wave_filter.cpp index 0cc3981..b623f84 100644 --- a/src/ge_sound_wave_filter.cpp +++ b/src/ge_sound_wave_filter.cpp @@ -45,19 +45,22 @@ std::shared_ptr GESoundWaveFilter::ProcessImage(Drawing::Canvas& return nullptr; } - Drawing::Matrix matrix; + Drawing::Matrix matrix = canvasInfo_.mat_; + matrix.PostTranslate(-canvasInfo_.tranX_, -canvasInfo_.tranY_); + Drawing::Matrix invertMatrix; + matrix.Invert(invertMatrix); auto shader = Drawing::ShaderEffect::CreateImageShader(*image, Drawing::TileMode::CLAMP, - Drawing::TileMode::CLAMP, Drawing::SamplingOptions(Drawing::FilterMode::LINEAR), matrix); + Drawing::TileMode::CLAMP, Drawing::SamplingOptions(Drawing::FilterMode::LINEAR), invertMatrix); auto imageInfo = image->GetImageInfo(); float height = imageInfo.GetHeight(); float width = imageInfo.GetWidth(); if (height < 1e-6 || width < 1e-6) { - return nullptr; + return image; } auto soundWaveShader = GetSoundWaveEffect(); if (soundWaveShader == nullptr) { LOGE("GESoundWaveFilter::ProcessImage g_SoundWaveEffect init failed"); - return nullptr; + return image; } CheckSoundWaveParams(); @@ -67,7 +70,7 @@ std::shared_ptr GESoundWaveFilter::ProcessImage(Drawing::Canvas& Drawing::RuntimeShaderBuilder builder(soundWaveShader); builder.SetChild("image", shader); - builder.SetUniform("iResolution", width, height); + builder.SetUniform("iResolution", canvasInfo_.geoWidth_, canvasInfo_.geoHeight_); builder.SetUniform("colorA", colorA, COLOR_CHANNEL); builder.SetUniform("colorB", colorB, COLOR_CHANNEL); builder.SetUniform("colorC", colorC, COLOR_CHANNEL); @@ -79,10 +82,10 @@ std::shared_ptr GESoundWaveFilter::ProcessImage(Drawing::Canvas& builder.SetUniform("shockWaveProgressB", shockWaveProgressB_); builder.SetUniform("shockWaveTotalAlpha", shockWaveTotalAlpha_); - auto invertedImage = builder.MakeImage(canvas.GetGPUContext().get(), nullptr, imageInfo, false); + auto invertedImage = builder.MakeImage(canvas.GetGPUContext().get(), &(matrix), imageInfo, false); if (invertedImage == nullptr) { LOGE("GESoundWaveFilter::ProcessImage make image failed"); - return nullptr; + return image; } return invertedImage; } diff --git a/src/ge_visual_effect.cpp b/src/ge_visual_effect.cpp index 9fa3687..7fe90c9 100644 --- a/src/ge_visual_effect.cpp +++ b/src/ge_visual_effect.cpp @@ -22,9 +22,16 @@ namespace OHOS { namespace Rosen { namespace Drawing { -GEVisualEffect::GEVisualEffect(const std::string& name, DrawingPaintType type) +GEVisualEffect::GEVisualEffect( + const std::string& name, DrawingPaintType type, const std::optional& canvasInfo) : visualEffectName_(name), type_(type), visualEffectImpl_(std::make_unique(name)) -{} +{ + if (canvasInfo) { + canvasInfo_ = canvasInfo.value(); + } else { + canvasInfo_ = Drawing::CanvasInfo(); + } +} GEVisualEffect::~GEVisualEffect() {} diff --git a/test/unittest/BUILD.gn b/test/unittest/BUILD.gn index b9bdd3c..a476de8 100644 --- a/test/unittest/BUILD.gn +++ b/test/unittest/BUILD.gn @@ -125,6 +125,7 @@ ohos_unittest("GraphicsEffectTest") { "ge_pixel_map_shader_mask_test.cpp", "ge_render_test.cpp", "ge_ripple_shader_mask_test.cpp", + "ge_shader_filter_test.cpp", "ge_sound_wave_filter_test.cpp", "ge_system_properties_test.cpp", "ge_visual_effect_container_test.cpp", diff --git a/test/unittest/ge_color_gradient_shader_filter_test.cpp b/test/unittest/ge_color_gradient_shader_filter_test.cpp index 76c1b11..5c55643 100644 --- a/test/unittest/ge_color_gradient_shader_filter_test.cpp +++ b/test/unittest/ge_color_gradient_shader_filter_test.cpp @@ -162,5 +162,28 @@ HWTEST_F(GEColorGradientShaderFilterTest, CheckInParams_001, TestSize.Level0) GTEST_LOG_(INFO) << "GEColorGradientShaderFilterTest CheckInParams_001 end"; } + +/** + * @tc.name: PreProcessColorGradientBuilder_001 + * @tc.desc: Verify the PreProcessColorGradientBuilder + * @tc.type: FUNC + */ +HWTEST_F(GEColorGradientShaderFilterTest, PreProcessColorGradientBuilder_001, TestSize.Level0) +{ + GTEST_LOG_(INFO) << "GEColorGradientShaderFilterTest PreProcessColorGradientBuilder_001 start"; + + // 1.0, 0.0, 0.0, 1.0 is the color rgba params + std::vector colors = { 1.0f, 0.0f, 0.0f, 1.0f }; + std::vector poitions = { 1.0f, 1.0f }; // 1.0, 1.0 is poition xy params + std::vector strengths = { 0.5f }; // 0.5 is strength params + float geoWidth = 100; + float geoHeight = 100; + Drawing::GEColorGradientShaderFilterParams params { colors, poitions, strengths, nullptr }; + auto filter = std::make_unique(params); + EXPECT_NE(filter->PreProcessColorGradientBuilder(geoWidth, geoHeight), nullptr); + + GTEST_LOG_(INFO) << "GEColorGradientShaderFilterTest PreProcessColorGradientBuilder_001 end"; +} + } // namespace Rosen } // namespace OHOS diff --git a/test/unittest/ge_render_test.cpp b/test/unittest/ge_render_test.cpp index 4ba9059..6639ee6 100644 --- a/test/unittest/ge_render_test.cpp +++ b/test/unittest/ge_render_test.cpp @@ -350,14 +350,14 @@ HWTEST_F(GERenderTest, GenerateShaderFilter_008, TestSize.Level1) { GTEST_LOG_(INFO) << "GERenderTest GenerateShaderFilter_008 start"; - auto visualEffect = std::make_shared(""); + auto visualEffect = std::make_shared(Drawing::GE_FILTER_DISPLACEMENT_DISTORT); std::pair factor = {1.0f, 1.0f}; visualEffect->SetParam(Drawing::GE_FILTER_DISPLACEMENT_DISTORT_FACTOR, factor); // 1 blur directon Drawing::GEVisualEffectContainer veContainer; veContainer.AddToChainedFilter(visualEffect); auto geRender = std::make_shared(); auto shaderFilters = geRender->GenerateShaderFilter(veContainer); - EXPECT_EQ(shaderFilters[0], nullptr); + EXPECT_NE(shaderFilters[0], nullptr); GTEST_LOG_(INFO) << "GERenderTest GenerateShaderFilter_008 end"; } diff --git a/test/unittest/ge_shader_filter_test.cpp b/test/unittest/ge_shader_filter_test.cpp new file mode 100644 index 0000000..1c570ee --- /dev/null +++ b/test/unittest/ge_shader_filter_test.cpp @@ -0,0 +1,87 @@ +/* + * 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_color_gradient_shader_filter.h" +#include "ge_shader_filter.h" + +#include "draw/color.h" +#include "image/bitmap.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { +namespace Rosen { + +class GEShaderFilter : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; + std::shared_ptr MakeImage(Drawing::Canvas& canvas); + + static inline Drawing::Canvas canvas_; + std::shared_ptr image_ { nullptr }; + + // 1.0f, 1.0f, 2.0f, 2.0f is left top right bottom + Drawing::Rect src_ { 1.0f, 1.0f, 2.0f, 2.0f }; + Drawing::Rect dst_ { 1.0f, 1.0f, 2.0f, 2.0f }; +}; + +void GEShaderFilter::SetUpTestCase(void) {} +void GEShaderFilter::TearDownTestCase(void) {} + +void GEShaderFilter::SetUp() +{ + canvas_.Restore(); + + Drawing::Bitmap bmp; + Drawing::BitmapFormat format { Drawing::COLORTYPE_RGBA_8888, Drawing::ALPHATYPE_PREMUL }; + bmp.Build(50, 50, format); // 50, 50 bitmap size + bmp.ClearWithColor(Drawing::Color::COLOR_BLUE); + image_ = bmp.MakeImage(); +} + +void GEShaderFilter::TearDown() {} + +/** + * @tc.name: SetShaderFilterCanvasinfo_001 + * @tc.desc: Verify the SetShaderFilterCanvasinfo + * @tc.type: FUNC + */ +HWTEST_F(GEShaderFilter, SetShaderFilterCanvasinfo_001, TestSize.Level0) +{ + GTEST_LOG_(INFO) << "GEShaderFilter SetShaderFilterCanvasinfo_001 start"; + Drawing::CanvasInfo canvasInfo = {100.0f, 100.0f, 0.0f, 0.0f, Drawing::Matrix()}; + + // 1.0, 0.0, 0.0, 1.0 is the color rgba params + std::vector colors = { 1.0f, 0.0f, 0.0f, 1.0f }; + std::vector poitions = { 1.0f, 1.0f }; // 1.0, 1.0 is poition xy params + std::vector strengths = { 0.5f }; // 0.5 is strength params + Drawing::GEColorGradientShaderFilterParams params { colors, poitions, strengths, nullptr }; + auto filter = std::make_unique(params); + + EXPECT_NE(filter->canvasInfo_.geoHeight_, canvasInfo.geoHeight_); + filter->SetShaderFilterCanvasinfo(canvasInfo); + EXPECT_EQ(filter->canvasInfo_.geoHeight_, canvasInfo.geoHeight_); + + GTEST_LOG_(INFO) << "GEShaderFilter SetShaderFilterCanvasinfo_001 end"; +} + +} // namespace Rosen +} // namespace OHOS \ No newline at end of file diff --git a/test/unittest/ge_sound_wave_filter_test.cpp b/test/unittest/ge_sound_wave_filter_test.cpp index 1ce1c89..51b3dc0 100644 --- a/test/unittest/ge_sound_wave_filter_test.cpp +++ b/test/unittest/ge_sound_wave_filter_test.cpp @@ -94,7 +94,7 @@ HWTEST_F(GESoundWaveFilterTest, ProcessImage002, TestSize.Level1) Drawing::GESoundWaveFilterParams geSoundWaveFilterParams; std::unique_ptr geSoundWaveFilter = std::make_unique(geSoundWaveFilterParams); - EXPECT_EQ(geSoundWaveFilter->ProcessImage(canvas_, image, src_, dst_), nullptr); + EXPECT_EQ(geSoundWaveFilter->ProcessImage(canvas_, image, src_, dst_), image); GTEST_LOG_(INFO) << "GESoundWaveFilterTest ProcessImage002 end"; } @@ -118,7 +118,7 @@ HWTEST_F(GESoundWaveFilterTest, ProcessImage003, TestSize.Level1) Drawing::GESoundWaveFilterParams geSoundWaveFilterParams; std::unique_ptr geSoundWaveFilter = std::make_unique(geSoundWaveFilterParams); - EXPECT_EQ(geSoundWaveFilter->ProcessImage(canvas_, image, src_, dst_), nullptr); + EXPECT_EQ(geSoundWaveFilter->ProcessImage(canvas_, image, src_, dst_), image); GTEST_LOG_(INFO) << "GESoundWaveFilterTest ProcessImage003 end"; } @@ -135,7 +135,7 @@ HWTEST_F(GESoundWaveFilterTest, ProcessImage004, TestSize.Level1) Drawing::GESoundWaveFilterParams geSoundWaveFilterParams; std::unique_ptr geSoundWaveFilter = std::make_unique(geSoundWaveFilterParams); - EXPECT_EQ(geSoundWaveFilter->ProcessImage(canvas_, image_, src_, dst_), nullptr); + EXPECT_EQ(geSoundWaveFilter->ProcessImage(canvas_, image_, src_, dst_), image); GTEST_LOG_(INFO) << "GESoundWaveFilterTest ProcessImage004 end"; } diff --git a/test/unittest/ge_visual_effect_test.cpp b/test/unittest/ge_visual_effect_test.cpp index f661f32..880ab9c 100644 --- a/test/unittest/ge_visual_effect_test.cpp +++ b/test/unittest/ge_visual_effect_test.cpp @@ -190,6 +190,29 @@ HWTEST_F(GEVisualEffectTest, SetParam_007, TestSize.Level1) GTEST_LOG_(INFO) << "GEVisualEffectTest SetParam_007 end"; } + +/** + * @tc.name: GetCanvasInfo_001 + * @tc.desc: Verify the GetCanvasInfo + * @tc.type: FUNC + */ +HWTEST_F(GEVisualEffectTest, GetCanvasInfo_001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "GEVisualEffectTest GetCanvasInfo_001 start"; + + auto visualEffect1 = std::make_shared(GE_FILTER_KAWASE_BLUR); + Drawing::CanvasInfo canvasInfo1 = visualEffect1->GetCanvasInfo(); + EXPECT_EQ(canvasInfo1.geoWidth_, 0.0f); + + Drawing::CanvasInfo canvasInfo2 = {100.0f, 100.0f, 0.0f, 0.0f, Drawing::Matrix()}; + auto visualEffect2 = + std::make_shared(GE_FILTER_KAWASE_BLUR, Drawing::DrawingPaintType::BRUSH, canvasInfo2); + Drawing::CanvasInfo canvasInfo3 = visualEffect2->GetCanvasInfo(); + EXPECT_EQ(canvasInfo3.geoWidth_, canvasInfo2.geoWidth_); + + GTEST_LOG_(INFO) << "GEVisualEffectTest GetCanvasInfo_001 end"; +} + } // namespace Drawing } // namespace Rosen } // namespace OHOS -- Gitee From da551eebd901d671a55aaecb42c3575c7c6de08c Mon Sep 17 00:00:00 2001 From: WanShuo Date: Mon, 23 Jun 2025 20:39:09 +0800 Subject: [PATCH 2/3] fix code Signed-off-by: WanShuo --- include/ge_shader_filter_params.h | 4 ++-- src/ge_color_gradient_shader_filter.cpp | 1 + test/unittest/ge_shader_filter_test.cpp | 16 ++++++++-------- test/unittest/ge_sound_wave_filter_test.cpp | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/include/ge_shader_filter_params.h b/include/ge_shader_filter_params.h index 02aad90..dfb8224 100644 --- a/include/ge_shader_filter_params.h +++ b/include/ge_shader_filter_params.h @@ -31,10 +31,10 @@ namespace Drawing { struct CanvasInfo { float geoWidth_ = 0.0f; float geoHeight_ = 0.0f; - float transX_ = 0.0f; + float tranX_ = 0.0f; float tranY_ = 0.0f; Drawing::Matrix mat_; -} +}; constexpr char GE_FILTER_AI_BAR[] = "AIBAR"; constexpr char GE_FILTER_AI_BAR_LOW[] = "AIBAR_LOW"; diff --git a/src/ge_color_gradient_shader_filter.cpp b/src/ge_color_gradient_shader_filter.cpp index c66eeec..e291a99 100644 --- a/src/ge_color_gradient_shader_filter.cpp +++ b/src/ge_color_gradient_shader_filter.cpp @@ -240,6 +240,7 @@ std::shared_ptr GEColorGradientShaderFilter::PreP return nullptr; } } + return builder; } } // namespace Rosen diff --git a/test/unittest/ge_shader_filter_test.cpp b/test/unittest/ge_shader_filter_test.cpp index 1c570ee..7d2392d 100644 --- a/test/unittest/ge_shader_filter_test.cpp +++ b/test/unittest/ge_shader_filter_test.cpp @@ -27,7 +27,7 @@ using namespace testing::ext; namespace OHOS { namespace Rosen { -class GEShaderFilter : public testing::Test { +class GEShaderFilterTest : public testing::Test { public: static void SetUpTestCase(); static void TearDownTestCase(); @@ -43,10 +43,10 @@ public: Drawing::Rect dst_ { 1.0f, 1.0f, 2.0f, 2.0f }; }; -void GEShaderFilter::SetUpTestCase(void) {} -void GEShaderFilter::TearDownTestCase(void) {} +void GEShaderFilterTest::SetUpTestCase(void) {} +void GEShaderFilterTest::TearDownTestCase(void) {} -void GEShaderFilter::SetUp() +void GEShaderFilterTest::SetUp() { canvas_.Restore(); @@ -57,16 +57,16 @@ void GEShaderFilter::SetUp() image_ = bmp.MakeImage(); } -void GEShaderFilter::TearDown() {} +void GEShaderFilterTest::TearDown() {} /** * @tc.name: SetShaderFilterCanvasinfo_001 * @tc.desc: Verify the SetShaderFilterCanvasinfo * @tc.type: FUNC */ -HWTEST_F(GEShaderFilter, SetShaderFilterCanvasinfo_001, TestSize.Level0) +HWTEST_F(GEShaderFilterTest, SetShaderFilterCanvasinfo_001, TestSize.Level0) { - GTEST_LOG_(INFO) << "GEShaderFilter SetShaderFilterCanvasinfo_001 start"; + GTEST_LOG_(INFO) << "GEShaderFilterTest SetShaderFilterCanvasinfo_001 start"; Drawing::CanvasInfo canvasInfo = {100.0f, 100.0f, 0.0f, 0.0f, Drawing::Matrix()}; // 1.0, 0.0, 0.0, 1.0 is the color rgba params @@ -80,7 +80,7 @@ HWTEST_F(GEShaderFilter, SetShaderFilterCanvasinfo_001, TestSize.Level0) filter->SetShaderFilterCanvasinfo(canvasInfo); EXPECT_EQ(filter->canvasInfo_.geoHeight_, canvasInfo.geoHeight_); - GTEST_LOG_(INFO) << "GEShaderFilter SetShaderFilterCanvasinfo_001 end"; + GTEST_LOG_(INFO) << "GEShaderFilterTest SetShaderFilterCanvasinfo_001 end"; } } // namespace Rosen diff --git a/test/unittest/ge_sound_wave_filter_test.cpp b/test/unittest/ge_sound_wave_filter_test.cpp index 51b3dc0..9c78e94 100644 --- a/test/unittest/ge_sound_wave_filter_test.cpp +++ b/test/unittest/ge_sound_wave_filter_test.cpp @@ -135,7 +135,7 @@ HWTEST_F(GESoundWaveFilterTest, ProcessImage004, TestSize.Level1) Drawing::GESoundWaveFilterParams geSoundWaveFilterParams; std::unique_ptr geSoundWaveFilter = std::make_unique(geSoundWaveFilterParams); - EXPECT_EQ(geSoundWaveFilter->ProcessImage(canvas_, image_, src_, dst_), image); + EXPECT_EQ(geSoundWaveFilter->ProcessImage(canvas_, image_, src_, dst_), image_); GTEST_LOG_(INFO) << "GESoundWaveFilterTest ProcessImage004 end"; } -- Gitee From 7febabfcbca3153ce8b83ba18cf2927e0d28e0d0 Mon Sep 17 00:00:00 2001 From: WanShuo Date: Mon, 23 Jun 2025 21:01:57 +0800 Subject: [PATCH 3/3] fix space Signed-off-by: WanShuo --- include/ge_color_gradient_shader_filter.h | 2 +- src/ge_render.cpp | 2 +- test/unittest/ge_color_gradient_shader_filter_test.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/ge_color_gradient_shader_filter.h b/include/ge_color_gradient_shader_filter.h index ea5029e..3772c1c 100644 --- a/include/ge_color_gradient_shader_filter.h +++ b/include/ge_color_gradient_shader_filter.h @@ -42,7 +42,7 @@ public: std::string GetDescription(); private: - std::shared_ptr PreProcessColorGradientBuilder(float geoWidth,float geoHeight); + std::shared_ptr PreProcessColorGradientBuilder(float geoWidth, float geoHeight); std::vector colors_; std::vector positions_; std::vector strengths_; diff --git a/src/ge_render.cpp b/src/ge_render.cpp index e9dd05f..1d05b9a 100644 --- a/src/ge_render.cpp +++ b/src/ge_render.cpp @@ -213,7 +213,7 @@ std::vector> GERender::GenerateShaderFilter( default: break; } - if(shaderFilter){ + if (shaderFilter) { shaderFilter->SetShaderFilterCanvasinfo(vef->GetCanvasInfo()); } shaderFilters.push_back(shaderFilter); diff --git a/test/unittest/ge_color_gradient_shader_filter_test.cpp b/test/unittest/ge_color_gradient_shader_filter_test.cpp index 5c55643..5e13a2d 100644 --- a/test/unittest/ge_color_gradient_shader_filter_test.cpp +++ b/test/unittest/ge_color_gradient_shader_filter_test.cpp @@ -177,7 +177,7 @@ HWTEST_F(GEColorGradientShaderFilterTest, PreProcessColorGradientBuilder_001, Te std::vector poitions = { 1.0f, 1.0f }; // 1.0, 1.0 is poition xy params std::vector strengths = { 0.5f }; // 0.5 is strength params float geoWidth = 100; - float geoHeight = 100; + float geoHeight = 100; Drawing::GEColorGradientShaderFilterParams params { colors, poitions, strengths, nullptr }; auto filter = std::make_unique(params); EXPECT_NE(filter->PreProcessColorGradientBuilder(geoWidth, geoHeight), nullptr); -- Gitee