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 #ifndef OHOS_RENDER_3D_SCENE_JS_H 17 #define OHOS_RENDER_3D_SCENE_JS_H 18 #include <meta/api/threading/mutex.h> 19 #include <meta/interface/intf_object.h> 20 #include <scene_plugin/interface/intf_material.h> // for bitmap. 21 #include <scene_plugin/interface/intf_mesh.h> 22 23 #include <base/containers/unordered_map.h> 24 #ifdef __SCENE_ADAPTER__ 25 #include "scene_adapter/intf_scene_adapter.h" 26 #endif 27 #include "BaseObjectJS.h" 28 class SceneJS : public BaseObject<SceneJS> { 29 public: 30 static constexpr uint32_t ID = 4; 31 static void Init(napi_env env, napi_value exports); 32 33 SceneJS(napi_env, napi_callback_info); 34 ~SceneJS() override; 35 void* GetInstanceImpl(uint32_t id) override; 36 #ifdef __SCENE_ADAPTER__ 37 std::shared_ptr<OHOS::Render3D::ISceneAdapter> scene_ = nullptr; 38 #endif 39 40 void StoreBitmap(BASE_NS::string_view uri, SCENE_NS::IBitmap::Ptr bitmap); 41 SCENE_NS::IBitmap::Ptr FetchBitmap(BASE_NS::string_view uri); 42 43 void DisposeHook(uintptr_t token, NapiApi::Object); 44 void ReleaseDispose(uintptr_t token); 45 46 void StrongDisposeHook(uintptr_t token, NapiApi::Object); 47 void ReleaseStrongDispose(uintptr_t token); 48 49 private: 50 napi_value Dispose(NapiApi::FunctionContext<>& ctx); 51 void DisposeNative() override; 52 void Finalize(napi_env env) override; 53 // JS properties 54 napi_value GetRoot(NapiApi::FunctionContext<>& ctx); 55 56 napi_value GetAnimations(NapiApi::FunctionContext<>& ctx); 57 58 napi_value GetEnvironment(NapiApi::FunctionContext<>& ctx); 59 void SetEnvironment(NapiApi::FunctionContext<NapiApi::Object>& ctx); 60 61 // JS methods 62 napi_value GetNode(NapiApi::FunctionContext<BASE_NS::string>& ctx); 63 napi_value GetResourceFactory(NapiApi::FunctionContext<>& ctx); 64 65 napi_value CreateCamera(NapiApi::FunctionContext<NapiApi::Object>& ctx); 66 napi_value CreateLight(NapiApi::FunctionContext<NapiApi::Object, uint32_t>& ctx); 67 napi_value CreateNode(NapiApi::FunctionContext<NapiApi::Object>& ctx); 68 napi_value CreateEnvironment(NapiApi::FunctionContext<NapiApi::Object>& ctx); 69 napi_value CreateImage(NapiApi::FunctionContext<NapiApi::Object>& ctx); 70 napi_value CreateShader(NapiApi::FunctionContext<NapiApi::Object>& ctx); 71 napi_value CreateMaterial(NapiApi::FunctionContext<NapiApi::Object, uint32_t>& ctx); 72 73 // static js method 74 static napi_value Load(NapiApi::FunctionContext<>& ctx); 75 76 // make a storage of all bitmaps.. 77 CORE_NS::Mutex mutex_; 78 BASE_NS::unordered_map<BASE_NS::string, SCENE_NS::IBitmap::Ptr> bitmaps_; 79 NapiApi::StrongRef environmentJS_; 80 BASE_NS::unordered_map<uintptr_t, NapiApi::StrongRef> strongDisposables_; 81 BASE_NS::unordered_map<uintptr_t, NapiApi::WeakRef> disposables_; 82 83 public: 84 NapiApi::Object CreateEnvironment(NapiApi::Object, NapiApi::Object); 85 }; 86 #endif // OHOS_RENDER_3D_SCENE_JS_H