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_MATERIAL_JS_H
17 #define OHOS_RENDER_3D_MATERIAL_JS_H
18 #include <meta/interface/intf_object.h>
19 
20 #include "BaseObjectJS.h"
21 #include "NodeJS.h"
22 
23 class BaseMaterial : public SceneResourceImpl {
24 public:
25     static constexpr uint32_t ID = 30;
26     enum MaterialType { SHADER = 1 };
27     static void Init(const char* name, napi_env env, napi_value exports, napi_callback ctor,
28         BASE_NS::vector<napi_property_descriptor>& props);
29     BaseMaterial(MaterialType lt);
30     ~BaseMaterial() override;
31 
32 protected:
33     void* GetInstanceImpl(uint32_t);
34     void DisposeNative(TrueRootObject*);
35 
36 private:
37     napi_value GetMaterialType(NapiApi::FunctionContext<>& ctx);
38     MaterialType materialType_;
39 };
40 
41 class ShaderMaterialJS : BaseObject<ShaderMaterialJS>, BaseMaterial {
42 public:
43     static constexpr uint32_t ID = 31;
44     static void Init(napi_env env, napi_value exports);
45     ShaderMaterialJS(napi_env, napi_callback_info);
46     ~ShaderMaterialJS() override;
47 
48 private:
49     void* GetInstanceImpl(uint32_t) override;
50     void DisposeNative() override;
51     void Finalize(napi_env env) override;
52 
53     napi_value GetColorShader(NapiApi::FunctionContext<>& ctx);
54     void SetColorShader(NapiApi::FunctionContext<NapiApi::Object>& ctx);
55 
56     META_NS::IObject::Ptr shaderBind_;
57 
58     NapiApi::StrongRef shader_;
59 };
60 #endif // OHOS_RENDER_3D_MESH_JS_H