• 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 "core/components_ng/render/paint_property.h"
20 #include "core/components_ng/pattern/model/model_property.h"
21 
22 #include "base/geometry/animatable_float.h"
23 #include "base/geometry/vec3.h"
24 #include "foundation/graphic/graphic_3d/3d_widget_adapter/include/custom/custom_render_descriptor.h"
25 #include "foundation/graphic/graphic_3d/3d_widget_adapter/include/data_type/geometry/geometry.h"
26 #include "foundation/graphic/graphic_3d/3d_widget_adapter/include/data_type/gltf_animation.h"
27 #include "foundation/graphic/graphic_3d/3d_widget_adapter/include/data_type/light.h"
28 #include "foundation/graphic/graphic_3d/3d_widget_adapter/include/data_type/shader_input_buffer.h"
29 
30 namespace OHOS::Ace::NG {
31 
32 class ModelPaintProperty : public PaintProperty {
DECLARE_ACE_TYPE(ModelPaintProperty,PaintProperty)33     DECLARE_ACE_TYPE(ModelPaintProperty, PaintProperty)
34 
35 public:
36     ModelPaintProperty() {
37         // Initialize model lights to empty vector;
38         propModelLights_ = std::vector<RefPtr<OHOS::Render3D::SVLight>> {};
39         propModelAnimations_ = std::vector<RefPtr<OHOS::Render3D::GLTFAnimation>> {};
40         propModelGeometries_ = std::vector<RefPtr<OHOS::Render3D::SVGeometry>> {};
41         propModelCustomRenders_ = std::vector<RefPtr<OHOS::Render3D::SVCustomRenderDescriptor>> {};
42         propModelImageTexturePaths_ = std::vector<std::string> {};
43         propModelShaderInputBuffers_ = std::vector<RefPtr<OHOS::Render3D::ShaderInputBuffer>> {};
44     };
45     ~ModelPaintProperty() override = default;
46 
Clone()47     RefPtr<PaintProperty> Clone() const override
48     {
49         auto paintProperty = MakeRefPtr<ModelPaintProperty>();
50         paintProperty->UpdatePaintProperty(this);
51         paintProperty->propCameraPosition_ = CloneCameraPosition();
52         paintProperty->propCameraDistance_ = CloneCameraDistance();
53         paintProperty->propCameraIsAngular_ = CloneCameraIsAngular();
54         paintProperty->propCameraRotation_ = CloneCameraRotation();
55         paintProperty->propCameraLookAt_ = CloneCameraLookAt();
56         paintProperty->propCameraUp_ = CloneCameraUp();
57         paintProperty->propCameraZNear_ = CloneCameraZNear();
58         paintProperty->propCameraZFar_ = CloneCameraZFar();
59         paintProperty->propCameraFOV_ = CloneCameraFOV();
60         paintProperty->propModelLights_ = CloneModelLights();
61         paintProperty->propModelAnimations_ = CloneModelAnimations();
62         paintProperty->propModelGeometries_ = CloneModelGeometries();
63         paintProperty->propModelCustomRenders_ = CloneModelCustomRenders();
64         paintProperty->propShaderPath_ = CloneShaderPath();
65         paintProperty->propModelImageTexturePaths_ = CloneModelImageTexturePaths();
66         paintProperty->propModelShaderInputBuffers_ = CloneModelShaderInputBuffers();
67 
68         paintProperty->needsCameraSetup_ = CloneNeedsCameraSetup();
69         paintProperty->needsLightsSetup_ = CloneNeedsLightsSetup();
70         paintProperty->needsAnimationsSetup_ = CloneNeedsAnimationsSetup();
71         paintProperty->needsGeometriesSetup_ = CloneNeedsGeometriesSetup();
72         paintProperty->needsCustomRendersSetup_ = CloneNeedsCustomRendersSetup();
73         paintProperty->needsShaderPathSetup_ = CloneNeedsShaderPathSetup();
74         paintProperty->needsImageTexturePathsSetup_ = CloneNeedsImageTexturePathsSetup();
75         paintProperty->needsShaderInputBuffersSetup_ = CloneNeedsShaderInputBuffersSetup();
76         return paintProperty;
77     }
78 
ResetFlagProperties()79     void ResetFlagProperties()
80     {
81         UpdateNeedsAnimationsSetup(false);
82         UpdateNeedsGeometriesSetup(false);
83         UpdateNeedsCameraSetup(false);
84         UpdateNeedsLightsSetup(false);
85         UpdateNeedsCustomRendersSetup(false);
86         UpdateNeedsShaderPathSetup(false);
87         UpdateNeedsImageTexturePathsSetup(false);
88         UpdateNeedsShaderInputBuffersSetup(false);
89     }
90 
Reset()91     void Reset() override
92     {
93         PaintProperty::Reset();
94         ResetCameraPosition();
95         ResetCameraDistance();
96         ResetCameraIsAngular();
97         ResetCameraRotation();
98         ResetCameraLookAt();
99         ResetCameraUp();
100         ResetCameraZNear();
101         ResetCameraZFar();
102         ResetCameraFOV();
103         ResetModelLights();
104         ResetModelSingleLight();
105         ResetModelAnimations();
106         ResetModelSingleAnimation();
107         ResetModelGeometries();
108         ResetModelSingleGeometry();
109         ResetModelCustomRenders();
110         ResetModelSingleCustomRender();
111         ResetShaderPath();
112         ResetModelImageTexturePaths();
113         ResetModelSingleImageTexturePath();
114         ResetModelShaderInputBuffers();
115         ResetModelSingleShaderInputBuffer();
116         ResetFlagProperties();
117     }
118 
ModelLightsAnimationUpdate(const std::vector<RefPtr<OHOS::Render3D::SVLight>> & lights)119     void ModelLightsAnimationUpdate(const std::vector<RefPtr<OHOS::Render3D::SVLight>>& lights)
120     {
121         propModelLights_ = lights;
122         UpdatePropertyChangeFlag(PROPERTY_UPDATE_RENDER);
123         UpdateNeedsLightsSetup(true);
124     }
125 
OnModelSingleLightUpdate(const RefPtr<OHOS::Render3D::SVLight> & light)126     void OnModelSingleLightUpdate(const RefPtr<OHOS::Render3D::SVLight>& light)
127     {
128         propModelLights_.value().push_back(light);
129         LOGD("MODEL_NG: propModelLights_.size() -> %zu", GetModelLightsValue().size());
130         ResetModelSingleLight();
131         UpdateNeedsLightsSetup(true);
132     }
133 
OnModelSingleAnimationUpdate(const RefPtr<OHOS::Render3D::GLTFAnimation> & animation)134     void OnModelSingleAnimationUpdate(const RefPtr<OHOS::Render3D::GLTFAnimation>& animation)
135     {
136         propModelAnimations_.value().push_back(animation);
137         LOGD("MODEL_NG: propModelAnimations_.size() -> %zu", GetModelAnimationsValue().size());
138         ResetModelSingleAnimation();
139         UpdateNeedsAnimationsSetup(true);
140     }
141 
OnModelSingleGeometryUpdate(const RefPtr<OHOS::Render3D::SVGeometry> & geometry)142     void OnModelSingleGeometryUpdate(const RefPtr<OHOS::Render3D::SVGeometry>& geometry)
143     {
144         propModelGeometries_.value().push_back(geometry);
145         LOGD("MODEL_NG: propModelGeometries_.size() -> %zu", GetModelGeometriesValue().size());
146         ResetModelSingleGeometry();
147         UpdateNeedsGeometriesSetup(true);
148     }
149 
OnModelSingleCustomRenderUpdate(const RefPtr<OHOS::Render3D::SVCustomRenderDescriptor> & customRender)150     void OnModelSingleCustomRenderUpdate(const RefPtr<OHOS::Render3D::SVCustomRenderDescriptor>& customRender)
151     {
152         propModelCustomRenders_.value().push_back(customRender);
153         LOGD("MODEL_NG: propModelCustomRenders_.size() -> %zu", GetModelCustomRendersValue().size());
154         ResetModelSingleCustomRender();
155         UpdateNeedsCustomRendersSetup(true);
156     }
157 
OnModelSingleImageTexturePathUpdate(const std::string & path)158     void OnModelSingleImageTexturePathUpdate(const std::string& path)
159     {
160         propModelImageTexturePaths_.value().push_back(path);
161         LOGD("MODEL_NG: propModelImageTexturePaths_: %zu", GetModelImageTexturePathsValue().size());
162         ResetModelSingleImageTexturePath();
163         UpdateNeedsImageTexturePathsSetup(true);
164     }
165 
OnModelSingleShaderInputBufferUpdate(const RefPtr<OHOS::Render3D::ShaderInputBuffer> & buffer)166     void OnModelSingleShaderInputBufferUpdate(const RefPtr<OHOS::Render3D::ShaderInputBuffer>& buffer)
167     {
168         propModelShaderInputBuffers_.value().push_back(buffer);
169         LOGD("MODEL_NG: propModelShaderInputBuffers_: %zu", GetModelShaderInputBuffersValue().size());
170         ResetModelSingleShaderInputBuffer();
171         UpdateNeedsShaderInputBuffersSetup(true);
172     }
173 
174     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
175         CameraPosition, OHOS::Ace::Vec3, Camera, PROPERTY_UPDATE_RENDER);
176     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
177         CameraDistance, OHOS::Ace::AnimatableFloat, Camera, PROPERTY_UPDATE_RENDER);
178     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
179         CameraIsAngular, bool, Camera, PROPERTY_UPDATE_RENDER);
180     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
181         CameraRotation, OHOS::Ace::Quaternion, Camera, PROPERTY_UPDATE_RENDER);
182     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
183         CameraLookAt, OHOS::Ace::Vec3, Camera, PROPERTY_UPDATE_RENDER);
184     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
185         CameraUp, OHOS::Ace::Vec3, Camera, PROPERTY_UPDATE_RENDER);
186     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
187         CameraZNear, float, Camera, PROPERTY_UPDATE_RENDER);
188     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
189         CameraZFar, float, Camera, PROPERTY_UPDATE_RENDER);
190     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
191         CameraFOV, float, Camera, PROPERTY_UPDATE_RENDER);
192 
193     DEFINE_NEEDS_SETUP_FLAG_TRIGGER_PROPERTY(
194         ShaderPath, std::string, ShaderPath, PROPERTY_UPDATE_RENDER);
195 
196     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(
197         ModelLights, std::vector<RefPtr<OHOS::Render3D::SVLight>>, PROPERTY_UPDATE_RENDER);
198     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP_AND_USING_CALLBACK(
199         ModelSingleLight, RefPtr<OHOS::Render3D::SVLight>, PROPERTY_UPDATE_RENDER);
200 
201     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(
202         ModelAnimations, std::vector<RefPtr<OHOS::Render3D::GLTFAnimation>>, PROPERTY_UPDATE_RENDER);
203     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP_AND_USING_CALLBACK(
204         ModelSingleAnimation, RefPtr<OHOS::Render3D::GLTFAnimation>, PROPERTY_UPDATE_RENDER);
205 
206     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(
207         ModelGeometries, std::vector<RefPtr<OHOS::Render3D::SVGeometry>>, PROPERTY_UPDATE_RENDER);
208     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP_AND_USING_CALLBACK(
209         ModelSingleGeometry, RefPtr<OHOS::Render3D::SVGeometry>, PROPERTY_UPDATE_RENDER);
210 
211     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(
212         ModelCustomRenders, std::vector<RefPtr<OHOS::Render3D::SVCustomRenderDescriptor>>, PROPERTY_UPDATE_RENDER);
213     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP_AND_USING_CALLBACK(
214         ModelSingleCustomRender, RefPtr<OHOS::Render3D::SVCustomRenderDescriptor>, PROPERTY_UPDATE_RENDER);
215 
216     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(
217         ModelImageTexturePaths, std::vector<std::string>, PROPERTY_UPDATE_RENDER);
218     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP_AND_USING_CALLBACK(
219         ModelSingleImageTexturePath, std::string, PROPERTY_UPDATE_RENDER);
220 
221     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(
222         ModelShaderInputBuffers, std::vector<RefPtr<OHOS::Render3D::ShaderInputBuffer>>, PROPERTY_UPDATE_RENDER);
223     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP_AND_USING_CALLBACK(
224         ModelSingleShaderInputBuffer, RefPtr<OHOS::Render3D::ShaderInputBuffer>, PROPERTY_UPDATE_RENDER);
225 
226     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(Camera, false, PROPERTY_UPDATE_RENDER);
227     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(Lights, false, PROPERTY_UPDATE_RENDER);
228     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(Animations, false, PROPERTY_UPDATE_RENDER);
229     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(Geometries, false, PROPERTY_UPDATE_RENDER);
230     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(CustomRenders, false, PROPERTY_UPDATE_RENDER);
231     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(ShaderPath, false, PROPERTY_UPDATE_RENDER);
232     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(ImageTexturePaths, false, PROPERTY_UPDATE_RENDER);
233     DEFINE_NEEDS_SETUP_FLAG_PROPERTY(ShaderInputBuffers, false, PROPERTY_UPDATE_RENDER);
234 
235 private:
236     ACE_DISALLOW_COPY_AND_MOVE(ModelPaintProperty);
237 };
238 
239 } // namespace OHOS::Ace::NG
240 
241 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_MODEL_MODEL_PAINT_PROPERTY_H
242