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
qssgrenderhelpers_p.h
Go to the documentation of this file.
1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef QSSGRENDERHELPERS_P_H
5#define QSSGRENDERHELPERS_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtQuick3DRuntimeRender/qtquick3druntimerenderglobal.h>
19
20#include <QtQuick3DUtils/private/qssgaosettings_p.h>
21#include <QtQuick3DRuntimeRender/private/qssgrenderableobjects_p.h>
22
23QT_BEGIN_NAMESPACE
24
25class QSSGRhiContext;
26class QSSGRenderShadowMap;
27class QRhiRenderPassDescriptor;
28class QSSGRenderReflectionMap;
31class QSSGRhiShaderPipeline;
32
34{
35
36std::pair<QSSGBounds3, QSSGBounds3> calculateSortedObjectBounds(const QSSGRenderableObjectList &sortedOpaqueObjects,
37 const QSSGRenderableObjectList &sortedTransparentObjects);
38
39void rhiRenderShadowMap(QSSGRhiContext *rhiCtx,
40 QSSGPassKey passKey,
41 QSSGRhiGraphicsPipelineState &ps,
42 QSSGRenderShadowMap &shadowMapManager,
43 const QSSGRenderCamera &camera,
44 QSSGRenderCamera *debugCamera,
45 const QSSGShaderLightList &globalLights,
46 const QSSGRenderableObjectList &sortedOpaqueObjects,
47 QSSGRenderer &renderer,
48 const QSSGBounds3 &castingObjectsBox,
49 const QSSGBounds3 &receivingObjectsBox);
50
51void rhiRenderReflectionMap(QSSGRhiContext *rhiCtx,
52 QSSGPassKey passKey,
53 const QSSGLayerRenderData &inData,
54 QSSGRhiGraphicsPipelineState *ps,
55 QSSGRenderReflectionMap &reflectionMapManager,
56 const QVector<QSSGRenderReflectionProbe *> &reflectionProbes,
57 const QSSGRenderableObjectList &reflectionPassObjects,
58 QSSGRenderer &renderer);
59
60bool rhiPrepareDepthPass(QSSGRhiContext *rhiCtx,
61 QSSGPassKey passKey,
62 const QSSGRhiGraphicsPipelineState &basePipelineState,
63 QRhiRenderPassDescriptor *rpDesc,
64 QSSGLayerRenderData &inData,
65 const QSSGRenderableObjectList &sortedOpaqueObjects,
66 const QSSGRenderableObjectList &sortedTransparentObjects,
67 int samples,
68 int viewCount);
69
70void rhiRenderDepthPass(QSSGRhiContext *rhiCtx, const QSSGRhiGraphicsPipelineState &ps,
71 const QSSGRenderableObjectList &sortedOpaqueObjects,
72 const QSSGRenderableObjectList &sortedTransparentObjects,
73 bool *needsSetViewport);
74
75bool rhiPrepareNormalPass(QSSGRhiContext *rhiCtx,
76 QSSGPassKey passKey,
77 const QSSGRhiGraphicsPipelineState &basePipelineState,
78 QRhiRenderPassDescriptor *rpDesc,
79 QSSGLayerRenderData &inData,
80 const QSSGRenderableObjectList &sortedOpaqueObjects);
81
82void rhiRenderNormalPass(QSSGRhiContext *rhiCtx, const QSSGRhiGraphicsPipelineState &ps,
83 const QSSGRenderableObjectList &sortedOpaqueObjects,
84 bool *needsSetViewport);
85
86bool rhiPrepareAoTexture(QSSGRhiContext *rhiCtx,
87 const QSize &size,
88 QSSGRhiRenderableTexture *renderableTex,
89 quint8 viewCount);
90
91void rhiRenderAoTexture(QSSGRhiContext *rhiCtx,
92 QSSGPassKey passKey,
93 QSSGRenderer &renderer,
94 QSSGRhiShaderPipeline &shaderPipeline,
95 QSSGRhiGraphicsPipelineState &ps,
96 const QSSGAmbientOcclusionSettings &ao,
97 const QSSGRhiRenderableTexture &rhiAoTexture,
98 const QSSGRhiRenderableTexture &rhiDepthTexture,
99 const QSSGRenderCamera &camera);
100
101bool rhiPrepareScreenTexture(QSSGRhiContext *rhiCtx,
102 const QSize &size,
103 bool wantsMips,
104 QSSGRhiRenderableTexture *renderableTex,
105 quint8 viewCount);
106
107void rhiPrepareGrid(QSSGRhiContext *rhiCtx,
108 QSSGPassKey passKey,
109 QSSGRenderLayer &layer,
110 QSSGRenderCameraList &cameras,
111 QSSGRenderer &renderer);
112
113
114void rhiPrepareSkyBox(QSSGRhiContext *rhiCtx,
115 QSSGPassKey passKey,
116 QSSGRenderLayer &layer,
117 QSSGRenderCameraList &cameras,
118 QSSGRenderer &renderer);
119
120void rhiPrepareSkyBoxForReflectionMap(QSSGRhiContext *rhiCtx,
121 QSSGPassKey passKey,
122 QSSGRenderLayer &layer,
123 QSSGRenderCamera &inCamera,
124 QSSGRenderer &renderer,
126 QSSGRenderTextureCubeFace cubeFace);
127
128Q_QUICK3DRUNTIMERENDER_EXPORT void rhiPrepareRenderable(QSSGRhiContext *rhiCtx,
129 QSSGPassKey passKey,
130 const QSSGLayerRenderData &inData,
131 QSSGRenderableObject &inObject,
132 QRhiRenderPassDescriptor *renderPassDescriptor,
133 QSSGRhiGraphicsPipelineState *ps,
134 QSSGShaderFeatures featureSet,
135 int samples,
136 int viewCount,
137 QSSGRenderCamera *alteredCamera = nullptr,
138 QMatrix4x4 *alteredModelViewProjection = nullptr,
139 QSSGRenderTextureCubeFace cubeFace = QSSGRenderTextureCubeFaceNone,
140 QSSGReflectionMapEntry *entry = nullptr,
141 bool oit = false);
142
143Q_QUICK3DRUNTIMERENDER_EXPORT void rhiRenderRenderable(QSSGRhiContext *rhiCtx,
144 const QSSGRhiGraphicsPipelineState &state,
145 QSSGRenderableObject &object,
146 bool *needsSetViewport,
147 QSSGRenderTextureCubeFace cubeFace = QSSGRenderTextureCubeFaceNone);
148
149bool rhiPrepareDepthTexture(QSSGRhiContext *rhiCtx,
150 const QSize &size,
151 QSSGRhiRenderableTexture *renderableTex,
152 quint8 viewCount,
153 int samples = 1);
154
155inline QRect correctViewportCoordinates(const QRectF &layerViewport, const QRect &deviceRect)
156{
157 const int y = deviceRect.bottom() - layerViewport.bottom() + 1;
158 return QRect(layerViewport.x(), y, layerViewport.width(), layerViewport.height());
159}
160}
161
162QT_END_NAMESPACE
163
164
165#endif // QSSGRENDERHELPERS_P_H
QSSGLayerRenderPreparationResult(const QRectF &inViewport, QSSGRenderLayer &inLayer)
friend class QSSGRenderContextInterface
void rhiRenderShadowMap(QSSGRhiContext *rhiCtx, QSSGPassKey passKey, QSSGRhiGraphicsPipelineState &ps, QSSGRenderShadowMap &shadowMapManager, const QSSGRenderCamera &camera, QSSGRenderCamera *debugCamera, const QSSGShaderLightList &globalLights, const QSSGRenderableObjectList &sortedOpaqueObjects, QSSGRenderer &renderer, const QSSGBounds3 &castingObjectsBox, const QSSGBounds3 &receivingObjectsBox)
void rhiPrepareGrid(QSSGRhiContext *rhiCtx, QSSGPassKey passKey, QSSGRenderLayer &layer, QSSGRenderCameraList &cameras, QSSGRenderer &renderer)
void rhiPrepareSkyBoxForReflectionMap(QSSGRhiContext *rhiCtx, QSSGPassKey passKey, QSSGRenderLayer &layer, QSSGRenderCamera &inCamera, QSSGRenderer &renderer, QSSGReflectionMapEntry *entry, QSSGRenderTextureCubeFace cubeFace)
void rhiRenderAoTexture(QSSGRhiContext *rhiCtx, QSSGPassKey passKey, QSSGRenderer &renderer, QSSGRhiShaderPipeline &shaderPipeline, QSSGRhiGraphicsPipelineState &ps, const QSSGAmbientOcclusionSettings &ao, const QSSGRhiRenderableTexture &rhiAoTexture, const QSSGRhiRenderableTexture &rhiDepthTexture, const QSSGRenderCamera &camera)
bool rhiPrepareNormalPass(QSSGRhiContext *rhiCtx, QSSGPassKey passKey, const QSSGRhiGraphicsPipelineState &basePipelineState, QRhiRenderPassDescriptor *rpDesc, QSSGLayerRenderData &inData, const QSSGRenderableObjectList &sortedOpaqueObjects)
Q_QUICK3DRUNTIMERENDER_EXPORT void rhiPrepareRenderable(QSSGRhiContext *rhiCtx, QSSGPassKey passKey, const QSSGLayerRenderData &inData, QSSGRenderableObject &inObject, QRhiRenderPassDescriptor *renderPassDescriptor, QSSGRhiGraphicsPipelineState *ps, QSSGShaderFeatures featureSet, int samples, int viewCount, QSSGRenderCamera *alteredCamera=nullptr, QMatrix4x4 *alteredModelViewProjection=nullptr, QSSGRenderTextureCubeFace cubeFace=QSSGRenderTextureCubeFaceNone, QSSGReflectionMapEntry *entry=nullptr, bool oit=false)
void rhiRenderNormalPass(QSSGRhiContext *rhiCtx, const QSSGRhiGraphicsPipelineState &ps, const QSSGRenderableObjectList &sortedOpaqueObjects, bool *needsSetViewport)
Q_QUICK3DRUNTIMERENDER_EXPORT void rhiRenderRenderable(QSSGRhiContext *rhiCtx, const QSSGRhiGraphicsPipelineState &state, QSSGRenderableObject &object, bool *needsSetViewport, QSSGRenderTextureCubeFace cubeFace=QSSGRenderTextureCubeFaceNone)
bool rhiPrepareDepthPass(QSSGRhiContext *rhiCtx, QSSGPassKey passKey, const QSSGRhiGraphicsPipelineState &basePipelineState, QRhiRenderPassDescriptor *rpDesc, QSSGLayerRenderData &inData, const QSSGRenderableObjectList &sortedOpaqueObjects, const QSSGRenderableObjectList &sortedTransparentObjects, int samples, int viewCount)
std::pair< QSSGBounds3, QSSGBounds3 > calculateSortedObjectBounds(const QSSGRenderableObjectList &sortedOpaqueObjects, const QSSGRenderableObjectList &sortedTransparentObjects)
bool rhiPrepareScreenTexture(QSSGRhiContext *rhiCtx, const QSize &size, bool wantsMips, QSSGRhiRenderableTexture *renderableTex, quint8 viewCount)
QRect correctViewportCoordinates(const QRectF &layerViewport, const QRect &deviceRect)
void rhiPrepareSkyBox(QSSGRhiContext *rhiCtx, QSSGPassKey passKey, QSSGRenderLayer &layer, QSSGRenderCameraList &cameras, QSSGRenderer &renderer)
bool rhiPrepareDepthTexture(QSSGRhiContext *rhiCtx, const QSize &size, QSSGRhiRenderableTexture *renderableTex, quint8 viewCount, int samples=1)
void rhiRenderReflectionMap(QSSGRhiContext *rhiCtx, QSSGPassKey passKey, const QSSGLayerRenderData &inData, QSSGRhiGraphicsPipelineState *ps, QSSGRenderReflectionMap &reflectionMapManager, const QVector< QSSGRenderReflectionProbe * > &reflectionProbes, const QSSGRenderableObjectList &reflectionPassObjects, QSSGRenderer &renderer)
bool rhiPrepareAoTexture(QSSGRhiContext *rhiCtx, const QSize &size, QSSGRhiRenderableTexture *renderableTex, quint8 viewCount)
void rhiRenderDepthPass(QSSGRhiContext *rhiCtx, const QSSGRhiGraphicsPipelineState &ps, const QSSGRenderableObjectList &sortedOpaqueObjects, const QSSGRenderableObjectList &sortedTransparentObjects, bool *needsSetViewport)
#define POS4BONETRANS(x)
#define POS4BONENORM(x)
static constexpr size_t getPrepContextIndex(QSSGPrepContextId id)
static bool scopeLight(QSSGRenderNode *node, QSSGRenderNode *lightScope)
static constexpr bool furthestToNearestCompare(const QSSGRenderableObjectHandle &lhs, const QSSGRenderableObjectHandle &rhs) noexcept
static int effectiveMaxDirectionalLightCount(const QSSGShaderFeatures &features)
static constexpr bool verifyPrepContext(QSSGPrepContextId id, const QSSGRenderer &renderer)
#define MAX_MORPH_TARGET_INDEX_SUPPORTS_NORMALS
static void clearTable(std::vector< T > &entry)
static constexpr quint16 PREP_CTX_INDEX_MASK
#define MAX_MORPH_TARGET_INDEX_SUPPORTS_TANGENTS
static void updateDirtySkeletons(const QSSGLayerRenderData &renderData, const QSSGLayerRenderData::QSSGModelsView &renderableNodes)
static bool hasCustomBlendMode(const QSSGRenderCustomMaterial &material)
static const int REDUCED_MAX_LIGHT_COUNT_THRESHOLD_BYTES
static bool checkParticleSupport(QRhi *rhi)
#define BONEDATASIZE4ID(x)
static void collectBoneTransforms(const QSSGLayerRenderData &renderData, QSSGRenderNode *node, QSSGRenderSkeleton *skeletonNode, const QVector< QMatrix4x4 > &poses)
static void sortInstances(QByteArray &sortedData, QList< QSSGRhiSortData > &sortData, const void *instances, int stride, int count, const QVector3D &cameraDirection)
#define CHECK_IMAGE_AND_PREPARE(img, imgtype, shadercomponent)
static constexpr bool nearestToFurthestCompare(const QSSGRenderableObjectHandle &lhs, const QSSGRenderableObjectHandle &rhs) noexcept
static constexpr size_t pipelineStateIndex(QSSGRenderablesFilter filter)
static void cullLodInstances(QByteArray &lodData, const void *instances, int count, const QVector3D &cameraPosition, float minThreshold, float maxThreshold)
QSSGDataRef< T > RENDER_FRAME_NEW_BUFFER(QSSGRenderContextInterface &ctx, size_t count)
static const QVector2D s_ProgressiveAAVertexOffsets[QSSGLayerRenderData::MAX_AA_LEVELS]
static bool hasDirtyNonJointNodes(QSSGRenderNode *node, bool &hasChildJoints)
static int effectiveMaxLightCount(const QSSGShaderFeatures &features)
static constexpr QSSGPrepContextId createPrepId(size_t index, quint32 frame)
T * RENDER_FRAME_NEW(QSSGRenderContextInterface &ctx, Args &&... args)
static LayerNodeStatResult statLayerNodes(const QSSGLayerRenderData::LayerNodes &layerNodes, quint32 layerMask)
static float getCameraDistanceSq(const QSSGRenderableObject &obj, const QSSGRenderCameraData &camera) noexcept
static void createRenderablesHelper(QSSGLayerRenderData &layer, const QSSGRenderNode::ChildList &children, QSSGLayerRenderData::RenderableNodeEntries &renderables, QSSGRenderHelpers::CreateFlags createFlags)
QVarLengthArray< QSSGShaderLight, 16 > QSSGShaderLightList
friend QDebug operator<<(QDebug dbg, const LayerNodeStatResult &stat)
friend LayerNodeStatResult & operator+=(LayerNodeStatResult &lhs, const LayerNodeStatResult &rhs)
QSSGDefaultMaterialPreparationResult(QSSGShaderDefaultMaterialKey inMaterialKey)