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 "PropertyTools/property_macros.h"
24
25 CORE_BEGIN_NAMESPACE()
26 using RENDER_NS::TonemapConfiguration;
27 using RENDER_NS::BloomConfiguration;
28 using RENDER_NS::DitherConfiguration;
29 using RENDER_NS::BlurConfiguration;
30 using RENDER_NS::ColorConversionConfiguration;
31 using RENDER_NS::FxaaConfiguration;
32 using RENDER_NS::VignetteConfiguration;
33 using RENDER_NS::ColorFringeConfiguration;
34 using RENDER_NS::TaaConfiguration;
35 using RENDER_NS::MotionBlurConfiguration;
36 using RENDER_NS::DofConfiguration;
37
38 using CORE3D_NS::PostProcessComponent;
39
40 DECLARE_PROPERTY_TYPE(RENDER_NS::RenderHandle);
41 DECLARE_PROPERTY_TYPE(RENDER_NS::RenderHandleReference);
42
43 BEGIN_ENUM(PostProcessFlagBitsMetaData, PostProcessComponent::FlagBits)
44 DECL_ENUM(PostProcessComponent::FlagBits, TONEMAP_BIT, "Tonemap")
45 DECL_ENUM(PostProcessComponent::FlagBits, BLOOM_BIT, "Bloom")
46 DECL_ENUM(PostProcessComponent::FlagBits, VIGNETTE_BIT, "Vignette")
47 DECL_ENUM(PostProcessComponent::FlagBits, COLOR_FRINGE_BIT, "Color Fringe")
48 DECL_ENUM(PostProcessComponent::FlagBits, DITHER_BIT, "Dither")
49 DECL_ENUM(PostProcessComponent::FlagBits, BLUR_BIT, "Blur")
50 DECL_ENUM(PostProcessComponent::FlagBits, COLOR_CONVERSION_BIT, "Color Conversion")
51 DECL_ENUM(PostProcessComponent::FlagBits, FXAA_BIT, "Fast Approximate Anti-Aliasing")
52 DECL_ENUM(PostProcessComponent::FlagBits, TAA_BIT, "Temporat Anti-Aliasing")
53 DECL_ENUM(PostProcessComponent::FlagBits, DOF_BIT, "Depth of Field")
54 DECL_ENUM(PostProcessComponent::FlagBits, MOTION_BLUR_BIT, "Motion Blur")
55 END_ENUM(PostProcessFlagBitsMetaData, PostProcessComponent::FlagBits)
56
57 /** Extend propertysystem with the enums */
58 DECLARE_PROPERTY_TYPE(TonemapConfiguration::TonemapType);
59 DECLARE_PROPERTY_TYPE(BloomConfiguration::BloomQualityType);
60 DECLARE_PROPERTY_TYPE(BloomConfiguration::BloomType);
61 DECLARE_PROPERTY_TYPE(DitherConfiguration::DitherType);
62 DECLARE_PROPERTY_TYPE(BlurConfiguration::BlurQualityType);
63 DECLARE_PROPERTY_TYPE(BlurConfiguration::BlurType);
64 DECLARE_PROPERTY_TYPE(ColorConversionConfiguration::ConversionFunctionType);
65 DECLARE_PROPERTY_TYPE(FxaaConfiguration::Sharpness);
66 DECLARE_PROPERTY_TYPE(FxaaConfiguration::Quality);
67 DECLARE_PROPERTY_TYPE(TaaConfiguration::Sharpness);
68 DECLARE_PROPERTY_TYPE(TaaConfiguration::Quality);
69 DECLARE_PROPERTY_TYPE(MotionBlurConfiguration::Sharpness);
70 DECLARE_PROPERTY_TYPE(MotionBlurConfiguration::Quality);
71
72 /** Extend propertysystem with the types */
73 DECLARE_PROPERTY_TYPE(TonemapConfiguration);
74 DECLARE_PROPERTY_TYPE(BloomConfiguration);
75 DECLARE_PROPERTY_TYPE(VignetteConfiguration);
76 DECLARE_PROPERTY_TYPE(ColorFringeConfiguration);
77 DECLARE_PROPERTY_TYPE(DitherConfiguration);
78 DECLARE_PROPERTY_TYPE(BlurConfiguration);
79 DECLARE_PROPERTY_TYPE(ColorConversionConfiguration);
80 DECLARE_PROPERTY_TYPE(FxaaConfiguration);
81 DECLARE_PROPERTY_TYPE(TaaConfiguration);
82 DECLARE_PROPERTY_TYPE(DofConfiguration);
83 DECLARE_PROPERTY_TYPE(MotionBlurConfiguration);
84
85 // Declare their metadata
86 BEGIN_ENUM(TonemapConfigurationTonemapTypeMetaData, TonemapConfiguration::TonemapType)
87 DECL_ENUM(TonemapConfiguration::TonemapType, TONEMAP_ACES, "aces")
88 DECL_ENUM(TonemapConfiguration::TonemapType, TONEMAP_ACES_2020, "aces_2020")
89 DECL_ENUM(TonemapConfiguration::TonemapType, TONEMAP_FILMIC, "filmic")
90 END_ENUM(TonemapConfigurationTonemapTypeMetaData, TonemapConfiguration::TonemapType)
91
92 BEGIN_ENUM(BloomConfigurationQualityTypeMetaData, BloomConfiguration::BloomQualityType)
93 DECL_ENUM(BloomConfiguration::BloomQualityType, QUALITY_TYPE_LOW, "low")
94 DECL_ENUM(BloomConfiguration::BloomQualityType, QUALITY_TYPE_NORMAL, "normal")
95 DECL_ENUM(BloomConfiguration::BloomQualityType, QUALITY_TYPE_HIGH, "high")
96 END_ENUM(BloomConfigurationQualityTypeMetaData, BloomConfiguration::BloomQualityType)
97
98 BEGIN_ENUM(BloomConfigurationBloomTypeMetaData, BloomConfiguration::BloomType)
99 DECL_ENUM(BloomConfiguration::BloomType, TYPE_NORMAL, "normal")
100 DECL_ENUM(BloomConfiguration::BloomType, TYPE_HORIZONTAL, "horizontal")
101 DECL_ENUM(BloomConfiguration::BloomType, TYPE_VERTICAL, "vertical")
102 DECL_ENUM(BloomConfiguration::BloomType, TYPE_BILATERAL, "bilateral")
103 END_ENUM(BloomConfigurationBloomTypeMetaData, BloomConfiguration::BloomType)
104
105 BEGIN_ENUM(DitherConfigurationDitherTypeMetaData, DitherConfiguration::DitherType)
106 DECL_ENUM(DitherConfiguration::DitherType, INTERLEAVED_NOISE, "interleaved_noise")
107 DECL_ENUM(DitherConfiguration::DitherType, TRIANGLE_NOISE, "triangle_noise")
108 DECL_ENUM(DitherConfiguration::DitherType, TRIANGLE_NOISE_RGB, "triangle_noise_rgb")
109 END_ENUM(DitherConfigurationDitherTypeMetaData, DitherConfiguration::DitherType)
110
111 BEGIN_ENUM(BlurConfigurationBlurQualityTypeMetaData, BlurConfiguration::BlurQualityType)
112 DECL_ENUM(BlurConfiguration::BlurQualityType, QUALITY_TYPE_LOW, "low")
113 DECL_ENUM(BlurConfiguration::BlurQualityType, QUALITY_TYPE_NORMAL, "normal")
114 DECL_ENUM(BlurConfiguration::BlurQualityType, QUALITY_TYPE_HIGH, "high")
115 END_ENUM(BlurConfigurationBlurQualityTypeMetaData, BlurConfiguration::BlurQualityType)
116
117 BEGIN_ENUM(BlurConfigurationBlurTypeMetaData, BlurConfiguration::BlurType)
118 DECL_ENUM(BlurConfiguration::BlurType, TYPE_NORMAL, "low")
119 DECL_ENUM(BlurConfiguration::BlurType, TYPE_HORIZONTAL, "normal")
120 DECL_ENUM(BlurConfiguration::BlurType, TYPE_VERTICAL, "high")
121 END_ENUM(BlurConfigurationBlurTypeMetaData, BlurConfiguration::BlurType)
122
123 BEGIN_ENUM(
124 ColorConversionConfigurationConversionFunctionTypeMetaData, ColorConversionConfiguration::ConversionFunctionType)
125 DECL_ENUM(ColorConversionConfiguration::ConversionFunctionType, CONVERSION_LINEAR, "linear")
126 DECL_ENUM(ColorConversionConfiguration::ConversionFunctionType, CONVERSION_LINEAR_TO_SRGB, "linear_to_srgb")
127 END_ENUM(
128 ColorConversionConfigurationConversionFunctionTypeMetaData, ColorConversionConfiguration::ConversionFunctionType)
129
130 BEGIN_ENUM(FxaaConfigurationSharpnessMetaData, FxaaConfiguration::Sharpness)
131 DECL_ENUM(FxaaConfiguration::Sharpness, SOFT, "soft")
132 DECL_ENUM(FxaaConfiguration::Sharpness, MEDIUM, "medium")
133 DECL_ENUM(FxaaConfiguration::Sharpness, SHARP, "sharp")
134 END_ENUM(FxaaConfigurationSharpnessMetaData, FxaaConfiguration::Sharpness)
135
136 BEGIN_ENUM(FxaaConfigurationQualityMetaData, FxaaConfiguration::Quality)
137 DECL_ENUM(FxaaConfiguration::Quality, LOW, "low")
138 DECL_ENUM(FxaaConfiguration::Quality, MEDIUM, "medium")
139 DECL_ENUM(FxaaConfiguration::Quality, HIGH, "high")
140 END_ENUM(FxaaConfigurationQualityMetaData, FxaaConfiguration::Quality)
141
142 BEGIN_ENUM(TaaConfigurationSharpnessMetaData, TaaConfiguration::Sharpness)
143 DECL_ENUM(TaaConfiguration::Sharpness, SOFT, "soft")
144 DECL_ENUM(TaaConfiguration::Sharpness, MEDIUM, "medium")
145 DECL_ENUM(TaaConfiguration::Sharpness, SHARP, "sharp")
146 END_ENUM(TaaConfigurationSharpnessMetaData, TaaConfiguration::Sharpness)
147
148 BEGIN_ENUM(TaaConfigurationQualityMetaData, TaaConfiguration::Quality)
149 DECL_ENUM(TaaConfiguration::Quality, LOW, "low")
150 DECL_ENUM(TaaConfiguration::Quality, MEDIUM, "medium")
151 DECL_ENUM(TaaConfiguration::Quality, HIGH, "high")
152 END_ENUM(TaaConfigurationQualityMetaData, TaaConfiguration::Quality)
153
154 BEGIN_METADATA(TonemapConfigurationMetaData, TonemapConfiguration)
155 DECL_PROPERTY2(TonemapConfiguration, tonemapType, "", 0)
156 DECL_PROPERTY2(TonemapConfiguration, exposure, "", 0)
157 END_METADATA(TonemapConfigurationMetaData, TonemapConfiguration)
158
159 BEGIN_METADATA(BloomConfigurationMetaData, BloomConfiguration)
160 DECL_PROPERTY2(BloomConfiguration, bloomType, "", 0)
161 DECL_PROPERTY2(BloomConfiguration, bloomQualityType, "", 0)
162 DECL_PROPERTY2(BloomConfiguration, thresholdHard, "", 0)
163 DECL_PROPERTY2(BloomConfiguration, thresholdSoft, "", 0)
164 DECL_PROPERTY2(BloomConfiguration, amountCoefficient, "", 0)
165 DECL_PROPERTY2(BloomConfiguration, dirtMaskCoefficient, "", 0)
166 DECL_PROPERTY2(BloomConfiguration, dirtMaskImage, "", 0)
167 DECL_PROPERTY2(BloomConfiguration, useCompute, "", 0)
168 END_METADATA(BloomConfigurationMetaData, BloomConfiguration)
169
170 BEGIN_METADATA(VignetteConfigurationMetaData, VignetteConfiguration)
171 DECL_PROPERTY2(VignetteConfiguration, coefficient, "", 0)
172 DECL_PROPERTY2(VignetteConfiguration, power, "", 0)
173 END_METADATA(VignetteConfigurationMetaData, VignetteConfiguration)
174
175 BEGIN_METADATA(ColorFringeConfigurationMetaData, ColorFringeConfiguration)
176 DECL_PROPERTY2(ColorFringeConfiguration, coefficient, "", 0)
177 DECL_PROPERTY2(ColorFringeConfiguration, distanceCoefficient, "", 0)
178 END_METADATA(ColorFringeConfigurationMetaData, ColorFringeConfiguration)
179
180 BEGIN_METADATA(DitherConfigurationMetaData, DitherConfiguration)
181 DECL_PROPERTY2(DitherConfiguration, ditherType, "", 0)
182 DECL_PROPERTY2(DitherConfiguration, amountCoefficient, "", 0)
183 END_METADATA(DitherConfigurationMetaData, DitherConfiguration)
184
185 BEGIN_METADATA(BlurConfigurationMetaData, BlurConfiguration)
186 DECL_PROPERTY2(BlurConfiguration, blurType, "", 0)
187 DECL_PROPERTY2(BlurConfiguration, blurQualityType, "", 0)
188 DECL_PROPERTY2(BlurConfiguration, filterSize, "", 0)
189 DECL_PROPERTY2(BlurConfiguration, maxMipLevel, "", 0)
190 END_METADATA(BlurConfigurationMetaData, BlurConfiguration)
191
192 BEGIN_METADATA(ColorConversionConfigurationMetaData, ColorConversionConfiguration)
193 DECL_PROPERTY2(ColorConversionConfiguration, conversionFunctionType, "", 0)
194 END_METADATA(ColorConversionConfigurationMetaData, ColorConversionConfiguration)
195
196 BEGIN_METADATA(FxaaConfigurationMetaData, FxaaConfiguration)
197 DECL_PROPERTY2(FxaaConfiguration, sharpness, "", 0)
198 DECL_PROPERTY2(FxaaConfiguration, quality, "", 0)
199 END_METADATA(FxaaConfigurationMetaData, FxaaConfiguration)
200
201 BEGIN_METADATA(TaaConfigurationMetaData, TaaConfiguration)
202 DECL_PROPERTY2(TaaConfiguration, sharpness, "", 0)
203 DECL_PROPERTY2(TaaConfiguration, quality, "", 0)
204 END_METADATA(TaaConfigurationMetaData, TaaConfiguration)
205
206 BEGIN_METADATA(DofConfigurationMetaData, DofConfiguration)
207 DECL_PROPERTY2(DofConfiguration, focusPoint, "", 0)
208 DECL_PROPERTY2(DofConfiguration, focusRange, "", 0)
209 DECL_PROPERTY2(DofConfiguration, nearTransitionRange, "", 0)
210 DECL_PROPERTY2(DofConfiguration, farTransitionRange, "", 0)
211 DECL_PROPERTY2(DofConfiguration, nearBlur, "", 0)
212 DECL_PROPERTY2(DofConfiguration, farBlur, "", 0)
213 DECL_PROPERTY2(DofConfiguration, nearPlane, "", 0)
214 DECL_PROPERTY2(DofConfiguration, farPlane, "", 0)
215 END_METADATA(DofConfigurationMetaData, DofConfiguration)
216
217 BEGIN_ENUM(MotionBlurConfigurationSharpnessMetaData, MotionBlurConfiguration::Sharpness)
218 DECL_ENUM(MotionBlurConfiguration::Sharpness, SOFT, "soft")
219 DECL_ENUM(MotionBlurConfiguration::Sharpness, MEDIUM, "medium")
220 DECL_ENUM(MotionBlurConfiguration::Sharpness, SHARP, "sharp")
221 END_ENUM(MotionBlurConfigurationSharpnessMetaData, MotionBlurConfiguration::Sharpness)
222
223 BEGIN_ENUM(MotionBlurConfigurationQualityMetaData, MotionBlurConfiguration::Quality)
224 DECL_ENUM(MotionBlurConfiguration::Quality, LOW, "low")
225 DECL_ENUM(MotionBlurConfiguration::Quality, MEDIUM, "medium")
226 DECL_ENUM(MotionBlurConfiguration::Quality, HIGH, "high")
227 END_ENUM(MotionBlurConfigurationQualityMetaData, MotionBlurConfiguration::Quality)
228
229 BEGIN_METADATA(MotionBlurConfigurationMetaData, MotionBlurConfiguration)
230 DECL_PROPERTY2(MotionBlurConfiguration, alpha, "", 0)
231 DECL_PROPERTY2(MotionBlurConfiguration, velocityCoefficient, "", 0)
232 DECL_PROPERTY2(MotionBlurConfiguration, sharpness, "", 0)
233 DECL_PROPERTY2(MotionBlurConfiguration, quality, "", 0)
234 END_METADATA(MotionBlurConfigurationMetaData, MotionBlurConfiguration)
235 CORE_END_NAMESPACE()
236
237 CORE3D_BEGIN_NAMESPACE()
238 using BASE_NS::array_view;
239 using BASE_NS::countof;
240
241 using CORE_NS::BaseManager;
242 using CORE_NS::IComponentManager;
243 using CORE_NS::IEcs;
244 using CORE_NS::Property;
245 using CORE_NS::PropertyFlags;
246
247 class PostProcessComponentManager final : public BaseManager<PostProcessComponent, IPostProcessComponentManager> {
248 BEGIN_PROPERTY(PostProcessComponent, ComponentMetadata)
249 #include <3d/ecs/components/post_process_component.h>
250 END_PROPERTY();
251 const array_view<const Property> componentMetaData_ { ComponentMetadata, countof(ComponentMetadata) };
252
253 public:
PostProcessComponentManager(IEcs & ecs)254 explicit PostProcessComponentManager(IEcs& ecs)
255 : BaseManager<PostProcessComponent, IPostProcessComponentManager>(ecs, CORE_NS::GetName<PostProcessComponent>())
256 {}
257
258 ~PostProcessComponentManager() = default;
259
PropertyCount() const260 size_t PropertyCount() const override
261 {
262 return componentMetaData_.size();
263 }
264
MetaData(size_t index) const265 const Property* MetaData(size_t index) const override
266 {
267 if (index < componentMetaData_.size()) {
268 return &componentMetaData_[index];
269 }
270 return nullptr;
271 }
272
MetaData() const273 array_view<const Property> MetaData() const override
274 {
275 return componentMetaData_;
276 }
277 };
278
IPostProcessComponentManagerInstance(IEcs & ecs)279 IComponentManager* IPostProcessComponentManagerInstance(IEcs& ecs)
280 {
281 return new PostProcessComponentManager(ecs);
282 }
283
IPostProcessComponentManagerDestroy(IComponentManager * instance)284 void IPostProcessComponentManagerDestroy(IComponentManager* instance)
285 {
286 delete static_cast<PostProcessComponentManager*>(instance);
287 }
288
289 CORE3D_END_NAMESPACE()
290