1 /*
2 * Copyright (c) 2024 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 #include "widget_adapter.h"
17
18 #include <window.h>
19
20 #include "3d_widget_adapter_log.h"
21 #include "graphics_manager.h"
22 #include "widget_trace.h"
23 #include "widget_qos.h"
24
25 namespace OHOS::Render3D {
26 #ifdef CHECK_NULL_PTR
27 #undef CHECK_NULL_PTR
28 #endif
29 #define CHECK_NULL_PTR(ptr) \
30 do { \
31 if (!(ptr)) { \
32 WIDGET_LOGE("%s engine not ready", __func__); \
33 return false; \
34 } \
35 } while (false)
36
WidgetAdapter(uint32_t key)37 WidgetAdapter::WidgetAdapter(uint32_t key) : key_(key)
38 {
39 WIDGET_LOGD("WidgetAdapter create key %d", key);
40 }
41
~WidgetAdapter()42 WidgetAdapter::~WidgetAdapter()
43 {
44 WIDGET_LOGD("WidgetAdapter destroy key %d", key_);
45 }
46
Initialize(std::unique_ptr<IEngine> engine)47 bool WidgetAdapter::Initialize(std::unique_ptr<IEngine> engine)
48 {
49 WIDGET_SCOPED_TRACE("WidgetAdapter::Initialze");
50 engine_ = std::move(engine);
51 CHECK_NULL_PTR(engine_);
52 engine_->InitializeScene(key_);
53 return true;
54 }
55
SetupCameraTransform(const OHOS::Render3D::Position & position,const OHOS::Render3D::Vec3 & lookAt,const OHOS::Render3D::Vec3 & up,const OHOS::Render3D::Quaternion & rotation)56 bool WidgetAdapter::SetupCameraTransform(
57 const OHOS::Render3D::Position& position, const OHOS::Render3D::Vec3& lookAt,
58 const OHOS::Render3D::Vec3& up, const OHOS::Render3D::Quaternion& rotation)
59 {
60 CHECK_NULL_PTR(engine_);
61 engine_->SetupCameraTransform(position, lookAt, up, rotation);
62 return true;
63 }
64
SetupCameraViewProjection(float zNear,float zFar,float fovDegrees)65 bool WidgetAdapter::SetupCameraViewProjection(float zNear, float zFar, float fovDegrees)
66 {
67 CHECK_NULL_PTR(engine_);
68 engine_->SetupCameraViewProjection(zNear, zFar, fovDegrees);
69 return true;
70 }
71
UpdateLights(const std::vector<std::shared_ptr<OHOS::Render3D::Light>> & lights)72 bool WidgetAdapter::UpdateLights(const std::vector<std::shared_ptr<OHOS::Render3D::Light>>& lights)
73 {
74 CHECK_NULL_PTR(engine_);
75 engine_->UpdateLights(lights);
76 return true;
77 }
78
OnTouchEvent(const PointerEvent & event)79 bool WidgetAdapter::OnTouchEvent(const PointerEvent& event)
80 {
81 CHECK_NULL_PTR(engine_);
82 engine_->OnTouchEvent(event);
83 return true;
84 }
85
PerformDrawFrame()86 void WidgetAdapter::PerformDrawFrame()
87 {
88 #if MULTI_ECS_UPDATE_AT_ONCE
89 engine_->DeferDraw();
90 #else
91 engine_->DrawFrame();
92 #endif
93 }
94
DrawFrame()95 bool WidgetAdapter::DrawFrame()
96 {
97 WIDGET_SCOPED_TRACE_ARGS("WidgetAdpater::DrawFrame QOS:%d", firstFrame_);
98 CHECK_NULL_PTR(engine_);
99 if (firstFrame_) {
100 firstFrame_ = false;
101 PerformDrawFrame();
102 } else {
103 PerformDrawFrame();
104 }
105 return true;
106 }
107
UpdateGeometries(const std::vector<std::shared_ptr<Geometry>> & shapes)108 bool WidgetAdapter::UpdateGeometries(const std::vector<std::shared_ptr<Geometry>>& shapes)
109 {
110 CHECK_NULL_PTR(engine_);
111 engine_->UpdateGeometries(shapes);
112 return true;
113 }
114
UpdateGLTFAnimations(const std::vector<std::shared_ptr<GLTFAnimation>> & animations)115 bool WidgetAdapter::UpdateGLTFAnimations(const std::vector<std::shared_ptr<GLTFAnimation>>&
116 animations)
117 {
118 CHECK_NULL_PTR(engine_);
119 engine_->UpdateGLTFAnimations(animations);
120 return true;
121 }
122
123
UpdateCustomRender(const std::shared_ptr<CustomRenderDescriptor> & customRenders)124 bool WidgetAdapter::UpdateCustomRender(const std::shared_ptr<CustomRenderDescriptor>&
125 customRenders)
126 {
127 CHECK_NULL_PTR(engine_);
128 engine_->UpdateCustomRender(customRenders);
129 return true;
130 }
131
UpdateShaderPath(const std::string & shaderPath)132 bool WidgetAdapter::UpdateShaderPath(const std::string& shaderPath)
133 {
134 CHECK_NULL_PTR(engine_);
135 WIDGET_LOGE("shader path %s", shaderPath.c_str());
136 engine_->UpdateShaderPath(shaderPath);
137 return true;
138 }
139
UpdateImageTexturePaths(const std::vector<std::string> & imageTextures)140 bool WidgetAdapter::UpdateImageTexturePaths(const std::vector<std::string>& imageTextures)
141 {
142 CHECK_NULL_PTR(engine_);
143 engine_->UpdateImageTexturePaths(imageTextures);
144 return true;
145 }
146
UpdateShaderInputBuffer(const std::shared_ptr<OHOS::Render3D::ShaderInputBuffer> & shaderInputBuffer)147 bool WidgetAdapter::UpdateShaderInputBuffer(const std::shared_ptr<OHOS::Render3D::ShaderInputBuffer>&
148 shaderInputBuffer)
149 {
150 CHECK_NULL_PTR(engine_);
151 engine_->UpdateShaderInputBuffer(shaderInputBuffer);
152 return true;
153 }
154
DeInitEngine()155 void WidgetAdapter::DeInitEngine()
156 {
157 WIDGET_SCOPED_TRACE("WidgetAdapter::DeInitEngine");
158 if (engine_ == nullptr) {
159 return;
160 }
161 engine_->DeInitEngine();
162 engine_.reset();
163 }
164
SetupCameraViewport(uint32_t width,uint32_t height)165 bool WidgetAdapter::SetupCameraViewport(uint32_t width, uint32_t height)
166 {
167 CHECK_NULL_PTR(engine_);
168 engine_->SetupCameraViewPort(width, height);
169 return true;
170 }
171
OnWindowChange(const TextureInfo & textureInfo)172 bool WidgetAdapter::OnWindowChange(const TextureInfo& textureInfo)
173 {
174 CHECK_NULL_PTR(engine_);
175 engine_->OnWindowChange(textureInfo);
176 return true;
177 }
178
LoadSceneModel(const std::string & scene)179 bool WidgetAdapter::LoadSceneModel(const std::string& scene)
180 {
181 CHECK_NULL_PTR(engine_);
182 engine_->LoadSceneModel(scene);
183 return true;
184 }
185
LoadEnvModel(const std::string & enviroment,BackgroundType type)186 bool WidgetAdapter::LoadEnvModel(const std::string& enviroment, BackgroundType type)
187 {
188 CHECK_NULL_PTR(engine_);
189 engine_->LoadEnvModel(enviroment, type);
190 return true;
191 }
192
UnloadSceneModel()193 bool WidgetAdapter::UnloadSceneModel()
194 {
195 CHECK_NULL_PTR(engine_);
196 engine_->UnloadSceneModel();
197 return true;
198 }
199
UnloadEnvModel()200 bool WidgetAdapter::UnloadEnvModel()
201 {
202 CHECK_NULL_PTR(engine_);
203 engine_->UnloadSceneModel();
204 return true;
205 }
206
NeedsRepaint()207 bool WidgetAdapter::NeedsRepaint()
208 {
209 CHECK_NULL_PTR(engine_);
210 return engine_->NeedsRepaint();
211 }
212 } // namespace OHOS::Render3D
213