7#ifndef QSSG_RENDER_IMPL_RENDERABLE_OBJECTS_H
8#define QSSG_RENDER_IMPL_RENDERABLE_OBJECTS_H
21#include <QtQuick3DRuntimeRender/private/qssgrendermodel_p.h>
22#include <QtQuick3DRuntimeRender/private/qssgrenderdefaultmaterial_p.h>
23#include <QtQuick3DRuntimeRender/private/qssgrendercustommaterial_p.h>
24#include <QtQuick3DRuntimeRender/private/qssgrenderparticles_p.h>
25#include <QtQuick3DRuntimeRender/private/qssgrendermesh_p.h>
26#include <QtQuick3DRuntimeRender/private/qssgrendershaderkeys_p.h>
27#include <QtQuick3DRuntimeRender/private/qssgrendershadercache_p.h>
28#include <QtQuick3DRuntimeRender/private/qssgrenderableimage_p.h>
29#include <QtQuick3DRuntimeRender/private/qssgrenderlight_p.h>
30#include <QtQuick3DRuntimeRender/private/qssgrenderreflectionprobe_p.h>
31#include <QtQuick3DRuntimeRender/private/qssgrenderclippingfrustum_p.h>
33#include <QtQuick3DUtils/private/qssginvasivelinkedlist_p.h>
39struct QSSGRenderItem2D;
175 if (light->type < o.light->type)
197using QSSGShaderLightListView = QSSGDataView<QSSGShaderLight>;
210 QSSGRenderNode *
node =
nullptr;
221 }
mutable extOverrides;
225 QSSGRenderableNodeEntry(QSSGRenderNode &inNode) :
node(&inNode) {}
226 QSSGRenderableNodeEntry(QSSGRenderNode *inNode) :
node(inNode) {}
244using QSSGRenderableObjectList = QVector<QSSGRenderableObjectHandle>;
276 const QVector3D &inWorldCenterPt,
277 const QSSGBounds3 &inBounds,
279 float inMinThreshold = -1,
280 float inMaxThreshold = -1)
294Q_STATIC_ASSERT(std::is_trivially_destructible<QSSGRenderableObject>::value);
304using QSSGRenderCameraList = QVarLengthArray<QSSGRenderCamera *, 2>;
305using QSSGRenderCameraDataList = QVarLengthArray<QSSGRenderCameraData, 2>;
306using QSSGRenderMvpArray = std::array<QMatrix4x4, 2>;
308class QSSGSubsetRenderable;
315 Q_DISABLE_COPY_MOVE(QSSGModelContext)
317 QSSGModelContext(
const QSSGRenderModel &inModel,
318 const QMatrix4x4 &globalTransform,
319 const QMatrix3x3 &inNormalMatrix,
320 const QSSGRenderMvpArray &inModelViewProjections);
329Q_STATIC_ASSERT(std::is_trivially_destructible<QSSGModelContext>::value);
337 Q_DISABLE_COPY_MOVE(QSSGSubsetRenderable)
339 int reflectionProbeIndex = -1;
340 float distanceFromReflectionProbe;
341 quint32 subsetLevelOfDetail = 0;
342 QSSGShaderReflectionProbe reflectionProbe;
343 QSSGRenderer *renderer =
nullptr;
344 const QSSGModelContext &modelContext;
345 const QSSGRenderSubset ⊂
346 QRhiBuffer *instanceBuffer =
nullptr;
348 const QSSGRenderGraphObject &material;
349 QSSGRenderableImage *firstImage;
350 QSSGShaderDefaultMaterialKey shaderDescription;
351 const QSSGShaderLightListView &lights;
354 QRhiGraphicsPipeline *pipeline =
nullptr;
355 QRhiShaderResourceBindings *srb =
nullptr;
363 QRhiGraphicsPipeline *pipeline =
nullptr;
364 QRhiShaderResourceBindings *srb =
nullptr;
367 QRhiGraphicsPipeline *pipeline =
nullptr;
368 QRhiShaderResourceBindings *srb =
nullptr;
371 QRhiGraphicsPipeline *pipeline =
nullptr;
372 QRhiShaderResourceBindings *srb[6] = {};
375 QRhiGraphicsPipeline *pipeline =
nullptr;
376 QRhiShaderResourceBindings *srb[6] = {};
379 QRhiGraphicsPipeline *pipeline =
nullptr;
380 QRhiShaderResourceBindings *srb =
nullptr;
383 QRhiGraphicsPipeline *pipeline =
nullptr;
384 QRhiShaderResourceBindings *srb =
nullptr;
386 RhiPassData userPassData[16] {};
389 QSSGSubsetRenderable(Type type,
390 QSSGRenderableObjectFlags inFlags,
391 const QVector3D &inWorldCenterPt,
393 const QSSGRenderSubset &inSubset,
394 const QSSGModelContext &inModelContext,
396 quint32 inSubsetLevelOfDetail,
397 const QSSGRenderGraphObject &mat,
398 QSSGRenderableImage *inFirstImage,
399 QSSGShaderDefaultMaterialKey inShaderKey,
400 const QSSGShaderLightListView &inLights,
401 bool anyLightHasShadows);
403 [[nodiscard]]
const QSSGRenderGraphObject &getMaterial()
const {
return material; }
406Q_STATIC_ASSERT(std::is_trivially_destructible<QSSGSubsetRenderable>::value);
409
410
413 Q_DISABLE_COPY_MOVE(QSSGParticlesRenderable)
415 QSSGRenderer *renderer =
nullptr;
416 const QSSGRenderParticles &particles;
417 QSSGRenderableImage *firstImage;
418 QSSGRenderableImage *colorTable;
419 const QSSGShaderLightListView &lights;
420 QMatrix4x4 globalTransform;
422 QSSGShaderParticleMaterialKey shaderDescription;
429 QRhiGraphicsPipeline *pipeline =
nullptr;
430 QRhiShaderResourceBindings *srb =
nullptr;
433 QRhiGraphicsPipeline *pipeline =
nullptr;
434 QRhiShaderResourceBindings *srb =
nullptr;
437 QRhiGraphicsPipeline *pipeline =
nullptr;
438 QRhiShaderResourceBindings *srb[6] = {};
441 QRhiGraphicsPipeline *pipeline =
nullptr;
442 QRhiShaderResourceBindings *srb[6] = {};
446 QSSGParticlesRenderable(QSSGRenderableObjectFlags inFlags,
447 const QVector3D &inWorldCenterPt,
449 const QMatrix4x4 &inGlobalTransform,
450 const QSSGRenderParticles &inParticles,
451 QSSGRenderableImage *inFirstImage,
452 QSSGRenderableImage *inColorTable,
453 const QSSGShaderLightListView &inLights,
455 QSSGShaderParticleMaterialKey inShaderKey);
458Q_STATIC_ASSERT(std::is_trivially_destructible<QSSGParticlesRenderable>::value);
461using QSSGModelsView = QSSGDataView<QSSGRenderModel *>;
462using QSSGParticlesView = QSSGDataView<QSSGRenderParticles *>;
463using QSSGItem2DsView = QSSGDataView<QSSGRenderItem2D *>;
464using QSSGCamerasView = QSSGDataView<QSSGRenderCamera *>;
465using QSSGLightsView = QSSGDataView<QSSGRenderLight *>;
466using QSSGReflectionProbesView = QSSGDataView<QSSGRenderReflectionProbe *>;
QSSGRhiShaderPipelinePtr debugObjectShader
QSSGRhiGraphicsPipelineState ps
Type passType() const final
void resetForFrame() final
QSSGRhiGraphicsPipelineState ps
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
void resetForFrame() final
QSSGShaderFeatures shaderFeatures
QSSGRhiRenderableTexture * rhiABufferImage
QSSGRhiRenderableTexture * rhiAccumTexture
QRhiShaderResourceBindings * compositeSrb
QSSGRhiShaderPipelinePtr compositeShaderPipeline
QRhiBuffer * rhiAuxBuffer
QSSGRhiRenderableTexture * rhiAuxiliaryImage
QSSGRenderLayer::OITMethod method
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
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
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
size_t storageSize() const
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
GlobalTransformStore globalTransforms
LayerNodeViewStore layerNodes
bool isLayerVisible() const
QSSGLayerRenderPreparationResult(const QRectF &inViewport, QSSGRenderLayer &inLayer)
QSize textureDimensions() const
void setState(State state)
QRectF getViewport() const
QSSGRenderLayer * getLayer() const
const QSSGLayerRenderPreparationResultFlags & getFlags() const
QSSGLayerRenderPreparationResult()=default
QSSGRenderMvpArray modelViewProjections
const QMatrix4x4 globalTransform
const QMatrix3x3 normalMatrix
QSSGDataRef< QSSGSubsetRenderable > subsets
friend class QSSGLayerRenderData
friend class QSSGRenderer
friend class QQuick3DWindowAttachment
static bool calcInstanceTransforms(QSSGRenderNode *node, const quint32 version, QSSGGlobalRenderNodeData::GlobalTransformStore &globalTransforms, QSSGGlobalRenderNodeData::InstanceTransformStore &instanceTransforms)
calcInstanceTransforms
static GlobalStateResult updateGlobalNodeState(QSSGRenderNode *node, const quint32 version)
updateGlobalNodeState
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
const QSSGBounds3 & bounds
QSSGRenderableObjectFlags renderableFlags
QSSGBounds3 globalBoundsInstancing
QSSGDepthDrawMode depthWriteMode
QSSGRenderableObject(Type ty, QSSGRenderableObjectFlags inFlags, const QVector3D &inWorldCenterPt, const QSSGBounds3 &inBounds, float inDepthBias, float inMinThreshold=-1, float inMaxThreshold=-1)
QVector3D worldCenterPoint
friend class QSSGParticleRenderer
void releaseItem2DData(const QSSGRenderItem2D &item2D)
const std::unique_ptr< QSSGRhiQuadRenderer > & rhiQuadRenderer() const
quint32 frameDepth() 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 setScissorRect(QRect inScissorRect)
void endSubLayerRender(QSSGLayerRenderData &inLayer)
QSSGRenderContextInterface * contextInterface() const
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
void resetForFrame() final
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
QSSGRhiShaderPipelinePtr skyBoxCubeShader
QSSGRhiGraphicsPipelineState ps
void resetForFrame() final
Type passType() const final
void resetForFrame() final
QRhiRenderPassDescriptor * rpDesc
Type passType() const final
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
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
@ RequiresMotionVectorPass
@ MaterialHasCustomBlendMode
@ RequiresMipmapsForScreenTexture
Q_DECLARE_TYPEINFO(QSSGRenderableObjectHandle, Q_PRIMITIVE_TYPE)
@ HasAttributeTexCoordLightmap
@ HasAttributeMorphTarget
@ HasAttributeJointAndWeight
@ IsMotionVectorParticipant
QVarLengthArray< QSSGShaderLight, 16 > QSSGShaderLightList
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)
QSSGRenderableImage * firstImage
QSSGRenderableObjectFlags renderableFlags
QSSGShaderDefaultMaterialKey materialKey
bool requiresDepthTextureMS() const
void setRequiresSsaoPass(bool inValue)
void setRequiresMotionVectorPass(bool inValue)
void setRequiresScreenTexture(bool inValue)
bool wasLayerDataDirty() const
void setRequiresDepthTextureMS(bool inValue)
bool requiresDepthTexture() const
void setLayerDataDirty(bool inValue)
void setWasDirty(bool inValue)
bool requiresMipmapsForScreenTexture() const
bool requiresScreenTexture() const
bool hasCustomBlendMode() const
void setRequiresNormalTexture(bool inValue)
bool requiresMotionVectorPass() const
bool requiresShadowMapPass() const
void setRequiresMipmapsForScreenTexture(bool inValue)
void setRequiresDepthTexture(bool inValue)
bool requiresSsaoPass() const
void setRequiresShadowMapPass(bool inValue)
void setHasCustomBlendMode(bool inValue)
bool requiresNormalTexture() const
QRhiBuffer * counterBuffer
QRhiTextureRenderTarget * oitRenderTarget
QRhiTexture * copyTexture
QRhiRenderPassDescriptor * renderPassDescriptor
QMatrix4x4 viewProjection
std::optional< QSSGClippingFrustum > clippingFrustum
QVector< QSSGRenderGraphObject * > materials
QMatrix4x4 globalTransform
QSSGShaderLightListView lights
QSSGRenderableNodeEntry()=default
void setPointsTopology(bool v)
bool hasAttributeTexCoordLightmap() const
void setRendersWithLightmap(bool inRendersWithLightmap)
void setHasAttributeTexCoord1(bool b)
void setHasAttributePosition(bool b)
void setCompletelyTransparent(bool inTransparent)
bool receivesReflections() const
void setHasAttributeJointAndWeight(bool b)
bool hasAttributePosition() const
bool hasTransparency() const
void setHasAttributeNormal(bool b)
void setHasAttributeColor(bool b)
bool hasAttributeNormal() const
void setHasAttributeTangent(bool b)
bool receivesShadows() const
void setHasAttributeMorphTarget(bool b)
bool isCompletelyTransparent() const
void setMotionVectorParticipant(bool v)
bool requiresNormalTexture() const
void setHasAttributeTexCoordLightmap(bool b)
void setHasAttributeTexCoord0(bool b)
bool hasAttributeBinormal() const
void setCastsReflections(bool inCastsReflections)
bool hasAttributeMorphTarget() const
void setCastsShadows(bool inCastsShadows)
bool hasAttributeJointAndWeight() const
bool requiresScreenTexture() const
bool castsReflections() const
bool usedInBakedLighting() const
bool hasAttributeColor() const
void setReceivesReflections(bool inReceivesReflections)
void setUsedInBakedLighting(bool inUsedInBakedLighting)
bool hasAttributeTangent() const
void setRequiresScreenTexture(bool v)
bool castsShadows() const
bool hasAttributeTexCoord1() const
bool hasAttributeTexCoord0() const
bool isPointsTopology() const
void setHasTransparency(bool inHasTransparency)
bool rendersWithLightmap() const
void setHasAttributeBinormal(bool b)
void setRequiresNormalTexture(bool v)
bool isMotionVectorParticipant() const
void setDirty(bool inDirty)
void setReceivesShadows(bool inReceivesShadows)
QSSGRenderableObjectHandle(QSSGRenderableObject *o, float camDistSq, QSSGRenderNodeTag tag)
QSSGRenderableObject * obj
QSSGRenderableObjectHandle()=default
bool operator<(const QSSGShaderLight &o) const
QVector3D probeCubeMapCenter
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