Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qssglayerrenderdata.cpp File Reference

(8acd93a4b78bb114c3d300c830f7aa4585fb2ab6)

#include "qssglayerrenderdata_p.h"
#include <QtQuick3DRuntimeRender/private/qssgrenderer_p.h>
#include <QtQuick3DRuntimeRender/private/qssgrenderlight_p.h>
#include <QtQuick3DRuntimeRender/private/qssgrhicustommaterialsystem_p.h>
#include <QtQuick3DRuntimeRender/private/qssgrhiquadrenderer_p.h>
#include <QtQuick3DRuntimeRender/private/qssgrhiparticles_p.h>
#include <QtQuick3DRuntimeRender/private/qssgrenderlayer_p.h>
#include <QtQuick3DRuntimeRender/private/qssgrendereffect_p.h>
#include <QtQuick3DRuntimeRender/private/qssgrendercamera_p.h>
#include <QtQuick3DRuntimeRender/private/qssgrenderskeleton_p.h>
#include <QtQuick3DRuntimeRender/private/qssgrenderjoint_p.h>
#include <QtQuick3DRuntimeRender/private/qssgrendermorphtarget_p.h>
#include <QtQuick3DRuntimeRender/private/qssgrenderparticles_p.h>
#include "../qssgrendercontextcore.h"
#include <QtQuick3DRuntimeRender/private/qssgrenderbuffermanager_p.h>
#include <QtQuick3DRuntimeRender/private/qssgrendershadercache_p.h>
#include <QtQuick3DRuntimeRender/private/qssgperframeallocator_p.h>
#include <QtQuick3DRuntimeRender/private/qssgruntimerenderlogging_p.h>
#include <QtQuick3DRuntimeRender/private/qssglightmapper_p.h>
#include <QtQuick3DRuntimeRender/private/qssgdebugdrawsystem_p.h>
#include <QtQuick3DUtils/private/qssgutils_p.h>
#include <QtQuick3DUtils/private/qssgassert_p.h>
#include <QtQuick/private/qsgtexture_p.h>
#include <QtQuick/private/qsgrenderer_p.h>
#include <QtCore/QCoreApplication>
#include <QtCore/QBitArray>
#include <array>
#include "qssgrenderpass_p.h"
#include "rendererimpl/qssgrenderhelpers_p.h"
+ Include dependency graph for qssglayerrenderdata.cpp:

Go to the source code of this file.

Macros

#define POS4BONETRANS(x)   (sizeof(float) * 16 * (x) * 2)
 
#define POS4BONENORM(x)   (sizeof(float) * 16 * ((x) * 2 + 1))
 
#define BONEDATASIZE4ID(x)   POS4BONETRANS(x + 1)
 
#define MAX_MORPH_TARGET   8
 
#define MAX_MORPH_TARGET_INDEX_SUPPORTS_NORMALS   3
 
#define MAX_MORPH_TARGET_INDEX_SUPPORTS_TANGENTS   1
 
#define CHECK_IMAGE_AND_PREPARE(img, imgtype, shadercomponent)
 

Enumerations

enum class  CullUnrenderables { Off , On }
 

Functions

QT_BEGIN_NAMESPACE Q_LOGGING_CATEGORY (lcQuick3DRender, "qt.quick3d.render")
 
static bool checkParticleSupport (QRhi *rhi)
 
static constexpr bool nearestToFurthestCompare (const QSSGRenderableObjectHandle &lhs, const QSSGRenderableObjectHandle &rhs) noexcept
 
static constexpr bool furthestToNearestCompare (const QSSGRenderableObjectHandle &lhs, const QSSGRenderableObjectHandle &rhs) noexcept
 
static void collectBoneTransforms (QSSGRenderNode *node, QSSGRenderSkeleton *skeletonNode, const QVector< QMatrix4x4 > &poses)
 
static bool hasDirtyNonJointNodes (QSSGRenderNode *node, bool &hasChildJoints)
 
template<typename T , typename V >
void collectNode (V node, QVector< T > &dst, int &dstPos)
 
template<typename T , typename V >
static void collectNodeFront (V node, QVector< T > &dst, int &dstPos)
 
static bool maybeQueueNodeForRender (QSSGRenderNode &inNode, QVector< QSSGRenderableNodeEntry > &outRenderableModels, int &ioRenderableModelsCount, QVector< QSSGRenderableNodeEntry > &outRenderableParticles, int &ioRenderableParticlesCount, QVector< QSSGRenderItem2D * > &outRenderableItem2Ds, int &ioRenderableItem2DsCount, QVector< QSSGRenderCamera * > &outCameras, int &ioCameraCount, QVector< QSSGRenderLight * > &outLights, int &ioLightCount, QVector< QSSGRenderReflectionProbe * > &outReflectionProbes, int &ioReflectionProbeCount, quint32 &ioDFSIndex)
 
