• 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         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