• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include <3d/ecs/components/post_process_component.h>
17 #include <render/datastore/render_data_store_render_pods.h>
18 
19 #include "ComponentTools/base_manager.h"
20 #include "ComponentTools/base_manager.inl"
21 
22 #define IMPLEMENT_MANAGER
23 #include <core/property_tools/property_macros.h>
24 
25 CORE_BEGIN_NAMESPACE()
26 using RENDER_NS::BloomConfiguration;
27 using RENDER_NS::BlurConfiguration;
28 using RENDER_NS::ColorConversionConfiguration;
29 using RENDER_NS::ColorFringeConfiguration;
30 using RENDER_NS::DitherConfiguration;
31 using RENDER_NS::DofConfiguration;
32 using RENDER_NS::FxaaConfiguration;
33 using RENDER_NS::LensFlareConfiguration;
34 using RENDER_NS::MotionBlurConfiguration;
35 using RENDER_NS::TaaConfiguration;
36 using RENDER_NS::TonemapConfiguration;
37 using RENDER_NS::VignetteConfiguration;
38 
39 using CORE3D_NS::PostProcessComponent;
40 
41 DECLARE_PROPERTY_TYPE(RENDER_NS::RenderHandle);
42 DECLARE_PROPERTY_TYPE(RENDER_NS::RenderHandleReference);
43 
44 ENUM_TYPE_METADATA(PostProcessComponent::FlagBits, ENUM_VALUE(TONEMAP_BIT, "Tonemap"), ENUM_VALUE(BLOOM_BIT, "Bloom"),
45     ENUM_VALUE(VIGNETTE_BIT, "Vignette"), ENUM_VALUE(COLOR_FRINGE_BIT, "Color Fringe"),
46     ENUM_VALUE(DITHER_BIT, "Dither"), ENUM_VALUE(BLUR_BIT, "Blur"),
47     ENUM_VALUE(COLOR_CONVERSION_BIT, "Color Conversion"), ENUM_VALUE(FXAA_BIT, "Fast Approximate Anti-Aliasing"),
48     ENUM_VALUE(TAA_BIT, "Temporat Anti-Aliasing"), ENUM_VALUE(DOF_BIT, "Depth of Field"),
49     ENUM_VALUE(MOTION_BLUR_BIT, "Motion Blur"), ENUM_VALUE(LENS_FLARE_BIT, "Lens Flare"))
50 
51 /** Extend propertysystem with the enums */
52 DECLARE_PROPERTY_TYPE(TonemapConfiguration::TonemapType);
53 DECLARE_PROPERTY_TYPE(BloomConfiguration::BloomQualityType);
54 DECLARE_PROPERTY_TYPE(BloomConfiguration::BloomType);
55 DECLARE_PROPERTY_TYPE(DitherConfiguration::DitherType);
56 DECLARE_PROPERTY_TYPE(BlurConfiguration::BlurQualityType);
57 DECLARE_PROPERTY_TYPE(BlurConfiguration::BlurType);
58 DECLARE_PROPERTY_TYPE(ColorConversionConfiguration::ConversionFunctionType);
59 DECLARE_PROPERTY_TYPE(FxaaConfiguration::Sharpness);
60 DECLARE_PROPERTY_TYPE(FxaaConfiguration::Quality);
61 DECLARE_PROPERTY_TYPE(TaaConfiguration::Sharpness);
62 DECLARE_PROPERTY_TYPE(TaaConfiguration::Quality);
63 DECLARE_PROPERTY_TYPE(MotionBlurConfiguration::Sharpness);
64 DECLARE_PROPERTY_TYPE(MotionBlurConfiguration::Quality);
65 DECLARE_PROPERTY_TYPE(LensFlareConfiguration::Quality);
66 
67 /** Extend propertysystem with the types */
68 DECLARE_PROPERTY_TYPE(TonemapConfiguration);
69 DECLARE_PROPERTY_TYPE(BloomConfiguration);
70 DECLARE_PROPERTY_TYPE(VignetteConfiguration);
71 DECLARE_PROPERTY_TYPE(ColorFringeConfiguration);
72 DECLARE_PROPERTY_TYPE(DitherConfiguration);
73 DECLARE_PROPERTY_TYPE(BlurConfiguration);
74 DECLARE_PROPERTY_TYPE(ColorConversionConfiguration);
75 DECLARE_PROPERTY_TYPE(FxaaConfiguration);
76 DECLARE_PROPERTY_TYPE(TaaConfiguration);
77 DECLARE_PROPERTY_TYPE(DofConfiguration);
78 DECLARE_PROPERTY_TYPE(MotionBlurConfiguration);
79 DECLARE_PROPERTY_TYPE(LensFlareConfiguration);
80 
81 // Declare their metadata
82 ENUM_TYPE_METADATA(TonemapConfiguration::TonemapType, ENUM_VALUE(TONEMAP_ACES, "aces"),
83     ENUM_VALUE(TONEMAP_ACES_2020, "aces_2020"), ENUM_VALUE(TONEMAP_FILMIC, "filmic"))
84 
85 ENUM_TYPE_METADATA(BloomConfiguration::BloomQualityType, ENUM_VALUE(QUALITY_TYPE_LOW, "low"),
86     ENUM_VALUE(QUALITY_TYPE_NORMAL, "normal"), ENUM_VALUE(QUALITY_TYPE_HIGH, "high"))
87 
88 ENUM_TYPE_METADATA(BloomConfiguration::BloomType, ENUM_VALUE(TYPE_NORMAL, "normal"),
89     ENUM_VALUE(TYPE_HORIZONTAL, "horizontal"), ENUM_VALUE(TYPE_VERTICAL, "vertical"),
90     ENUM_VALUE(TYPE_BILATERAL, "bilateral"))
91 
92 ENUM_TYPE_METADATA(DitherConfiguration::DitherType, ENUM_VALUE(INTERLEAVED_NOISE, "interleaved_noise"),
93     ENUM_VALUE(TRIANGLE_NOISE, "triangle_noise"), ENUM_VALUE(TRIANGLE_NOISE_RGB, "triangle_noise_rgb"))
94 
95 ENUM_TYPE_METADATA(BlurConfiguration::BlurQualityType, ENUM_VALUE(QUALITY_TYPE_LOW, "low"),
96     ENUM_VALUE(QUALITY_TYPE_NORMAL, "normal"), ENUM_VALUE(QUALITY_TYPE_HIGH, "high"))
97 
98 ENUM_TYPE_METADATA(BlurConfiguration::BlurType, ENUM_VALUE(TYPE_NORMAL, "low"), ENUM_VALUE(TYPE_HORIZONTAL, "normal"),
99     ENUM_VALUE(TYPE_VERTICAL, "high"))
100 
101 ENUM_TYPE_METADATA(ColorConversionConfiguration::ConversionFunctionType, ENUM_VALUE(CONVERSION_LINEAR, "linear"),
102     ENUM_VALUE(CONVERSION_LINEAR_TO_SRGB, "linear_to_srgb"))
103 
104 ENUM_TYPE_METADATA(
105     FxaaConfiguration::Sharpness, ENUM_VALUE(SOFT, "soft"), ENUM_VALUE(MEDIUM, "medium"), ENUM_VALUE(SHARP, "sharp"))
106 
107 ENUM_TYPE_METADATA(
108     FxaaConfiguration::Quality, ENUM_VALUE(LOW, "low"), ENUM_VALUE(MEDIUM, "medium"), ENUM_VALUE(HIGH, "high"))
109 
110 ENUM_TYPE_METADATA(
111     TaaConfiguration::Sharpness, ENUM_VALUE(SOFT, "soft"), ENUM_VALUE(MEDIUM, "medium"), ENUM_VALUE(SHARP, "sharp"))
112 
113 ENUM_TYPE_METADATA(
114     TaaConfiguration::Quality, ENUM_VALUE(LOW, "low"), ENUM_VALUE(MEDIUM, "medium"), ENUM_VALUE(HIGH, "high"))
115 
116 DATA_TYPE_METADATA(TonemapConfiguration, MEMBER_PROPERTY(tonemapType, "", 0), MEMBER_PROPERTY(exposure, "", 0))
117 
118 DATA_TYPE_METADATA(BloomConfiguration, MEMBER_PROPERTY(bloomType, "", 0), MEMBER_PROPERTY(bloomQualityType, "", 0),
119     MEMBER_PROPERTY(thresholdHard, "", 0), MEMBER_PROPERTY(thresholdSoft, "", 0),
120     MEMBER_PROPERTY(amountCoefficient, "", 0), MEMBER_PROPERTY(dirtMaskCoefficient, "", 0),
121     MEMBER_PROPERTY(scatter, "", 0), MEMBER_PROPERTY(scaleFactor, "", 0), MEMBER_PROPERTY(dirtMaskImage, "", 0),
122     MEMBER_PROPERTY(useCompute, "", 0))
123 
124 DATA_TYPE_METADATA(VignetteConfiguration, MEMBER_PROPERTY(coefficient, "", 0), MEMBER_PROPERTY(power, "", 0))
125 
126 DATA_TYPE_METADATA(
127     ColorFringeConfiguration, MEMBER_PROPERTY(coefficient, "", 0), MEMBER_PROPERTY(distanceCoefficient, "", 0))
128 
129 DATA_TYPE_METADATA(DitherConfiguration, MEMBER_PROPERTY(ditherType, "", 0), MEMBER_PROPERTY(amountCoefficient, "", 0))
130 
131 DATA_TYPE_METADATA(BlurConfiguration, MEMBER_PROPERTY(blurType, "", 0), MEMBER_PROPERTY(blurQualityType, "", 0),
132     MEMBER_PROPERTY(filterSize, "", 0), MEMBER_PROPERTY(maxMipLevel, "", 0))
133 
134 DATA_TYPE_METADATA(ColorConversionConfiguration, MEMBER_PROPERTY(conversionFunctionType, "", 0))
135 
136 DATA_TYPE_METADATA(FxaaConfiguration, MEMBER_PROPERTY(sharpness, "", 0), MEMBER_PROPERTY(quality, "", 0))
137 
138 DATA_TYPE_METADATA(TaaConfiguration, MEMBER_PROPERTY(sharpness, "", 0), MEMBER_PROPERTY(quality, "", 0))
139 
140 DATA_TYPE_METADATA(DofConfiguration, MEMBER_PROPERTY(focusPoint, "", 0), MEMBER_PROPERTY(focusRange, "", 0),
141     MEMBER_PROPERTY(nearTransitionRange, "", 0), MEMBER_PROPERTY(farTransitionRange, "", 0),
142     MEMBER_PROPERTY(nearBlur, "", 0), MEMBER_PROPERTY(farBlur, "", 0), MEMBER_PROPERTY(nearPlane, "", 0),
143     MEMBER_PROPERTY(farPlane, "", 0))
144 
145 ENUM_TYPE_METADATA(MotionBlurConfiguration::Sharpness, ENUM_VALUE(SOFT, "soft"), ENUM_VALUE(MEDIUM, "medium"),
146     ENUM_VALUE(SHARP, "sharp"))
147 
148 ENUM_TYPE_METADATA(
149     MotionBlurConfiguration::Quality, ENUM_VALUE(LOW, "low"), ENUM_VALUE(MEDIUM, "medium"), ENUM_VALUE(HIGH, "high"))
150 
151 DATA_TYPE_METADATA(MotionBlurConfiguration, MEMBER_PROPERTY(alpha, "", 0), MEMBER_PROPERTY(velocityCoefficient, "", 0),
152     MEMBER_PROPERTY(sharpness, "", 0), MEMBER_PROPERTY(quality, "", 0))
153 
154 ENUM_TYPE_METADATA(
155     LensFlareConfiguration::Quality, ENUM_VALUE(LOW, "low"), ENUM_VALUE(MEDIUM, "medium"), ENUM_VALUE(HIGH, "high"))
156 DATA_TYPE_METADATA(LensFlareConfiguration, MEMBER_PROPERTY(quality, "", 0), MEMBER_PROPERTY(intensity, "", 0),
157     MEMBER_PROPERTY(flarePosition, "", 0))
158 CORE_END_NAMESPACE()
159 
160 CORE3D_BEGIN_NAMESPACE()
161 using BASE_NS::array_view;
162 using BASE_NS::countof;
163 
164 using CORE_NS::BaseManager;
165 using CORE_NS::IComponentManager;
166 using CORE_NS::IEcs;
167 using CORE_NS::Property;
168 using CORE_NS::PropertyFlags;
169 
170 class PostProcessComponentManager final : public BaseManager<PostProcessComponent, IPostProcessComponentManager> {
171     BEGIN_PROPERTY(PostProcessComponent, componentMetaData_)
172 #include <3d/ecs/components/post_process_component.h>
173     END_PROPERTY();
174 
175 public:
PostProcessComponentManager(IEcs & ecs)176     explicit PostProcessComponentManager(IEcs& ecs)
177         : BaseManager<PostProcessComponent, IPostProcessComponentManager>(
178               ecs, CORE_NS::GetName<PostProcessComponent>(), 0U)
179     {}
180 
181     ~PostProcessComponentManager() = default;
182 
PropertyCount() const183     size_t PropertyCount() const override
184     {
185         return BASE_NS::countof(componentMetaData_);
186     }
187 
MetaData(size_t index) const188     const Property* MetaData(size_t index) const override
189     {
190         if (index < BASE_NS::countof(componentMetaData_)) {
191             return &componentMetaData_[index];
192         }
193         return nullptr;
194     }
195 
MetaData() const196     array_view<const Property> MetaData() const override
197     {
198         return componentMetaData_;
199     }
200 };
201 
IPostProcessComponentManagerInstance(IEcs & ecs)202 IComponentManager* IPostProcessComponentManagerInstance(IEcs& ecs)
203 {
204     return new PostProcessComponentManager(ecs);
205 }
206 
IPostProcessComponentManagerDestroy(IComponentManager * instance)207 void IPostProcessComponentManagerDestroy(IComponentManager* instance)
208 {
209     delete static_cast<PostProcessComponentManager*>(instance);
210 }
211 
212 CORE3D_END_NAMESPACE()
213