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> 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