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#include "AnimationJS.h" 16#include "CameraJS.h" 17#include "EnvironmentJS.h" 18#include "GeometryJS.h" 19#include "ImageJS.h" 20#include "LightJS.h" 21#include "MaterialJS.h" 22#include "MeshJS.h" 23#include "NodeJS.h" 24#include "PostProcJS.h" 25#include "SceneJS.h" 26#include "ShaderJS.h" 27#include "SubMeshJS.h" 28#include "ToneMapJS.h" 29 30void RegisterClasses(napi_env env, napi_value exports) 31{ 32 napi_status status; 33 napi_value zero; 34 napi_value one; 35 NapiApi::MyInstanceState* mis; 36 napi_get_instance_data(env, (void**)&mis); 37 38 status = napi_create_double(env, 0.0, &zero); 39 status = napi_create_double(env, 1.0, &one); 40 41 // Declare color class 42 { 43 /// Color 44 auto colorCtor = [](napi_env e, napi_callback_info c) -> napi_value { return {}; }; 45 46 // clang-format off 47 napi_property_descriptor desc4[] = { 48 {"r", nullptr, nullptr, nullptr, nullptr, zero, napi_default_jsproperty, nullptr}, 49 {"g", nullptr, nullptr, nullptr, nullptr, zero, napi_default_jsproperty, nullptr}, 50 {"b", nullptr, nullptr, nullptr, nullptr, zero, napi_default_jsproperty, nullptr}, 51 {"a", nullptr, nullptr, nullptr, nullptr, zero, napi_default_jsproperty, nullptr} 52 }; 53 // clang-format on 54 napi_value color_class = nullptr; 55 status = napi_define_class( 56 env, "Color", NAPI_AUTO_LENGTH, colorCtor, nullptr, BASE_NS::countof(desc4), desc4, &color_class); 57 mis->StoreCtor("Color", color_class); 58 } 59 // Declare math classes.. "simply" for now. 60 { 61 /// Vec 62 auto vec3Ctor = [](napi_env e, napi_callback_info c) -> napi_value { return {}; }; 63 64 // clang-format off 65 napi_property_descriptor desc3[] = { 66 {"x", nullptr, nullptr, nullptr, nullptr, zero, napi_default_jsproperty, nullptr}, 67 {"y", nullptr, nullptr, nullptr, nullptr, zero, napi_default_jsproperty, nullptr}, 68 {"z", nullptr, nullptr, nullptr, nullptr, zero, napi_default_jsproperty, nullptr} 69 }; 70 // clang-format on 71 napi_value vec3_class = nullptr; 72 status = napi_define_class( 73 env, "Vec3", NAPI_AUTO_LENGTH, vec3Ctor, nullptr, BASE_NS::countof(desc3), desc3, &vec3_class); 74 mis->StoreCtor("Vec3", vec3_class); 75 76 /// Vec4 77 auto vec4Ctor = [](napi_env e, napi_callback_info c) -> napi_value { return {}; }; 78 79 // clang-format off 80 napi_property_descriptor desc4[] = { 81 {"x", nullptr, nullptr, nullptr, nullptr, zero, napi_default_jsproperty, nullptr}, 82 {"y", nullptr, nullptr, nullptr, nullptr, zero, napi_default_jsproperty, nullptr}, 83 {"z", nullptr, nullptr, nullptr, nullptr, zero, napi_default_jsproperty, nullptr}, 84 {"w", nullptr, nullptr, nullptr, nullptr, zero, napi_default_jsproperty, nullptr} 85 }; 86 // clang-format on 87 napi_value vec4_class = nullptr; 88 status = napi_define_class( 89 env, "Vec4", NAPI_AUTO_LENGTH, vec4Ctor, nullptr, BASE_NS::countof(desc4), desc4, &vec4_class); 90 mis->StoreCtor("Vec4", vec4_class); 91 92 /// Quaternion 93 auto QuatCtor = [](napi_env e, napi_callback_info c) -> napi_value { return {}; }; 94 95 // clang-format off 96 napi_property_descriptor qdesc[] = { 97 {"x", nullptr, nullptr, nullptr, nullptr, zero, napi_default_jsproperty, nullptr}, 98 {"y", nullptr, nullptr, nullptr, nullptr, zero, napi_default_jsproperty, nullptr}, 99 {"z", nullptr, nullptr, nullptr, nullptr, zero, napi_default_jsproperty, nullptr}, 100 {"w", nullptr, nullptr, nullptr, nullptr, one, napi_default_jsproperty, nullptr} 101 }; 102 // clang-format on 103 napi_value quaternion_class = nullptr; 104 status = napi_define_class( 105 env, "Quaternion", NAPI_AUTO_LENGTH, QuatCtor, nullptr, BASE_NS::countof(qdesc), qdesc, &quaternion_class); 106 mis->StoreCtor("Quaternion", quaternion_class); 107 } 108 109 napi_value scene3dNS = exports; 110 SceneJS::Init(env, scene3dNS); 111 NodeJS::Init(env, scene3dNS); 112 CameraJS::Init(env, scene3dNS); 113 EnvironmentJS::Init(env, scene3dNS); 114 PointLightJS::Init(env, scene3dNS); 115 DirectionalLightJS::Init(env, scene3dNS); 116 SpotLightJS::Init(env, scene3dNS); 117 GeometryJS::Init(env, scene3dNS); 118 MeshJS::Init(env, scene3dNS); 119 SubMeshJS::Init(env, scene3dNS); 120 ShaderMaterialJS::Init(env, scene3dNS); 121 ImageJS::Init(env, scene3dNS); 122 PostProcJS::Init(env, scene3dNS); 123 ToneMapJS::Init(env, scene3dNS); 124 ShaderJS::Init(env, scene3dNS); 125 AnimationJS::Init(env, scene3dNS); 126 127 BaseLight::RegisterEnums({ env, scene3dNS }); 128 NodeImpl::RegisterEnums({ env, scene3dNS }); 129 SceneResourceImpl::RegisterEnums({ env, scene3dNS }); 130}