47 enum class AAMode : quint8
55 enum class TAAMode : quint8
62 enum class AAQuality : quint8
69 enum class HorizontalField : quint8
76 enum class VerticalField : quint8
83 enum class UnitType : quint8
89 enum class Background : quint8
99 enum class TonemapMode : quint8
108 static size_t
constexpr TonemapModeCount = 6;
112 EnableDepthTest = 0x1,
113 EnableDepthPrePass = 0x2,
116 Q_DECLARE_FLAGS(LayerFlags, LayerFlag)
118 enum class MaterialDebugMode : quint8
135 enum class OITMethod : quint8
142 enum class RenderOverrides : quint8
145 DisableInternalPasses = 0x1,
147 using RenderOverridesT = std::underlying_type_t<RenderOverrides>;
149 enum class DirtyFlag : quint8
152 VisibilityDirty = 0x2
154 using FlagT = std::underlying_type_t<DirtyFlag>;
156 static constexpr DirtyFlag DirtyMask { std::numeric_limits<FlagT>::max() };
158 [[nodiscard]]
bool isDirty(DirtyFlag dirtyFlag = DirtyMask)
const
160 return ((m_layerDirtyFlags & FlagT(dirtyFlag)) != 0)
161 || ((dirtyFlag == DirtyMask) && QSSGRenderNode::isDirty());
163 void markDirty(DirtyFlag dirtyFlag);
164 void clearDirty(DirtyFlag dirtyFlag);
166 void ref(QSSGRenderRoot *inRootNode)
168 rootNode = inRootNode;
169 rootNodeRef = &rootNode;
172 QSSGRenderRoot *rootNode =
nullptr;
174 QSSGRenderLayerHandle lh;
177 QSSGRenderEffect *firstEffect;
178 QSSGLayerRenderData *renderData =
nullptr;
179 enum class RenderExtensionStage { TextureProviders, Underlay, Overlay, Count };
180 QList<QSSGRenderExtension *> renderExtensions[size_t(RenderExtensionStage::Count)];
182 QSSGRenderLayer::AAMode antialiasingMode;
183 QSSGRenderLayer::AAQuality antialiasingQuality;
184 QVector4D currentAndLastJitter;
186 QSSGRenderLayer::Background background;
187 QVector3D clearColor;
189 FlagT m_layerDirtyFlags = FlagT(DirtyFlag::TreeDirty);
190 quint8 viewCount = 1;
193 float aoStrength = 0.0f;
194 float aoDistance = 5.0f;
195 float aoSoftness = 50.0f;
197 qint32 aoSamplerate = 2;
198 bool aoDither =
false;
199 bool aoEnabled =
false;
201 constexpr bool ssaoEnabled()
const {
return aoEnabled && (aoStrength > 0.0f && aoDistance > 0.0f); }
204 QSSGRenderImage *lightProbe {
nullptr };
205 struct LightProbeSettings {
206 float probeExposure { 1.0f };
207 float probeHorizon { -1.0f };
208 QMatrix3x3 probeOrientation;
209 QVector3D probeOrientationAngles;
210 } lightProbeSettings;
212 QSSGRenderSkyMaterial *skyMaterial =
nullptr;
214 QSSGRenderImage *skyBoxCubeMap =
nullptr;
216 TAAMode temporalAAMode { TAAMode::Off };
217 float temporalAAStrength;
218 float ssaaMultiplier;
219 bool specularAAEnabled;
225 bool temporalAAIsActive;
226 bool progressiveAAIsActive;
227 uint tempAAPassIndex;
228 uint progAAPassIndex;
230 RenderOverridesT renderOverrides { RenderOverridesT(RenderOverrides::None) };
233 QVarLengthArray<QSSGRenderCamera *, 2> explicitCameras;
235 QVarLengthArray<QSSGRenderCamera *, 2> renderedCameras;
236 QMutex renderedCamerasMutex;
239 TonemapMode tonemapMode;
241 LayerFlags layerFlags { LayerFlag::RenderToTarget,
242 LayerFlag::EnableDepthTest,
243 LayerFlag::EnableDepthPrePass };
246 QRhiShaderResourceBindings *skyBoxSrb =
nullptr;
247 QVarLengthArray<QRhiShaderResourceBindings *, 4> item2DSrbs;
248 bool skyBoxIsRgbe8 =
false;
249 bool skyBoxIsSrgb =
false;
252 float skyboxBlurAmount = 0.0f;
255 bool gridEnabled =
false;
256 float gridScale = 1.0f;
257 quint32 gridFlags = 0;
258 QRhiShaderResourceBindings *gridSrb =
nullptr;
265 bool enabled =
false;
266 QVector3D color = QVector3D(0.5f, 0.6f, 0.7f);
267 float density = 1.0f;
268 bool depthEnabled =
false;
269 float depthBegin = 10.0f;
270 float depthEnd = 1000.0f;
271 float depthCurve = 1.0f;
272 bool heightEnabled =
false;
273 float heightMin = 10.0f;
274 float heightMax = 0.0f;
275 float heightCurve = 1.0f;
276 bool transmitEnabled =
false;
277 float transmitCurve = 1.0f;
280 QVector<QSSGRenderGraphObject *> resourceLoaders;
282 MaterialDebugMode debugMode = MaterialDebugMode::None;
284 bool wireframeMode =
false;
285 bool drawDirectionalLightShadowBoxes =
false;
286 bool drawPointLightShadowBoxes =
false;
287 bool drawShadowCastingBounds =
false;
288 bool drawShadowReceivingBounds =
false;
289 bool drawCascades =
false;
290 bool drawSceneCascadeIntersection =
false;
291 bool disableShadowCameraUpdate =
false;
292 bool drawCulledObjects =
false;
296 QString lightmapSource;
301 void setProbeOrientation(
const QVector3D &angles);
303 void addEffect(QSSGRenderEffect &inEffect);
304 bool hasEffect(QSSGRenderEffect *inEffect)
const;
306 QSSGRenderNode *importSceneNode =
nullptr;
309 void setImportScene(QSSGRenderNode &rootNode);
310 void removeImportScene(QSSGRenderNode &rootNode);
312 [[nodiscard]]
bool isMsaaEnabled()
const {
return antialiasingMode == AAMode::MSAA; }
313 [[nodiscard]]
bool isSsaaEnabled()
const {
return antialiasingMode == AAMode::SSAA; }
315 [[nodiscard]]
bool isProgressiveAAEnabled()
const {
return antialiasingMode == AAMode::ProgressiveAA && temporalAAMode != TAAMode::MotionVector; }
317 [[nodiscard]]
bool isTemporalAAEnabled()
const {
return (temporalAAMode != TAAMode::Off) && !isMsaaEnabled(); }
319 static constexpr float ssaaMultiplierForQuality(QSSGRenderLayer::AAQuality quality)
322 case QSSGRenderLayer::AAQuality::Normal:
324 case QSSGRenderLayer::AAQuality::High:
326 case QSSGRenderLayer::AAQuality::VeryHigh: