Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qssgrenderpass_p.h
Go to the documentation of this file.
1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5
6#ifndef QSSGRENDERPASS_H
7#define QSSGRENDERPASS_H
8
9//
10// W A R N I N G
11// -------------
12//
13// This file is not part of the Qt API. It exists purely as an
14// implementation detail. This header file may change from version to
15// version without notice, or even be removed.
16//
17// We mean it.
18//
19
20#include <QtCore/qglobal.h>
21
22#include <ssg/qssgrenderhelpers.h>
23#include <QtQuick3DUtils/private/qssgaosettings_p.h>
24#include <QtQuick3DRuntimeRender/private/qssgrhicontext_p.h>
25#include <QtQuick3DRuntimeRender/private/qssgrendershadercache_p.h>
26#include <QtQuick3DRuntimeRender/private/qssgrenderableobjects_p.h>
27#include <QtQuick3DRuntimeRender/private/qssgrendermotionvectormap_p.h>
28#include "qssgrenderer_p.h"
29
31
32class QSSGRenderShadowMap;
33class QSSGRenderReflectionMap;
35class QSSGRenderCamera;
36class QSGRenderer;
37class QSSGRenderExtension;
38class QSSGRenderUserPass;
39
40class QRhiTexture;
41
43{
44public:
45 enum class Type
46 {
50 };
51 // Input:
52
53 virtual ~QSSGRenderPass();
54 virtual void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) = 0;
55 virtual void renderPass(QSSGRenderer &renderer) = 0;
56 virtual Type passType() const = 0;
57 virtual void resetForFrame() = 0;
58
59 // Output:
60
61 // Flags: Debug markers(?)
62
63 // Dependency
64};
65
67{
68public:
69 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
70 void renderPass(QSSGRenderer &renderer) final;
71 Type passType() const final { return Type::Standalone; }
72 void resetForFrame() final;
73
75
76 static constexpr int MaxBuckets = 8; // (int(skin) << 2) | (int(instance) << 1) | int(morph);
78 QSSGRenderCamera *camera = nullptr;
80 bool enabled = false;
82};
83
85{
86public:
87 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
88 void renderPass(QSSGRenderer &renderer) final;
89 Type passType() const final { return Type::Standalone; }
90 void resetForFrame() final;
91
92 std::shared_ptr<QSSGRenderShadowMap> shadowMapManager;
95 QSSGRenderCamera *camera = nullptr;
100 bool enabled = false;
101};
102
104{
105public:
106 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
107 void renderPass(QSSGRenderer &renderer) final;
108 Type passType() const final { return Type::Standalone; }
109 void resetForFrame() final;
110
111 std::shared_ptr<QSSGRenderReflectionMap> reflectionMapManager;
115};
116
118{
119public:
120 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
121 void renderPass(QSSGRenderer &renderer) final;
122 Type passType() const final { return Type::Main; }
123 void resetForFrame() final;
124
128 bool active = false;
129};
130
132{
133public:
134 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
135 void renderPass(QSSGRenderer &renderer) final;
136 Type passType() const final { return Type::Standalone; }
137 void resetForFrame() final;
138
140 const QSSGRenderCamera *camera = nullptr;
145};
146
147class Q_QUICK3DRUNTIMERENDER_EXPORT DepthMapPass : public QSSGRenderPass
148{
149public:
150 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
151 void renderPass(QSSGRenderer &renderer) final;
152 Type passType() const final { return Type::Standalone; }
153 void resetForFrame() final;
154 void setMultisamplingEnabled(bool enabled) { m_multisampling = enabled; }
155 bool isMultisamplingEnabled() const { return m_multisampling; }
156
157 QSSGRenderableObjectList sortedOpaqueObjects;
158 QSSGRenderableObjectList sortedTransparentObjects;
159 QSSGRhiGraphicsPipelineState ps;
160 QSSGRhiRenderableTexture *rhiDepthTexture = nullptr;
161 bool m_multisampling = false;
162};
163
164class Q_QUICK3DRUNTIMERENDER_EXPORT NormalPass : public QSSGRenderPass
165{
166public:
167 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
168 void renderPass(QSSGRenderer &renderer) final;
169 Type passType() const final { return Type::Standalone; }
170 void resetForFrame() final;
171
172 QSSGRenderableObjectList sortedOpaqueObjects;
173 QSSGRhiGraphicsPipelineState ps;
174 QSSGRhiRenderableTexture *normalTexture = nullptr;
175 QSSGRhiRenderableTexture *depthBuffer = nullptr;
176};
177
179{
180public:
181 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
182 void renderPass(QSSGRenderer &renderer) final;
183 Type passType() const final { return Type::Main; }
184 void resetForFrame() final;
185
189 bool skipTonemapping = false;
190 bool skipPrep = false;
191};
192
194{
195public:
196 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
197 void renderPass(QSSGRenderer &renderer) final;
198 Type passType() const final { return Type::Main; }
199 void resetForFrame() final;
200
205 bool skipTonemapping = false;
206};
207
209{
210public:
211 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
212 void renderPass(QSSGRenderer &renderer) final;
213 Type passType() const final { return Type::Standalone; }
214 void resetForFrame() final;
215
219 QSSGShaderFeatures shaderFeatures;
223 bool wantsMips = false;
224};
225
227{
228public:
229 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
230 void renderPass(QSSGRenderer &renderer) final;
231 Type passType() const final { return Type::Main; }
232 void resetForFrame() final;
233
237};
238
240{
241public:
242 static void prep(const QSSGRenderContextInterface &ctx,
244 QSSGPassKey passKey,
245 QSSGRhiGraphicsPipelineState &ps,
246 QSSGShaderFeatures shaderFeatures,
247 QRhiRenderPassDescriptor *rpDesc,
248 const QSSGRenderableObjectList &sortedOpaqueObjects);
249
250 static void render(const QSSGRenderContextInterface &ctx,
251 const QSSGRhiGraphicsPipelineState &ps,
252 const QSSGRenderableObjectList &sortedOpaqueObjects);
253
254 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
255 void renderPass(QSSGRenderer &renderer) final;
256 Type passType() const final { return Type::Main; }
257 void resetForFrame() final;
258
261 QSSGShaderFeatures shaderFeatures;
262};
263
264struct QSSGCameraRenderData;
265
267{
268public:
269 static void prep(const QSSGRenderContextInterface &ctx,
271 QSSGPassKey passKey,
272 QSSGRhiGraphicsPipelineState &ps,
273 QSSGShaderFeatures shaderFeatures,
274 QRhiRenderPassDescriptor *rpDesc,
275 const QSSGRenderableObjectList &sortedTransparentObjects,
276 bool oit = false);
277
278 static void render(const QSSGRenderContextInterface &ctx,
279 const QSSGRhiGraphicsPipelineState &ps,
280 const QSSGRenderableObjectList &sortedTransparentObjects);
281
282
283 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
284 void renderPass(QSSGRenderer &renderer) final;
285 Type passType() const final { return Type::Main; }
286 void resetForFrame() final;
287
290 QSSGShaderFeatures shaderFeatures;
291};
292
294{
295public:
296 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
297 void renderPass(QSSGRenderer &renderer) final;
298 Type passType() const final { return Type::Main; }
299 void resetForFrame() final;
300
301protected:
303};
304
306{
307public:
308 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
309 void renderPass(QSSGRenderer &renderer) final;
310 Type passType() const final { return Type::Main; }
311 void resetForFrame() final;
312
316};
317
319{
320public:
321 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
322 void renderPass(QSSGRenderer &renderer) final;
323 Type passType() const final { return Type::Main; }
324 void resetForFrame() final;
325
328};
329
331{
332public:
333 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
334 void renderPass(QSSGRenderer &renderer) final;
335 Type passType() const final { return Type::Extension; }
336 void resetForFrame() final;
337
338 bool hasData() const { return extensions.size() != 0; }
339
341};
342
344{
345public:
346 void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final;
347 void renderPass(QSSGRenderer &renderer) final;
348 Type passType() const final { return Type::Standalone; }
349 void resetForFrame() final;
350
351 bool hasData() const { return (userPasses.size() != 0); }
352
354
355protected:
371
372 void prepareTopLevelPass(QSSGRenderer &renderer, QSSGLayerRenderData &data, QSSGRenderUserPass *passNode)
373 {
374 visitedPasses.clear(); // clear visited passes for each top-level pass
375 preparePassImpl(renderer, data, passNode, userPassData, {/* null */});
376 }
377
378 void prepareSubPass(QSSGRenderer &renderer,
380 QSSGRenderUserPass *subPassNode,
381 std::vector<UserPassData> &subPassData,
382 const QSSGRhiRenderableTextureV2Ptr &renderableTexture)
383 {
384 Q_ASSERT(renderableTexture != nullptr);
385 preparePassImpl(renderer, data, subPassNode, subPassData, renderableTexture);
386 }
387
388 void preparePassImpl(QSSGRenderer &renderer,
390 QSSGRenderUserPass *passNode,
391 std::vector<UserPassData> &outData,
392 QSSGRhiRenderableTextureV2Ptr renderableTexture);
394 std::set<QSSGResourceId> visitedPasses; // For circular dependency detection
395 static constexpr size_t MAX_SUBPASS_DEPTH = 16;
396};
397
435
460
461QT_END_NAMESPACE
462
463#endif // QSSGRENDERPASS_H
QSSGRhiShaderPipelinePtr debugObjectShader
QSSGRhiGraphicsPipelineState ps
Type passType() const final
void resetForFrame() final
QSSGRhiGraphicsPipelineState ps
QSSGRenderLayer * layer
QSSGRhiShaderPipelinePtr gridShader
void resetForFrame() final
Type passType() const final
Type passType() const final
std::vector< QSGRenderer * > prepdItem2DRenderers
void resetForFrame() final
static constexpr int MaxBuckets
QSSGRhiGraphicsPipelineState ps
QSSGRenderMotionVectorMapPtr motionVectorMapManager
QSSGRenderableObjectList motionVectorPassObjects[MaxBuckets]
Type passType() const final
QSSGRhiRenderableTexture * rhiMotionVectorTexture
QSSGRenderCamera * camera
QSSGShaderFeatures shaderFeatures
QSSGRhiRenderableTexture * rhiABufferImage
QSSGRhiRenderableTexture * rhiAccumTexture
QRhiShaderResourceBindings * compositeSrb
QSSGRhiShaderPipelinePtr compositeShaderPipeline
QRhiBuffer * rhiAuxBuffer
QSSGRhiRenderableTexture * rhiAuxiliaryImage
QSSGRenderLayer::OITMethod method
QRhiBuffer * rhiABuffer
void resetForFrame() final
Type passType() const final
QSSGRhiRenderableTexture * rhiRevealageTexture
QSSGRhiGraphicsPipelineState ps
void setMethod(QSSGRenderLayer::OITMethod m)
QSSGRhiRenderableTexture * rhiRevealageTexture
QRhiResourceUpdateBatch * rub
void setMethod(QSSGRenderLayer::OITMethod m)
QSSGRhiRenderableTexture * rhiABufferImage
QList< QRhiReadbackResult * > results
QRhiBuffer * rhiABuffer
quint32 reportedNodeCount
QSSGShaderFeatures shaderFeatures
QSSGRenderLayer::OITMethod method
QRhiShaderResourceBindings * clearSrb
QSSGRenderableObjectList sortedTransparentObjects
QSSGRhiRenderableTexture * rhiAuxiliaryImage
QSSGRhiRenderableTexture * rhiCounterImage
QRhiTextureRenderTarget * renderTarget
QRhiBuffer * rhiAuxBuffer
void resetForFrame() final
QSSGRhiShaderPipelinePtr clearPipeline
QSSGRhiRenderableTexture * rhiDepthTexture
QSSGRhiGraphicsPipelineState ps
QRhiTexture * readbackImage
Type passType() const final
QRhiBuffer * rhiCounterBuffer
QSSGRhiRenderableTexture * rhiAccumTexture
static void prep(const QSSGRenderContextInterface &ctx, QSSGLayerRenderData &data, QSSGPassKey passKey, QSSGRhiGraphicsPipelineState &ps, QSSGShaderFeatures shaderFeatures, QRhiRenderPassDescriptor *rpDesc, const QSSGRenderableObjectList &sortedOpaqueObjects)
void resetForFrame() final
Type passType() const final
QSSGShaderFeatures shaderFeatures
QSSGRhiGraphicsPipelineState ps
static void render(const QSSGRenderContextInterface &ctx, const QSSGRhiGraphicsPipelineState &ps, const QSSGRenderableObjectList &sortedOpaqueObjects)
QSSGRenderableObjectList sortedOpaqueObjects
QSSGLayerRenderPreparationResult(const QRectF &inViewport, QSSGRenderLayer &inLayer)
const QSSGLayerRenderPreparationResultFlags & getFlags() const
virtual ~QSSGRenderPass()
virtual void resetForFrame()=0
virtual Type passType() const =0
friend class QSSGRenderContextInterface
void resetForFrame() final
std::shared_ptr< QSSGRenderReflectionMap > reflectionMapManager
QSSGRenderableObjectList reflectionPassObjects
QSSGRhiGraphicsPipelineState ps
QList< QSSGRenderReflectionProbe * > reflectionProbes
Type passType() const final
Type passType() const final
QSSGRhiRenderableTexture * rhiAoTexture
const QSSGRhiRenderableTexture * rhiDepthTexture
void resetForFrame() final
QSSGRhiShaderPipelinePtr ssaoShaderPipeline
QSSGAmbientOcclusionSettings aoSettings
const QSSGRenderCamera * camera
QSSGRhiGraphicsPipelineState ps
void resetForFrame() final
QSSGRhiGraphicsPipelineState ps
Type passType() const final
std::optional< SkyboxPass > skyboxPass
QSSGShaderFeatures shaderFeatures
QSSGRenderableObjectList sortedOpaqueObjects
std::optional< SkyboxCubeMapPass > skyboxCubeMapPass
QSSGRhiRenderableTexture * rhiScreenTexture
QSSGRenderableObjectList sortedScreenTextureObjects
const QSSGRhiRenderableTexture * rhiScreenTexture
QSSGRhiGraphicsPipelineState ps
Type passType() const final
QSSGRenderCamera * camera
QSSGBounds3 castingObjectsBox
QSSGShaderLightList globalLights
QSSGRenderableObjectList shadowPassObjects
QSSGRhiGraphicsPipelineState ps
QSSGBounds3 receivingObjectsBox
void resetForFrame() final
std::unique_ptr< QSSGRenderCamera > debugCamera
Type passType() const final
std::shared_ptr< QSSGRenderShadowMap > shadowMapManager
QRhiRenderPassDescriptor * rpDesc
QSSGRenderLayer * layer
QSSGRhiShaderPipelinePtr skyBoxCubeShader
QSSGRhiGraphicsPipelineState ps
void resetForFrame() final
Type passType() const final
void resetForFrame() final
QRhiRenderPassDescriptor * rpDesc
Type passType() const final
QSSGRenderLayer * layer
QSSGRhiGraphicsPipelineState ps
static void prep(const QSSGRenderContextInterface &ctx, QSSGLayerRenderData &data, QSSGPassKey passKey, QSSGRhiGraphicsPipelineState &ps, QSSGShaderFeatures shaderFeatures, QRhiRenderPassDescriptor *rpDesc, const QSSGRenderableObjectList &sortedTransparentObjects, bool oit=false)
QSSGRenderableObjectList sortedTransparentObjects
static void render(const QSSGRenderContextInterface &ctx, const QSSGRhiGraphicsPipelineState &ps, const QSSGRenderableObjectList &sortedTransparentObjects)
QSSGShaderFeatures shaderFeatures
QSSGRhiGraphicsPipelineState ps
void resetForFrame() final
Type passType() const final
Type passType() const final
QList< QSSGRenderExtension * > extensions
void resetForFrame() final
bool hasData() const
void resetForFrame() final
static constexpr size_t MAX_SUBPASS_DEPTH
QList< QSSGRenderUserPass * > userPasses
std::vector< UserPassData > userPassData
Type passType() const final
std::set< QSSGResourceId > visitedPasses
void resetForFrame() final
QSSGRenderableObjectList renderedOpaqueDepthPrepassObjects
Type passType() const final
QSSGRhiGraphicsPipelineState ps
QSSGRenderableObjectList renderedDepthWriteObjects
QSSGRenderResult::Key toInternalRenderResultKey(QSSGFrameData::RenderResult id)
Combined button and popup list for selecting options.
QSSGLayerRenderPreparationResultFlag
static const char * effect_fragment_main_with_tonemapping
static const char * effect_vertex_main_post
static const char * effect_vertex_main_pre
static const char * effect_vertex_main_position
static const char * effect_fragment_main
QVector< QSSGRenderableObjectHandle > renderables
QSSGBakedLightingModel(const QSSGRenderModel *model, const QVector< QSSGRenderableObjectHandle > &renderables)
const QSSGRenderModel * model
QSSGDefaultMaterialPreparationResult(QSSGShaderDefaultMaterialKey inMaterialKey)
QSSGShaderDefaultMaterialKey materialKey
QRhiTextureRenderTarget * oitRenderTarget
QRhiRenderPassDescriptor * renderPassDescriptor
QSSGRhiRenderableTextureV2Ptr renderableTexture
std::optional< SkyboxCubeMapPass > skyboxCubeMapPass
std::vector< UserPassData > subPassData
QSSGRhiGraphicsPipelineState ps
QSSGShaderDefineList shaderDefines
QRhiDepthStencilClearValue depthStencilClearValue
QSSGRenderableObjectList renderables
std::optional< SkyboxPass > skyboxPass
std::optional< Item2DPass > item2DPass