static QSSGRenderCameraData getCameraDataImpl (const QSSGRenderCamera *camera)
 
static float getCameraDistanceSq (const QSSGRenderableObject &obj, const QSSGRenderCameraData &camera) noexcept
 
static constexpr QSSGPrepContextId createPrepId (size_t index, quint32 frame)
 
static constexpr size_t getPrepContextIndex (QSSGPrepContextId id)
 
static constexpr bool verifyPrepContext (QSSGPrepContextId id, const QSSGRenderer &renderer)
 
static void createRenderablesHelper (QSSGLayerRenderData &layer, const QSSGRenderNode::ChildList &children, QSSGLayerRenderData::RenderableNodeEntries &renderables, QSSGRenderHelpers::CreateFlags createFlags)
 
static constexpr size_t pipelineStateIndex (QSSGRenderablesFilter filter)
 
template<typename T , typename... Args>
T * RENDER_FRAME_NEW (QSSGRenderContextInterface &ctx, Args &&... args)
 
template<typename T >
QSSGDataRef< T > RENDER_FRAME_NEW_BUFFER (QSSGRenderContextInterface &ctx, size_t count)
 
template<CullUnrenderables cull = CullUnrenderables::On>
static void prepareModelMaterialsImpl (QSSGLayerRenderData::RenderableNodeEntries &renderableModels)
 
static bool scopeLight (QSSGRenderNode *node, QSSGRenderNode *lightScope)
 
static int effectiveMaxLightCount (const QSSGShaderFeatures &features)
 
void updateDirtySkeletons (const QVector< QSSGRenderableNodeEntry > &renderableNodes)
 
template<typename T >
static void clearTable (std::vector< T > &entry)
 
static void sortInstances (QByteArray &sortedData, QList< QSSGRhiSortData > &sortData, const void *instances, int stride, int count, const QVector3D &cameraDirection)
 
static void cullLodInstances (QByteArray &lodData, const void *instances, int count, const QVector3D &cameraPosition, float minThreshold, float maxThreshold)
 

Variables

static const QVector2D s_ProgressiveAAVertexOffsets [QSSGLayerRenderData::MAX_AA_LEVELS]
 
static constexpr quint16 PREP_CTX_INDEX_MASK = 0xffff
 
static const int REDUCED_MAX_LIGHT_COUNT_THRESHOLD_BYTES = 4096
 

Macro Definition Documentation

◆ BONEDATASIZE4ID

#define BONEDATASIZE4ID ( x)    POS4BONETRANS(x + 1)

Definition at line 46 of file qssglayerrenderdata.cpp.

Referenced by updateDirtySkeletons().

◆ CHECK_IMAGE_AND_PREPARE

#define CHECK_IMAGE_AND_PREPARE ( img,
imgtype,
shadercomponent )
Value:
if ((img)) \
prepareImageForRender(*(img), imgtype, firstImage, nextImage, renderableFlags, \
theGeneratedKey, shadercomponent, &inMaterial)
GLint void * img
Definition qopenglext.h:233

◆ MAX_MORPH_TARGET

#define MAX_MORPH_TARGET   8

Definition at line 190 of file qssglayerrenderdata.cpp.

◆ MAX_MORPH_TARGET_INDEX_SUPPORTS_NORMALS

#define MAX_MORPH_TARGET_INDEX_SUPPORTS_NORMALS   3

Definition at line 191 of file qssglayerrenderdata.cpp.

Referenced by updateDirtySkeletons().

◆ MAX_MORPH_TARGET_INDEX_SUPPORTS_TANGENTS

#define MAX_MORPH_TARGET_INDEX_SUPPORTS_TANGENTS   1

Definition at line 192 of file qssglayerrenderdata.cpp.

Referenced by updateDirtySkeletons().

◆ POS4BONENORM

#define POS4BONENORM ( x)    (sizeof(float) * 16 * ((x) * 2 + 1))

Definition at line 45 of file qssglayerrenderdata.cpp.

Referenced by collectBoneTransforms().

◆ POS4BONETRANS

#define POS4BONETRANS ( x)    (sizeof(float) * 16 * (x) * 2)

Definition at line 44 of file qssglayerrenderdata.cpp.

Referenced by collectBoneTransforms().

Enumeration Type Documentation

