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 "command/rs_command_templates.h" 20 #include "common/rs_macros.h" 21 #include "pipeline/rs_render_node.h" 22 #include "property/rs_properties.h" 23 24 namespace OHOS { 25 namespace Rosen { 26 27 enum RSNodeCommandType : uint16_t { 28 ADD_MODIFIER, 29 REMOVE_MODIFIER, 30 31 UPDATE_MODIFIER_BOOL, 32 UPDATE_MODIFIER_FLOAT, 33 UPDATE_MODIFIER_INT, 34 UPDATE_MODIFIER_COLOR, 35 UPDATE_MODIFIER_GRAVITY, 36 UPDATE_MODIFIER_MATRIX3F, 37 UPDATE_MODIFIER_QUATERNION, 38 UPDATE_MODIFIER_FILTER_PTR, 39 UPDATE_MODIFIER_IMAGE_PTR, 40 UPDATE_MODIFIER_MASK_PTR, 41 UPDATE_MODIFIER_PATH_PTR, 42 UPDATE_MODIFIER_SHADER_PTR, 43 UPDATE_MODIFIER_VECTOR2F, 44 UPDATE_MODIFIER_VECTOR4_BORDER_STYLE, 45 UPDATE_MODIFIER_VECTOR4_COLOR, 46 UPDATE_MODIFIER_VECTOR4F, 47 UPDATE_MODIFIER_DRAW_CMD_LIST, 48 }; 49 50 class RSB_EXPORT RSNodeCommandHelper { 51 public: 52 static void AddModifier(RSContext& context, NodeId nodeId, const std::shared_ptr<RSRenderModifier>& modifier); 53 static void RemoveModifier(RSContext& context, NodeId nodeId, PropertyId propertyId); 54 55 template<typename T> UpdateModifier(RSContext & context,NodeId nodeId,T value,PropertyId id,bool isDelta)56 static void UpdateModifier(RSContext& context, NodeId nodeId, T value, PropertyId id, bool isDelta) 57 { 58 std::shared_ptr<RSRenderPropertyBase> prop = std::make_shared<RSRenderProperty<T>>(value, id); 59 auto& nodeMap = context.GetNodeMap(); 60 auto node = nodeMap.GetRenderNode<RSRenderNode>(nodeId); 61 if (!node) { 62 return; 63 } 64 auto modifier = node->GetModifier(id); 65 if (modifier) { 66 modifier->Update(prop, isDelta); 67 } 68 } 69 }; 70 71 ADD_COMMAND(RSAddModifier, 72 ARG(RS_NODE, ADD_MODIFIER, RSNodeCommandHelper::AddModifier, NodeId, std::shared_ptr<RSRenderModifier>)) 73 ADD_COMMAND(RSRemoveModifier, 74 ARG(RS_NODE, REMOVE_MODIFIER, RSNodeCommandHelper::RemoveModifier, NodeId, PropertyId)) 75 76 ADD_COMMAND(RSUpdatePropertyBool, 77 ARG(RS_NODE, UPDATE_MODIFIER_BOOL, RSNodeCommandHelper::UpdateModifier<bool>, 78 NodeId, bool, PropertyId, bool)) 79 ADD_COMMAND(RSUpdatePropertyFloat, 80 ARG(RS_NODE, UPDATE_MODIFIER_FLOAT, RSNodeCommandHelper::UpdateModifier<float>, 81 NodeId, float, PropertyId, bool)) 82 ADD_COMMAND(RSUpdatePropertyInt, 83 ARG(RS_NODE, UPDATE_MODIFIER_INT, RSNodeCommandHelper::UpdateModifier<int>, 84 NodeId, int, PropertyId, bool)) 85 ADD_COMMAND(RSUpdatePropertyColor, 86 ARG(RS_NODE, UPDATE_MODIFIER_COLOR, RSNodeCommandHelper::UpdateModifier<Color>, 87 NodeId, Color, PropertyId, bool)) 88 ADD_COMMAND(RSUpdatePropertyGravity, 89 ARG(RS_NODE, UPDATE_MODIFIER_GRAVITY, RSNodeCommandHelper::UpdateModifier<Gravity>, 90 NodeId, Gravity, PropertyId, bool)) 91 ADD_COMMAND(RSUpdatePropertyMatrix3f, 92 ARG(RS_NODE, UPDATE_MODIFIER_MATRIX3F, RSNodeCommandHelper::UpdateModifier<Matrix3f>, 93 NodeId, Matrix3f, PropertyId, bool)) 94 ADD_COMMAND(RSUpdatePropertyQuaternion, 95 ARG(RS_NODE, UPDATE_MODIFIER_QUATERNION, RSNodeCommandHelper::UpdateModifier<Quaternion>, 96 NodeId, Quaternion, PropertyId, bool)) 97 ADD_COMMAND(RSUpdatePropertyFilter, 98 ARG(RS_NODE, UPDATE_MODIFIER_FILTER_PTR, RSNodeCommandHelper::UpdateModifier<std::shared_ptr<RSFilter>>, 99 NodeId, std::shared_ptr<RSFilter>, PropertyId, bool)) 100 ADD_COMMAND(RSUpdatePropertyImage, 101 ARG(RS_NODE, UPDATE_MODIFIER_IMAGE_PTR, RSNodeCommandHelper::UpdateModifier<std::shared_ptr<RSImage>>, 102 NodeId, std::shared_ptr<RSImage>, PropertyId, bool)) 103 ADD_COMMAND(RSUpdatePropertyMask, 104 ARG(RS_NODE, UPDATE_MODIFIER_MASK_PTR, RSNodeCommandHelper::UpdateModifier<std::shared_ptr<RSMask>>, 105 NodeId, std::shared_ptr<RSMask>, PropertyId, bool)) 106 ADD_COMMAND(RSUpdatePropertyPath, 107 ARG(RS_NODE, UPDATE_MODIFIER_PATH_PTR, RSNodeCommandHelper::UpdateModifier<std::shared_ptr<RSPath>>, 108 NodeId, std::shared_ptr<RSPath>, PropertyId, bool)) 109 ADD_COMMAND(RSUpdatePropertyShader, 110 ARG(RS_NODE, UPDATE_MODIFIER_SHADER_PTR, RSNodeCommandHelper::UpdateModifier<std::shared_ptr<RSShader>>, 111 NodeId, std::shared_ptr<RSShader>, PropertyId, bool)) 112 ADD_COMMAND(RSUpdatePropertyVector2f, 113 ARG(RS_NODE, UPDATE_MODIFIER_VECTOR2F, RSNodeCommandHelper::UpdateModifier<Vector2f>, 114 NodeId, Vector2f, PropertyId, bool)) 115 ADD_COMMAND(RSUpdatePropertyBorderStyle, 116 ARG(RS_NODE, UPDATE_MODIFIER_VECTOR4_BORDER_STYLE, RSNodeCommandHelper::UpdateModifier<Vector4<uint32_t>>, 117 NodeId, Vector4<uint32_t>, PropertyId, bool)) 118 ADD_COMMAND(RSUpdatePropertyVector4Color, 119 ARG(RS_NODE, UPDATE_MODIFIER_VECTOR4_COLOR, RSNodeCommandHelper::UpdateModifier<Vector4<Color>>, 120 NodeId, Vector4<Color>, PropertyId, bool)) 121 ADD_COMMAND(RSUpdatePropertyVector4f, 122 ARG(RS_NODE, UPDATE_MODIFIER_VECTOR4F, RSNodeCommandHelper::UpdateModifier<Vector4f>, 123 NodeId, Vector4f, PropertyId, bool)) 124 ADD_COMMAND(RSUpdatePropertyDrawCmdList, 125 ARG(RS_NODE, UPDATE_MODIFIER_DRAW_CMD_LIST, RSNodeCommandHelper::UpdateModifier<DrawCmdListPtr>, 126 NodeId, DrawCmdListPtr, PropertyId, bool)) 127 128 } // namespace Rosen 129 } // namespace OHOS 130 131 #endif // ROSEN_RENDER_SERVICE_BASE_COMMAND_RS_NODE_COMMAND_H 132