1 /* 2 * Copyright (c) 2021-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 ROSEN_RENDER_SERVICE_BASE_COMMAND_RS_NODE_COMMAND_H 17 #define ROSEN_RENDER_SERVICE_BASE_COMMAND_RS_NODE_COMMAND_H 18 19 #include "animation/rs_frame_rate_range.h" 20 #include "command/rs_command_templates.h" 21 #include "common/rs_macros.h" 22 #include "pipeline/rs_render_node.h" 23 #include "property/rs_properties.h" 24 25 namespace OHOS { 26 namespace Rosen { 27 28 enum RSNodeCommandType : uint16_t { 29 ADD_MODIFIER, 30 REMOVE_MODIFIER, 31 32 UPDATE_MODIFIER_BOOL, 33 UPDATE_MODIFIER_FLOAT, 34 UPDATE_MODIFIER_INT, 35 UPDATE_MODIFIER_COLOR, 36 UPDATE_MODIFIER_GRAVITY, 37 UPDATE_MODIFIER_MATRIX3F, 38 UPDATE_MODIFIER_QUATERNION, 39 UPDATE_MODIFIER_FILTER_PTR, 40 UPDATE_MODIFIER_IMAGE_PTR, 41 UPDATE_MODIFIER_MASK_PTR, 42 UPDATE_MODIFIER_PATH_PTR, 43 UPDATE_MODIFIER_GRADIENT_BLUR_PTR, 44 UPDATE_MODIFIER_SHADER_PTR, 45 UPDATE_MODIFIER_VECTOR2F, 46 UPDATE_MODIFIER_VECTOR4_BORDER_STYLE, 47 UPDATE_MODIFIER_VECTOR4_COLOR, 48 UPDATE_MODIFIER_VECTOR4F, 49 UPDATE_MODIFIER_RRECT, 50 UPDATE_MODIFIER_DRAW_CMD_LIST, 51 #ifndef USE_ROSEN_DRAWING 52 UPDATE_MODIFIER_SKMATRIX, 53 #else 54 UPDATE_MODIFIER_DRAWING_MATRIX, 55 #endif 56 57 SET_FREEZE, 58 MARK_DRIVEN_RENDER, 59 MARK_DRIVEN_RENDER_ITEM_INDEX, 60 MARK_DRIVEN_RENDER_FRAME_PAINT_STATE, 61 MARK_CONTENT_CHANGED, 62 SET_DRAW_REGION, 63 64 REGISTER_GEOMETRY_TRANSITION, 65 UNREGISTER_GEOMETRY_TRANSITION, 66 67 MARK_NODE_GROUP, 68 SET_UI_FRAME_RATE_RANGE, 69 }; 70 71 class RSB_EXPORT RSNodeCommandHelper { 72 public: 73 static void AddModifier(RSContext& context, NodeId nodeId, const std::shared_ptr<RSRenderModifier>& modifier); 74 static void RemoveModifier(RSContext& context, NodeId nodeId, PropertyId propertyId); 75 76 template<typename T> UpdateModifier(RSContext & context,NodeId nodeId,T value,PropertyId id,bool isDelta)77 static void UpdateModifier(RSContext& context, NodeId nodeId, T value, PropertyId id, bool isDelta) 78 { 79 std::shared_ptr<RSRenderPropertyBase> prop = std::make_shared<RSRenderProperty<T>>(value, id); 80 auto& nodeMap = context.GetNodeMap(); 81 auto node = nodeMap.GetRenderNode<RSRenderNode>(nodeId); 82 if (!node) { 83 return; 84 } 85 auto modifier = node->GetModifier(id); 86 if (modifier) { 87 modifier->Update(prop, isDelta); 88 } 89 } 90 91 static void SetFreeze(RSContext& context, NodeId nodeId, bool isFreeze); 92 static void MarkNodeGroup(RSContext& context, NodeId nodeId, bool isNodeGroup); 93 94 static void MarkDrivenRender(RSContext& context, NodeId nodeId, bool flag); 95 static void MarkDrivenRenderItemIndex(RSContext& context, NodeId nodeId, int32_t index); 96 static void MarkDrivenRenderFramePaintState(RSContext& context, NodeId nodeId, bool flag); 97 static void MarkContentChanged(RSContext& context, NodeId nodeId, bool isChanged); 98 static void SetDrawRegion(RSContext& context, NodeId nodeId, std::shared_ptr<RectF> rect); 99 100 static void RegisterGeometryTransitionPair(RSContext& context, NodeId inNodeId, NodeId outNodeId); 101 static void UnregisterGeometryTransitionPair(RSContext& context, NodeId inNodeId, NodeId outNodeId); 102 static void SetUIFrameRateRange(RSContext& context, NodeId nodeId, FrameRateRange range); 103 }; 104 105 ADD_COMMAND(RSAddModifier, 106 ARG(RS_NODE, ADD_MODIFIER, RSNodeCommandHelper::AddModifier, NodeId, std::shared_ptr<RSRenderModifier>)) 107 ADD_COMMAND(RSRemoveModifier, 108 ARG(RS_NODE, REMOVE_MODIFIER, RSNodeCommandHelper::RemoveModifier, NodeId, PropertyId)) 109 110 ADD_COMMAND(RSUpdatePropertyBool, 111 ARG(RS_NODE, UPDATE_MODIFIER_BOOL, RSNodeCommandHelper::UpdateModifier<bool>, 112 NodeId, bool, PropertyId, bool)) 113 ADD_COMMAND(RSUpdatePropertyFloat, 114 ARG(RS_NODE, UPDATE_MODIFIER_FLOAT, RSNodeCommandHelper::UpdateModifier<float>, 115 NodeId, float, PropertyId, bool)) 116 ADD_COMMAND(RSUpdatePropertyInt, 117 ARG(RS_NODE, UPDATE_MODIFIER_INT, RSNodeCommandHelper::UpdateModifier<int>, 118 NodeId, int, PropertyId, bool)) 119 ADD_COMMAND(RSUpdatePropertyColor, 120 ARG(RS_NODE, UPDATE_MODIFIER_COLOR, RSNodeCommandHelper::UpdateModifier<Color>, 121 NodeId, Color, PropertyId, bool)) 122 ADD_COMMAND(RSUpdatePropertyGravity, 123 ARG(RS_NODE, UPDATE_MODIFIER_GRAVITY, RSNodeCommandHelper::UpdateModifier<Gravity>, 124 NodeId, Gravity, PropertyId, bool)) 125 ADD_COMMAND(RSUpdatePropertyMatrix3f, 126 ARG(RS_NODE, UPDATE_MODIFIER_MATRIX3F, RSNodeCommandHelper::UpdateModifier<Matrix3f>, 127 NodeId, Matrix3f, PropertyId, bool)) 128 ADD_COMMAND(RSUpdatePropertyQuaternion, 129 ARG(RS_NODE, UPDATE_MODIFIER_QUATERNION, RSNodeCommandHelper::UpdateModifier<Quaternion>, 130 NodeId, Quaternion, PropertyId, bool)) 131 ADD_COMMAND(RSUpdatePropertyFilter, 132 ARG(RS_NODE, UPDATE_MODIFIER_FILTER_PTR, RSNodeCommandHelper::UpdateModifier<std::shared_ptr<RSFilter>>, 133 NodeId, std::shared_ptr<RSFilter>, PropertyId, bool)) 134 ADD_COMMAND(RSUpdatePropertyImage, 135 ARG(RS_NODE, UPDATE_MODIFIER_IMAGE_PTR, RSNodeCommandHelper::UpdateModifier<std::shared_ptr<RSImage>>, 136 NodeId, std::shared_ptr<RSImage>, PropertyId, bool)) 137 ADD_COMMAND(RSUpdatePropertyMask, 138 ARG(RS_NODE, UPDATE_MODIFIER_MASK_PTR, RSNodeCommandHelper::UpdateModifier<std::shared_ptr<RSMask>>, 139 NodeId, std::shared_ptr<RSMask>, PropertyId, bool)) 140 ADD_COMMAND(RSUpdatePropertyPath, 141 ARG(RS_NODE, UPDATE_MODIFIER_PATH_PTR, RSNodeCommandHelper::UpdateModifier<std::shared_ptr<RSPath>>, 142 NodeId, std::shared_ptr<RSPath>, PropertyId, bool)) 143 ADD_COMMAND(RSUpdatePropertyLinearGradientBlurPara, 144 ARG(RS_NODE, UPDATE_MODIFIER_GRADIENT_BLUR_PTR, 145 RSNodeCommandHelper::UpdateModifier<std::shared_ptr<RSLinearGradientBlurPara>>, 146 NodeId, std::shared_ptr<RSLinearGradientBlurPara>, PropertyId, bool)) 147 ADD_COMMAND(RSUpdatePropertyShader, 148 ARG(RS_NODE, UPDATE_MODIFIER_SHADER_PTR, RSNodeCommandHelper::UpdateModifier<std::shared_ptr<RSShader>>, 149 NodeId, std::shared_ptr<RSShader>, PropertyId, bool)) 150 ADD_COMMAND(RSUpdatePropertyVector2f, 151 ARG(RS_NODE, UPDATE_MODIFIER_VECTOR2F, RSNodeCommandHelper::UpdateModifier<Vector2f>, 152 NodeId, Vector2f, PropertyId, bool)) 153 ADD_COMMAND(RSUpdatePropertyBorderStyle, 154 ARG(RS_NODE, UPDATE_MODIFIER_VECTOR4_BORDER_STYLE, RSNodeCommandHelper::UpdateModifier<Vector4<uint32_t>>, 155 NodeId, Vector4<uint32_t>, PropertyId, bool)) 156 ADD_COMMAND(RSUpdatePropertyVector4Color, 157 ARG(RS_NODE, UPDATE_MODIFIER_VECTOR4_COLOR, RSNodeCommandHelper::UpdateModifier<Vector4<Color>>, 158 NodeId, Vector4<Color>, PropertyId, bool)) 159 ADD_COMMAND(RSUpdatePropertyVector4f, 160 ARG(RS_NODE, UPDATE_MODIFIER_VECTOR4F, RSNodeCommandHelper::UpdateModifier<Vector4f>, 161 NodeId, Vector4f, PropertyId, bool)) 162 ADD_COMMAND(RSUpdatePropertyRRect, 163 ARG(RS_NODE, UPDATE_MODIFIER_RRECT, RSNodeCommandHelper::UpdateModifier<RRect>, 164 NodeId, RRect, PropertyId, bool)) 165 #ifndef USE_ROSEN_DRAWING 166 ADD_COMMAND(RSUpdatePropertyDrawCmdList, 167 ARG(RS_NODE, UPDATE_MODIFIER_DRAW_CMD_LIST, RSNodeCommandHelper::UpdateModifier<DrawCmdListPtr>, 168 NodeId, DrawCmdListPtr, PropertyId, bool)) 169 ADD_COMMAND(RSUpdatePropertySkMatrix, 170 ARG(RS_NODE, UPDATE_MODIFIER_SKMATRIX, RSNodeCommandHelper::UpdateModifier<SkMatrix>, 171 NodeId, SkMatrix, PropertyId, bool)) 172 #else 173 ADD_COMMAND(RSUpdatePropertyDrawCmdList, 174 ARG(RS_NODE, UPDATE_MODIFIER_DRAW_CMD_LIST, RSNodeCommandHelper::UpdateModifier<Drawing::DrawCmdListPtr>, 175 NodeId, Drawing::DrawCmdListPtr, PropertyId, bool)) 176 ADD_COMMAND(RSUpdatePropertyDrawingMatrix, 177 ARG(RS_NODE, UPDATE_MODIFIER_DRAWING_MATRIX, RSNodeCommandHelper::UpdateModifier<Drawing::Matrix>, 178 NodeId, Drawing::Matrix, PropertyId, bool)) 179 #endif 180 181 ADD_COMMAND(RSSetFreeze, 182 ARG(RS_NODE, SET_FREEZE, RSNodeCommandHelper::SetFreeze, NodeId, bool)) 183 ADD_COMMAND(RSMarkNodeGroup, 184 ARG(RS_NODE, MARK_NODE_GROUP, RSNodeCommandHelper::MarkNodeGroup, NodeId, bool)) 185 186 ADD_COMMAND(RSMarkDrivenRender, 187 ARG(RS_NODE, MARK_DRIVEN_RENDER, RSNodeCommandHelper::MarkDrivenRender, NodeId, bool)) 188 ADD_COMMAND(RSMarkDrivenRenderItemIndex, 189 ARG(RS_NODE, MARK_DRIVEN_RENDER_ITEM_INDEX, RSNodeCommandHelper::MarkDrivenRenderItemIndex, NodeId, int32_t)) 190 ADD_COMMAND(RSMarkDrivenRenderFramePaintState, 191 ARG(RS_NODE, MARK_DRIVEN_RENDER_FRAME_PAINT_STATE, 192 RSNodeCommandHelper::MarkDrivenRenderFramePaintState, NodeId, bool)) 193 ADD_COMMAND(RSMarkContentChanged, 194 ARG(RS_NODE, MARK_CONTENT_CHANGED, RSNodeCommandHelper::MarkContentChanged, NodeId, bool)) 195 196 ADD_COMMAND(RSSetDrawRegion, 197 ARG(RS_NODE, SET_DRAW_REGION, RSNodeCommandHelper::SetDrawRegion, 198 NodeId, std::shared_ptr<RectF>)) 199 200 ADD_COMMAND(RSRegisterGeometryTransitionNodePair, 201 ARG(RS_NODE, REGISTER_GEOMETRY_TRANSITION, RSNodeCommandHelper::RegisterGeometryTransitionPair, NodeId, NodeId)) 202 ADD_COMMAND(RSUnregisterGeometryTransitionNodePair, 203 ARG(RS_NODE, UNREGISTER_GEOMETRY_TRANSITION, RSNodeCommandHelper::UnregisterGeometryTransitionPair, NodeId, NodeId)) 204 ADD_COMMAND(RSSetUIFrameRateRange, 205 ARG(RS_NODE, SET_UI_FRAME_RATE_RANGE, RSNodeCommandHelper::SetUIFrameRateRange, NodeId, FrameRateRange)) 206 } // namespace Rosen 207 } // namespace OHOS 208 209 #endif // ROSEN_RENDER_SERVICE_BASE_COMMAND_RS_NODE_COMMAND_H 210