5#ifndef QSSG_LAYER_RENDER_DATA_H
6#define QSSG_LAYER_RENDER_DATA_H
20#include <QtQuick3DRuntimeRender/private/qssgrenderitem2d_p.h>
21#include <QtQuick3DRuntimeRender/private/qssgrenderer_p.h>
22#include <QtQuick3DRuntimeRender/private/qssgrendershadercache_p.h>
23#include <QtQuick3DRuntimeRender/private/qssgrenderableobjects_p.h>
24#include <QtQuick3DRuntimeRender/private/qssgrendershadowmap_p.h>
25#include <QtQuick3DRuntimeRender/private/qssgrendereffect_p.h>
26#include <QtQuick3DRuntimeRender/private/qssgrenderresourceloader_p.h>
27#include <QtQuick3DRuntimeRender/private/qssgrenderreflectionmap_p.h>
28#include <QtQuick3DRuntimeRender/private/qssgrendercamera_p.h>
29#include <QtQuick3DRuntimeRender/private/qssgrhicontext_p.h>
30#include <QtQuick3DRuntimeRender/private/qssgperframeallocator_p.h>
31#include <QtQuick3DRuntimeRender/private/qssgshadermapkey_p.h>
32#include <QtQuick3DRuntimeRender/private/qssglightmapper_p.h>
33#include <ssg/qssgrenderextensions.h>
35#include <QtQuick3DUtils/private/qssgrenderbasetypes_p.h>
38#include <unordered_map>
42#define QSSG_RENDER_MINIMUM_RENDER_OPACITY .01f
172 MAX_TEMPORAL_AA_LEVELS = 2,
212 float lodThreshold = 0.0f);
217 void prepareResourceLoaders();
219 void prepareForRender();
221 void prepareReflectionProbesForRender();
232 const QVector<QSSGBakedLightingModel> &getSortedBakedLightingModels();
237 void resetForFrame();
239 void maybeBakeLightmap();
253 static constexpr size_t USERPASSES = 2;
292 bool tooManyLightsWarningShown =
false;
293 bool tooManyShadowLightsWarningShown =
false;
300 bool interactiveLightmapBakingRequested =
false;
323 return defaultMaterialShaderKeyProperties;
328 bool isYUpInFramebuffer =
true;
329 bool isYUpInNDC =
true;
330 bool isClipDepthZeroToOne =
true;
380 void setModelMaterials(
const QSSGRenderablesId renderablesId,
const QList<QSSGResourceId> &materials);
392 QSSGRenderablesFilters
filter);
403 struct ExtensionContext
408 QSSGRenderablesFilters
filter { 0 };
413 std::vector<ExtensionContext> extContexts { { } };
414 std::vector<RenderableNodeEntries> renderableModelStore { { } };
415 std::vector<TModelContextPtrList> modelContextStore { { }};
416 std::vector<QSSGRenderableObjectList> renderableObjectStore { { }};
417 std::vector<QSSGRenderableObjectList> opaqueObjectStore { { }};
418 std::vector<QSSGRenderableObjectList> transparentObjectStore { { }};
419 std::vector<QSSGRenderableObjectList> screenTextureObjectStore { { }};
422 using PerCameraCache = std::unordered_map<const QSSGRenderCamera *, QSSGRenderableObjectList>;
423 std::vector<PerCameraCache> sortedOpaqueObjectCache { { } };
424 std::vector<PerCameraCache> sortedTransparentObjectCache { { } };
425 std::vector<PerCameraCache> sortedScreenTextureObjectCache { { } };
426 std::vector<PerCameraCache> sortedOpaqueDepthPrepassCache { { } };
427 std::vector<PerCameraCache> sortedDepthWriteCache { { } };
430 void ensureCachedCameraDatas();
442 float inOpacity,
bool alreadyDirty,
446 static void prepareModelMaterials(RenderableNodeEntries &renderableModels,
bool cullUnrenderables);
447 static void prepareModelMaterials(
const RenderableNodeEntries::ConstIterator &
begin,
448 const RenderableNodeEntries::ConstIterator &
end);
451 RenderableNodeEntries &renderableModels,
452 bool globalPickingEnabled);
454 const RenderableNodeEntries::ConstIterator
begin,
455 const RenderableNodeEntries::ConstIterator
end,
456 bool globalPickingEnabled);
459 QHash<QSSGShaderMapKey, QSSGRhiShaderPipelinePtr> shaderMap;
467 bool particlesEnabled =
true;
468 bool hasDepthWriteObjects =
false;
469 bool zPrePassActive =
false;
470 enum class DepthPrepassObject :
quint8
477 using DepthPrepassObjectStateT = std::underlying_type_t<DepthPrepassObject>;
478 DepthPrepassObjectStateT depthPrepassObjectsState { DepthPrepassObjectStateT(DepthPrepassObject::None) };
481 QHash<const QSSGModelContext *, QRhiTexture *> lightmapTextures;
482 QHash<const QSSGModelContext *, QRhiTexture *> bonemapTextures;
constexpr QFlags operator&(int mask) const noexcept
constexpr QFlags & setFlag(QSSGLayerRenderPreparationResultFlag flag, bool on=true) noexcept
The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space.
\inmodule QtCore\reentrant
QVector< QSSGBakedLightingModel > renderedBakedLightingModels
QSSGLayerRenderPreparationResult layerPrepResult
QSSGLightmapper::Callback lightmapBakingOutputCallback
QVarLengthArray< QSSGRenderPass *, 16 > activePasses
QSSGRenderCamera * activeCamera() const
QSSGShaderFeatures getShaderFeatures() const
QVector< QSSGBakedLightingModel > bakedLightingModels
InfiniteGridPass infiniteGridPass
DebugDrawPass debugDrawPass
const QSSGRenderReflectionMapPtr & getReflectionMapManager() const
QMatrix4x4 getModelMvp(QSSGPrepContextId prepId, const QSSGRenderModel &model) const
SkyboxCubeMapPass skyboxCubeMapPass
static QSSGLayerRenderData * getCurrent(const QSSGRenderer &renderer)
QSSGRhiGraphicsPipelineState getPipelineState() const
static void setTonemapFeatures(QSSGShaderFeatures &features, QSSGRenderLayer::TonemapMode tonemapMode)
ReflectionMapPass reflectionMapPass
RenderableNodeEntries renderableModels
ScreenReflectionPass reflectionPass
QVector< QSSGModelContext * > TModelContextPtrList
ZPrePassPass zPrePassPass
RenderableItem2DEntries renderedItem2Ds
ShadowMapPass shadowMapPass
ScreenMapPass screenMapPass
static void prepareModelBoneTextures(const QSSGRenderContextInterface &contextInterface, const RenderableNodeEntries &renderableModels)
void setZPrePassPrepResult(bool res)
DepthMapPass depthMapPass
QVector< QSSGRenderLight * > lights
QVector< QSSGRenderItem2D * > renderableItem2Ds
QVector< QSSGRenderReflectionProbe * > reflectionProbes
const QSSGRenderShadowMapPtr & getShadowMapManager() const
bool isZPrePassActive() const
QVector< QSSGRenderCamera * > cameras
std::function< bool(QSSGModelContext *)> RenderableFilter
const QSSGShaderDefaultMaterialKeyProperties & getDefaultMaterialPropertyTable() const
QSSGShaderLightList globalLights
TModelContextPtrList modelContexts
QSSGRhiRenderableTexture * getRenderResult(QSSGFrameData::RenderResult id)
RenderableNodeEntries renderableParticles
QSSGRenderCameraList renderedCameras
std::optional< QSSGRenderCameraDataList > renderedCameraData
const QSSGRhiRenderableTexture * getRenderResult(QSSGFrameData::RenderResult id) const
TransparentPass transparentPass
std::function< void(BakingStatus, std::optional< QString >, BakingControl *) Callback)
The QVector3D class represents a vector or vertex in 3D space.
Combined button and popup list for selecting options.
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
static QT_BEGIN_NAMESPACE qreal dpr(const QWindow *w)
QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator begin(const QRegularExpressionMatchIterator &iterator)
QSSGLayerRenderPreparationResultFlag
@ RequiresMipmapsForScreenTexture
std::shared_ptr< QSSGRenderReflectionMap > QSSGRenderReflectionMapPtr
std::shared_ptr< QSSGRenderShadowMap > QSSGRenderShadowMapPtr
QSqlQueryModel * model
[16]
QSvgRenderer * renderer
[0]
QVector< QSSGRenderableObjectHandle > renderables
QSSGBakedLightingModel(const QSSGRenderModel *model, const QVector< QSSGRenderableObjectHandle > &renderables)
const QSSGRenderModel * model
QSSGDefaultMaterialPreparationResult(QSSGShaderDefaultMaterialKey inMaterialKey)
QSSGRenderableImage * firstImage
QSSGRenderableObjectFlags renderableFlags
QSSGShaderDefaultMaterialKey materialKey
void setRequiresSsaoPass(bool inValue)
void setRequiresScreenTexture(bool inValue)
bool wasLayerDataDirty() const
bool requiresDepthTexture() const
void setLayerDataDirty(bool inValue)
void setWasDirty(bool inValue)
bool requiresMipmapsForScreenTexture() const
bool requiresScreenTexture() const
bool requiresShadowMapPass() const
void setRequiresMipmapsForScreenTexture(bool inValue)
void setRequiresDepthTexture(bool inValue)
bool requiresSsaoPass() const
void setRequiresShadowMapPass(bool inValue)
bool isLayerVisible() const
QSSGLayerRenderPreparationResultFlags flags
QSize textureDimensions() const
QSSGCameraGlobalCalculationResult setupCameraForRender(QSSGRenderCamera &inCamera, float dpr=1.0f)
QSSGLayerRenderPreparationResult()=default
void set(Feature feature, bool val)