1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef RENDER_SERVICE_CORE_RS_DRIVEN_RENDER_VISITOR_H 17 #define RENDER_SERVICE_CORE_RS_DRIVEN_RENDER_VISITOR_H 18 19 #include "pipeline/rs_processor.h" 20 #include "rs_driven_surface_render_node.h" 21 #include "visitor/rs_node_visitor.h" 22 23 namespace OHOS { 24 namespace Rosen { 25 class RSPaintFilterCanvas; 26 27 class RSDrivenRenderVisitor : public RSNodeVisitor { 28 public: 29 RSDrivenRenderVisitor(); ~RSDrivenRenderVisitor()30 ~RSDrivenRenderVisitor() override {} 31 32 void PrepareChildren(RSRenderNode& node) override; 33 void PrepareCanvasRenderNode(RSCanvasRenderNode& node) override; PrepareDisplayRenderNode(RSDisplayRenderNode & node)34 void PrepareDisplayRenderNode(RSDisplayRenderNode& node) override {} PrepareProxyRenderNode(RSProxyRenderNode & node)35 void PrepareProxyRenderNode(RSProxyRenderNode& node) override {} PrepareRootRenderNode(RSRootRenderNode & node)36 void PrepareRootRenderNode(RSRootRenderNode& node) override {} PrepareSurfaceRenderNode(RSSurfaceRenderNode & node)37 void PrepareSurfaceRenderNode(RSSurfaceRenderNode& node) override {} PrepareEffectRenderNode(RSEffectRenderNode & node)38 void PrepareEffectRenderNode(RSEffectRenderNode& node) override {} 39 40 void ProcessChildren(RSRenderNode& node) override; 41 void ProcessCanvasRenderNode(RSCanvasRenderNode& node) override; ProcessDisplayRenderNode(RSDisplayRenderNode & node)42 void ProcessDisplayRenderNode(RSDisplayRenderNode& node) override {} ProcessProxyRenderNode(RSProxyRenderNode & node)43 void ProcessProxyRenderNode(RSProxyRenderNode& node) override {} ProcessRootRenderNode(RSRootRenderNode & node)44 void ProcessRootRenderNode(RSRootRenderNode& node) override {} ProcessSurfaceRenderNode(RSSurfaceRenderNode & node)45 void ProcessSurfaceRenderNode(RSSurfaceRenderNode& node) override {} ProcessEffectRenderNode(RSEffectRenderNode & node)46 void ProcessEffectRenderNode(RSEffectRenderNode& node) override {} 47 48 void PrepareDrivenSurfaceRenderNode(RSDrivenSurfaceRenderNode& node); 49 void ProcessDrivenSurfaceRenderNode(RSDrivenSurfaceRenderNode& node); 50 51 void SetDirtyInfo(bool backgroundDirty, bool contentDirty, bool nonContentDirty); 52 void SetScreenRect(const RectI& rect); 53 54 void SetUniProcessor(std::shared_ptr<RSProcessor> processor); 55 void SetUniColorSpace(GraphicColorGamut colorSpace); 56 void SetUniGlobalZOrder(float globalZOrder); 57 58 private: 59 void RenderExpandedFrame(RSDrivenSurfaceRenderNode& node); 60 void SkipRenderExpandedFrame(RSDrivenSurfaceRenderNode& node); 61 void ProcessDrivenCanvasRenderNode(RSCanvasRenderNode& node); 62 std::shared_ptr<RSPaintFilterCanvas> canvas_; 63 std::shared_ptr<RSBaseRenderEngine> renderEngine_; 64 65 std::shared_ptr<RSDrivenSurfaceRenderNode> currDrivenSurfaceNode_ = nullptr; 66 67 bool backgroundDirty_ = false; 68 bool contentDirty_ = false; 69 bool nonContentDirty_ = false; 70 RectI screenRect_; 71 72 std::shared_ptr<RSProcessor> uniProcessor_ = nullptr; 73 GraphicColorGamut uniColorSpace_ = GraphicColorGamut::GRAPHIC_COLOR_GAMUT_SRGB; 74 float uniGlobalZOrder_ = 0.0f; 75 76 bool hasTraverseDrivenNode_ = false; 77 }; 78 } // namespace Rosen 79 } // namespace OHOS 80 #endif // RENDER_SERVICE_CORE_RS_DRIVEN_RENDER_VISITOR_H