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 CORE__RENDER__NODE_DATA__RENDER_DATA_STORE_DEFAULT_LIGHT_H
17 #define CORE__RENDER__NODE_DATA__RENDER_DATA_STORE_DEFAULT_LIGHT_H
18 
19 #include <cstdint>
20 
21 #include <3d/render/intf_render_data_store_default_light.h>
22 #include <base/containers/array_view.h>
23 #include <base/containers/string.h>
24 #include <base/containers/vector.h>
25 #include <base/util/uid.h>
26 
27 RENDER_BEGIN_NAMESPACE()
28 class IRenderContext;
29 RENDER_END_NAMESPACE()
30 
CORE3D_BEGIN_NAMESPACE()31 CORE3D_BEGIN_NAMESPACE()
32 /**
33 RenderDataStoreDefaultLight implementation.
34 */
35 class RenderDataStoreDefaultLight final : public IRenderDataStoreDefaultLight {
36 public:
37     explicit RenderDataStoreDefaultLight(const BASE_NS::string_view name);
38     ~RenderDataStoreDefaultLight() override = default;
39 
40     void CommitFrameData() override {};
41     void PreRender() override {};
42     // clear in post render
43     void PostRender() override;
44     void PreRenderBackend() override {};
45     void PostRenderBackend() override {};
46     void Clear() override;
47     uint32_t GetFlags() const override
48     {
49         return 0;
50     };
51 
52     void SetShadowTypes(const ShadowTypes& shadowTypes, const uint32_t flags) override;
53     ShadowTypes GetShadowTypes() const override;
54 
55     void SetShadowQualityResolutions(const ShadowQualityResolutions& resolutions, const uint32_t flags) override;
56     BASE_NS::Math::UVec2 GetShadowQualityResolution() const override;
57 
58     void AddLight(const RenderLight& light) override;
59     BASE_NS::array_view<const RenderLight> GetLights() const override;
60     LightCounts GetLightCounts() const override;
61     LightingFlags GetLightingFlags() const override;
62 
63     // for plugin / factory interface
64     static constexpr char const* const TYPE_NAME = "RenderDataStoreDefaultLight";
65     static RENDER_NS::IRenderDataStore* Create(RENDER_NS::IRenderContext& renderContext, char const* name);
66     static void Destroy(RENDER_NS::IRenderDataStore* instance);
67 
68     BASE_NS::string_view GetTypeName() const override
69     {
70         return TYPE_NAME;
71     }
72 
73     BASE_NS::string_view GetName() const override
74     {
75         return name_;
76     }
77 
78     const BASE_NS::Uid& GetUid() const override
79     {
80         return UID;
81     }
82 
83 private:
84     const BASE_NS::string name_;
85 
86     BASE_NS::vector<RenderLight> lights_;
87 
88     IRenderDataStoreDefaultLight::LightCounts lightCounts_;
89     IRenderDataStoreDefaultLight::ShadowTypes shadowTypes_;
90     IRenderDataStoreDefaultLight::ShadowQualityResolutions resolutions_;
91 };
92 CORE3D_END_NAMESPACE()
93 
94 #endif // CORE__RENDER__NODE_DATA__RENDER_DATA_STORE_DEFAULT_LIGHT_H
95