◆ CullUnrenderables

enum class CullUnrenderables
strong
Enumerator
Off 
On 

Definition at line 1383 of file qssglayerrenderdata.cpp.

Function Documentation

◆ checkParticleSupport()

static bool checkParticleSupport ( QRhi * rhi)
static

Definition at line 48 of file qssglayerrenderdata.cpp.

References QRhi::isTextureFormatSupported(), QSSG_ASSERT, qWarning, ret, QRhiTexture::RGBA16F, and QRhiTexture::RGBA32F.

+ Here is the call graph for this function:

◆ clearTable()

template<typename T >
static void clearTable ( std::vector< T > & entry)
static

Definition at line 2605 of file qssglayerrenderdata.cpp.

Referenced by QSSGLayerRenderData::resetForFrame().

+ Here is the caller graph for this function:

◆ collectBoneTransforms()

static void collectBoneTransforms ( QSSGRenderNode * node,
QSSGRenderSkeleton * skeletonNode,
const QVector< QMatrix4x4 > & poses )
static

Definition at line 121 of file qssglayerrenderdata.cpp.

References QSSGRenderNode::calculateGlobalVariables(), child, QSSGRenderNode::children, collectBoneTransforms(), QMatrix4x4::constData(), POS4BONENORM, POS4BONETRANS, and QSSGRenderGraphObject::type.

Referenced by collectBoneTransforms(), and updateDirtySkeletons().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ collectNode()

template<typename T , typename V >
void collectNode ( V node,
QVector< T > & dst,
int & dstPos )
inline

Definition at line 170 of file qssglayerrenderdata.cpp.

Referenced by maybeQueueNodeForRender().

+ Here is the caller graph for this function:

◆ collectNodeFront()

template<typename T , typename V >
static void collectNodeFront ( V node,
QVector< T > & dst,
int & dstPos )
inlinestatic

Definition at line 180 of file qssglayerrenderdata.cpp.

Referenced by maybeQueueNodeForRender().

+ Here is the caller graph for this function:

◆ createPrepId()

static constexpr QSSGPrepContextId createPrepId ( size_t index,
quint32 frame )
staticconstexpr

Definition at line 478 of file qssglayerrenderdata.cpp.

References frame.

Referenced by QSSGLayerRenderData::getOrCreateExtensionContext().

+ Here is the caller graph for this function:

◆ createRenderablesHelper()

static void createRenderablesHelper ( QSSGLayerRenderData & layer,
const QSSGRenderNode::ChildList & children,
QSSGLayerRenderData::RenderableNodeEntries & renderables,
QSSGRenderHelpers::CreateFlags createFlags )
static

Definition at line 519 of file qssglayerrenderdata.cpp.

References QSet< T >::cend(), createRenderablesHelper(), QList< T >::emplace_back(), it, and QSSGRenderHelpers::Steal.

Referenced by QSSGLayerRenderData::createRenderables(), and createRenderablesHelper().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cullLodInstances()

static void cullLodInstances ( QByteArray & lodData,
const void * instances,
int count,
const QVector3D & cameraPosition,
float minThreshold,
float maxThreshold )
static

Definition at line 2726 of file qssglayerrenderdata.cpp.

References QByteArray::data(), i, QSSGRenderInstanceTableEntry::row0, QSSGRenderInstanceTableEntry::row1, QSSGRenderInstanceTableEntry::row2, QVector4D::w(), QVector3D::x(), QVector3D::y(), and QVector3D::z().

Referenced by QSSGLayerRenderData::prepareInstancing().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ effectiveMaxLightCount()

static int effectiveMaxLightCount ( const QSSGShaderFeatures & features)
inlinestatic

Definition at line 2079 of file qssglayerrenderdata.cpp.

References QSSGShaderFeatures::isSet(), QSSG_MAX_NUM_LIGHTS, QSSG_REDUCED_MAX_NUM_LIGHTS, and QSSGShaderFeatures::ReduceMaxNumLights.

Referenced by QSSGLayerRenderData::prepareForRender().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ furthestToNearestCompare()

static constexpr bool furthestToNearestCompare ( const QSSGRenderableObjectHandle & lhs,
const QSSGRenderableObjectHandle & rhs )
inlinestaticconstexprnoexcept

Definition at line 116 of file qssglayerrenderdata.cpp.

Referenced by QSSGLayerRenderData::getSortedScreenTextureRenderableObjects(), and QSSGLayerRenderData::getSortedTransparentRenderableObjects().

+ Here is the caller graph for this function:

◆ getCameraDataImpl()

