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 SCENEPLUGINAPI_POSTPROCESS_H
17 #define SCENEPLUGINAPI_POSTPROCESS_H
18 
19 #include <scene_plugin/api/postprocess_uid.h>
20 #include <scene_plugin/interface/intf_camera.h>
21 
22 #include <meta/api/internal/object_api.h>
SCENE_BEGIN_NAMESPACE()23 SCENE_BEGIN_NAMESPACE()
24 
25 class Bloom final : public META_NS::Internal::ObjectInterfaceAPI<Bloom, ClassId::Bloom> {
26     META_API(Bloom)
27     META_API_OBJECT_CONVERTIBLE(IBloom)
28     META_API_CACHE_INTERFACE(IBloom, Bloom)
29     META_API_CACHE_INTERFACE(IPostProcessEffect, PostprocessEffect)
30 
31 public:
32     META_API_INTERFACE_PROPERTY_CACHED(PostprocessEffect, Enabled, bool)
33     META_API_INTERFACE_PROPERTY_CACHED(Bloom, Type, IBloom::BloomType)
34     META_API_INTERFACE_PROPERTY_CACHED(Bloom, Quality, QualityType)
35     META_API_INTERFACE_PROPERTY_CACHED(Bloom, ThresholdHard, float)
36     META_API_INTERFACE_PROPERTY_CACHED(Bloom, ThresholdSoft, float)
37     META_API_INTERFACE_PROPERTY_CACHED(Bloom, AmountCoefficient, float)
38     META_API_INTERFACE_PROPERTY_CACHED(Bloom, DirtMaskCoefficient, float)
39     META_API_INTERFACE_PROPERTY_CACHED(Bloom, DirtMaskImage, IBitmap::Ptr)
40     META_API_INTERFACE_PROPERTY_CACHED(Bloom, UseCompute, bool)
41 };
42 
43 class Blur final : public META_NS::Internal::ObjectInterfaceAPI<Blur, ClassId::Blur> {
44     META_API(Blur)
45     META_API_OBJECT_CONVERTIBLE(IBlur)
46     META_API_CACHE_INTERFACE(IBlur, Blur)
47     META_API_CACHE_INTERFACE(IPostProcessEffect, PostprocessEffect)
48 
49 public:
50     META_API_INTERFACE_PROPERTY_CACHED(PostprocessEffect, Enabled, bool)
51     META_API_INTERFACE_PROPERTY_CACHED(Blur, Type, IBlur::BlurType)
52     META_API_INTERFACE_PROPERTY_CACHED(Blur, Quality, QualityType)
53     META_API_INTERFACE_PROPERTY_CACHED(Blur, FilterSize, float)
54     META_API_INTERFACE_PROPERTY_CACHED(Blur, MaxMipmapLevel, uint32_t)
55 };
56 
57 class ColorConversion final : public META_NS::Internal::ObjectInterfaceAPI<ColorConversion, ClassId::ColorConversion> {
58     META_API(ColorConversion)
59     META_API_OBJECT_CONVERTIBLE(IColorConversion)
60     META_API_CACHE_INTERFACE(IColorConversion, ColorConversion)
61     META_API_CACHE_INTERFACE(IPostProcessEffect, PostprocessEffect)
62 
63 public:
64     META_API_INTERFACE_PROPERTY_CACHED(PostprocessEffect, Enabled, bool)
65     META_API_INTERFACE_PROPERTY_CACHED(ColorConversion, Function, IColorConversion::ConversionFunctionType)
66 };
67 
68 class ColorFringe final : public META_NS::Internal::ObjectInterfaceAPI<ColorFringe, ClassId::ColorFringe> {
69     META_API(ColorFringe)
70     META_API_OBJECT_CONVERTIBLE(IColorFringe)
71     META_API_CACHE_INTERFACE(IColorFringe, ColorFringe)
72     META_API_CACHE_INTERFACE(IPostProcessEffect, PostprocessEffect)
73 
74 public:
75     META_API_INTERFACE_PROPERTY_CACHED(PostprocessEffect, Enabled, bool)
76     META_API_INTERFACE_PROPERTY_CACHED(ColorFringe, Coefficient, float)
77     META_API_INTERFACE_PROPERTY_CACHED(ColorFringe, DistanceCoefficient, float)
78 };
79 
80 class DepthOfField final : public META_NS::Internal::ObjectInterfaceAPI<DepthOfField, ClassId::DepthOfField> {
81     META_API(DepthOfField)
82     META_API_OBJECT_CONVERTIBLE(IDepthOfField)
83     META_API_CACHE_INTERFACE(IDepthOfField, DepthOfField)
84     META_API_CACHE_INTERFACE(IPostProcessEffect, PostprocessEffect)
85 
86 public:
87     META_API_INTERFACE_PROPERTY_CACHED(PostprocessEffect, Enabled, bool)
88     META_API_INTERFACE_PROPERTY_CACHED(DepthOfField, FocusPoint, float)
89     META_API_INTERFACE_PROPERTY_CACHED(DepthOfField, FocusRange, float)
90     META_API_INTERFACE_PROPERTY_CACHED(DepthOfField, NearTransitionRange, float)
91     META_API_INTERFACE_PROPERTY_CACHED(DepthOfField, FarTransitionRange, float)
92     META_API_INTERFACE_PROPERTY_CACHED(DepthOfField, NearBlur, float)
93     META_API_INTERFACE_PROPERTY_CACHED(DepthOfField, FarBlur, float)
94     META_API_INTERFACE_PROPERTY_CACHED(DepthOfField, NearPlane, float)
95     META_API_INTERFACE_PROPERTY_CACHED(DepthOfField, FarPlane, float)
96 };
97 
98 class Dither final : public META_NS::Internal::ObjectInterfaceAPI<Dither, ClassId::Dither> {
99     META_API(Dither)
100     META_API_OBJECT_CONVERTIBLE(IDither)
101     META_API_CACHE_INTERFACE(IDither, Dither)
102     META_API_CACHE_INTERFACE(IPostProcessEffect, PostprocessEffect)
103 
104 public:
105     META_API_INTERFACE_PROPERTY_CACHED(PostprocessEffect, Enabled, bool)
106     META_API_INTERFACE_PROPERTY_CACHED(Dither, Type, IDither::DitherType)
107     META_API_INTERFACE_PROPERTY_CACHED(Dither, Coefficient, float)
108 };
109 
110 class Fxaa final : public META_NS::Internal::ObjectInterfaceAPI<Fxaa, ClassId::Fxaa> {
111     META_API(Fxaa)
112     META_API_OBJECT_CONVERTIBLE(IFxaa)
113     META_API_CACHE_INTERFACE(IFxaa, Fxaa)
114     META_API_CACHE_INTERFACE(IPostProcessEffect, PostprocessEffect)
115 
116 public:
117     META_API_INTERFACE_PROPERTY_CACHED(PostprocessEffect, Enabled, bool)
118     META_API_INTERFACE_PROPERTY_CACHED(Fxaa, Sharpness, SharpnessType)
119     META_API_INTERFACE_PROPERTY_CACHED(Fxaa, Quality, QualityType)
120 };
121 
122 class MotionBlur final : public META_NS::Internal::ObjectInterfaceAPI<MotionBlur, ClassId::MotionBlur> {
123     META_API(MotionBlur)
124     META_API_OBJECT_CONVERTIBLE(IMotionBlur)
125     META_API_CACHE_INTERFACE(IMotionBlur, MotionBlur)
126     META_API_CACHE_INTERFACE(IPostProcessEffect, PostprocessEffect)
127 
128 public:
129     META_API_INTERFACE_PROPERTY_CACHED(PostprocessEffect, Enabled, bool)
130     META_API_INTERFACE_PROPERTY_CACHED(MotionBlur, Alpha, float)
131     META_API_INTERFACE_PROPERTY_CACHED(MotionBlur, Velocity, float)
132     META_API_INTERFACE_PROPERTY_CACHED(MotionBlur, Quality, QualityType)
133     META_API_INTERFACE_PROPERTY_CACHED(MotionBlur, Sharpness, SharpnessType)
134 };
135 
136 class Taa final : public META_NS::Internal::ObjectInterfaceAPI<Taa, ClassId::Taa> {
137     META_API(Taa)
138     META_API_OBJECT_CONVERTIBLE(ITaa)
139     META_API_CACHE_INTERFACE(ITaa, Taa)
140     META_API_CACHE_INTERFACE(IPostProcessEffect, PostprocessEffect)
141 
142 public:
143     META_API_INTERFACE_PROPERTY_CACHED(PostprocessEffect, Enabled, bool)
144     META_API_INTERFACE_PROPERTY_CACHED(Taa, Sharpness, SharpnessType)
145     META_API_INTERFACE_PROPERTY_CACHED(Taa, Quality, QualityType)
146 };
147 
148 class Tonemap final : public META_NS::Internal::ObjectInterfaceAPI<Tonemap, ClassId::Tonemap> {
149     META_API(Tonemap)
150     META_API_OBJECT_CONVERTIBLE(ITonemap)
151     META_API_CACHE_INTERFACE(ITonemap, Tonemap)
152     META_API_CACHE_INTERFACE(IPostProcessEffect, PostprocessEffect)
153 
154 public:
155     META_API_INTERFACE_PROPERTY_CACHED(PostprocessEffect, Enabled, bool)
156     META_API_INTERFACE_PROPERTY_CACHED(Tonemap, Type, ITonemap::TonemapType)
157     META_API_INTERFACE_PROPERTY_CACHED(Tonemap, Exposure, float)
158 };
159 
160 class Vignette final : public META_NS::Internal::ObjectInterfaceAPI<Vignette, ClassId::Vignette> {
161     META_API(Vignette)
162     META_API_OBJECT_CONVERTIBLE(IVignette)
163     META_API_CACHE_INTERFACE(IVignette, Vignette)
164     META_API_CACHE_INTERFACE(IPostProcessEffect, PostprocessEffect)
165 
166 public:
167     META_API_INTERFACE_PROPERTY_CACHED(PostprocessEffect, Enabled, bool)
168     META_API_INTERFACE_PROPERTY_CACHED(Vignette, Coefficient, float)
169     META_API_INTERFACE_PROPERTY_CACHED(Vignette, Power, float)
170 };
171 
172 #define MAP_PROPERTY_TO_USER(interface_type, user_name)                               \
173 public:                                                                               \
174     SCENE_NS::user_name user_name()                                                   \
175     {                                                                                 \
176         SCENE_NS::user_name ret;                                                      \
177         ret.Initialize(interface_pointer_cast<META_NS::IObject>(                      \
178             META_NS::GetValue(this->Get##interface_type##Interface()->user_name()))); \
179         return ret;                                                                   \
180     }
181 
182 class PostProcess final : public META_NS::Internal::ObjectInterfaceAPI<PostProcess, ClassId::PostProcess> {
183     META_API(PostProcess)
184     META_API_OBJECT_CONVERTIBLE(IPostProcess)
185     META_API_CACHE_INTERFACE(IPostProcess, PostProcess)
186 
187 public:
188     META_API_INTERFACE_PROPERTY_CACHED(PostProcess, Name, BASE_NS::string)
189     MAP_PROPERTY_TO_USER(PostProcess, Bloom)
190     MAP_PROPERTY_TO_USER(PostProcess, Blur)
191     MAP_PROPERTY_TO_USER(PostProcess, ColorConversion)
192     MAP_PROPERTY_TO_USER(PostProcess, ColorFringe)
193     MAP_PROPERTY_TO_USER(PostProcess, DepthOfField)
194     MAP_PROPERTY_TO_USER(PostProcess, Dither)
195     MAP_PROPERTY_TO_USER(PostProcess, Fxaa)
196     MAP_PROPERTY_TO_USER(PostProcess, MotionBlur)
197     MAP_PROPERTY_TO_USER(PostProcess, Taa)
198     MAP_PROPERTY_TO_USER(PostProcess, Tonemap)
199     MAP_PROPERTY_TO_USER(PostProcess, Vignette)
200 };
201 
202 SCENE_END_NAMESPACE()
203 
204 #endif // SCENEPLUGINAPI_POSTPROCESS_H
205