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 | #include "qssgrenderableobjects_p.h" |
6 | |
7 | #include <QtQuick3DRuntimeRender/private/qssgrenderer_p.h> |
8 | #include <QtQuick3DRuntimeRender/private/qssgrhicustommaterialsystem_p.h> |
9 | #include <QtQuick3DRuntimeRender/private/qssgrenderlight_p.h> |
10 | #include <QtQuick3DRuntimeRender/private/qssgrenderdefaultmaterialshadergenerator_p.h> |
11 | |
12 | QT_BEGIN_NAMESPACE |
13 | struct QSSGRenderableImage; |
14 | struct QSSGSubsetRenderable; |
15 | |
16 | QSSGSubsetRenderable::QSSGSubsetRenderable(Type type, |
17 | QSSGRenderableObjectFlags inFlags, |
18 | const QVector3D &inWorldCenterPt, |
19 | QSSGRenderer *rendr, |
20 | const QSSGRenderSubset &inSubset, |
21 | const QSSGModelContext &inModelContext, |
22 | float inOpacity, |
23 | quint32 inSubsetLevelOfDetail, |
24 | const QSSGRenderGraphObject &mat, |
25 | QSSGRenderableImage *inFirstImage, |
26 | QSSGShaderDefaultMaterialKey inShaderKey, |
27 | const QSSGShaderLightListView &inLights) |
28 | : QSSGRenderableObject(type, |
29 | inFlags, |
30 | inWorldCenterPt, |
31 | inModelContext.model.globalTransform, |
32 | inSubset.bounds, |
33 | inModelContext.model.m_depthBiasSq, |
34 | inModelContext.model.instancingLodMin, |
35 | inModelContext.model.instancingLodMax) |
36 | , subsetLevelOfDetail(inSubsetLevelOfDetail) |
37 | , renderer(rendr) |
38 | , modelContext(inModelContext) |
39 | , subset(inSubset) |
40 | , opacity(inOpacity) |
41 | , material(mat) |
42 | , firstImage(inFirstImage) |
43 | , shaderDescription(inShaderKey) |
44 | , lights(inLights) |
45 | { |
46 | if (mat.type == QSSGRenderGraphObject::Type::CustomMaterial) |
47 | depthWriteMode = static_cast<const QSSGRenderCustomMaterial *>(&mat)->m_depthDrawMode; |
48 | else |
49 | depthWriteMode = static_cast<const QSSGRenderDefaultMaterial *>(&mat)->depthDrawMode; |
50 | |
51 | const bool modelBlendParticle = (inModelContext.model.particleBuffer != nullptr |
52 | && inModelContext.model.particleBuffer->particleCount()); |
53 | if (modelBlendParticle) |
54 | globalBounds = inModelContext.model.particleBuffer->bounds(); |
55 | else |
56 | globalBounds.transform(inMatrix: globalTransform); |
57 | } |
58 | |
59 | QSSGParticlesRenderable::QSSGParticlesRenderable(QSSGRenderableObjectFlags inFlags, |
60 | const QVector3D &inWorldCenterPt, |
61 | QSSGRenderer *rendr, |
62 | const QSSGRenderParticles &inParticles, |
63 | QSSGRenderableImage *inFirstImage, |
64 | QSSGRenderableImage *inColorTable, |
65 | const QSSGShaderLightListView &inLights, |
66 | float inOpacity) |
67 | : QSSGRenderableObject(Type::Particles, |
68 | inFlags, |
69 | inWorldCenterPt, |
70 | inParticles.globalTransform, |
71 | inParticles.m_particleBuffer.bounds(), |
72 | inParticles.m_depthBiasSq) |
73 | , renderer(rendr) |
74 | , particles(inParticles) |
75 | , firstImage(inFirstImage) |
76 | , colorTable(inColorTable) |
77 | , lights(inLights) |
78 | , opacity(inOpacity) |
79 | { |
80 | // Bounds are in global space for _model blend_ particles |
81 | globalBounds = inParticles.m_particleBuffer.bounds(); |
82 | if (inParticles.type != QSSGRenderParticles::Type::ModelBlendParticle) |
83 | globalBounds.transform(inMatrix: globalTransform); |
84 | } |
85 | |
86 | QT_END_NAMESPACE |
87 | |