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
qssgrenderableobjects_p.h
Go to the documentation of this file.
1// Copyright (C) 2008-2012 NVIDIA Corporation.
2// Copyright (C) 2019 The Qt Company Ltd.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
4
5#ifndef QSSG_RENDER_IMPL_RENDERABLE_OBJECTS_H
6#define QSSG_RENDER_IMPL_RENDERABLE_OBJECTS_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtQuick3DRuntimeRender/private/qssgrendermodel_p.h>
20#include <QtQuick3DRuntimeRender/private/qssgrenderdefaultmaterial_p.h>
21#include <QtQuick3DRuntimeRender/private/qssgrendercustommaterial_p.h>
22#include <QtQuick3DRuntimeRender/private/qssgrenderparticles_p.h>
23#include <QtQuick3DRuntimeRender/private/qssgrendermesh_p.h>
24#include <QtQuick3DRuntimeRender/private/qssgrendershaderkeys_p.h>
25#include <QtQuick3DRuntimeRender/private/qssgrendershadercache_p.h>
26#include <QtQuick3DRuntimeRender/private/qssgrenderableimage_p.h>
27#include <QtQuick3DRuntimeRender/private/qssgrenderlight_p.h>
28#include <QtQuick3DRuntimeRender/private/qssgrenderreflectionprobe_p.h>
29#include <QtQuick3DRuntimeRender/private/qssgrenderclippingfrustum_p.h>
30
31#include <QtQuick3DUtils/private/qssginvasivelinkedlist_p.h>
32
34
35class QSSGRenderer;
37struct QSSGRenderItem2D;
38
40{
43 Dirty = 1 << 2,
44 CastsShadows = 1 << 3,
55 // The number of target models' attributes are too many
56 // to store in a renderable flag.
57 // They will be recorded in shaderKey.
66};
67
69{
70 void setHasTransparency(bool inHasTransparency)
71 {
72 setFlag(QSSGRenderableObjectFlag::HasTransparency, inHasTransparency);
73 }
74 bool hasTransparency() const { return this->operator&(QSSGRenderableObjectFlag::HasTransparency); }
75 void setCompletelyTransparent(bool inTransparent)
76 {
78 }
80 {
82 }
83 void setDirty(bool inDirty) { setFlag(QSSGRenderableObjectFlag::Dirty, inDirty); }
84 bool isDirty() const { return this->operator&(QSSGRenderableObjectFlag::Dirty); }
85
86 void setCastsShadows(bool inCastsShadows) { setFlag(QSSGRenderableObjectFlag::CastsShadows, inCastsShadows); }
87 bool castsShadows() const { return this->operator&(QSSGRenderableObjectFlag::CastsShadows); }
88
89 void setReceivesShadows(bool inReceivesShadows) { setFlag(QSSGRenderableObjectFlag::ReceivesShadows, inReceivesShadows); }
90 bool receivesShadows() const { return this->operator&(QSSGRenderableObjectFlag::ReceivesShadows); }
91
92 void setReceivesReflections(bool inReceivesReflections) { setFlag(QSSGRenderableObjectFlag::ReceivesReflections, inReceivesReflections); }
94
95 void setCastsReflections(bool inCastsReflections) { setFlag(QSSGRenderableObjectFlag::CastsReflections, inCastsReflections); }
96 bool castsReflections() const { return this->operator&(QSSGRenderableObjectFlag::CastsReflections); }
97
98 void setUsedInBakedLighting(bool inUsedInBakedLighting) { setFlag(QSSGRenderableObjectFlag::UsedInBakedLighting, inUsedInBakedLighting); }
100
101 void setRendersWithLightmap(bool inRendersWithLightmap) { setFlag(QSSGRenderableObjectFlag::RendersWithLightmap, inRendersWithLightmap); }
103
106
108 bool hasAttributeNormal() const { return this->operator&(QSSGRenderableObjectFlag::HasAttributeNormal); }
109
112
115
118
121
124
126 bool hasAttributeColor() const { return this->operator&(QSSGRenderableObjectFlag::HasAttributeColor); }
127
131
135
136 void setPointsTopology(bool v)
137 {
139 }
140 bool isPointsTopology() const
141 {
142 return this->operator&(QSSGRenderableObjectFlag::IsPointsTopology);
143 }
150 }
151
158 }
159};
160
162{
164 bool shadows = false;
166
167 inline bool operator < (const QSSGShaderLight &o) const
168 {
169 // sort by light type
170 if (light->type < o.light->type)
171 return true;
172 // then shadow lights first
173 if (shadows > o.shadows)
174 return true;
175 return false;
176 }
177};
178
187
188// Having this as a QVLA is beneficial mainly because QVector would need to
189// detach somewhere in QSSGLayerRenderPreparationData::prepareForRender so the
190// implicit sharing's benefits do not outweigh the cost of allocations in this case.
192using QSSGShaderLightListView = QSSGDataView<QSSGShaderLight>;
193
195{
204
205 QSSGRenderNode *node = nullptr;
208
209 // FIXME: This is just for the extension API and
210 // should be removed in the future.
217
218 bool isNull() const { return (node == nullptr); }
220 QSSGRenderableNodeEntry(QSSGRenderNode &inNode) : node(&inNode) {}
221 QSSGRenderableNodeEntry(QSSGRenderNode *inNode) : node(inNode) {}
222};
223
224// Used for sorting
226{
229 : obj(o)
230 , cameraDistanceSq(camDistSq)
231 {}
233 float cameraDistanceSq = 0.0f;
234};
236
237using QSSGRenderableObjectList = QVector<QSSGRenderableObjectHandle>;
238
240{
242public:
249
250 // Variables used for picking
253
254 // Used for shadow map bounds when model has instancing
256
258 // For rough sorting for transparency and for depth
260 float depthBiasSq; // Squared as our sorting is based on the square distance!
261 float camdistSq = 0.0f;
263 const Type type;
266
269 const QVector3D &inWorldCenterPt,
270 const QSSGBounds3 &inBounds,
271 float inDepthBias,
272 float inMinThreshold = -1,
273 float inMaxThreshold = -1)
274
277 , renderableFlags(inFlags)
279 , depthBiasSq(inDepthBias)
280 , type(ty)
281 , instancingLodMin(inMinThreshold)
282 , instancingLodMax(inMaxThreshold)
283 {
284 }
285};
286
287Q_STATIC_ASSERT(std::is_trivially_destructible<QSSGRenderableObject>::value);
288
296
297using QSSGRenderCameraList = QVarLengthArray<QSSGRenderCamera *, 2>;
298using QSSGRenderCameraDataList = QVarLengthArray<QSSGRenderCameraData, 2>;
299using QSSGRenderMvpArray = std::array<QMatrix4x4, 2>; // cannot be dynamic due to QSSGModelContext, must stick with 2 for now
300
301class QSSGSubsetRenderable;
302
303// Different subsets from the same model will get the same
304// model context so we can generate the MVP and normal matrix once
305// and only once per subset.
306class Q_AUTOTEST_EXPORT QSSGModelContext
307{
308 Q_DISABLE_COPY_MOVE(QSSGModelContext)
309public:
310 QSSGModelContext(const QSSGRenderModel &inModel,
311 const QMatrix4x4 &globalTransform,
312 const QMatrix3x3 &inNormalMatrix,
313 const QSSGRenderMvpArray &inModelViewProjections);
314
320};
321
322Q_STATIC_ASSERT(std::is_trivially_destructible<QSSGModelContext>::value);
323
324class QSSGRenderer;
326struct QSSGShadowMapEntry;
327
328class Q_AUTOTEST_EXPORT QSSGSubsetRenderable : public QSSGRenderableObject
329{
330 Q_DISABLE_COPY_MOVE(QSSGSubsetRenderable)
331public:
332 int reflectionProbeIndex = -1;
333 float distanceFromReflectionProbe;
334 quint32 subsetLevelOfDetail = 0;
335 QSSGShaderReflectionProbe reflectionProbe;
336 QSSGRenderer *renderer = nullptr;
337 const QSSGModelContext &modelContext;
338 const QSSGRenderSubset &subset;
339 QRhiBuffer *instanceBuffer = nullptr;
340 float opacity;
341 const QSSGRenderGraphObject &material;
342 QSSGRenderableImage *firstImage;
343 QSSGShaderDefaultMaterialKey shaderDescription;
344 const QSSGShaderLightListView &lights;
345
346 struct {
347 // Transient (due to the subsetRenderable being allocated using a
348 // per-frame allocator on every frame), not owned refs from the
349 // rhi-prepare step, used by the rhi-render step.
350 struct {
351 QRhiGraphicsPipeline *pipeline = nullptr;
352 QRhiShaderResourceBindings *srb = nullptr;
353 } mainPass;
354 struct {
355 QRhiGraphicsPipeline *pipeline = nullptr;
356 QRhiShaderResourceBindings *srb = nullptr;
357 } depthPrePass;
358 struct {
359 QRhiGraphicsPipeline *pipeline = nullptr;
360 QRhiShaderResourceBindings *srb[6] = {};
361 } shadowPass;
362 struct {
363 QRhiGraphicsPipeline *pipeline = nullptr;
364 QRhiShaderResourceBindings *srb[6] = {};
365 } reflectionPass;
366 struct {
367 QRhiGraphicsPipeline *pipeline = nullptr;
368 QRhiShaderResourceBindings *srb = nullptr;
369 } normalPass;
370 } rhiRenderData;
371
372 QSSGSubsetRenderable(Type type,
373 QSSGRenderableObjectFlags inFlags,
374 const QVector3D &inWorldCenterPt,
375 QSSGRenderer *rendr,
376 const QSSGRenderSubset &inSubset,
377 const QSSGModelContext &inModelContext,
378 float inOpacity,
379 quint32 inSubsetLevelOfDetail,
380 const QSSGRenderGraphObject &mat,
381 QSSGRenderableImage *inFirstImage,
382 QSSGShaderDefaultMaterialKey inShaderKey,
383 const QSSGShaderLightListView &inLights,
384 bool anyLightHasShadows);
385
386 [[nodiscard]] const QSSGRenderGraphObject &getMaterial() const { return material; }
387};
388
389Q_STATIC_ASSERT(std::is_trivially_destructible<QSSGSubsetRenderable>::value);
390
391/**
392 * A renderable that corresponds to a particles.
393 */
394class Q_AUTOTEST_EXPORT QSSGParticlesRenderable : public QSSGRenderableObject
395{
396 Q_DISABLE_COPY_MOVE(QSSGParticlesRenderable)
397public:
398 QSSGRenderer *renderer = nullptr;
399 const QSSGRenderParticles &particles;
400 QSSGRenderableImage *firstImage;
401 QSSGRenderableImage *colorTable;
402 const QSSGShaderLightListView &lights;
403 QMatrix4x4 globalTransform;
404 float opacity;
405
406 struct {
407 // Transient (due to the subsetRenderable being allocated using a
408 // per-frame allocator on every frame), not owned refs from the
409 // rhi-prepare step, used by the rhi-render step.
410 struct {
411 QRhiGraphicsPipeline *pipeline = nullptr;
412 QRhiShaderResourceBindings *srb = nullptr;
413 } mainPass;
414 struct {
415 QRhiGraphicsPipeline *pipeline = nullptr;
416 QRhiShaderResourceBindings *srb = nullptr;
417 } depthPrePass;
418 struct {
419 QRhiGraphicsPipeline *pipeline = nullptr;
420 QRhiShaderResourceBindings *srb[6] = {};
421 } shadowPass;
422 struct {
423 QRhiGraphicsPipeline *pipeline = nullptr;
424 QRhiShaderResourceBindings *srb[6] = {};
425 } reflectionPass;
426 } rhiRenderData;
427
428 QSSGParticlesRenderable(QSSGRenderableObjectFlags inFlags,
429 const QVector3D &inWorldCenterPt,
430 QSSGRenderer *rendr,
431 const QMatrix4x4 &inGlobalTransform,
432 const QSSGRenderParticles &inParticles,
433 QSSGRenderableImage *inFirstImage,
434 QSSGRenderableImage *inColorTable,
435 const QSSGShaderLightListView &inLights,
436 float inOpacity);
437};
438
439Q_STATIC_ASSERT(std::is_trivially_destructible<QSSGParticlesRenderable>::value);
440
441
442using QSSGModelsView = QSSGDataView<QSSGRenderModel *>;
443using QSSGParticlesView = QSSGDataView<QSSGRenderParticles *>;
444using QSSGItem2DsView = QSSGDataView<QSSGRenderItem2D *>;
445using QSSGCamerasView = QSSGDataView<QSSGRenderCamera *>;
446using QSSGLightsView = QSSGDataView<QSSGRenderLight *>;
447using QSSGReflectionProbesView = QSSGDataView<QSSGRenderReflectionProbe *>;
448
449QT_END_NAMESPACE
450
451#endif
QSSGRhiShaderPipelinePtr debugObjectShader
QSSGRhiGraphicsPipelineState ps
void renderPass(QSSGRenderer &renderer) final
Type passType() const final
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void resetForFrame() final
void renderPass(QSSGRenderer &renderer) final
QSSGRhiGraphicsPipelineState ps
QSSGRenderLayer * layer
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
QSSGRhiShaderPipelinePtr gridShader
void resetForFrame() final
Type passType() const final
Type passType() const final
std::vector< QSGRenderer * > prepdItem2DRenderers
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void renderPass(QSSGRenderer &renderer) final
void resetForFrame() final
QSSGShaderFeatures shaderFeatures
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
QSSGRhiRenderableTexture * rhiAccumTexture
QRhiShaderResourceBindings * compositeSrb
QSSGRhiShaderPipelinePtr compositeShaderPipeline
QSSGRenderLayer::OITMethod method
void resetForFrame() final
Type passType() const final
QSSGRhiRenderableTexture * rhiRevealageTexture
void renderPass(QSSGRenderer &renderer) final
QSSGRhiGraphicsPipelineState ps
void setMethod(QSSGRenderLayer::OITMethod m)
QSSGRhiRenderableTexture * rhiRevealageTexture
void setMethod(QSSGRenderLayer::OITMethod m)
QSSGShaderFeatures shaderFeatures
QSSGRenderLayer::OITMethod method
QRhiShaderResourceBindings * clearSrb
QSSGRenderableObjectList sortedTransparentObjects
QRhiTextureRenderTarget * renderTarget
void resetForFrame() final
QSSGRhiShaderPipelinePtr clearPipeline
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
QSSGRhiRenderableTexture * rhiDepthTexture
QSSGRhiGraphicsPipelineState ps
Type passType() const final
void renderPass(QSSGRenderer &renderer) final
QSSGRhiRenderableTexture * rhiAccumTexture
static void prep(const QSSGRenderContextInterface &ctx, QSSGLayerRenderData &data, QSSGPassKey passKey, QSSGRhiGraphicsPipelineState &ps, QSSGShaderFeatures shaderFeatures, QRhiRenderPassDescriptor *rpDesc, const QSSGRenderableObjectList &sortedOpaqueObjects)
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void resetForFrame() final
Type passType() const final
void renderPass(QSSGRenderer &renderer) final
QSSGShaderFeatures shaderFeatures
QSSGRhiGraphicsPipelineState ps
static void render(const QSSGRenderContextInterface &ctx, const QSSGRhiGraphicsPipelineState &ps, const QSSGRenderableObjectList &sortedOpaqueObjects)
QSSGRenderableObjectList sortedOpaqueObjects
QRect viewport() const
Returns the viewport rectangle.
InstanceTransforms getInstanceTransforms(QSSGRenderNodeHandle h) const
float getGlobalOpacity(const QSSGRenderNode &node) const
LayerNodeView getLayerNodeView(const QSSGRenderLayer &layer) const
float getGlobalOpacity(QSSGRenderNodeHandle h, float defaultValue=1.0f) const
InstanceTransformStore instanceTransforms
GlobalOpacityStore globalOpacities
QMatrix4x4 getGlobalTransform(QSSGRenderNodeHandle h) const
QMatrix4x4 getGlobalTransform(const QSSGRenderNode &node) const
LayerNodeView getLayerNodeView(QSSGRenderLayerHandle h) const
QMatrix4x4 getGlobalTransform(QSSGRenderNodeHandle h, QMatrix4x4 defaultValue) const
InstanceTransforms getInstanceTransforms(const QSSGRenderNode &node) const
void reindex(QSSGRenderRoot *rootNode)
GlobalTransformStore globalTransforms
LayerNodeViewStore layerNodes
QSSGLayerRenderPreparationResult(const QRectF &inViewport, QSSGRenderLayer &inLayer)
const QSSGLayerRenderPreparationResultFlags & getFlags() const
QSSGRenderMvpArray modelViewProjections
const QMatrix4x4 globalTransform
const QMatrix3x3 normalMatrix
QSSGDataRef< QSSGSubsetRenderable > subsets
static bool calcGlobalNodeData(QSSGRenderNode *node, const quint32 version, QSSGGlobalRenderNodeData::GlobalTransformStore &globalTransforms, QSSGGlobalRenderNodeData::GlobalOpacityStore &globalOpacities)
calcGlobalNodeData
static bool calcInstanceTransforms(QSSGRenderNode *node, const quint32 version, QSSGGlobalRenderNodeData::GlobalTransformStore &globalTransforms, QSSGGlobalRenderNodeData::InstanceTransformStore &instanceTransforms)
calcInstanceTransforms
static GlobalStateResult updateGlobalNodeState(QSSGRenderNode *node, const quint32 version)
updateGlobalNodeState
const std::unique_ptr< QRhiRenderPassDescriptor > & getItem2DRenderPassDescriptor() const
void releaseRenderData(const QSSGRenderItem2D &item)
void updateItem2DData(QSSGItem2DsView &items, QSSGRenderer *renderer, const QSSGRenderCameraDataList &renderCameraData)
Item2DRenderer getItem2DRenderer(const QSSGRenderItem2D &item) const
ModelViewProjections getModelViewProjection(QSSGRenderItem2DHandle h) const
const QSSGGlobalRenderNodeDataPtr & globalNodeData() const
ModelViewProjections getModelViewProjection(const QSSGRenderItem2D &item) const
void updateModelData(QSSGModelsView &models, QSSGRenderer *renderer, const QSSGRenderCameraDataList &renderCameraData)
QMatrix3x3 getNormalMatrix(QSSGRenderModelHandle h, QMatrix3x3 defaultValue) const
QMatrix3x3 getNormalMatrix(const QSSGRenderModel &model) const
QSSGRenderMesh * getMesh(QSSGRenderModelHandle h) const
const QSSGGlobalRenderNodeDataPtr & globalNodeData() const
MaterialList getMaterials(QSSGRenderModelHandle h) const
ModelViewProjections getModelViewProjection(QSSGRenderModelHandle h) const
QSSGRenderMesh * getMesh(const QSSGRenderModel &model) const
ModelViewProjections getModelViewProjection(const QSSGRenderModel &model) const
MaterialList getMaterials(const QSSGRenderModel &model) const
virtual ~QSSGRenderPass()
virtual void resetForFrame()=0
virtual Type passType() const =0
virtual void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data)=0
virtual void renderPass(QSSGRenderer &renderer)=0
QSSGRenderableObjectFlags renderableFlags
QSSGRenderableObject(Type ty, QSSGRenderableObjectFlags inFlags, const QVector3D &inWorldCenterPt, const QSSGBounds3 &inBounds, float inDepthBias, float inMinThreshold=-1, float inMaxThreshold=-1)
void releaseItem2DData(const QSSGRenderItem2D &item2D)
const std::unique_ptr< QSSGRhiQuadRenderer > & rhiQuadRenderer() const
quint32 frameDepth() const
float dpr() const
friend class QSSGRenderContextInterface
QRect scissorRect() const
void cleanupResources(QSet< QSSGRenderGraphObject * > &resources)
void setViewport(QRect inViewport)
void beginSubLayerRender(QSSGLayerRenderData &inLayer)
const std::unique_ptr< QSSGRhiCubeRenderer > & rhiCubeRenderer() const
void setDpr(float dpr)
void setScissorRect(QRect inScissorRect)
void endSubLayerRender(QSSGLayerRenderData &inLayer)
QSSGRenderContextInterface * contextInterface() const
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void renderPass(QSSGRenderer &renderer) final
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 renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void resetForFrame() final
QSSGRhiShaderPipelinePtr ssaoShaderPipeline
QSSGAmbientOcclusionSettings aoSettings
void renderPass(QSSGRenderer &renderer) final
const QSSGRenderCamera * camera
QSSGRhiGraphicsPipelineState ps
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void renderPass(QSSGRenderer &renderer) final
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
void renderPass(QSSGRenderer &renderer) final
QSSGRhiGraphicsPipelineState ps
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
Type passType() const final
QSSGRenderCamera * camera
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
QSSGBounds3 castingObjectsBox
QSSGShaderLightList globalLights
QSSGRenderableObjectList shadowPassObjects
QSSGRhiGraphicsPipelineState ps
QSSGBounds3 receivingObjectsBox
void resetForFrame() final
std::unique_ptr< QSSGRenderCamera > debugCamera
Type passType() const final
void renderPass(QSSGRenderer &renderer) final
std::shared_ptr< QSSGRenderShadowMap > shadowMapManager
QRhiRenderPassDescriptor * rpDesc
QSSGRenderLayer * layer
void renderPass(QSSGRenderer &renderer) final
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
QSSGRhiShaderPipelinePtr skyBoxCubeShader
QSSGRhiGraphicsPipelineState ps
void resetForFrame() final
Type passType() const final
void renderPass(QSSGRenderer &renderer) final
void resetForFrame() final
QRhiRenderPassDescriptor * rpDesc
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
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)
void renderPass(QSSGRenderer &renderer) final
QSSGShaderFeatures shaderFeatures
QSSGRhiGraphicsPipelineState ps
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void resetForFrame() final
Type passType() const final
void renderPass(QSSGRenderer &renderer) final
QList< QSSGRenderExtension * > extensions
Type passType() const final
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void resetForFrame() final
bool hasData() const
void resetForFrame() final
void renderPass(QSSGRenderer &renderer) final
QSSGRenderableObjectList renderedOpaqueDepthPrepassObjects
Type passType() const final
QSSGRhiGraphicsPipelineState ps
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
QSSGRenderableObjectList renderedDepthWriteObjects
QSSGLayerRenderPreparationResultFlag
Q_DECLARE_TYPEINFO(QSSGRenderableObjectHandle, Q_PRIMITIVE_TYPE)
QSSGRenderableObjectFlag
QVarLengthArray< QSSGShaderLight, 16 > QSSGShaderLightList
std::shared_ptr< QSSGGlobalRenderNodeData > QSSGGlobalRenderNodeDataPtr
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
QSqlQueryModel * model
[16]
QVector< QSSGRenderableObjectHandle > renderables
QSSGBakedLightingModel(const QSSGRenderModel *model, const QVector< QSSGRenderableObjectHandle > &renderables)
const QSSGRenderModel * model
QSSGDefaultMaterialPreparationResult(QSSGShaderDefaultMaterialKey inMaterialKey)
QSSGShaderDefaultMaterialKey materialKey
QRhiTextureRenderTarget * oitRenderTarget
QRhiRenderPassDescriptor * renderPassDescriptor
std::optional< QSSGClippingFrustum > clippingFrustum
QSSGShaderLightListView lights
QSSGRenderableNodeEntry()=default
void setRendersWithLightmap(bool inRendersWithLightmap)
void setCompletelyTransparent(bool inTransparent)
void setCastsReflections(bool inCastsReflections)
void setCastsShadows(bool inCastsShadows)
void setReceivesReflections(bool inReceivesReflections)
void setUsedInBakedLighting(bool inUsedInBakedLighting)
void setHasTransparency(bool inHasTransparency)
void setReceivesShadows(bool inReceivesShadows)
QSSGRenderableObjectHandle(QSSGRenderableObject *o, float camDistSq)
QSSGRenderableObjectHandle()=default
bool operator<(const QSSGShaderLight &o) const
QSSGRenderLight * light