static QSSGRenderCameraData getCameraDataImpl ( const QSSGRenderCamera * camera)
static

Definition at line 253 of file qssglayerrenderdata.cpp.

References camera, dir, QVector3D::dotProduct(), ret, QSSGUtils::mat33::transform(), and Qt::Uninitialized.

Referenced by QSSGLayerRenderData::getCameraRenderData(), and QSSGLayerRenderData::getCameraRenderData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getCameraDistanceSq()

static float getCameraDistanceSq ( const QSSGRenderableObject & obj,
const QSSGRenderCameraData & camera )
inlinestaticnoexcept

Definition at line 297 of file qssglayerrenderdata.cpp.

References camera, and QVector3D::dotProduct().

Referenced by QSSGLayerRenderData::prepareModelsForRender(), and QSSGLayerRenderData::prepareParticlesForRender().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getPrepContextIndex()

◆ hasDirtyNonJointNodes()

static bool hasDirtyNonJointNodes ( QSSGRenderNode * node,
bool & hasChildJoints )
static

Definition at line 144 of file qssglayerrenderdata.cpp.

References child, QSSGRenderNode::children, hasDirtyNonJointNodes(), QSSGRenderNode::isDirty(), ret, and QSSGRenderGraphObject::type.

Referenced by hasDirtyNonJointNodes(), and updateDirtySkeletons().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ maybeQueueNodeForRender()

static bool maybeQueueNodeForRender ( QSSGRenderNode & inNode,
QVector< QSSGRenderableNodeEntry > & outRenderableModels,
int & ioRenderableModelsCount,
QVector< QSSGRenderableNodeEntry > & outRenderableParticles,
int & ioRenderableParticlesCount,
QVector< QSSGRenderItem2D * > & outRenderableItem2Ds,
int & ioRenderableItem2DsCount,
QVector< QSSGRenderCamera * > & outCameras,
int & ioCameraCount,
QVector< QSSGRenderLight * > & outLights,
int & ioLightCount,
QVector< QSSGRenderReflectionProbe * > & outReflectionProbes,
int & ioReflectionProbeCount,
quint32 & ioDFSIndex )
static

Definition at line 194 of file qssglayerrenderdata.cpp.

References QSSGRenderNode::Active, collectNode(), collectNodeFront(), QSSGRenderNode::GlobalValuesDirty, QSSGRenderGraphObject::isCamera(), QSSGRenderLight::isEnabled(), QSSGRenderGraphObject::isLight(), QSSGRenderGraphObject::isRenderable(), and maybeQueueNodeForRender().

Referenced by maybeQueueNodeForRender(), and QSSGLayerRenderData::prepareForRender().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nearestToFurthestCompare()

static constexpr bool nearestToFurthestCompare ( const QSSGRenderableObjectHandle & lhs,
const QSSGRenderableObjectHandle & rhs )
inlinestaticconstexprnoexcept

Definition at line 111 of file qssglayerrenderdata.cpp.

Referenced by QSSGLayerRenderData::getSortedBakedLightingModels(), and QSSGLayerRenderData::getSortedOpaqueRenderableObjects().

+ Here is the caller graph for this function:

◆ pipelineStateIndex()

static constexpr size_t pipelineStateIndex ( QSSGRenderablesFilter filter)
staticconstexpr

Definition at line 734 of file qssglayerrenderdata.cpp.

References All, Opaque, and Transparent.

Referenced by QSSGLayerRenderData::prepareRenderables(), and QSSGLayerRenderData::renderRenderables().

+ Here is the caller graph for this function:

◆ prepareModelMaterialsImpl()

template<CullUnrenderables cull = CullUnrenderables::On>
static void prepareModelMaterialsImpl ( QSSGLayerRenderData::RenderableNodeEntries & renderableModels)
static

Definition at line 1385 of file qssglayerrenderdata.cpp.

References QList< T >::at(), QSSGRenderableNodeEntry::Disabled, QSSGRenderModel::materials, QSSGRenderableNodeEntry::Materials, model, On, QList< T >::resize(), QList< T >::size(), and QList< T >::swapItemsAt().

+ Here is the call graph for this function:

◆ Q_LOGGING_CATEGORY()

QT_BEGIN_NAMESPACE Q_LOGGING_CATEGORY ( lcQuick3DRender ,
"qt.quick3d.render"  )

◆ RENDER_FRAME_NEW()

template<typename T , typename... Args>
T * RENDER_FRAME_NEW ( QSSGRenderContextInterface & ctx,
Args &&... args )
inline

