44 enum class AAMode : quint8
52 enum class TAAMode : quint8
58 enum class AAQuality : quint8
65 enum class HorizontalField : quint8
72 enum class VerticalField : quint8
79 enum class UnitType : quint8
85 enum class Background : quint8
94 enum class TonemapMode : quint8
103 static size_t
constexpr TonemapModeCount = 6;
107 EnableDepthTest = 0x1,
108 EnableDepthPrePass = 0x2,
111 Q_DECLARE_FLAGS(LayerFlags, LayerFlag)
113 enum class MaterialDebugMode : quint8
130 enum class OITMethod : quint8
136 enum class DirtyFlag : quint8
140 using FlagT = std::underlying_type_t<DirtyFlag>;
142 static constexpr DirtyFlag DirtyMask { std::numeric_limits<FlagT>::max() };
144 [[nodiscard]]
bool isDirty(DirtyFlag dirtyFlag = DirtyMask)
const
146 return ((m_layerDirtyFlags & FlagT(dirtyFlag)) != 0)
147 || ((dirtyFlag == DirtyMask) && QSSGRenderNode::isDirty());
149 void markDirty(DirtyFlag dirtyFlag);
150 void clearDirty(DirtyFlag dirtyFlag);
152 void ref(QSSGRenderRoot *inRootNode)
154 rootNode = inRootNode;
155 rootNodeRef = &rootNode;
158 QSSGRenderRoot *rootNode =
nullptr;
160 QSSGRenderLayerHandle lh;
163 QSSGRenderEffect *firstEffect;
164 QSSGLayerRenderData *renderData =
nullptr;
165 enum class RenderExtensionStage { TextureProviders, Underlay, Overlay, Count };
166 QList<QSSGRenderExtension *> renderExtensions[size_t(RenderExtensionStage::Count)];
168 QSSGRenderLayer::AAMode antialiasingMode;
169 QSSGRenderLayer::AAQuality antialiasingQuality;
171 QSSGRenderLayer::Background background;
172 QVector3D clearColor;
174 FlagT m_layerDirtyFlags = FlagT(DirtyFlag::TreeDirty);
175 quint8 viewCount = 1;
178 float aoStrength = 0.0f;
179 float aoDistance = 5.0f;
180 float aoSoftness = 50.0f;
182 qint32 aoSamplerate = 2;
183 bool aoDither =
false;
184 bool aoEnabled =
false;
186 constexpr bool ssaoEnabled()
const {
return aoEnabled && (aoStrength > 0.0f && aoDistance > 0.0f); }
189 QSSGRenderImage *lightProbe {
nullptr };
190 struct LightProbeSettings {
191 float probeExposure { 1.0f };
192 float probeHorizon { -1.0f };
193 QMatrix3x3 probeOrientation;
194 QVector3D probeOrientationAngles;
195 } lightProbeSettings;
197 QSSGRenderImage *skyBoxCubeMap =
nullptr;
199 TAAMode temporalAAMode { TAAMode::Off };
200 float temporalAAStrength;
201 float ssaaMultiplier;
202 bool specularAAEnabled;
207 bool temporalAAIsActive;
208 bool progressiveAAIsActive;
209 uint tempAAPassIndex;
210 uint progAAPassIndex;
213 QVarLengthArray<QSSGRenderCamera *, 2> explicitCameras;
215 QVarLengthArray<QSSGRenderCamera *, 2> renderedCameras;
216 QMutex renderedCamerasMutex;
219 TonemapMode tonemapMode;
221 LayerFlags layerFlags { LayerFlag::RenderToTarget,
222 LayerFlag::EnableDepthTest,
223 LayerFlag::EnableDepthPrePass };
226 QRhiShaderResourceBindings *skyBoxSrb =
nullptr;
227 QVarLengthArray<QRhiShaderResourceBindings *, 4> item2DSrbs;
228 bool skyBoxIsRgbe8 =
false;
229 bool skyBoxIsSrgb =
false;
232 float skyboxBlurAmount = 0.0f;
235 bool gridEnabled =
false;
236 float gridScale = 1.0f;
237 quint32 gridFlags = 0;
238 QRhiShaderResourceBindings *gridSrb =
nullptr;
245 bool enabled =
false;
246 QVector3D color = QVector3D(0.5f, 0.6f, 0.7f);
247 float density = 1.0f;
248 bool depthEnabled =
false;
249 float depthBegin = 10.0f;
250 float depthEnd = 1000.0f;
251 float depthCurve = 1.0f;
252 bool heightEnabled =
false;
253 float heightMin = 10.0f;
254 float heightMax = 0.0f;
255 float heightCurve = 1.0f;
256 bool transmitEnabled =
false;
257 float transmitCurve = 1.0f;
260 QVector<QSSGRenderGraphObject *> resourceLoaders;
262 MaterialDebugMode debugMode = MaterialDebugMode::None;
264 bool wireframeMode =
false;
265 bool drawDirectionalLightShadowBoxes =
false;
266 bool drawPointLightShadowBoxes =
false;
267 bool drawShadowCastingBounds =
false;
268 bool drawShadowReceivingBounds =
false;
269 bool drawCascades =
false;
270 bool drawSceneCascadeIntersection =
false;
271 bool disableShadowCameraUpdate =
false;
272 bool drawCulledObjects =
false;
276 QString lightmapSource;
281 void setProbeOrientation(
const QVector3D &angles);
283 void addEffect(QSSGRenderEffect &inEffect);
284 bool hasEffect(QSSGRenderEffect *inEffect)
const;
286 QSSGRenderNode *importSceneNode =
nullptr;
289 void setImportScene(QSSGRenderNode &rootNode);
290 void removeImportScene(QSSGRenderNode &rootNode);
292 [[nodiscard]]
bool isMsaaEnabled()
const {
return antialiasingMode == AAMode::MSAA; }
293 [[nodiscard]]
bool isSsaaEnabled()
const {
return antialiasingMode == AAMode::SSAA; }
294 [[nodiscard]]
bool isProgressiveAAEnabled()
const {
return antialiasingMode == AAMode::ProgressiveAA; }
296 [[nodiscard]]
bool isTemporalAAEnabled()
const {
return (temporalAAMode == TAAMode::On) && !isMsaaEnabled(); }
298 static constexpr float ssaaMultiplierForQuality(QSSGRenderLayer::AAQuality quality)
301 case QSSGRenderLayer::AAQuality::Normal:
303 case QSSGRenderLayer::AAQuality::High:
305 case QSSGRenderLayer::AAQuality::VeryHigh:
friend class QSSGLayerRenderData
friend class QSSGRenderer