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_ADAPTER_WRAPPER_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_MODEL_MODEL_ADAPTER_WRAPPER_H 18 19 #include <memory> 20 21 #include "custom/shader_input_buffer.h" 22 #include "graphics_task.h" 23 #include "ohos/graphics_manager.h" 24 #include "ohos/texture_layer.h" 25 #include "widget_adapter.h" 26 27 #include "base/geometry/animatable_float.h" 28 #include "base/geometry/ng/offset_t.h" 29 #include "base/geometry/ng/size_t.h" 30 #include "base/geometry/quaternion.h" 31 #include "base/geometry/vec3.h" 32 #include "core/components_ng/pattern/model/model_paint_property.h" 33 #include "core/components_ng/pattern/model/model_touch_handler.h" 34 #include "core/components_ng/pattern/model/model_view.h" 35 36 #if defined(KIT_3D_ENABLE) 37 #include "scene_adapter/intf_scene_adapter.h" 38 #endif 39 40 namespace OHOS::Ace::NG { 41 42 struct CameraProperty { 43 Render3D::Position position_; 44 Render3D::Vec3 lookAt_ { 0.0f, 0.0f, 0.0f }; 45 Render3D::Vec3 up_ { 0.0f, 1.0f, 0.0f }; 46 Render3D::Quaternion rotation_ { std::numeric_limits<float>::max(), std::numeric_limits<float>::max(), 47 std::numeric_limits<float>::max(), std::numeric_limits<float>::max() }; 48 float near_ = 0.5f; 49 float far_ = 50.0f; 50 float fov_ = 60.0f; 51 }; 52 53 class ModelAdapterWrapper : public virtual AceType { 54 DECLARE_ACE_TYPE(ModelAdapterWrapper, AceType) 55 public: 56 using PaintFinishCallback = std::function<void()>; 57 58 ModelAdapterWrapper(uint32_t key, const ModelViewContext& context); 59 ~ModelAdapterWrapper() override; 60 61 void SetPaintFinishCallback(PaintFinishCallback callback); 62 bool NeedsRepaint(); 63 bool HandleTouchEvent(const TouchEventInfo& info, const RefPtr<ModelPaintProperty>& modelPaintProperty); 64 65 void OnPaint3D(const RefPtr<ModelPaintProperty>& modelPaintProperty); 66 void OnPaintFinish(); 67 void OnRebuildFrame(RefPtr<RenderContext>& context); 68 void OnAttachToFrameNode(const RefPtr<RenderContext>& context); 69 void OnDirtyLayoutWrapperSwap(const Render3D::WindowChangeInfo& windowChangeInfo); 70 std::shared_future<void> Deinit(); 71 GetSurfaceType()72 OHOS::Render3D::SurfaceType GetSurfaceType() 73 { 74 return surfaceType_; 75 } 76 77 private: 78 void CreateTextureLayer(); 79 void CreateWidgetAdapter(); 80 81 uint32_t GetKey(); 82 void Initialize(); 83 void UnloadSceneAndBackground(); 84 void DrawFrame(); 85 void UpdateScene(const RefPtr<ModelPaintProperty>& modelPaintProperty); 86 void UpdateEnviroment(const RefPtr<ModelPaintProperty>& modelPaintProperty); 87 void UpdateCustomRender(const RefPtr<ModelPaintProperty>& modelPaintProperty); 88 void UpdateShaderPath(const RefPtr<ModelPaintProperty>& modelPaintProperty); 89 void UpdateImageTexturePaths(const RefPtr<ModelPaintProperty>& modelPaintProperty); 90 void UpdateShaderInputBuffers(const RefPtr<ModelPaintProperty>& modelPaintProperty); 91 void HandleCameraMove(const Render3D::PointerEvent& event); 92 Render3D::HapInfo SetHapInfo(); 93 94 uint32_t key_ = UINT32_MAX; 95 PaintFinishCallback callback_ = nullptr; 96 bool needsSyncPaint_ = true; 97 bool needsRepaint_ = true; 98 99 std::shared_ptr<Render3D::WidgetAdapter> widgetAdapter_; 100 std::shared_ptr<Render3D::TextureLayer> textureLayer_; 101 RefPtr<ModelTouchHandler> touchHandler_; 102 Render3D::SurfaceType surfaceType_; 103 104 std::string bundleName_; 105 std::string moduleName_; 106 107 #if defined(KIT_3D_ENABLE) 108 std::shared_ptr<Render3D::ISceneAdapter> sceneAdapter_; 109 #endif 110 ACE_DISALLOW_COPY_AND_MOVE(ModelAdapterWrapper); 111 }; 112 } // namespace OHOS::Ace::NG 113 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_MODEL_MODEL_ADAPTER_WRAPPER_H 114