• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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         Widget3DQosScoped qos("WidgetAdapter::DrawFrame");
101         firstFrame_ = false;
102         PerformDrawFrame();
103     } else {
104         PerformDrawFrame();
105     }
106     return true;
107 }
108 
UpdateGeometries(const std::vector<std::shared_ptr<Geometry>> & shapes)109 bool WidgetAdapter::UpdateGeometries(const std::vector<std::shared_ptr<Geometry>>& shapes)
110 {
111     CHECK_NULL_PTR(engine_);
112     engine_->UpdateGeometries(shapes);
113     return true;
114 }
115 
UpdateGLTFAnimations(const std::vector<std::shared_ptr<GLTFAnimation>> & animations)116 bool WidgetAdapter::UpdateGLTFAnimations(const std::vector<std::shared_ptr<GLTFAnimation>>&
117     animations)
118 {
119     CHECK_NULL_PTR(engine_);
120     engine_->UpdateGLTFAnimations(animations);
121     return true;
122 }
123 
124 
UpdateCustomRender(const std::shared_ptr<CustomRenderDescriptor> & customRenders)125 bool WidgetAdapter::UpdateCustomRender(const std::shared_ptr<CustomRenderDescriptor>&
126     customRenders)
127 {
128     CHECK_NULL_PTR(engine_);
129     engine_->UpdateCustomRender(customRenders);
130     return true;
131 }
132 
UpdateShaderPath(const std::string & shaderPath)133 bool WidgetAdapter::UpdateShaderPath(const std::string& shaderPath)
134 {
135     CHECK_NULL_PTR(engine_);
136     WIDGET_LOGE("shader  path %s", shaderPath.c_str());
137     engine_->UpdateShaderPath(shaderPath);
138     return true;
139 }
140 
UpdateImageTexturePaths(const std::vector<std::string> & imageTextures)141 bool WidgetAdapter::UpdateImageTexturePaths(const std::vector<std::string>& imageTextures)
142 {
143     Widget3DQosScoped qos("WidgetAdapter::UpdateImageTexturePaths");
144     CHECK_NULL_PTR(engine_);
145     engine_->UpdateImageTexturePaths(imageTextures);
146     return true;
147 }
148 
UpdateShaderInputBuffer(const std::shared_ptr<OHOS::Render3D::ShaderInputBuffer> & shaderInputBuffer)149 bool WidgetAdapter::UpdateShaderInputBuffer(const std::shared_ptr<OHOS::Render3D::ShaderInputBuffer>&
150     shaderInputBuffer)
151 {
152     CHECK_NULL_PTR(engine_);
153     engine_->UpdateShaderInputBuffer(shaderInputBuffer);
154     return true;
155 }
156 
DeInitEngine()157 void WidgetAdapter::DeInitEngine()
158 {
159     WIDGET_SCOPED_TRACE("WidgetAdapter::DeInitEngine");
160     if (engine_ == nullptr) {
161         return;
162     }
163     engine_->DeInitEngine();
164     engine_.reset();
165 }
166 
SetupCameraViewport(uint32_t width,uint32_t height)167 bool WidgetAdapter::SetupCameraViewport(uint32_t width, uint32_t height)
168 {
169     CHECK_NULL_PTR(engine_);
170     engine_->SetupCameraViewPort(width, height);
171     return true;
172 }
173 
OnWindowChange(const TextureInfo & textureInfo)174 bool WidgetAdapter::OnWindowChange(const TextureInfo& textureInfo)
175 {
176     CHECK_NULL_PTR(engine_);
177     engine_->OnWindowChange(textureInfo);
178     return true;
179 }
180 
LoadSceneModel(const std::string & scene)181 bool WidgetAdapter::LoadSceneModel(const std::string& scene)
182 {
183     CHECK_NULL_PTR(engine_);
184     engine_->LoadSceneModel(scene);
185     return true;
186 }
187 
LoadEnvModel(const std::string & enviroment,BackgroundType type)188 bool WidgetAdapter::LoadEnvModel(const std::string& enviroment, BackgroundType type)
189 {
190     CHECK_NULL_PTR(engine_);
191     engine_->LoadEnvModel(enviroment, type);
192     return true;
193 }
194 
UnloadSceneModel()195 bool WidgetAdapter::UnloadSceneModel()
196 {
197     CHECK_NULL_PTR(engine_);
198     engine_->UnloadSceneModel();
199     return true;
200 }
201 
UnloadEnvModel()202 bool WidgetAdapter::UnloadEnvModel()
203 {
204     CHECK_NULL_PTR(engine_);
205     engine_->UnloadSceneModel();
206     return true;
207 }
208 
NeedsRepaint()209 bool WidgetAdapter::NeedsRepaint()
210 {
211     CHECK_NULL_PTR(engine_);
212     return engine_->NeedsRepaint();
213 }
214 } // namespace OHOS::Render3D
215