Usage: T *ptr = RENDER_FRAME_NEW<T>(context, arg0, arg1, ...); is equivalent to: T *ptr = new T(arg0, arg1, ...); so RENDER_FRAME_NEW() takes the RCI + T's arguments

Definition at line 833 of file qssglayerrenderdata.cpp.

References args, and QSSGLayerRenderData::perFrameAllocator().

+ Here is the call graph for this function:

◆ RENDER_FRAME_NEW_BUFFER()

template<typename T >
QSSGDataRef< T > RENDER_FRAME_NEW_BUFFER ( QSSGRenderContextInterface & ctx,
size_t count )
inline

Definition at line 840 of file qssglayerrenderdata.cpp.

References QSSGLayerRenderData::perFrameAllocator().

+ Here is the call graph for this function:

◆ scopeLight()

static bool scopeLight ( QSSGRenderNode * node,
QSSGRenderNode * lightScope )
static

Definition at line 2066 of file qssglayerrenderdata.cpp.

References QSSGRenderNode::parent.

Referenced by QSSGLayerRenderData::prepareForRender().

+ Here is the caller graph for this function:

◆ sortInstances()

static void sortInstances ( QByteArray & sortedData,
QList< QSSGRhiSortData > & sortData,
const void * instances,
int stride,
int count,
const QVector3D & cameraDirection )
static

Definition at line 2697 of file qssglayerrenderdata.cpp.

References QByteArray::data(), QVector3D::dotProduct(), i, pos, Q_ASSERT, QSSGRenderInstanceTableEntry::row0, QSSGRenderInstanceTableEntry::row1, QSSGRenderInstanceTableEntry::row2, and QVector4D::w().

Referenced by QSSGLayerRenderData::prepareInstancing().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ updateDirtySkeletons()

void updateDirtySkeletons ( const QVector< QSSGRenderableNodeEntry > & renderableNodes)

Definition at line 2087 of file qssglayerrenderdata.cpp.

References BONEDATASIZE4ID, child, collectBoneTransforms(), hasDirtyNonJointNodes(), i, QSSGRenderNode::isDirty(), MAX_MORPH_TARGET_INDEX_SUPPORTS_NORMALS, MAX_MORPH_TARGET_INDEX_SUPPORTS_TANGENTS, qCeil(), qSqrt(), QSSGRenderModel::skeleton, QSSGRenderNode::TransformDirty, and QSSGRenderMorphTarget::weight.

Referenced by QSSGLayerRenderData::prepareForRender().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ verifyPrepContext()

static constexpr bool verifyPrepContext ( QSSGPrepContextId id,
const QSSGRenderer & renderer )
staticconstexpr

Definition at line 480 of file qssglayerrenderdata.cpp.

References getPrepContextIndex(), and renderer.

Referenced by QSSGLayerRenderData::createRenderables(), QSSGLayerRenderData::getGlobalOpacity(), QSSGLayerRenderData::getGlobalTransform(), QSSGLayerRenderData::prepareModelsForRender(), QSSGLayerRenderData::prepareRenderables(), QSSGLayerRenderData::renderRenderables(), QSSGLayerRenderData::setGlobalOpacity(), QSSGLayerRenderData::setGlobalTransform(), QSSGLayerRenderData::setModelMaterials(), and QSSGLayerRenderData::setModelMaterials().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ PREP_CTX_INDEX_MASK

constexpr quint16 PREP_CTX_INDEX_MASK = 0xffff
staticconstexpr

◆ REDUCED_MAX_LIGHT_COUNT_THRESHOLD_BYTES

const int REDUCED_MAX_LIGHT_COUNT_THRESHOLD_BYTES = 4096
static

Definition at line 2077 of file qssglayerrenderdata.cpp.

Referenced by QSSGLayerRenderData::prepareForRender().

◆ s_ProgressiveAAVertexOffsets

const QVector2D s_ProgressiveAAVertexOffsets[QSSGLayerRenderData::MAX_AA_LEVELS]
static
Initial value:
= {
QVector2D(-0.170840f, -0.553840f),
QVector2D(0.162960f, -0.319340f),
QVector2D(0.360260f, -0.245840f),
QVector2D(-0.561340f, -0.149540f),
QVector2D(0.249460f, 0.453460f),
QVector2D(-0.336340f, 0.378260f),
QVector2D(0.340000f, 0.166260f),
QVector2D(0.235760f, 0.527760f),
}
The QVector2D class represents a vector or vertex in 2D space.
Definition qvectornd.h:31

Definition at line 69 of file qssglayerrenderdata.cpp.

Referenced by QSSGLayerRenderData::prepareForRender().