From af0cdcb98dece38022304bb0999274eae5aa375e Mon Sep 17 00:00:00 2001 From: wangweiyuan Date: Sat, 21 Jun 2025 17:40:21 +0800 Subject: [PATCH 1/2] EffectLayer2 Signed-off-by: wangweiyuan --- .../effect_component_pattern.cpp | 8 +++-- .../effect_component_pattern.h | 2 +- .../render/adapter/rosen_render_context.cpp | 32 +++++++++++++------ .../render/adapter/rosen_render_context.h | 3 ++ .../components_ng/render/render_context.h | 1 + .../core/rosen/rosen_render_context_test.cpp | 5 +++ 6 files changed, 38 insertions(+), 13 deletions(-) diff --git a/frameworks/core/components_ng/pattern/effect_component/effect_component_pattern.cpp b/frameworks/core/components_ng/pattern/effect_component/effect_component_pattern.cpp index 440caa8bb84..76bb78a6bf2 100644 --- a/frameworks/core/components_ng/pattern/effect_component/effect_component_pattern.cpp +++ b/frameworks/core/components_ng/pattern/effect_component/effect_component_pattern.cpp @@ -60,11 +60,15 @@ bool EffectComponentPattern::OnDirtyLayoutWrapperSwap( CHECK_NULL_VOID(rsNode); auto surfaceNode = rsNode->ReinterpretCastTo(); CHECK_NULL_VOID(surfaceNode); - if (effectLayerMap.find(pattern->GetEffectLayer()) == effectLayerMap.end()) { + auto effectLayer = pattern->GetEffectLayer(); + if (effectLayerMap.find(effectLayer) == effectLayerMap.end()) { + LOGE("effectLayer is %{public}d, is invalid", static_cast(effectLayer)); return; } - Rosen::TopLayerZOrder zOrder = effectLayerMap[pattern->GetEffectLayer()]; + Rosen::TopLayerZOrder zOrder = effectLayerMap[effectLayer]; surfaceNode->SetCompositeLayer(zOrder); + LOGI("effectLayer is %{public}d, zOrder is %{public}d", static_cast(effectLayer), + static_cast(zOrder)); }); return false; diff --git a/frameworks/core/components_ng/pattern/effect_component/effect_component_pattern.h b/frameworks/core/components_ng/pattern/effect_component/effect_component_pattern.h index 5525140b4cc..1bf7856090d 100644 --- a/frameworks/core/components_ng/pattern/effect_component/effect_component_pattern.h +++ b/frameworks/core/components_ng/pattern/effect_component/effect_component_pattern.h @@ -48,7 +48,7 @@ public: std::optional GetContextParam() const override { if (effectLayer_ != EffectLayer::NONE) { - return RenderContext::ContextParam { RenderContext::ContextType::SURFACE }; + return RenderContext::ContextParam { RenderContext::ContextType::COMPOSITE_COMPONENT }; } return RenderContext::ContextParam { RenderContext::ContextType::EFFECT }; } diff --git a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp index c6b3ad295c7..243a156e89f 100755 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp @@ -497,26 +497,34 @@ void RosenRenderContext::InitContext(bool isRoot, const std::optional rsContext; if (SystemProperties::GetMultiInstanceEnabled()) { auto pipeline = GetPipelineContext(); rsContext = GetRSUIContext(pipeline); } + auto isTextureExportNode = ViewStackProcessor::GetInstance()->IsExportTexture(); + if (isRoot) { rsNode_ = Rosen::RSRootNode::Create(false, isTextureExportNode, rsContext); - SetSkipCheckInMultiInstance(); - AddFrameNodeInfoToRsNode(); - return; } else if (!param.has_value()) { rsNode_ = Rosen::RSCanvasNode::Create(false, isTextureExportNode, rsContext); + } else { + patternType_ = param->patternType; + CreateNodeByType(*param, isTextureExportNode, rsContext); + } + + if (rsNode_) { SetSkipCheckInMultiInstance(); AddFrameNodeInfoToRsNode(); - return; } - patternType_ = param->patternType; - // create proper RSNode base on input - switch (param->type) { +} + +void RosenRenderContext::CreateNodeByType( + const ContextParam& param, bool isTextureExportNode, std::shared_ptr& rsContext) +{ + switch (param.type) { case ContextType::CANVAS: rsNode_ = Rosen::RSCanvasNode::Create(false, isTextureExportNode, rsContext); break; @@ -524,7 +532,7 @@ void RosenRenderContext::InitContext(bool isRoot, const std::optionalsurfaceName.value_or(""), + Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = param.surfaceName.value_or(""), .isTextureExportNode = isTextureExportNode }; rsNode_ = Rosen::RSSurfaceNode::Create(surfaceNodeConfig, false, rsContext); break; @@ -542,6 +550,12 @@ void RosenRenderContext::InitContext(bool isRoot, const std::optional& param, bool isLayoutNode) override; + void CreateNodeByType( + const ContextParam& param, bool isTextureExportNode, std::shared_ptr& rsContext); + void SyncGeometryFrame(const RectF& paintRect); void SyncGeometryProperties(GeometryNode* geometryNode, bool isRound = true, uint8_t flag = 0) override; diff --git a/frameworks/core/components_ng/render/render_context.h b/frameworks/core/components_ng/render/render_context.h index 30a53ecb56a..f2226a3c481 100644 --- a/frameworks/core/components_ng/render/render_context.h +++ b/frameworks/core/components_ng/render/render_context.h @@ -184,6 +184,7 @@ public: EXTERNAL, INCREMENTAL_CANVAS, HARDWARE_SURFACE, + COMPOSITE_COMPONENT, #ifdef RENDER_EXTRACT_SUPPORTED HARDWARE_TEXTURE, #endif diff --git a/test/unittest/core/rosen/rosen_render_context_test.cpp b/test/unittest/core/rosen/rosen_render_context_test.cpp index 96ec54b64df..12eee9c9eaa 100644 --- a/test/unittest/core/rosen/rosen_render_context_test.cpp +++ b/test/unittest/core/rosen/rosen_render_context_test.cpp @@ -774,6 +774,11 @@ HWTEST_F(RosenRenderContextTest, RosenRenderContextTest032, TestSize.Level1) rosenRenderContext->InitContext(false, contextParamValue8); EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true); rosenRenderContext->rsNode_ = nullptr; + contextParam.type = RenderContext::ContextType::COMPOSITE_COMPONENT; + std::optional contextParamValue10 = std::make_optional(contextParam); + rosenRenderContext->InitContext(false, contextParamValue10); + EXPECT_EQ(rosenRenderContext->rsNode_ != nullptr, true); + rosenRenderContext->rsNode_ = nullptr; contextParam.type = RenderContext::ContextType::EXTERNAL; std::optional contextParamValue9 = std::make_optional(contextParam); rosenRenderContext->InitContext(false, contextParamValue9); -- Gitee From 3b655659f587bed21d06efe26eb3471fa29fb345 Mon Sep 17 00:00:00 2001 From: wangweiyuan Date: Sat, 21 Jun 2025 18:03:57 +0800 Subject: [PATCH 2/2] EffectLayer2 Signed-off-by: wangweiyuan --- .../core/components_ng/render/adapter/rosen_render_context.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp index 243a156e89f..2a552baa4cc 100755 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp @@ -553,7 +553,7 @@ void RosenRenderContext::CreateNodeByType( case ContextType::COMPOSITE_COMPONENT: { Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = param.surfaceName.value_or(""), .isTextureExportNode = isTextureExportNode }; - rsNode_ = Rosen::RSSurfaceNode::Create(surfaceNodeConfig, false, rsContext); + rsNode_ = Rosen::RSSurfaceNode::Create(surfaceNodeConfig, true, rsContext); break; } case ContextType::INCREMENTAL_CANVAS: { -- Gitee