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_ENVIRONMENTJS_H
17#define OHOS_RENDER_3D_ENVIRONMENTJS_H
18#include "BaseObjectJS.h"
19#include "SceneResourceImpl.h"
20#include "Vec4Proxy.h"
21class EnvironmentJS : public BaseObject<EnvironmentJS>, SceneResourceImpl {
22public:
23    static constexpr uint32_t ID = 90;
24    static void Init(napi_env env, napi_value exports);
25
26    EnvironmentJS(napi_env, napi_callback_info);
27    ~EnvironmentJS() override;
28    void* GetInstanceImpl(uint32_t id) override;
29
30private:
31    napi_value Dispose(NapiApi::FunctionContext<>& ctx);
32    void DisposeNative() override;
33    void Finalize(napi_env env) override;
34    // JS properties
35    enum EnvironmentBackgroundType {
36        /**
37         * The background is none.
38         *
39         * @syscap SystemCapability.ArkUi.Graphics3D
40         * @since 12
41         */
42        BACKGROUND_NONE = 0,
43
44        /**
45         * The background is image.
46         *
47         * @syscap SystemCapability.ArkUi.Graphics3D
48         * @since 12
49         */
50        BACKGROUND_IMAGE = 1,
51
52        /**
53         * The background is cubmap.
54         *
55         * @syscap SystemCapability.ArkUi.Graphics3D
56         * @since 12
57         */
58        BACKGROUND_CUBEMAP = 2,
59
60        /**
61         * The background is equirectangular.
62         *
63         * @syscap SystemCapability.ArkUi.Graphics3D
64         * @since 12
65         */
66        BACKGROUND_EQUIRECTANGULAR = 3,
67    };
68
69    napi_value GetBackgroundType(NapiApi::FunctionContext<>& ctx);
70    void SetBackgroundType(NapiApi::FunctionContext<uint32_t>& ctx);
71    napi_value GetEnvironmentImage(NapiApi::FunctionContext<>& ctx);
72    void SetEnvironmentImage(NapiApi::FunctionContext<NapiApi::Object>& ctx);
73    napi_value GetRadianceImage(NapiApi::FunctionContext<>& ctx);
74    void SetRadianceImage(NapiApi::FunctionContext<NapiApi::Object>& ctx);
75    napi_value GetIrradianceCoefficients(NapiApi::FunctionContext<>& ctx);
76    void SetIrradianceCoefficients(NapiApi::FunctionContext<NapiApi::Array>& ctx);
77
78    napi_value GetIndirectDiffuseFactor(NapiApi::FunctionContext<>& ctx);
79    void SetIndirectDiffuseFactor(NapiApi::FunctionContext<NapiApi::Object>& ctx);
80
81    napi_value GetIndirectSpecularFactor(NapiApi::FunctionContext<>& ctx);
82    void SetIndirectSpecularFactor(NapiApi::FunctionContext<NapiApi::Object>& ctx);
83
84    napi_value GetEnvironmentMapFactor(NapiApi::FunctionContext<>& ctx);
85    void SetEnvironmentMapFactor(NapiApi::FunctionContext<NapiApi::Object>& ctx);
86    BASE_NS::unique_ptr<Vec4Proxy> diffuseFactor_;
87    BASE_NS::unique_ptr<Vec4Proxy> specularFactor_;
88    BASE_NS::unique_ptr<Vec4Proxy> environmentFactor_;
89
90    // weak reference to the owning scene.
91};
92#endif // OHOS_RENDER_3D_ENVIRONMENTJS_H