• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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, "Temporal 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     ENUM_VALUE(TONEMAP_PBR_NEUTRAL, "Neutral"))
85 
86 ENUM_TYPE_METADATA(BloomConfiguration::BloomQualityType, ENUM_VALUE(QUALITY_TYPE_LOW, "Low Quality"),
87     ENUM_VALUE(QUALITY_TYPE_NORMAL, "Normal Quality"), ENUM_VALUE(QUALITY_TYPE_HIGH, "High Quality"))
88 
89 ENUM_TYPE_METADATA(BloomConfiguration::BloomType, ENUM_VALUE(TYPE_NORMAL, "Normal Type"),
90     ENUM_VALUE(TYPE_HORIZONTAL, "Horizontal Type"), ENUM_VALUE(TYPE_VERTICAL, "Vertical Type"),
91     ENUM_VALUE(TYPE_BILATERAL, "Bilateral Type"))
92 
93 ENUM_TYPE_METADATA(DitherConfiguration::DitherType, ENUM_VALUE(INTERLEAVED_NOISE, "Interleaved Noise"),
94     ENUM_VALUE(TRIANGLE_NOISE, "Triangle Noise"), ENUM_VALUE(TRIANGLE_NOISE_RGB, "Triangle Noise RGB"))
95 
96 ENUM_TYPE_METADATA(BlurConfiguration::BlurQualityType, ENUM_VALUE(QUALITY_TYPE_LOW, "Low Quality"),
97     ENUM_VALUE(QUALITY_TYPE_NORMAL, "Normal Quality"), ENUM_VALUE(QUALITY_TYPE_HIGH, "High Quality"))
98 
99 ENUM_TYPE_METADATA(BlurConfiguration::BlurType, ENUM_VALUE(TYPE_NORMAL, "Normal Type"),
100     ENUM_VALUE(TYPE_HORIZONTAL, "Horizontal Type"), ENUM_VALUE(TYPE_VERTICAL, "Vertical Type"))
101 
102 ENUM_TYPE_METADATA(ColorConversionConfiguration::ConversionFunctionType, ENUM_VALUE(CONVERSION_LINEAR, "Linear"),
103     ENUM_VALUE(CONVERSION_LINEAR_TO_SRGB, "Linear to sRGB"),
104     ENUM_VALUE(CONVERSION_MULTIPLY_WITH_ALPHA, "Multiply With Alpha"), )
105 
106 ENUM_TYPE_METADATA(FxaaConfiguration::Sharpness, ENUM_VALUE(SOFT, "Soft Sharpness"),
107     ENUM_VALUE(MEDIUM, "Medium Sharpness"), ENUM_VALUE(SHARP, "Sharp Sharpness"))
108 
109 ENUM_TYPE_METADATA(FxaaConfiguration::Quality, ENUM_VALUE(LOW, "Low Quality"), ENUM_VALUE(MEDIUM, "Medium Quality"),
110     ENUM_VALUE(HIGH, "High Quality"))
111 
112 ENUM_TYPE_METADATA(
113     TaaConfiguration::Sharpness, ENUM_VALUE(SOFT, "Soft"), ENUM_VALUE(MEDIUM, "Medium"), ENUM_VALUE(SHARP, "Sharp"))
114 
115 ENUM_TYPE_METADATA(TaaConfiguration::Quality, ENUM_VALUE(LOW, "Low Quality"), ENUM_VALUE(MEDIUM, "Medium Quality"),
116     ENUM_VALUE(HIGH, "High Quality"))
117 
118 DATA_TYPE_METADATA(
119     TonemapConfiguration, MEMBER_PROPERTY(tonemapType, "Tonemap Type", 0), MEMBER_PROPERTY(exposure, "Exposure", 0))
120 
121 DATA_TYPE_METADATA(BloomConfiguration, MEMBER_PROPERTY(bloomType, "Type", 0),
122     MEMBER_PROPERTY(bloomQualityType, "Quality", 0), MEMBER_PROPERTY(thresholdHard, "Hard Threshold", 0),
123     MEMBER_PROPERTY(thresholdSoft, "Soft Threshold", 0), MEMBER_PROPERTY(amountCoefficient, "Amount Coefficient", 0),
124     MEMBER_PROPERTY(dirtMaskCoefficient, "Dist Mask Coefficient", 0), MEMBER_PROPERTY(scatter, "Scatter", 0),
125     MEMBER_PROPERTY(scaleFactor, "Scale Factor", 0), MEMBER_PROPERTY(dirtMaskImage, "Dirt Mask Image", 0),
126     MEMBER_PROPERTY(useCompute, "Use Compute", CORE_NS::PropertyFlags::IS_HIDDEN))
127 
128 DATA_TYPE_METADATA(
129     VignetteConfiguration, MEMBER_PROPERTY(coefficient, "Coefficient", 0), MEMBER_PROPERTY(power, "Power", 0))
130 
131 DATA_TYPE_METADATA(ColorFringeConfiguration, MEMBER_PROPERTY(coefficient, "Coefficient", 0),
132     MEMBER_PROPERTY(distanceCoefficient, "Distance Coefficient", 0))
133 
134 DATA_TYPE_METADATA(
135     DitherConfiguration, MEMBER_PROPERTY(ditherType, "Type", 0), MEMBER_PROPERTY(amountCoefficient, "Amount", 0))
136 
137 DATA_TYPE_METADATA(BlurConfiguration, MEMBER_PROPERTY(blurType, "Type", 0),
138     MEMBER_PROPERTY(blurQualityType, "Quality", 0), MEMBER_PROPERTY(filterSize, "Filter Size", 0),
139     MEMBER_PROPERTY(maxMipLevel, "Max Mip Level", 0))
140 
141 DATA_TYPE_METADATA(
142     ColorConversionConfiguration, BITFIELD_MEMBER_PROPERTY(conversionFunctionType, "Conversion Function",
143                                       PropertyFlags::IS_BITFIELD, ColorConversionConfiguration::ConversionFunctionType))
144 
145 DATA_TYPE_METADATA(
146     FxaaConfiguration, MEMBER_PROPERTY(sharpness, "Sharpness", 0), MEMBER_PROPERTY(quality, "Quality", 0))
147 
148 DATA_TYPE_METADATA(TaaConfiguration, MEMBER_PROPERTY(sharpness, "Sharpness", 0), MEMBER_PROPERTY(quality, "Quality", 0))
149 
150 DATA_TYPE_METADATA(DofConfiguration, MEMBER_PROPERTY(focusPoint, "Focust Point", 0),
151     MEMBER_PROPERTY(focusRange, "Focus Range", 0), MEMBER_PROPERTY(nearTransitionRange, "Near Transition Range", 0),
152     MEMBER_PROPERTY(farTransitionRange, "Far Transition Range", 0), MEMBER_PROPERTY(nearBlur, "Near Blur", 0),
153     MEMBER_PROPERTY(farBlur, "Far Blur", 0), MEMBER_PROPERTY(nearPlane, "Near Plane", 0),
154     MEMBER_PROPERTY(farPlane, "Far Plane", 0))
155 
156 ENUM_TYPE_METADATA(MotionBlurConfiguration::Sharpness, ENUM_VALUE(SOFT, "Soft"), ENUM_VALUE(MEDIUM, "Medium"),
157     ENUM_VALUE(SHARP, "Sharp"))
158 
159 ENUM_TYPE_METADATA(
160     MotionBlurConfiguration::Quality, ENUM_VALUE(LOW, "Low"), ENUM_VALUE(MEDIUM, "Medium"), ENUM_VALUE(HIGH, "High"))
161 
162 DATA_TYPE_METADATA(MotionBlurConfiguration, MEMBER_PROPERTY(alpha, "Alpha", 0),
163     MEMBER_PROPERTY(velocityCoefficient, "Velocity Coefficient", 0), MEMBER_PROPERTY(sharpness, "Sharpness", 0),
164     MEMBER_PROPERTY(quality, "Quality", 0))
165 
166 ENUM_TYPE_METADATA(
167     LensFlareConfiguration::Quality, ENUM_VALUE(LOW, "Low"), ENUM_VALUE(MEDIUM, "Medium"), ENUM_VALUE(HIGH, "High"))
168 DATA_TYPE_METADATA(LensFlareConfiguration, MEMBER_PROPERTY(quality, "Quality", 0),
169     MEMBER_PROPERTY(intensity, "Intensity", 0), MEMBER_PROPERTY(flarePosition, "Flare Position", 0))
170 CORE_END_NAMESPACE()
171 
172 CORE3D_BEGIN_NAMESPACE()
173 using BASE_NS::array_view;
174 using BASE_NS::countof;
175 
176 using CORE_NS::BaseManager;
177 using CORE_NS::IComponentManager;
178 using CORE_NS::IEcs;
179 using CORE_NS::Property;
180 using CORE_NS::PropertyFlags;
181 
182 class PostProcessComponentManager final : public BaseManager<PostProcessComponent, IPostProcessComponentManager> {
183     BEGIN_PROPERTY(PostProcessComponent, componentMetaData_)
184 #include <3d/ecs/components/post_process_component.h>
185     END_PROPERTY();
186 
187 public:
PostProcessComponentManager(IEcs & ecs)188     explicit PostProcessComponentManager(IEcs& ecs)
189         : BaseManager<PostProcessComponent, IPostProcessComponentManager>(
190               ecs, CORE_NS::GetName<PostProcessComponent>(), 0U)
191     {}
192 
193     ~PostProcessComponentManager() = default;
194 
PropertyCount() const195     size_t PropertyCount() const override
196     {
197         return BASE_NS::countof(componentMetaData_);
198     }
199 
MetaData(size_t index) const200     const Property* MetaData(size_t index) const override
201     {
202         if (index < BASE_NS::countof(componentMetaData_)) {
203             return &componentMetaData_[index];
204         }
205         return nullptr;
206     }
207 
MetaData() const208     array_view<const Property> MetaData() const override
209     {
210         return componentMetaData_;
211     }
212 };
213 
IPostProcessComponentManagerInstance(IEcs & ecs)214 IComponentManager* IPostProcessComponentManagerInstance(IEcs& ecs)
215 {
216     return new PostProcessComponentManager(ecs);
217 }
218 
IPostProcessComponentManagerDestroy(IComponentManager * instance)219 void IPostProcessComponentManagerDestroy(IComponentManager* instance)
220 {
221     delete static_cast<PostProcessComponentManager*>(instance);
222 }
223 
224 CORE3D_END_NAMESPACE()
225