• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_MODEL_MODEL_PAINT_PROPERTY_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_MODEL_MODEL_PAINT_PROPERTY_H
18 
19 #include "custom/custom_render_descriptor.h"
20 #include "custom/shader_input_buffer.h"
21 #include "data_type/geometry/geometry.h"
22 #include "data_type/gltf_animation.h"
23 
24 #include "base/geometry/animatable_float.h"
25 #include "base/geometry/vec3.h"
26 #include "core/components_ng/pattern/model/model_light.h"
27 #include "core/components_ng/pattern/model/model_position.h"
28 #include "core/components_ng/pattern/model/model_property.h"
29 #include "core/components_ng/render/paint_property.h"
30 
31 namespace OHOS::Ace::NG {
32 
33 class ModelPaintProperty : public PaintProperty {
DECLARE_ACE_TYPE(ModelPaintProperty,PaintProperty)34     DECLARE_ACE_TYPE(ModelPaintProperty, PaintProperty)
35 
36 public:
37     ModelPaintProperty()
38     {
39         // Initialize model lights to empty vector;
40         propModelLights_ = std::vector<RefPtr<ModelLight>> {};
41         propModelAnimations_ = std::vector<std::shared_ptr<Render3D::GLTFAnimation>> {};
42         propModelGeometries_ = std::vector<std::shared_ptr<Render3D::Geometry>> {};
43         propModelImageTexturePaths_ = std::vector<std::string> {};
44         propShaderPath_ = std::string {};
45         propModelShaderInputBuffer_ = nullptr;
46         propModelCustomRender_ = nullptr;
47         propModelSource_ = std::string {};
48         propModelBackground_ = std::string{};
49     };
50 
51     ~ModelPaintProperty() override = default;
52 
Clone()53     RefPtr<PaintProperty> Clone() const override
54     {
55         auto paintProperty = MakeRefPtr<ModelPaintProperty>();
56         paintProperty->UpdatePaintProperty(this);
57         paintProperty->propCameraPosition_ = CloneCameraPosition();
58         paintProperty->propCameraDistance_ = CloneCameraDistance();
59         paintProperty->propCameraIsAngular_ = CloneCameraIsAngular();
60         paintProperty->propCameraRotation_ = CloneCameraRotation();
61         paintProperty->propCameraLookAt_ = CloneCameraLookAt();
62         paintProperty->propCameraUp_ = CloneCameraUp();
63         paintProperty->propCameraZNear_ = CloneCameraZNear();
64         paintProperty->propCameraZFar_ = CloneCameraZFar();
65         paintProperty->propCameraFOV_ = CloneCameraFOV();
66         paintProperty->propModelLights_ = CloneModelLights();
67         paintProperty->propModelAnimations_ = CloneModelAnimations();
68         paintProperty->propModelGeometries_ = CloneModelGeometries();
69         paintProperty->propModelCustomRender_ = CloneModelCustomRender();
70         paintProperty->propShaderPath_ = CloneShaderPath();
71         paintProperty->propModelImageTexturePaths_ = CloneModelImageTexturePaths();
72         paintProperty->propModelShaderInputBuffer_ = CloneModelShaderInputBuffer();
73         paintProperty->propModelSource_ = CloneModelSource();
74         paintProperty->propModelBackground_ = CloneModelBackground();
75         paintProperty->propModelCameraMove_ = CloneModelCameraMove();
76         paintProperty->propRenderHeight_ = CloneRenderHeight();
77         paintProperty->propRenderWidth_ = CloneRenderWidth();
78         paintProperty->propRenderFrameRate_ = CloneRenderFrameRate();
79 
80         paintProperty->needsCameraSetup_ = CloneNeedsCameraSetup();
81         paintProperty->needsLightsSetup_ = CloneNeedsLightsSetup();
82         paintProperty->needsAnimationsSetup_ = CloneNeedsAnimationsSetup();
83         paintProperty->needsGeometriesSetup_ = CloneNeedsGeometriesSetup();
84         paintProperty->needsCustomRenderSetup_ = CloneNeedsCustomRenderSetup();
85         paintProperty->needsShaderPathSetup_ = CloneNeedsShaderPathSetup();
86         paintProperty->needsImageTexturePathsSetup_ = CloneNeedsImageTexturePathsSetup();
87         paintProperty->needsShaderInputBufferSetup_ = CloneNeedsShaderInputBufferSetup();
88         paintProperty->needsModelSourceSetup_ = CloneNeedsModelSourceSetup();
89         paintProperty->needsModelBackgroundSetup_ = CloneNeedsModelBackgroundSetup();
90         paintProperty->needsModelCameraMoveSetup_ = CloneNeedsModelCameraMoveSetup();
91 
92         return paintProperty;
93     }
94 
ResetFlagProperties()95     void ResetFlagProperties()
96     {
97         UpdateNeedsAnimationsSetup(false);
98         UpdateNeedsGeometriesSetup(false);
99         UpdateNeedsCameraSetup(false);
100         UpdateNeedsLightsSetup(false);
101         UpdateNeedsCustomRenderSetup(false);
102         UpdateNeedsShaderPathSetup(false);
103         UpdateNeedsImageTexturePathsSetup(false);
104         UpdateNeedsShaderInputBufferSetup(false);
105         UpdateNeedsModelSourceSetup(false);
106         UpdateNeedsModelBackgroundSetup(false);
107         UpdateNeedsModelCameraMoveSetup(false);
108     }
109 
Reset()110     void Reset() override
111     {
112         PaintProperty::Reset();
113         ResetCameraPosition();
114         ResetCameraDistance();
115         ResetCameraIsAngular();
116         ResetCameraRotation();
117         ResetCameraLookAt();
118         ResetCameraUp();
119         ResetCameraZNear();
120         ResetCameraZFar();
121         ResetCameraFOV();
122         ResetModelLights();
123         ResetModelSingleLight();
124         ResetModelAnimations();
125         ResetModelSingleAnimation();
126         ResetModelGeometries();
127         ResetModelSingleGeometry();
128         ResetModelCustomRender();
129         ResetShaderPath();
130         ResetModelImageTexturePaths();
131         ResetModelSingleImageTexturePath();
132         ResetModelShaderInputBuffer();
133         ResetModelSource();
134         ResetModelBackground();
135         ResetModelCameraMove();
136         ResetRenderHeight();
137         ResetRenderWidth();
138         ResetRenderFrameRate();
139         ResetFlagProperties();
140     }
141 
ModelLightsAnimationUpdate(const std::vector<RefPtr<ModelLight>> & lights)142     void ModelLightsAnimationUpdate(const std::vector<RefPtr<ModelLight>>& lights)
143     {
144         propModelLights_ = lights;
145         UpdatePropertyChangeFlag(PROPERTY_UPDATE_RENDER);
146         UpdateNeedsLightsSetup(true);
147     }
148 
OnModelSingleLightUpdate(const RefPtr<ModelLight> & light)149     void OnModelSingleLightUpdate(const RefPtr<ModelLight>& light)
150     {
151         propModelLights_.value().push_back(light);
152         ResetModelSingleLight();
153         UpdateNeedsLightsSetup(true);
154     }
155 
OnModelSingleAnimationUpdate(const std::shared_ptr<Render3D::GLTFAnimation> & animation)156     void OnModelSingleAnimationUpdate(const std::shared_ptr<Render3D::GLTFAnimation>& animation)
157     {
158         propModelAnimations_.value().push_back(animation);
159         ResetModelSingleAnimation();
160         UpdateNeedsAnimationsSetup(true);
161     }
162 
OnModelSingleGeometryUpdate(const std::shared_ptr<Render3D::Geometry> & geometry)163     void OnModelSingleGeometryUpdate(const std::shared_ptr<Render3D::Geometry>& geometry)
164     {
165         propModelGeometries_.value().push_back(geometry);
166         ResetModelSingleGeometry();
167         UpdateNeedsGeometriesSetup(true);
168     }
169 
OnModelSingleImageTexturePathUpdate(const std::string & path)170     void OnModelSingleImageTexturePathUpdate(const std::string& path)
171     {
172         propModelImageTexturePaths_.value().push_back(path);
173         ResetModelSingleImageTexturePath();
174         UpdateNeedsImageTexturePathsSetup(true);
175     }
176 
177     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
178         CameraPosition, Vec3, Camera, PROPERTY_UPDATE_RENDER);
179     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
180         CameraDistance, AnimatableFloat, Camera, PROPERTY_UPDATE_RENDER);
181     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
182         CameraIsAngular, bool, Camera, PROPERTY_UPDATE_RENDER);
183     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
184         CameraRotation, Quaternion, Camera, PROPERTY_UPDATE_RENDER);
185     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
186         CameraLookAt, Vec3, Camera, PROPERTY_UPDATE_RENDER);
187     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
188         CameraUp, Vec3, Camera, PROPERTY_UPDATE_RENDER);
189     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
190         CameraZNear, float, Camera, PROPERTY_UPDATE_RENDER);
191     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
192         CameraZFar, float, Camera, PROPERTY_UPDATE_RENDER);
193     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
194         CameraFOV, float, Camera, PROPERTY_UPDATE_RENDER);
195 
196     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
197         ModelBackground, std::string, ModelBackground, PROPERTY_UPDATE_RENDER);
198     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
199         ModelTransparent, bool, ModelBackground, PROPERTY_UPDATE_RENDER);
200     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(ModelSource, std::string, ModelSource, PROPERTY_UPDATE_RENDER);
201     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
202         ShaderPath, std::string, ShaderPath, PROPERTY_UPDATE_RENDER);
203     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(RenderWidth, float, RenderWidth, PROPERTY_UPDATE_RENDER);
204     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(RenderHeight, float, RenderHeight, PROPERTY_UPDATE_RENDER);
205     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(RenderFrameRate, float, RenderFrameRate, PROPERTY_UPDATE_RENDER);
206     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
207         ModelCustomRender, std::shared_ptr<Render3D::CustomRenderDescriptor>, CustomRender,
208         PROPERTY_UPDATE_RENDER);
209     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
210         ModelShaderInputBuffer, std::shared_ptr<Render3D::ShaderInputBuffer>, ShaderInputBuffer,
211         PROPERTY_UPDATE_RENDER);
212     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(
213         ModelLights, std::vector<RefPtr<ModelLight>>, PROPERTY_UPDATE_RENDER);
214     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP_AND_USING_CALLBACK(
215         ModelSingleLight, RefPtr<ModelLight>, PROPERTY_UPDATE_RENDER);
216 
217     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(
218         ModelAnimations, std::vector<std::shared_ptr<Render3D::GLTFAnimation>>, PROPERTY_UPDATE_RENDER);
219     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP_AND_USING_CALLBACK(
220         ModelSingleAnimation, std::shared_ptr<Render3D::GLTFAnimation>, PROPERTY_UPDATE_RENDER);
221 
222     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(
223         ModelGeometries, std::vector<std::shared_ptr<Render3D::Geometry>>, PROPERTY_UPDATE_RENDER);
224     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP_AND_USING_CALLBACK(
225         ModelSingleGeometry, std::shared_ptr<Render3D::Geometry>, PROPERTY_UPDATE_RENDER);
226 
227     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(
228         ModelImageTexturePaths, std::vector<std::string>, PROPERTY_UPDATE_RENDER);
229     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP_AND_USING_CALLBACK(
230         ModelSingleImageTexturePath, std::string, PROPERTY_UPDATE_RENDER);
231     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ModelCameraMove, bool, PROPERTY_UPDATE_RENDER);
232 
233     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(Camera, false, PROPERTY_UPDATE_RENDER);
234     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(Lights, false, PROPERTY_UPDATE_RENDER);
235     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(Animations, false, PROPERTY_UPDATE_RENDER);
236     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(Geometries, false, PROPERTY_UPDATE_RENDER);
237     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(CustomRender, false, PROPERTY_UPDATE_RENDER);
238     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(ShaderPath, false, PROPERTY_UPDATE_RENDER);
239     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(ImageTexturePaths, false, PROPERTY_UPDATE_RENDER);
240     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(ShaderInputBuffer, false, PROPERTY_UPDATE_RENDER);
241     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(ModelSource, false, PROPERTY_UPDATE_RENDER);
242     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(RenderWidth, false, PROPERTY_UPDATE_RENDER);
243     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(RenderHeight, false, PROPERTY_UPDATE_RENDER);
244     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(RenderFrameRate, false, PROPERTY_UPDATE_RENDER);
245     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(ModelBackground, false, PROPERTY_UPDATE_RENDER);
246     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(ModelCameraMove, false, PROPERTY_UPDATE_RENDER);
247 
248 private:
249     ACE_DISALLOW_COPY_AND_MOVE(ModelPaintProperty);
250 };
251 
252 } // namespace OHOS::Ace::NG
253 
254 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_MODEL_MODEL_PAINT_PROPERTY_H
255