summaryrefslogtreecommitdiffstats
path: root/src/render
diff options
context:
space:
mode:
Diffstat (limited to 'src/render')
-rw-r--r--src/render/backend/cameralens.cpp4
-rw-r--r--src/render/backend/computecommand.cpp3
-rw-r--r--src/render/backend/managers_p.h2
-rw-r--r--src/render/backend/offscreensurfacehelper.cpp2
-rw-r--r--src/render/backend/platformsurfacefilter.cpp2
-rw-r--r--src/render/framegraph/qblitframebuffer.cpp2
-rw-r--r--src/render/framegraph/qbuffercapture.cpp2
-rw-r--r--src/render/framegraph/qcameraselector.cpp2
-rw-r--r--src/render/framegraph/qclearbuffers.cpp2
-rw-r--r--src/render/framegraph/qdebugoverlay.cpp2
-rw-r--r--src/render/framegraph/qdispatchcompute.cpp2
-rw-r--r--src/render/framegraph/qframegraphnode.cpp2
-rw-r--r--src/render/framegraph/qfrustumculling.cpp2
-rw-r--r--src/render/framegraph/qlayerfilter.cpp2
-rw-r--r--src/render/framegraph/qmemorybarrier.cpp2
-rw-r--r--src/render/framegraph/qnodraw.cpp2
-rw-r--r--src/render/framegraph/qnopicking.cpp2
-rw-r--r--src/render/framegraph/qproximityfilter.cpp2
-rw-r--r--src/render/framegraph/qrendercapture.cpp2
-rw-r--r--src/render/framegraph/qrenderpassfilter.cpp11
-rw-r--r--src/render/framegraph/qrenderstateset.cpp2
-rw-r--r--src/render/framegraph/qrendersurfaceselector.cpp4
-rw-r--r--src/render/framegraph/qrendertargetselector.cpp2
-rw-r--r--src/render/framegraph/qsetfence.cpp2
-rw-r--r--src/render/framegraph/qsortpolicy.cpp2
-rw-r--r--src/render/framegraph/qsubtreeenabler.cpp2
-rw-r--r--src/render/framegraph/qtechniquefilter.cpp12
-rw-r--r--src/render/framegraph/qviewport.cpp4
-rw-r--r--src/render/framegraph/qwaitfence.cpp2
-rw-r--r--src/render/frontend/qcamera.cpp2
-rw-r--r--src/render/frontend/qcameralens.cpp2
-rw-r--r--src/render/frontend/qcomputecommand.cpp2
-rw-r--r--src/render/frontend/qlayer.cpp2
-rw-r--r--src/render/frontend/qlevelofdetailboundingsphere.cpp2
-rw-r--r--src/render/frontend/qlevelofdetailswitch.cpp2
-rw-r--r--src/render/frontend/qpickingsettings.cpp2
-rw-r--r--src/render/frontend/qrenderaspect.cpp13
-rw-r--r--src/render/frontend/qrendercapabilities.cpp2
-rw-r--r--src/render/frontend/qrenderpluginfactoryif.cpp2
-rw-r--r--src/render/frontend/qrendertarget.cpp2
-rw-r--r--src/render/frontend/qrendertargetoutput.cpp2
-rw-r--r--src/render/geometry/geometry.cpp21
-rw-r--r--src/render/geometry/geometry_p.h3
-rw-r--r--src/render/geometry/qattribute.cpp2
-rw-r--r--src/render/geometry/qbuffer.cpp2
-rw-r--r--src/render/geometry/qgeometry.cpp39
-rw-r--r--src/render/geometry/qgeometry.h1
-rw-r--r--src/render/geometry/qgeometry_p.h1
-rw-r--r--src/render/geometry/qgeometryfactory.h4
-rw-r--r--src/render/geometry/qgeometryrenderer.cpp2
-rw-r--r--src/render/geometry/qmesh.cpp4
-rw-r--r--src/render/geometry/qmesh_p.h2
-rw-r--r--src/render/io/qgeometryloaderfactory.cpp2
-rw-r--r--src/render/io/qsceneexporter.cpp2
-rw-r--r--src/render/io/qsceneexportplugin.cpp2
-rw-r--r--src/render/io/qsceneimporter.cpp2
-rw-r--r--src/render/io/qsceneimportplugin.cpp2
-rw-r--r--src/render/io/qsceneloader.cpp2
-rw-r--r--src/render/jobs/calcboundingvolumejob.cpp33
-rw-r--r--src/render/jobs/calcboundingvolumejob_p.h2
-rw-r--r--src/render/jobs/filterlayerentityjob.cpp51
-rw-r--r--src/render/jobs/filterlayerentityjob_p.h1
-rw-r--r--src/render/jobs/pickboundingvolumejob.cpp6
-rw-r--r--src/render/jobs/pickboundingvolumejob_p.h1
-rw-r--r--src/render/jobs/pickboundingvolumeutils.cpp116
-rw-r--r--src/render/jobs/pickboundingvolumeutils_p.h9
-rw-r--r--src/render/jobs/raycastingjob.cpp2
-rw-r--r--src/render/lights/qabstractlight.cpp2
-rw-r--r--src/render/lights/qdirectionallight.cpp2
-rw-r--r--src/render/lights/qpointlight.cpp2
-rw-r--r--src/render/lights/qspotlight.cpp2
-rw-r--r--src/render/materialsystem/filterkey.cpp7
-rw-r--r--src/render/materialsystem/filterkey_p.h9
-rw-r--r--src/render/materialsystem/qeffect.cpp12
-rw-r--r--src/render/materialsystem/qfilterkey.cpp2
-rw-r--r--src/render/materialsystem/qgraphicsapifilter.cpp2
-rw-r--r--src/render/materialsystem/qmaterial.cpp12
-rw-r--r--src/render/materialsystem/qparameter.cpp2
-rw-r--r--src/render/materialsystem/qrenderpass.cpp2
-rw-r--r--src/render/materialsystem/qshaderdata.cpp2
-rw-r--r--src/render/materialsystem/qshaderimage.cpp2
-rw-r--r--src/render/materialsystem/qshaderprogram.cpp2
-rw-r--r--src/render/materialsystem/qshaderprogrambuilder.cpp2
-rw-r--r--src/render/materialsystem/qtechnique.cpp12
-rw-r--r--src/render/picking/objectpicker.cpp12
-rw-r--r--src/render/picking/pickeventfilter.cpp2
-rw-r--r--src/render/picking/qabstractraycaster.cpp2
-rw-r--r--src/render/picking/qobjectpicker.cpp2
-rw-r--r--src/render/picking/qpickevent.cpp2
-rw-r--r--src/render/picking/qpicklineevent.cpp2
-rw-r--r--src/render/picking/qpickpointevent.cpp2
-rw-r--r--src/render/picking/qpicktriangleevent.cpp2
-rw-r--r--src/render/picking/qpicktriangleevent_p.h11
-rw-r--r--src/render/picking/qraycaster.cpp2
-rw-r--r--src/render/picking/qraycasterhit.cpp2
-rw-r--r--src/render/picking/qscreenraycaster.cpp2
-rw-r--r--src/render/qrendererplugin.cpp2
-rw-r--r--src/render/raycasting/qabstractcollisionqueryservice.cpp2
-rw-r--r--src/render/renderstates/qalphacoverage.cpp2
-rw-r--r--src/render/renderstates/qalphatest.cpp2
-rw-r--r--src/render/renderstates/qblendequation.cpp2
-rw-r--r--src/render/renderstates/qblendequationarguments.cpp2
-rw-r--r--src/render/renderstates/qclipplane.cpp2
-rw-r--r--src/render/renderstates/qcolormask.cpp2
-rw-r--r--src/render/renderstates/qcullface.cpp2
-rw-r--r--src/render/renderstates/qdepthrange.cpp2
-rw-r--r--src/render/renderstates/qdepthtest.cpp2
-rw-r--r--src/render/renderstates/qdithering.cpp2
-rw-r--r--src/render/renderstates/qfrontface.cpp2
-rw-r--r--src/render/renderstates/qlinewidth.cpp2
-rw-r--r--src/render/renderstates/qmultisampleantialiasing.cpp2
-rw-r--r--src/render/renderstates/qnodepthmask.cpp2
-rw-r--r--src/render/renderstates/qpointsize.cpp2
-rw-r--r--src/render/renderstates/qpolygonoffset.cpp2
-rw-r--r--src/render/renderstates/qrastermode.cpp2
-rw-r--r--src/render/renderstates/qrenderstate.cpp2
-rw-r--r--src/render/renderstates/qscissortest.cpp2
-rw-r--r--src/render/renderstates/qseamlesscubemap.cpp2
-rw-r--r--src/render/renderstates/qstencilmask.cpp2
-rw-r--r--src/render/renderstates/qstenciloperation.cpp2
-rw-r--r--src/render/renderstates/qstenciloperationarguments.cpp2
-rw-r--r--src/render/renderstates/qstenciltest.cpp2
-rw-r--r--src/render/renderstates/qstenciltestarguments.cpp2
-rw-r--r--src/render/shadergraph/qshaderlanguage.cpp2
-rw-r--r--src/render/shadergraph/qshadernode.cpp14
-rw-r--r--src/render/texture/qabstracttexture.cpp2
-rw-r--r--src/render/texture/qabstracttextureimage.cpp2
-rw-r--r--src/render/texture/qpaintedtextureimage.cpp3
-rw-r--r--src/render/texture/qtexture.cpp6
-rw-r--r--src/render/texture/qtextureimage.cpp2
-rw-r--r--src/render/texture/qtexturewrapmode.cpp2
131 files changed, 456 insertions, 183 deletions
diff --git a/src/render/backend/cameralens.cpp b/src/render/backend/cameralens.cpp
index 9b8d7d710..743749210 100644
--- a/src/render/backend/cameralens.cpp
+++ b/src/render/backend/cameralens.cpp
@@ -133,12 +133,12 @@ void CameraLens::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTim
const Matrix4x4 projectionMatrix(node->projectionMatrix());
if (projectionMatrix != m_projection) {
m_projection = projectionMatrix;
- markDirty(AbstractRenderer::AllDirty);
+ markDirty(AbstractRenderer::ParameterDirty);
}
if (!qFuzzyCompare(node->exposure(), m_exposure)) {
m_exposure = node->exposure();
- markDirty(AbstractRenderer::AllDirty);
+ markDirty(AbstractRenderer::ParameterDirty);
}
const QCameraLensPrivate *d = static_cast<const QCameraLensPrivate *>(QNodePrivate::get(node));
diff --git a/src/render/backend/computecommand.cpp b/src/render/backend/computecommand.cpp
index bc82291f0..b80f81eb2 100644
--- a/src/render/backend/computecommand.cpp
+++ b/src/render/backend/computecommand.cpp
@@ -81,7 +81,10 @@ void ComputeCommand::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firs
if (!node)
return;
+ const bool wasEnabled = isEnabled();
BackendNode::syncFromFrontEnd(frontEnd, firstTime);
+ if (wasEnabled != isEnabled())
+ markDirty(AbstractRenderer::ComputeDirty);
if (m_workGroups[0] != node->workGroupX()) {
m_workGroups[0] = node->workGroupX();
diff --git a/src/render/backend/managers_p.h b/src/render/backend/managers_p.h
index a3d42d24a..864c168be 100644
--- a/src/render/backend/managers_p.h
+++ b/src/render/backend/managers_p.h
@@ -200,7 +200,7 @@ public:
class Q_3DRENDERSHARED_PRIVATE_EXPORT ShaderManager : public Qt3DCore::QResourceManager<
Shader,
Qt3DCore::QNodeId,
- Qt3DCore::NonLockingPolicy>
+ Qt3DCore::ObjectLevelLockingPolicy>
{
public:
ShaderManager() {}
diff --git a/src/render/backend/offscreensurfacehelper.cpp b/src/render/backend/offscreensurfacehelper.cpp
index 38558d484..60c80d7b5 100644
--- a/src/render/backend/offscreensurfacehelper.cpp
+++ b/src/render/backend/offscreensurfacehelper.cpp
@@ -80,3 +80,5 @@ void OffscreenSurfaceHelper::createOffscreenSurface()
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_offscreensurfacehelper_p.cpp"
diff --git a/src/render/backend/platformsurfacefilter.cpp b/src/render/backend/platformsurfacefilter.cpp
index 115fb637f..8004bf2e4 100644
--- a/src/render/backend/platformsurfacefilter.cpp
+++ b/src/render/backend/platformsurfacefilter.cpp
@@ -168,3 +168,5 @@ bool SurfaceLocker::isSurfaceValid() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_platformsurfacefilter_p.cpp"
diff --git a/src/render/framegraph/qblitframebuffer.cpp b/src/render/framegraph/qblitframebuffer.cpp
index 252758af4..9a2c4ddfd 100644
--- a/src/render/framegraph/qblitframebuffer.cpp
+++ b/src/render/framegraph/qblitframebuffer.cpp
@@ -456,3 +456,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QBlitFramebuffer::createNodeCreationChange()
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qblitframebuffer.cpp"
diff --git a/src/render/framegraph/qbuffercapture.cpp b/src/render/framegraph/qbuffercapture.cpp
index 3eaa5dfd2..862866838 100644
--- a/src/render/framegraph/qbuffercapture.cpp
+++ b/src/render/framegraph/qbuffercapture.cpp
@@ -83,3 +83,5 @@ QBufferCapture::~QBufferCapture()
} //Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qbuffercapture.cpp"
diff --git a/src/render/framegraph/qcameraselector.cpp b/src/render/framegraph/qcameraselector.cpp
index af293dc56..409d5e83e 100644
--- a/src/render/framegraph/qcameraselector.cpp
+++ b/src/render/framegraph/qcameraselector.cpp
@@ -151,3 +151,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QCameraSelector::createNodeCreationChange()
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qcameraselector.cpp"
diff --git a/src/render/framegraph/qclearbuffers.cpp b/src/render/framegraph/qclearbuffers.cpp
index 31a31420c..d5d27fa60 100644
--- a/src/render/framegraph/qclearbuffers.cpp
+++ b/src/render/framegraph/qclearbuffers.cpp
@@ -248,3 +248,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QClearBuffers::createNodeCreationChange() co
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qclearbuffers.cpp"
diff --git a/src/render/framegraph/qdebugoverlay.cpp b/src/render/framegraph/qdebugoverlay.cpp
index d82ae88ba..e0360b1d8 100644
--- a/src/render/framegraph/qdebugoverlay.cpp
+++ b/src/render/framegraph/qdebugoverlay.cpp
@@ -65,3 +65,5 @@ QDebugOverlay::QDebugOverlay(Qt3DCore::QNode *parent)
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qdebugoverlay.cpp"
diff --git a/src/render/framegraph/qdispatchcompute.cpp b/src/render/framegraph/qdispatchcompute.cpp
index 6e018d8ef..4e5e84039 100644
--- a/src/render/framegraph/qdispatchcompute.cpp
+++ b/src/render/framegraph/qdispatchcompute.cpp
@@ -177,3 +177,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QDispatchCompute::createNodeCreationChange()
QT_END_NAMESPACE
+#include "moc_qdispatchcompute.cpp"
+
diff --git a/src/render/framegraph/qframegraphnode.cpp b/src/render/framegraph/qframegraphnode.cpp
index 6cddf543b..f01aab941 100644
--- a/src/render/framegraph/qframegraphnode.cpp
+++ b/src/render/framegraph/qframegraphnode.cpp
@@ -440,3 +440,5 @@ void QFrameGraphNode::onParentChanged(QObject *)
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qframegraphnode.cpp"
diff --git a/src/render/framegraph/qfrustumculling.cpp b/src/render/framegraph/qfrustumculling.cpp
index c34d666b5..d86044725 100644
--- a/src/render/framegraph/qfrustumculling.cpp
+++ b/src/render/framegraph/qfrustumculling.cpp
@@ -96,3 +96,5 @@ QFrustumCulling::~QFrustumCulling()
QT_END_NAMESPACE
+#include "moc_qfrustumculling.cpp"
+
diff --git a/src/render/framegraph/qlayerfilter.cpp b/src/render/framegraph/qlayerfilter.cpp
index 5557687ce..5cceb420e 100644
--- a/src/render/framegraph/qlayerfilter.cpp
+++ b/src/render/framegraph/qlayerfilter.cpp
@@ -258,3 +258,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QLayerFilter::createNodeCreationChange() con
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qlayerfilter.cpp"
diff --git a/src/render/framegraph/qmemorybarrier.cpp b/src/render/framegraph/qmemorybarrier.cpp
index 5da462f1b..345600cb9 100644
--- a/src/render/framegraph/qmemorybarrier.cpp
+++ b/src/render/framegraph/qmemorybarrier.cpp
@@ -168,3 +168,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QMemoryBarrier::createNodeCreationChange() c
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qmemorybarrier.cpp"
diff --git a/src/render/framegraph/qnodraw.cpp b/src/render/framegraph/qnodraw.cpp
index 46756557e..bd77727ed 100644
--- a/src/render/framegraph/qnodraw.cpp
+++ b/src/render/framegraph/qnodraw.cpp
@@ -140,3 +140,5 @@ QNoDraw::~QNoDraw()
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qnodraw.cpp"
diff --git a/src/render/framegraph/qnopicking.cpp b/src/render/framegraph/qnopicking.cpp
index 069560175..f7bfe6d47 100644
--- a/src/render/framegraph/qnopicking.cpp
+++ b/src/render/framegraph/qnopicking.cpp
@@ -137,3 +137,5 @@ QNoPicking::~QNoPicking()
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qnopicking.cpp"
diff --git a/src/render/framegraph/qproximityfilter.cpp b/src/render/framegraph/qproximityfilter.cpp
index cd1ecf776..7b15c2cbe 100644
--- a/src/render/framegraph/qproximityfilter.cpp
+++ b/src/render/framegraph/qproximityfilter.cpp
@@ -194,3 +194,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QProximityFilter::createNodeCreationChange()
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qproximityfilter.cpp"
diff --git a/src/render/framegraph/qrendercapture.cpp b/src/render/framegraph/qrendercapture.cpp
index 020befd63..45d4a3763 100644
--- a/src/render/framegraph/qrendercapture.cpp
+++ b/src/render/framegraph/qrendercapture.cpp
@@ -408,3 +408,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QRenderCapture::createNodeCreationChange() c
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qrendercapture.cpp"
diff --git a/src/render/framegraph/qrenderpassfilter.cpp b/src/render/framegraph/qrenderpassfilter.cpp
index 34462ebdf..22c368ab2 100644
--- a/src/render/framegraph/qrenderpassfilter.cpp
+++ b/src/render/framegraph/qrenderpassfilter.cpp
@@ -63,8 +63,8 @@ namespace Qt3DRender {
whose Qt3DRender::QFilterKey objects match the keys in QRenderPassFilter are
selected for rendering. If no QRenderPassFilter is present, then all QRenderPass
objects are selected for rendering. The parameters in the list can be used
- to set values for shader parameters. The parameters in QRenderPassFilter are
- overridden by parameters in QTechniqueFilter, QTechnique and QRenderPass.
+ to set values for shader parameters. The parameters in QRenderPassFilter
+ override parameters in QTechniqueFilter, QMaterial, QEffect, QTechnique and QRenderPass.
*/
/*!
@@ -79,7 +79,10 @@ namespace Qt3DRender {
objects are selected for drawing. When RenderPassFilter is present in the FrameGraph,
only the RenderPass objects, whose FilterKey objects match the keys
in RenderPassFilter are selected for rendering. If no RenderPassFilter is present,
- then all RenderPass objects are selected for rendering.
+ then all RenderPass objects are selected for rendering. RenderPassFilter
+ specifies a list of Parameter objects. The parameters in the list can be used
+ to set values for shader parameters. The parameters in RenderPassFilter
+ override parameters in TechniqueFilter, Material, Effect, Technique and RenderPass.
*/
/*!
@@ -219,3 +222,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QRenderPassFilter::createNodeCreationChange(
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qrenderpassfilter.cpp"
diff --git a/src/render/framegraph/qrenderstateset.cpp b/src/render/framegraph/qrenderstateset.cpp
index ac82954c8..5bc831706 100644
--- a/src/render/framegraph/qrenderstateset.cpp
+++ b/src/render/framegraph/qrenderstateset.cpp
@@ -231,3 +231,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QRenderStateSet::createNodeCreationChange()
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qrenderstateset.cpp"
diff --git a/src/render/framegraph/qrendersurfaceselector.cpp b/src/render/framegraph/qrendersurfaceselector.cpp
index df30663cb..2ad97b53c 100644
--- a/src/render/framegraph/qrendersurfaceselector.cpp
+++ b/src/render/framegraph/qrendersurfaceselector.cpp
@@ -257,7 +257,7 @@ void QRenderSurfaceSelector::setSurface(QObject *surfaceObject)
d->m_heightConn = QObject::connect(window, &QWindow::heightChanged, [=] (int) {
d->update();
});
- d->m_screenConn = QObject::connect(window, &QWindow::screenChanged, [=] (QScreen *screen) {
+ d->m_screenConn = QObject::connect(window, &QWindow::screenChanged, [this] (QScreen *screen) {
if (screen && !qFuzzyCompare(surfacePixelRatio(), float(screen->devicePixelRatio())))
setSurfacePixelRatio(float(screen->devicePixelRatio()));
});
@@ -329,3 +329,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QRenderSurfaceSelector::createNodeCreationCh
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qrendersurfaceselector.cpp"
diff --git a/src/render/framegraph/qrendertargetselector.cpp b/src/render/framegraph/qrendertargetselector.cpp
index c997c23cc..ab187f486 100644
--- a/src/render/framegraph/qrendertargetselector.cpp
+++ b/src/render/framegraph/qrendertargetselector.cpp
@@ -184,3 +184,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QRenderTargetSelector::createNodeCreationCha
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qrendertargetselector.cpp"
diff --git a/src/render/framegraph/qsetfence.cpp b/src/render/framegraph/qsetfence.cpp
index 262dbd4ad..9dfb0849c 100644
--- a/src/render/framegraph/qsetfence.cpp
+++ b/src/render/framegraph/qsetfence.cpp
@@ -173,3 +173,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QSetFence::createNodeCreationChange() const
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qsetfence.cpp"
diff --git a/src/render/framegraph/qsortpolicy.cpp b/src/render/framegraph/qsortpolicy.cpp
index 5c04025b0..9e70c532e 100644
--- a/src/render/framegraph/qsortpolicy.cpp
+++ b/src/render/framegraph/qsortpolicy.cpp
@@ -201,3 +201,5 @@ void QSortPolicy::setSortTypes(const QVector<int> &sortTypesInt)
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qsortpolicy.cpp"
diff --git a/src/render/framegraph/qsubtreeenabler.cpp b/src/render/framegraph/qsubtreeenabler.cpp
index e5d182d00..c0f143864 100644
--- a/src/render/framegraph/qsubtreeenabler.cpp
+++ b/src/render/framegraph/qsubtreeenabler.cpp
@@ -183,3 +183,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QSubtreeEnabler::createNodeCreationChange()
} //Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qsubtreeenabler.cpp"
diff --git a/src/render/framegraph/qtechniquefilter.cpp b/src/render/framegraph/qtechniquefilter.cpp
index 5377e1297..f42ee1868 100644
--- a/src/render/framegraph/qtechniquefilter.cpp
+++ b/src/render/framegraph/qtechniquefilter.cpp
@@ -65,8 +65,9 @@ QTechniqueFilterPrivate::QTechniqueFilterPrivate()
a list of Qt3DRender::QFilterKey objects and Qt3DRender::QParameter objects.
When QTechniqueFilter is present in the FrameGraph, only the techiques matching
the keys in the list are used for rendering. The parameters in the list can be used
- to set values for shader parameters. The parameters in QTechniqueFilter are
- overridden by parameters in QTechnique and QRenderPass.
+ to set values for shader parameters. The parameters in QTechniqueFilter
+ override parameters in QMaterial, QEffect, QTechnique and QRenderPass, but are overridden
+ by parameters in QRenderPassFilter.
*/
/*!
@@ -82,8 +83,9 @@ QTechniqueFilterPrivate::QTechniqueFilterPrivate()
a list of FilterKey objects and Parameter objects.
When TechniqueFilter is present in the FrameGraph, only the techiques matching
the keys in list are used for rendering. The parameters in the list can be used
- to set values for shader parameters. The parameters in TechniqueFilter are
- overridden by parameters in Technique and RenderPass.
+ to set values for shader parameters. The parameters in TechniqueFilter
+ override parameters in Material, Effect, Technique and RenderPass, but are overridden
+ by parameters in RenderPassFilter.
*/
/*!
@@ -222,3 +224,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QTechniqueFilter::createNodeCreationChange()
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qtechniquefilter.cpp"
diff --git a/src/render/framegraph/qviewport.cpp b/src/render/framegraph/qviewport.cpp
index 34716c5b5..f8aa9282d 100644
--- a/src/render/framegraph/qviewport.cpp
+++ b/src/render/framegraph/qviewport.cpp
@@ -88,7 +88,7 @@ QViewportPrivate::QViewportPrivate()
*/
/*!
- \qmlproperty rect Viewport::gamma
+ \qmlproperty real Viewport::gamma
Specifies the gamma factor for the viewport. The default is 2.2 which should give proper result on most screens.
*/
@@ -168,3 +168,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QViewport::createNodeCreationChange() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qviewport.cpp"
diff --git a/src/render/framegraph/qwaitfence.cpp b/src/render/framegraph/qwaitfence.cpp
index 737f4e54d..91238c5fa 100644
--- a/src/render/framegraph/qwaitfence.cpp
+++ b/src/render/framegraph/qwaitfence.cpp
@@ -217,3 +217,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QWaitFence::createNodeCreationChange() const
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qwaitfence.cpp"
diff --git a/src/render/frontend/qcamera.cpp b/src/render/frontend/qcamera.cpp
index 4d4e5bf4d..c721ee728 100644
--- a/src/render/frontend/qcamera.cpp
+++ b/src/render/frontend/qcamera.cpp
@@ -1127,3 +1127,5 @@ QMatrix4x4 QCamera::viewMatrix() const
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qcamera.cpp"
diff --git a/src/render/frontend/qcameralens.cpp b/src/render/frontend/qcameralens.cpp
index 621b22778..1d379776a 100644
--- a/src/render/frontend/qcameralens.cpp
+++ b/src/render/frontend/qcameralens.cpp
@@ -634,3 +634,5 @@ void QCameraLens::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change)
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qcameralens.cpp"
diff --git a/src/render/frontend/qcomputecommand.cpp b/src/render/frontend/qcomputecommand.cpp
index dfd9c2033..86825ddad 100644
--- a/src/render/frontend/qcomputecommand.cpp
+++ b/src/render/frontend/qcomputecommand.cpp
@@ -292,3 +292,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QComputeCommand::createNodeCreationChange()
} // Render
QT_END_NAMESPACE
+
+#include "moc_qcomputecommand.cpp"
diff --git a/src/render/frontend/qlayer.cpp b/src/render/frontend/qlayer.cpp
index 416525360..8a1c80cea 100644
--- a/src/render/frontend/qlayer.cpp
+++ b/src/render/frontend/qlayer.cpp
@@ -199,3 +199,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QLayer::createNodeCreationChange() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qlayer.cpp"
diff --git a/src/render/frontend/qlevelofdetailboundingsphere.cpp b/src/render/frontend/qlevelofdetailboundingsphere.cpp
index 8354365d8..ce9688e38 100644
--- a/src/render/frontend/qlevelofdetailboundingsphere.cpp
+++ b/src/render/frontend/qlevelofdetailboundingsphere.cpp
@@ -155,3 +155,5 @@ bool QLevelOfDetailBoundingSphere::operator !=(const QLevelOfDetailBoundingSpher
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qlevelofdetailboundingsphere.cpp"
diff --git a/src/render/frontend/qlevelofdetailswitch.cpp b/src/render/frontend/qlevelofdetailswitch.cpp
index c07d4c4b1..c4a92ba23 100644
--- a/src/render/frontend/qlevelofdetailswitch.cpp
+++ b/src/render/frontend/qlevelofdetailswitch.cpp
@@ -141,3 +141,5 @@ void QLevelOfDetailSwitch::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &)
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qlevelofdetailswitch.cpp"
diff --git a/src/render/frontend/qpickingsettings.cpp b/src/render/frontend/qpickingsettings.cpp
index 0c858aef2..e176f0329 100644
--- a/src/render/frontend/qpickingsettings.cpp
+++ b/src/render/frontend/qpickingsettings.cpp
@@ -308,3 +308,5 @@ void QPickingSettings::setWorldSpaceTolerance(float worldSpaceTolerance)
} // namespace Qt3Drender
QT_END_NAMESPACE
+
+#include "moc_qpickingsettings.cpp"
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp
index 4e8967e6e..fe772faf8 100644
--- a/src/render/frontend/qrenderaspect.cpp
+++ b/src/render/frontend/qrenderaspect.cpp
@@ -322,7 +322,9 @@ QRenderAspectPrivate::QRenderAspectPrivate(QRenderAspect::RenderType type)
m_expandBoundingVolumeJob->addDependency(m_updateWorldBoundingVolumeJob);
m_updateLevelOfDetailJob->addDependency(m_expandBoundingVolumeJob);
m_pickBoundingVolumeJob->addDependency(m_expandBoundingVolumeJob);
+ m_pickBoundingVolumeJob->addDependency(m_updateEntityLayersJob);
m_rayCastingJob->addDependency(m_expandBoundingVolumeJob);
+ m_rayCastingJob->addDependency(m_updateEntityLayersJob);
}
/*! \internal */
@@ -717,17 +719,20 @@ QVector<Qt3DCore::QAspectJobPtr> QRenderAspect::jobsToExecute(qint64 time)
if (entitiesEnabledDirty)
jobs.push_back(d->m_updateTreeEnabledJob);
- if (dirtyBitsForFrame & AbstractRenderer::TransformDirty) {
+ if (entitiesEnabledDirty ||
+ dirtyBitsForFrame & AbstractRenderer::TransformDirty) {
jobs.push_back(d->m_worldTransformJob);
jobs.push_back(d->m_updateWorldBoundingVolumeJob);
}
- if (dirtyBitsForFrame & AbstractRenderer::GeometryDirty ||
+ if (entitiesEnabledDirty ||
+ dirtyBitsForFrame & AbstractRenderer::GeometryDirty ||
dirtyBitsForFrame & AbstractRenderer::BuffersDirty) {
jobs.push_back(d->m_calculateBoundingVolumeJob);
}
- if (dirtyBitsForFrame & AbstractRenderer::GeometryDirty ||
+ if (entitiesEnabledDirty ||
+ dirtyBitsForFrame & AbstractRenderer::GeometryDirty ||
dirtyBitsForFrame & AbstractRenderer::TransformDirty) {
jobs.push_back(d->m_expandBoundingVolumeJob);
}
@@ -997,3 +1002,5 @@ void QRenderAspectPrivate::configurePlugin(const QString &plugin)
QT_END_NAMESPACE
QT3D_REGISTER_NAMESPACED_ASPECT("render", QT_PREPEND_NAMESPACE(Qt3DRender), QRenderAspect)
+
+#include "moc_qrenderaspect.cpp"
diff --git a/src/render/frontend/qrendercapabilities.cpp b/src/render/frontend/qrendercapabilities.cpp
index 3ef0ba01d..5b3e2b710 100644
--- a/src/render/frontend/qrendercapabilities.cpp
+++ b/src/render/frontend/qrendercapabilities.cpp
@@ -875,3 +875,5 @@ int QRenderCapabilities::maxComputeSharedMemorySize() const
} // namespace Qt3Drender
QT_END_NAMESPACE
+
+#include "moc_qrendercapabilities.cpp"
diff --git a/src/render/frontend/qrenderpluginfactoryif.cpp b/src/render/frontend/qrenderpluginfactoryif.cpp
index af567084c..976f3035d 100644
--- a/src/render/frontend/qrenderpluginfactoryif.cpp
+++ b/src/render/frontend/qrenderpluginfactoryif.cpp
@@ -63,3 +63,5 @@ QRenderPlugin *QRenderPluginFactoryIf::create(const QString &key, const QStringL
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qrenderpluginfactoryif_p.cpp"
diff --git a/src/render/frontend/qrendertarget.cpp b/src/render/frontend/qrendertarget.cpp
index 7e0403c13..ae0fb4e3a 100644
--- a/src/render/frontend/qrendertarget.cpp
+++ b/src/render/frontend/qrendertarget.cpp
@@ -161,3 +161,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QRenderTarget::createNodeCreationChange() co
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qrendertarget.cpp"
diff --git a/src/render/frontend/qrendertargetoutput.cpp b/src/render/frontend/qrendertargetoutput.cpp
index 8c0d86134..4eb413d4f 100644
--- a/src/render/frontend/qrendertargetoutput.cpp
+++ b/src/render/frontend/qrendertargetoutput.cpp
@@ -316,3 +316,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QRenderTargetOutput::createNodeCreationChang
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qrendertargetoutput.cpp"
diff --git a/src/render/geometry/geometry.cpp b/src/render/geometry/geometry.cpp
index 56ea936be..58bbcc3ad 100644
--- a/src/render/geometry/geometry.cpp
+++ b/src/render/geometry/geometry.cpp
@@ -55,8 +55,6 @@ namespace Render {
Geometry::Geometry()
: BackendNode(ReadWrite)
, m_geometryDirty(false)
- , m_shouldNotifyMinExtentChanged(false)
- , m_shouldNotifyMaxExtentChanged(false)
{
}
@@ -72,8 +70,6 @@ void Geometry::cleanup()
m_boundingPositionAttribute = Qt3DCore::QNodeId();
m_min = QVector3D();
m_max = QVector3D();
- m_shouldNotifyMinExtentChanged = false;
- m_shouldNotifyMaxExtentChanged = false;
}
void Geometry::syncFromFrontEnd(const QNode *frontEnd, bool firstTime)
@@ -113,27 +109,10 @@ void Geometry::updateExtent(const QVector3D &min, const QVector3D &max)
// Send notification to frontend
if (m_min != min) {
m_min = min;
- m_shouldNotifyMinExtentChanged = true;
}
if (m_max != max) {
m_max = max;
- m_shouldNotifyMaxExtentChanged = true;
- }
-}
-
-// Called from calcboundingvolumejob after all bounding volumes have been
-// updated (in an aspect thread)
-void Geometry::notifyExtentChanged()
-{
- if (m_shouldNotifyMinExtentChanged || m_shouldNotifyMaxExtentChanged) {
- auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId());
- change->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes);
- change->setPropertyName("extent");
- change->setValue(QVariant::fromValue(QPair<QVector3D, QVector3D>(m_min, m_max)));
- notifyObservers(change);
- m_shouldNotifyMinExtentChanged = false;
- m_shouldNotifyMaxExtentChanged = false;
}
}
diff --git a/src/render/geometry/geometry_p.h b/src/render/geometry/geometry_p.h
index fdad63286..8b8a1aa38 100644
--- a/src/render/geometry/geometry_p.h
+++ b/src/render/geometry/geometry_p.h
@@ -79,7 +79,6 @@ public:
inline QVector3D max() const { return m_max; }
void updateExtent(const QVector3D &min, const QVector3D &max);
- void notifyExtentChanged();
private:
QVector<Qt3DCore::QNodeId> m_attributes;
@@ -87,8 +86,6 @@ private:
Qt3DCore::QNodeId m_boundingPositionAttribute;
QVector3D m_min;
QVector3D m_max;
- bool m_shouldNotifyMinExtentChanged;
- bool m_shouldNotifyMaxExtentChanged;
};
} // namespace Render
diff --git a/src/render/geometry/qattribute.cpp b/src/render/geometry/qattribute.cpp
index 84d14cfe1..e58c7d324 100644
--- a/src/render/geometry/qattribute.cpp
+++ b/src/render/geometry/qattribute.cpp
@@ -519,3 +519,5 @@ The signal is emitted with \a vertexBaseType when the dataType changed.
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qattribute.cpp" \ No newline at end of file
diff --git a/src/render/geometry/qbuffer.cpp b/src/render/geometry/qbuffer.cpp
index daf6f91c8..17afce2ce 100644
--- a/src/render/geometry/qbuffer.cpp
+++ b/src/render/geometry/qbuffer.cpp
@@ -493,3 +493,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QBuffer::createNodeCreationChange() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qbuffer.cpp"
diff --git a/src/render/geometry/qgeometry.cpp b/src/render/geometry/qgeometry.cpp
index ac22f2db1..2438932cb 100644
--- a/src/render/geometry/qgeometry.cpp
+++ b/src/render/geometry/qgeometry.cpp
@@ -64,6 +64,24 @@ QGeometryPrivate::~QGeometryPrivate()
{
}
+void QGeometryPrivate::setExtent(const QVector3D &minExtent, const QVector3D &maxExtent)
+{
+ Q_Q(QGeometry);
+ if (m_minExtent != minExtent) {
+ m_minExtent = minExtent;
+ const auto wasBlocked = q->blockNotifications(true);
+ emit q->minExtentChanged(minExtent);
+ q->blockNotifications(wasBlocked);
+ }
+
+ if (m_maxExtent != maxExtent) {
+ m_maxExtent = maxExtent;
+ const auto wasBlocked = q->blockNotifications(true);
+ emit q->maxExtentChanged(maxExtent);
+ q->blockNotifications(wasBlocked);
+ }
+}
+
/*!
\qmltype Geometry
\instantiates Qt3DRender::QGeometry
@@ -151,26 +169,9 @@ QGeometry::QGeometry(QGeometryPrivate &dd, QNode *parent)
{
}
-void QGeometry::sceneChangeEvent(const QSceneChangePtr &change)
+// TODO Unused remove in Qt6
+void QGeometry::sceneChangeEvent(const QSceneChangePtr &)
{
- Q_D(QGeometry);
- QPropertyUpdatedChangePtr e = qSharedPointerCast<QPropertyUpdatedChange>(change);
- if (e->type() == PropertyUpdated) {
- const bool blocked = blockNotifications(true);
- if (e->propertyName() == QByteArrayLiteral("extent")) {
- const QPair<QVector3D, QVector3D> extent = e->value().value<QPair<QVector3D, QVector3D>>();
-
- if (extent.first != d->m_minExtent) {
- d->m_minExtent = extent.first;
- emit minExtentChanged(extent.first);
- }
- if (extent.second != d->m_maxExtent) {
- d->m_maxExtent = extent.second;
- emit maxExtentChanged(d->m_maxExtent);
- }
- }
- blockNotifications(blocked);
- }
}
/*!
diff --git a/src/render/geometry/qgeometry.h b/src/render/geometry/qgeometry.h
index cae637f1f..a4c69cc73 100644
--- a/src/render/geometry/qgeometry.h
+++ b/src/render/geometry/qgeometry.h
@@ -77,6 +77,7 @@ Q_SIGNALS:
Q_REVISION(13) void maxExtentChanged(const QVector3D &maxExtent);
protected:
explicit QGeometry(QGeometryPrivate &dd, Qt3DCore::QNode *parent = nullptr);
+ // TODO Unused remove in Qt6
void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change) override;
private:
diff --git a/src/render/geometry/qgeometry_p.h b/src/render/geometry/qgeometry_p.h
index 94f71d780..c2b3b2851 100644
--- a/src/render/geometry/qgeometry_p.h
+++ b/src/render/geometry/qgeometry_p.h
@@ -66,6 +66,7 @@ public:
QGeometryPrivate();
~QGeometryPrivate();
+ void setExtent(const QVector3D &minExtent, const QVector3D &maxExtent);
QVector<QAttribute *> m_attributes;
QAttribute *m_boundingVolumePositionAttribute;
diff --git a/src/render/geometry/qgeometryfactory.h b/src/render/geometry/qgeometryfactory.h
index 92acbc67d..2c8ada27e 100644
--- a/src/render/geometry/qgeometryfactory.h
+++ b/src/render/geometry/qgeometryfactory.h
@@ -55,7 +55,9 @@ class Q_3DRENDERSHARED_EXPORT QGeometryFactory : public QAbstractFunctor
public:
virtual ~QGeometryFactory();
virtual QGeometry *operator()() = 0;
- virtual bool operator ==(const QGeometryFactory &other) const = 0;
+ virtual bool equals(const QGeometryFactory &other) const = 0;
+ friend bool operator==(const QGeometryFactory &lhs, const QGeometryFactory &rhs)
+ { return lhs.equals(rhs); }
};
typedef QSharedPointer<QGeometryFactory> QGeometryFactoryPtr;
diff --git a/src/render/geometry/qgeometryrenderer.cpp b/src/render/geometry/qgeometryrenderer.cpp
index 7abbe8db8..de3896da1 100644
--- a/src/render/geometry/qgeometryrenderer.cpp
+++ b/src/render/geometry/qgeometryrenderer.cpp
@@ -530,3 +530,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QGeometryRenderer::createNodeCreationChange(
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qgeometryrenderer.cpp"
diff --git a/src/render/geometry/qmesh.cpp b/src/render/geometry/qmesh.cpp
index 1f05a71f6..61c0d5c18 100644
--- a/src/render/geometry/qmesh.cpp
+++ b/src/render/geometry/qmesh.cpp
@@ -391,7 +391,7 @@ QGeometry *MeshLoaderFunctor::operator()()
/*!
* \internal
*/
-bool MeshLoaderFunctor::operator ==(const QGeometryFactory &other) const
+bool MeshLoaderFunctor::equals(const QGeometryFactory &other) const
{
const MeshLoaderFunctor *otherFunctor = functor_cast<MeshLoaderFunctor>(&other);
if (otherFunctor != nullptr)
@@ -445,3 +445,5 @@ void MeshDownloadRequest::onCompleted()
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qmesh.cpp"
diff --git a/src/render/geometry/qmesh_p.h b/src/render/geometry/qmesh_p.h
index c80c930c5..d202e798b 100644
--- a/src/render/geometry/qmesh_p.h
+++ b/src/render/geometry/qmesh_p.h
@@ -119,7 +119,7 @@ public :
QMesh::Status status() const { return m_status; }
QGeometry *operator()() override;
- bool operator ==(const QGeometryFactory &other) const override;
+ bool equals(const QGeometryFactory &other) const override;
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
QT3D_FUNCTOR(MeshLoaderFunctor)
diff --git a/src/render/io/qgeometryloaderfactory.cpp b/src/render/io/qgeometryloaderfactory.cpp
index c34469dc1..d33fa8ae3 100644
--- a/src/render/io/qgeometryloaderfactory.cpp
+++ b/src/render/io/qgeometryloaderfactory.cpp
@@ -56,3 +56,5 @@ QGeometryLoaderFactory::~QGeometryLoaderFactory()
QT_END_NAMESPACE
+#include "moc_qgeometryloaderfactory_p.cpp"
+
diff --git a/src/render/io/qsceneexporter.cpp b/src/render/io/qsceneexporter.cpp
index 71a0120c0..fcc9f93c0 100644
--- a/src/render/io/qsceneexporter.cpp
+++ b/src/render/io/qsceneexporter.cpp
@@ -72,3 +72,5 @@ void QSceneExporter::logInfo(const QString &info)
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qsceneexporter_p.cpp"
diff --git a/src/render/io/qsceneexportplugin.cpp b/src/render/io/qsceneexportplugin.cpp
index b7dea8f63..f16195006 100644
--- a/src/render/io/qsceneexportplugin.cpp
+++ b/src/render/io/qsceneexportplugin.cpp
@@ -64,3 +64,5 @@ QSceneExporter *QSceneExportPlugin::create(const QString &key, const QStringList
QT_END_NAMESPACE
+#include "moc_qsceneexportplugin_p.cpp"
+
diff --git a/src/render/io/qsceneimporter.cpp b/src/render/io/qsceneimporter.cpp
index f58a435eb..8c8633eea 100644
--- a/src/render/io/qsceneimporter.cpp
+++ b/src/render/io/qsceneimporter.cpp
@@ -86,3 +86,5 @@ void QSceneImporter::logInfo(const QString &info)
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qsceneimporter_p.cpp"
diff --git a/src/render/io/qsceneimportplugin.cpp b/src/render/io/qsceneimportplugin.cpp
index 97e7f3d35..4f185ae44 100644
--- a/src/render/io/qsceneimportplugin.cpp
+++ b/src/render/io/qsceneimportplugin.cpp
@@ -64,3 +64,5 @@ QSceneImporter *QSceneImportPlugin::create(const QString &key, const QStringList
QT_END_NAMESPACE
+#include "moc_qsceneimportplugin_p.cpp"
+
diff --git a/src/render/io/qsceneloader.cpp b/src/render/io/qsceneloader.cpp
index ce2aa034e..d59564f2e 100644
--- a/src/render/io/qsceneloader.cpp
+++ b/src/render/io/qsceneloader.cpp
@@ -393,3 +393,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QSceneLoader::createNodeCreationChange() con
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qsceneloader.cpp"
diff --git a/src/render/jobs/calcboundingvolumejob.cpp b/src/render/jobs/calcboundingvolumejob.cpp
index dc58eb6b9..b906bf9af 100644
--- a/src/render/jobs/calcboundingvolumejob.cpp
+++ b/src/render/jobs/calcboundingvolumejob.cpp
@@ -53,6 +53,7 @@
#include <Qt3DRender/private/buffervisitor_p.h>
#include <Qt3DRender/private/entityvisitor_p.h>
#include <Qt3DCore/private/qaspectmanager_p.h>
+#include <Qt3DRender/private/qgeometry_p.h>
#include <QtCore/qmath.h>
#if QT_CONFIG(concurrent)
@@ -399,8 +400,33 @@ public:
} // anonymous
+class CalculateBoundingVolumeJobPrivate : public Qt3DCore::QAspectJobPrivate
+{
+public:
+ CalculateBoundingVolumeJobPrivate(CalculateBoundingVolumeJob *q) : q_ptr(q) {}
+ ~CalculateBoundingVolumeJobPrivate() override = default;
+
+ void postFrame(Qt3DCore::QAspectManager *aspectManager) override
+ {
+ for (Geometry *backend : m_updatedGeometries) {
+ Qt3DRender::QGeometry *node = qobject_cast<Qt3DRender::QGeometry *>(aspectManager->lookupNode(backend->peerId()));
+ if (!node)
+ continue;
+ Qt3DRender::QGeometryPrivate *dNode = static_cast<Qt3DRender::QGeometryPrivate *>(Qt3DCore::QNodePrivate::get(node));
+ dNode->setExtent(backend->min(), backend->max());
+ }
+
+ m_updatedGeometries.clear();
+ }
+
+ QVector<Geometry *> m_updatedGeometries;
+ CalculateBoundingVolumeJob *q_ptr;
+ Q_DECLARE_PUBLIC(CalculateBoundingVolumeJob)
+};
+
CalculateBoundingVolumeJob::CalculateBoundingVolumeJob()
- : m_manager(nullptr)
+ : Qt3DCore::QAspectJob(*new CalculateBoundingVolumeJobPrivate(this))
+ , m_manager(nullptr)
, m_node(nullptr)
{
SET_JOB_RUN_STAT_TYPE(this, JobTypes::CalcBoundingVolume, 0)
@@ -429,9 +455,8 @@ void CalculateBoundingVolumeJob::run()
updatedGeometries += calculateLocalBoundingVolume(m_manager, data);
}
- // Send extent updates to frontend
- for (Geometry *geometry : updatedGeometries)
- geometry->notifyExtentChanged();
+ Q_D(CalculateBoundingVolumeJob);
+ d->m_updatedGeometries = std::move(updatedGeometries);
}
void CalculateBoundingVolumeJob::setRoot(Entity *node)
diff --git a/src/render/jobs/calcboundingvolumejob_p.h b/src/render/jobs/calcboundingvolumejob_p.h
index 3b62c83cd..ee9ac8889 100644
--- a/src/render/jobs/calcboundingvolumejob_p.h
+++ b/src/render/jobs/calcboundingvolumejob_p.h
@@ -64,6 +64,7 @@ namespace Render {
class NodeManagers;
class Entity;
+class CalculateBoundingVolumeJobPrivate;
class Q_3DRENDERSHARED_PRIVATE_EXPORT CalculateBoundingVolumeJob : public Qt3DCore::QAspectJob
{
@@ -75,6 +76,7 @@ public:
void run() override;
private:
+ Q_DECLARE_PRIVATE(CalculateBoundingVolumeJob);
NodeManagers *m_manager;
Entity *m_node;
};
diff --git a/src/render/jobs/filterlayerentityjob.cpp b/src/render/jobs/filterlayerentityjob.cpp
index ae3cced59..401bbc148 100644
--- a/src/render/jobs/filterlayerentityjob.cpp
+++ b/src/render/jobs/filterlayerentityjob.cpp
@@ -75,6 +75,33 @@ void FilterLayerEntityJob::run()
std::sort(m_filteredEntities.begin(), m_filteredEntities.end());
}
+void FilterLayerEntityJob::filterEntityAgainstLayers(Entity *entity,
+ const Qt3DCore::QNodeIdVector &layerIds,
+ const QLayerFilter::FilterMode filterMode)
+{
+ // Perform filtering
+ switch (filterMode) {
+ case QLayerFilter::AcceptAnyMatchingLayers: {
+ filterAcceptAnyMatchingLayers(entity, layerIds);
+ break;
+ }
+ case QLayerFilter::AcceptAllMatchingLayers: {
+ filterAcceptAllMatchingLayers(entity, layerIds);
+ break;
+ }
+ case QLayerFilter::DiscardAnyMatchingLayers: {
+ filterDiscardAnyMatchingLayers(entity, layerIds);
+ break;
+ }
+ case QLayerFilter::DiscardAllMatchingLayers: {
+ filterDiscardAllMatchingLayers(entity, layerIds);
+ break;
+ }
+ default:
+ Q_UNREACHABLE();
+ }
+}
+
// We accept the entity if it contains any of the layers that are in the layer filter
void FilterLayerEntityJob::filterAcceptAnyMatchingLayers(Entity *entity,
const Qt3DCore::QNodeIdVector &layerIds)
@@ -181,28 +208,8 @@ void FilterLayerEntityJob::filterLayerAndEntity()
const QLayerFilter::FilterMode filterMode = layerFilter->filterMode();
// Perform filtering
- for (Entity *entity : entitiesToFilter) {
- switch (filterMode) {
- case QLayerFilter::AcceptAnyMatchingLayers: {
- filterAcceptAnyMatchingLayers(entity, layerIds);
- break;
- }
- case QLayerFilter::AcceptAllMatchingLayers: {
- filterAcceptAllMatchingLayers(entity, layerIds);
- break;
- }
- case QLayerFilter::DiscardAnyMatchingLayers: {
- filterDiscardAnyMatchingLayers(entity, layerIds);
- break;
- }
- case QLayerFilter::DiscardAllMatchingLayers: {
- filterDiscardAllMatchingLayers(entity, layerIds);
- break;
- }
- default:
- Q_UNREACHABLE();
- }
- }
+ for (Entity *entity : entitiesToFilter)
+ filterEntityAgainstLayers(entity, layerIds, filterMode);
// Entities to filter for the next frame are the filtered result of the
// current LayerFilter
diff --git a/src/render/jobs/filterlayerentityjob_p.h b/src/render/jobs/filterlayerentityjob_p.h
index 33023775f..6e8636f28 100644
--- a/src/render/jobs/filterlayerentityjob_p.h
+++ b/src/render/jobs/filterlayerentityjob_p.h
@@ -80,6 +80,7 @@ public:
// QAspectJob interface
void run() final;
+ void filterEntityAgainstLayers(Entity *entity, const Qt3DCore::QNodeIdVector &layerIds, const QLayerFilter::FilterMode filterMode);
void filterAcceptAnyMatchingLayers(Entity *entity, const Qt3DCore::QNodeIdVector &layerIds);
void filterAcceptAllMatchingLayers(Entity *entity, const Qt3DCore::QNodeIdVector &layerIds);
void filterDiscardAnyMatchingLayers(Entity *entity, const Qt3DCore::QNodeIdVector &layerIds);
diff --git a/src/render/jobs/pickboundingvolumejob.cpp b/src/render/jobs/pickboundingvolumejob.cpp
index eebacc681..7519cbd9c 100644
--- a/src/render/jobs/pickboundingvolumejob.cpp
+++ b/src/render/jobs/pickboundingvolumejob.cpp
@@ -330,6 +330,7 @@ bool PickBoundingVolumeJob::runHelper()
}
PickingUtils::HierarchicalEntityPicker entityPicker(ray);
+ entityPicker.setLayerFilterIds(vca.layersFilters);
if (entityPicker.collectHits(m_manager, m_node)) {
if (trianglePickingRequested) {
PickingUtils::TriangleCollisionGathererFunctor gathererFunctor;
@@ -472,6 +473,7 @@ void PickBoundingVolumeJob::dispatchPickEvents(const QMouseEvent &event,
case QEvent::MouseButtonPress: {
// Store pressed object handle
m_currentPicker = objectPickerHandle;
+ m_currentViewport = viewportNodeId;
// Send pressed event to m_currentPicker
d->dispatches.push_back({objectPicker->peerId(), event.type(), pickEvent, viewportNodeId});
objectPicker->setPressed(true);
@@ -489,6 +491,7 @@ void PickBoundingVolumeJob::dispatchPickEvents(const QMouseEvent &event,
PickBoundingVolumeJobPrivate::MouseButtonClick,
pickEvent, viewportNodeId});
m_currentPicker = HObjectPicker();
+ m_currentViewport = {};
}
break;
}
@@ -533,8 +536,9 @@ void PickBoundingVolumeJob::dispatchPickEvents(const QMouseEvent &event,
switch (event.type()) {
case QEvent::MouseButtonRelease: {
// Send release event to m_currentPicker
- if (lastCurrentPicker != nullptr) {
+ if (lastCurrentPicker != nullptr && m_currentViewport == viewportNodeId) {
m_currentPicker = HObjectPicker();
+ m_currentViewport = {};
QPickEventPtr pickEvent(new QPickEvent);
lastCurrentPicker->setPressed(false);
d->dispatches.push_back({lastCurrentPicker->peerId(), event.type(), pickEvent, viewportNodeId});
diff --git a/src/render/jobs/pickboundingvolumejob_p.h b/src/render/jobs/pickboundingvolumejob_p.h
index 4f2c4340e..286bbb051 100644
--- a/src/render/jobs/pickboundingvolumejob_p.h
+++ b/src/render/jobs/pickboundingvolumejob_p.h
@@ -112,6 +112,7 @@ private:
bool m_pickersDirty;
bool m_oneHoverAtLeast;
HObjectPicker m_currentPicker;
+ Qt3DCore::QNodeId m_currentViewport;
QVector<HObjectPicker> m_hoveredPickers;
QVector<HObjectPicker> m_hoveredPickersToClear;
};
diff --git a/src/render/jobs/pickboundingvolumeutils.cpp b/src/render/jobs/pickboundingvolumeutils.cpp
index 1d22e8645..f4c5cc094 100644
--- a/src/render/jobs/pickboundingvolumeutils.cpp
+++ b/src/render/jobs/pickboundingvolumeutils.cpp
@@ -52,6 +52,9 @@
#include <Qt3DRender/private/segmentsvisitor_p.h>
#include <Qt3DRender/private/pointsvisitor_p.h>
#include <Qt3DRender/private/layer_p.h>
+#include <Qt3DRender/private/layerfilternode_p.h>
+#include <Qt3DRender/private/rendersettings_p.h>
+#include <Qt3DRender/private/filterlayerentityjob_p.h>
#include <vector>
#include <algorithm>
@@ -105,6 +108,11 @@ ViewportCameraAreaDetails ViewportCameraAreaGatherer::gatherUpViewportCameraArea
// prevent picking in the presence of a NoPicking node
return {};
}
+ case FrameGraphNode::LayerFilter: {
+ auto fnode = static_cast<const LayerFilterNode *>(node);
+ vca.layersFilters.push_back(fnode->peerId());
+ break;
+ }
default:
break;
}
@@ -139,7 +147,8 @@ bool ViewportCameraAreaGatherer::isUnique(const QVector<ViewportCameraAreaDetail
if (vca.cameraId == listItem.cameraId &&
vca.viewport == listItem.viewport &&
vca.surface == listItem.surface &&
- vca.area == listItem.area)
+ vca.area == listItem.area &&
+ vca.layersFilters == listItem.layersFilters)
return false;
}
return true;
@@ -700,16 +709,19 @@ HitList PointCollisionGathererFunctor::pick(const Entity *entity) const
HierarchicalEntityPicker::HierarchicalEntityPicker(const QRay3D &ray, bool requireObjectPicker)
: m_ray(ray)
, m_objectPickersRequired(requireObjectPicker)
- , m_filterMode(QAbstractRayCaster::AcceptAnyMatchingLayers)
{
+}
+void HierarchicalEntityPicker::setLayerFilterIds(const Qt3DCore::QNodeIdVector &layerFilterIds)
+{
+ m_layerFilterIds = layerFilterIds;
}
-void HierarchicalEntityPicker::setFilterLayers(const Qt3DCore::QNodeIdVector &layerIds, QAbstractRayCaster::FilterMode mode)
+void HierarchicalEntityPicker::setLayerIds(const Qt3DCore::QNodeIdVector &layerIds,
+ QAbstractRayCaster::FilterMode mode)
{
- m_filterMode = mode;
m_layerIds = layerIds;
- std::sort(m_layerIds.begin(), m_layerIds.end());
+ m_layerFilterMode = mode;
}
bool HierarchicalEntityPicker::collectHits(NodeManagers *manager, Entity *root)
@@ -722,60 +734,37 @@ bool HierarchicalEntityPicker::collectHits(NodeManagers *manager, Entity *root)
struct EntityData {
Entity* entity;
bool hasObjectPicker;
- Qt3DCore::QNodeIdVector recursiveLayers;
int priority;
};
std::vector<EntityData> worklist;
- worklist.push_back({root, !root->componentHandle<ObjectPicker>().isNull(), {}, 0});
-
- LayerManager *layerManager = manager->layerManager();
+ worklist.push_back({root, !root->componentHandle<ObjectPicker>().isNull(), 0});
+
+ // Record all entities that satisfy layerFiltering. We can then check against
+ // that to see if a picked Entity also satisfies the layer filtering
+
+ // Note: PickBoundingVolumeJob filters against LayerFilter nodes (FG) whereas
+ // the RayCastingJob filters only against a set of Layers and a filter Mode
+ const bool hasLayerFilters = m_layerFilterIds.size() > 0;
+ const bool hasLayers = m_layerIds.size() > 0;
+ const bool hasLayerFiltering = hasLayerFilters || hasLayers;
+ QVector<Entity *> layerFilterEntities;
+ FilterLayerEntityJob layerFilterJob;
+ layerFilterJob.setManager(manager);
+
+ if (hasLayerFilters) {
+ // Note: we expect UpdateEntityLayersJob was called beforehand to handle layer recursivness
+ // Filtering against LayerFilters (PickBoundingVolumeJob)
+ if (m_layerFilterIds.size()) {
+ layerFilterJob.setLayerFilters(m_layerFilterIds);
+ layerFilterJob.run();
+ layerFilterEntities = layerFilterJob.filteredEntities();
+ }
+ }
while (!worklist.empty()) {
EntityData current = worklist.back();
worklist.pop_back();
- bool accepted = true;
- if (m_layerIds.size()) {
- // TODO investigate reusing logic from LayerFilter job
- Qt3DCore::QNodeIdVector filterLayers = current.recursiveLayers + current.entity->componentsUuid<Layer>();
-
- // remove disabled layers
- filterLayers.erase(std::remove_if(filterLayers.begin(), filterLayers.end(),
- [layerManager](const Qt3DCore::QNodeId layerId) {
- Layer *layer = layerManager->lookupResource(layerId);
- return !layer || !layer->isEnabled();
- }), filterLayers.end());
-
- std::sort(filterLayers.begin(), filterLayers.end());
-
- Qt3DCore::QNodeIdVector commonIds;
- std::set_intersection(m_layerIds.cbegin(), m_layerIds.cend(),
- filterLayers.cbegin(), filterLayers.cend(),
- std::back_inserter(commonIds));
-
- switch (m_filterMode) {
- case QAbstractRayCaster::AcceptAnyMatchingLayers: {
- accepted = !commonIds.empty();
- break;
- }
- case QAbstractRayCaster::AcceptAllMatchingLayers: {
- accepted = commonIds == m_layerIds;
- break;
- }
- case QAbstractRayCaster::DiscardAnyMatchingLayers: {
- accepted = commonIds.empty();
- break;
- }
- case QAbstractRayCaster::DiscardAllMatchingLayers: {
- accepted = !(commonIds == m_layerIds);
- break;
- }
- default:
- Q_UNREACHABLE();
- break;
- }
- }
-
// first pick entry sub-scene-graph
QCollisionQueryResult::Hit queryResult =
rayCasting.query(m_ray, current.entity->worldBoundingVolumeWithChildren());
@@ -784,21 +773,27 @@ bool HierarchicalEntityPicker::collectHits(NodeManagers *manager, Entity *root)
// if we get a hit, we check again for this specific entity
queryResult = rayCasting.query(m_ray, current.entity->worldBoundingVolume());
- if (accepted && queryResult.m_distance >= 0.f && (current.hasObjectPicker || !m_objectPickersRequired)) {
+
+ // Check Entity is in selected Layers if we have LayerIds or LayerFilterIds
+ // Note: it's not because a parent doesn't satisfy the layerFiltering that a child might not.
+ // Therefore we need to keep traversing children in all cases
+
+ // Are we filtering against layerIds (RayCastingJob)
+ if (hasLayers) {
+ // QLayerFilter::FilterMode and QAbstractRayCaster::FilterMode are the same
+ layerFilterJob.filterEntityAgainstLayers(current.entity, m_layerIds, static_cast<QLayerFilter::FilterMode>(m_layerFilterMode));
+ layerFilterEntities = layerFilterJob.filteredEntities();
+ }
+
+ const bool isInLayers = !hasLayerFiltering || layerFilterEntities.contains(current.entity);
+
+ if (isInLayers && queryResult.m_distance >= 0.f && (current.hasObjectPicker || !m_objectPickersRequired)) {
m_entities.push_back(current.entity);
m_hits.push_back(queryResult);
// Record entry for entity/priority
m_entityToPriorityTable.insert(current.entity->peerId(), current.priority);
}
- Qt3DCore::QNodeIdVector recursiveLayers;
- const Qt3DCore::QNodeIdVector entityLayers = current.entity->componentsUuid<Layer>();
- for (const Qt3DCore::QNodeId layerId : entityLayers) {
- Layer *layer = layerManager->lookupResource(layerId);
- if (layer->recursive())
- recursiveLayers << layerId;
- }
-
// and pick children
const auto childrenHandles = current.entity->childrenHandles();
for (const HEntity &handle : childrenHandles) {
@@ -806,7 +801,6 @@ bool HierarchicalEntityPicker::collectHits(NodeManagers *manager, Entity *root)
if (child) {
ObjectPicker *childPicker = child->renderComponent<ObjectPicker>();
worklist.push_back({child, current.hasObjectPicker || childPicker,
- current.recursiveLayers + recursiveLayers,
(childPicker ? childPicker->priority() : current.priority)});
}
}
diff --git a/src/render/jobs/pickboundingvolumeutils_p.h b/src/render/jobs/pickboundingvolumeutils_p.h
index fa3e701c2..1fe81fc46 100644
--- a/src/render/jobs/pickboundingvolumeutils_p.h
+++ b/src/render/jobs/pickboundingvolumeutils_p.h
@@ -83,8 +83,9 @@ struct Q_AUTOTEST_EXPORT ViewportCameraAreaDetails
QRectF viewport;
QSize area;
QSurface *surface = nullptr;
+ Qt3DCore::QNodeIdVector layersFilters;
};
-QT3D_DECLARE_TYPEINFO_3(Qt3DRender, Render, PickingUtils, ViewportCameraAreaDetails, Q_PRIMITIVE_TYPE)
+QT3D_DECLARE_TYPEINFO_3(Qt3DRender, Render, PickingUtils, ViewportCameraAreaDetails, Q_COMPLEX_TYPE)
class Q_AUTOTEST_EXPORT ViewportCameraAreaGatherer
{
@@ -108,7 +109,8 @@ class Q_AUTOTEST_EXPORT HierarchicalEntityPicker
public:
explicit HierarchicalEntityPicker(const RayCasting::QRay3D &ray, bool requireObjectPicker = true);
- void setFilterLayers(const Qt3DCore::QNodeIdVector &layerIds, QAbstractRayCaster::FilterMode mode);
+ void setLayerFilterIds(const Qt3DCore::QNodeIdVector &layerFilterIds);
+ void setLayerIds(const Qt3DCore::QNodeIdVector &layerIds, QAbstractRayCaster::FilterMode mode);
bool collectHits(NodeManagers *manager, Entity *root);
inline HitList hits() const { return m_hits; }
@@ -120,8 +122,9 @@ private:
HitList m_hits;
QVector<Entity *> m_entities;
bool m_objectPickersRequired;
+ Qt3DCore::QNodeIdVector m_layerFilterIds;
Qt3DCore::QNodeIdVector m_layerIds;
- QAbstractRayCaster::FilterMode m_filterMode;
+ QAbstractRayCaster::FilterMode m_layerFilterMode = QAbstractRayCaster::AcceptAnyMatchingLayers;
QHash<Qt3DCore::QNodeId, int> m_entityToPriorityTable;
};
diff --git a/src/render/jobs/raycastingjob.cpp b/src/render/jobs/raycastingjob.cpp
index b7d4c4b7c..56f681a2c 100644
--- a/src/render/jobs/raycastingjob.cpp
+++ b/src/render/jobs/raycastingjob.cpp
@@ -202,7 +202,7 @@ bool RayCastingJob::runHelper()
for (const QRay3D &ray: qAsConst(rays)) {
PickingUtils::HitList sphereHits;
PickingUtils::HierarchicalEntityPicker entityPicker(ray, false);
- entityPicker.setFilterLayers(pair.second->layerIds(), pair.second->filterMode());
+ entityPicker.setLayerIds(pair.second->layerIds(), pair.second->filterMode());
if (entityPicker.collectHits(m_manager, m_node)) {
if (trianglePickingRequested) {
PickingUtils::TriangleCollisionGathererFunctor gathererFunctor;
diff --git a/src/render/lights/qabstractlight.cpp b/src/render/lights/qabstractlight.cpp
index 5ad16d3b4..0d25a247d 100644
--- a/src/render/lights/qabstractlight.cpp
+++ b/src/render/lights/qabstractlight.cpp
@@ -183,3 +183,5 @@ void QAbstractLight::setIntensity(float value)
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qabstractlight.cpp"
diff --git a/src/render/lights/qdirectionallight.cpp b/src/render/lights/qdirectionallight.cpp
index 51827b644..1ab43704c 100644
--- a/src/render/lights/qdirectionallight.cpp
+++ b/src/render/lights/qdirectionallight.cpp
@@ -146,3 +146,5 @@ QVector3D QDirectionalLight::worldDirection() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qdirectionallight.cpp"
diff --git a/src/render/lights/qpointlight.cpp b/src/render/lights/qpointlight.cpp
index c16291709..2a14a2d40 100644
--- a/src/render/lights/qpointlight.cpp
+++ b/src/render/lights/qpointlight.cpp
@@ -226,3 +226,5 @@ void QPointLight::setQuadraticAttenuation(float value)
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qpointlight.cpp"
diff --git a/src/render/lights/qspotlight.cpp b/src/render/lights/qspotlight.cpp
index c725a6baf..5b650dfe0 100644
--- a/src/render/lights/qspotlight.cpp
+++ b/src/render/lights/qspotlight.cpp
@@ -292,3 +292,5 @@ void QSpotLight::setCutOffAngle(float value)
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qspotlight.cpp"
diff --git a/src/render/materialsystem/filterkey.cpp b/src/render/materialsystem/filterkey.cpp
index e6c37b241..c6a4fb47c 100644
--- a/src/render/materialsystem/filterkey.cpp
+++ b/src/render/materialsystem/filterkey.cpp
@@ -83,7 +83,7 @@ void FilterKey::syncFromFrontEnd(const QNode *frontEnd, bool firstTime)
}
}
-bool FilterKey::operator ==(const FilterKey &other)
+bool FilterKey::equals(const FilterKey &other) const
{
if (&other == this)
return true;
@@ -97,11 +97,6 @@ bool FilterKey::operator ==(const FilterKey &other)
other.value() == value());
}
-bool FilterKey::operator !=(const FilterKey &other)
-{
- return !operator ==(other);
-}
-
} // namespace Render
} // namespace Qt3DRender
diff --git a/src/render/materialsystem/filterkey_p.h b/src/render/materialsystem/filterkey_p.h
index 91d0ba1f0..1fe6bba7b 100644
--- a/src/render/materialsystem/filterkey_p.h
+++ b/src/render/materialsystem/filterkey_p.h
@@ -72,10 +72,15 @@ public:
const QVariant &value() const { return m_value; }
const QString &name() const { return m_name; }
void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override;
- bool operator ==(const FilterKey &other);
- bool operator !=(const FilterKey &other);
+
+ friend bool operator==(const FilterKey &lhs, const FilterKey &rhs)
+ { return lhs.equals(rhs); }
+ friend bool operator !=(const FilterKey &lhs, const FilterKey &rhs)
+ { return !lhs.equals(rhs); }
private:
+ bool equals(const FilterKey &other) const;
+
QVariant m_value;
QString m_name;
};
diff --git a/src/render/materialsystem/qeffect.cpp b/src/render/materialsystem/qeffect.cpp
index 9f4b3db94..f846c6bd3 100644
--- a/src/render/materialsystem/qeffect.cpp
+++ b/src/render/materialsystem/qeffect.cpp
@@ -91,8 +91,9 @@ QEffectPrivate::QEffectPrivate()
effect->addTechnique(gl3Technique);
\endcode
- A QParameter defined on an Effect is overridden by a QParameter (of the same
- name) defined in a QMaterial, QTechniqueFilter, QRenderPassFilter.
+ A QParameter defined on a QEffect overrides parameter (of the same
+ name) defined in QTechnique and QRenderPass, but are overridden by parameter in
+ QRenderPassFilter, QTechniqueFilter and QMaterial.
\sa QMaterial, QTechnique, QParameter
*/
@@ -110,8 +111,9 @@ QEffectPrivate::QEffectPrivate()
An Effect instance should be shared among several Material instances when possible.
- A Parameter defined on an Effect is overridden by a QParameter (of the same
- name) defined in a Material, TechniqueFilter, RenderPassFilter.
+ A Parameter defined on a Effect overrides parameter (of the same
+ name) defined in Technique and RenderPass, but are overridden by parameter in
+ RenderPassFilter, TechniqueFilter and Material.
\note Effect node can not be disabled.
@@ -278,3 +280,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QEffect::createNodeCreationChange() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qeffect.cpp"
diff --git a/src/render/materialsystem/qfilterkey.cpp b/src/render/materialsystem/qfilterkey.cpp
index 2105da987..9b65e82a3 100644
--- a/src/render/materialsystem/qfilterkey.cpp
+++ b/src/render/materialsystem/qfilterkey.cpp
@@ -155,3 +155,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QFilterKey::createNodeCreationChange() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qfilterkey.cpp"
diff --git a/src/render/materialsystem/qgraphicsapifilter.cpp b/src/render/materialsystem/qgraphicsapifilter.cpp
index e8b93de6e..5e04f2a20 100644
--- a/src/render/materialsystem/qgraphicsapifilter.cpp
+++ b/src/render/materialsystem/qgraphicsapifilter.cpp
@@ -373,3 +373,5 @@ bool operator !=(const QGraphicsApiFilter &reference, const QGraphicsApiFilter &
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qgraphicsapifilter.cpp"
diff --git a/src/render/materialsystem/qmaterial.cpp b/src/render/materialsystem/qmaterial.cpp
index a1bec183b..00c36b69a 100644
--- a/src/render/materialsystem/qmaterial.cpp
+++ b/src/render/materialsystem/qmaterial.cpp
@@ -65,8 +65,9 @@
techniques, passes and shaders once while allowing to specify the material
by adding Parameter instances.
- A Parameter defined on a Material is overridden by a Parameter (of the same
- name) defined in a TechniqueFilter or a RenderPassFilter.
+ A Parameter defined on a Material overrides parameter (of the same
+ name) defined in a Effect, Technique and RenderPass, but are overridden by parameters in
+ RenderPassFilter and TechniqueFilter.
\code
Effect {
@@ -133,8 +134,9 @@
techniques, passes and shaders once while allowing to specify the material
by adding QParameter instances.
- A QParameter defined on a QMaterial is overridden by a QParameter (of the same
- name) defined in a QTechniqueFilter or a QRenderPassFilter.
+ A QParameter defined on a QMaterial overrides parameter (of the same
+ name) defined in a QEffect, QTechnique and QRenderPass, but are overridden by parameter in
+ QRenderPassFilter and QTechniqueFilter.
\code
QMaterial *material1 = new QMaterial();
@@ -311,3 +313,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QMaterial::createNodeCreationChange() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qmaterial.cpp"
diff --git a/src/render/materialsystem/qparameter.cpp b/src/render/materialsystem/qparameter.cpp
index 969882564..d07b4b685 100644
--- a/src/render/materialsystem/qparameter.cpp
+++ b/src/render/materialsystem/qparameter.cpp
@@ -329,3 +329,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QParameter::createNodeCreationChange() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qparameter.cpp"
diff --git a/src/render/materialsystem/qrenderpass.cpp b/src/render/materialsystem/qrenderpass.cpp
index 33181f4fe..b2881ac20 100644
--- a/src/render/materialsystem/qrenderpass.cpp
+++ b/src/render/materialsystem/qrenderpass.cpp
@@ -413,3 +413,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QRenderPass::createNodeCreationChange() cons
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qrenderpass.cpp"
diff --git a/src/render/materialsystem/qshaderdata.cpp b/src/render/materialsystem/qshaderdata.cpp
index b70b99846..f695ebe3b 100644
--- a/src/render/materialsystem/qshaderdata.cpp
+++ b/src/render/materialsystem/qshaderdata.cpp
@@ -166,3 +166,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QShaderData::createNodeCreationChange() cons
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qshaderdata.cpp"
diff --git a/src/render/materialsystem/qshaderimage.cpp b/src/render/materialsystem/qshaderimage.cpp
index 7ab9e25e0..33b452026 100644
--- a/src/render/materialsystem/qshaderimage.cpp
+++ b/src/render/materialsystem/qshaderimage.cpp
@@ -989,3 +989,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr Qt3DRender::QShaderImage::createNodeCreation
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qshaderimage.cpp"
diff --git a/src/render/materialsystem/qshaderprogram.cpp b/src/render/materialsystem/qshaderprogram.cpp
index 49117dd98..dc6cb3c64 100644
--- a/src/render/materialsystem/qshaderprogram.cpp
+++ b/src/render/materialsystem/qshaderprogram.cpp
@@ -747,3 +747,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QShaderProgram::createNodeCreationChange() c
} // of namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qshaderprogram.cpp"
diff --git a/src/render/materialsystem/qshaderprogrambuilder.cpp b/src/render/materialsystem/qshaderprogrambuilder.cpp
index 5530db2ee..ccb35084f 100644
--- a/src/render/materialsystem/qshaderprogrambuilder.cpp
+++ b/src/render/materialsystem/qshaderprogrambuilder.cpp
@@ -516,3 +516,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QShaderProgramBuilder::createNodeCreationCha
} // of namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qshaderprogrambuilder.cpp"
diff --git a/src/render/materialsystem/qtechnique.cpp b/src/render/materialsystem/qtechnique.cpp
index 0e1787938..caa8b0fb7 100644
--- a/src/render/materialsystem/qtechnique.cpp
+++ b/src/render/materialsystem/qtechnique.cpp
@@ -69,9 +69,9 @@ QTechniquePrivate::~QTechniquePrivate()
Parameter objects and a GraphicsApiFilter, which together define a
rendering technique the given graphics API can render. The filter keys are
used by TechniqueFilter to select specific techniques at specific parts of
- the FrameGraph. If two Parameter instances with the same name are specified
- in a Technique and a RenderPass, the one in Technique overrides the one
- used in the RenderPass.
+ the FrameGraph. A Parameter defined on a Technique overrides parameter
+ (of the same name) defined in RenderPass, but are overridden by
+ parameter in RenderPassFilter, TechniqueFilter, Material and Effect.
When creating an Effect that targets several versions of a graphics API, it
is useful to create several Technique nodes each with a graphicsApiFilter
@@ -136,9 +136,9 @@ QTechniquePrivate::~QTechniquePrivate()
a Qt3DRender::QGraphicsApiFilter, which together define a rendering
technique the given graphics API can render. The filter keys are used by
Qt3DRender::QTechniqueFilter to select specific techniques at specific
- parts of the FrameGraph. If two QParameter instances with the same name are
- specified in a QTechnique and a QRenderPass, the one in Technique overrides
- the one used in the QRenderPass.
+ parts of the FrameGraph. A QParameter defined on a QTechnique overrides parameter
+ (of the same name) defined in QRenderPass, but are overridden by
+ parameter in QRenderPassFilter, QTechniqueFilter, QMaterial and QEffect.
When creating an QEffect that targets several versions of a graphics API,
it is useful to create several QTechnique nodes each with a
diff --git a/src/render/picking/objectpicker.cpp b/src/render/picking/objectpicker.cpp
index 2835d1b0e..cc2ebbf15 100644
--- a/src/render/picking/objectpicker.cpp
+++ b/src/render/picking/objectpicker.cpp
@@ -81,7 +81,15 @@ void ObjectPicker::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstT
if (!node)
return;
- BackendNode::syncFromFrontEnd(frontEnd, firstTime);
+ if (firstTime) {
+ markDirty(AbstractRenderer::AllDirty);
+ notifyJob();
+ }
+
+ if (isEnabled() != node->isEnabled()) {
+ markDirty(AbstractRenderer::AllDirty);
+ // We let QBackendNode::syncFromFrontEnd change the enabled property
+ }
if (node->isHoverEnabled() != m_hoverEnabled) {
m_hoverEnabled = node->isHoverEnabled();
@@ -100,6 +108,8 @@ void ObjectPicker::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstT
markDirty(AbstractRenderer::AllDirty);
notifyJob();
}
+
+ BackendNode::syncFromFrontEnd(frontEnd, firstTime);
}
void ObjectPicker::notifyJob()
diff --git a/src/render/picking/pickeventfilter.cpp b/src/render/picking/pickeventfilter.cpp
index b10383c72..f76161393 100644
--- a/src/render/picking/pickeventfilter.cpp
+++ b/src/render/picking/pickeventfilter.cpp
@@ -115,3 +115,5 @@ bool PickEventFilter::eventFilter(QObject *obj, QEvent *e)
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_pickeventfilter_p.cpp"
diff --git a/src/render/picking/qabstractraycaster.cpp b/src/render/picking/qabstractraycaster.cpp
index 42c7bc1e5..ca9cbb379 100644
--- a/src/render/picking/qabstractraycaster.cpp
+++ b/src/render/picking/qabstractraycaster.cpp
@@ -400,3 +400,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QAbstractRayCaster::createNodeCreationChange
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qabstractraycaster.cpp"
diff --git a/src/render/picking/qobjectpicker.cpp b/src/render/picking/qobjectpicker.cpp
index 4f039b361..efa5f14d5 100644
--- a/src/render/picking/qobjectpicker.cpp
+++ b/src/render/picking/qobjectpicker.cpp
@@ -492,3 +492,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QObjectPicker::createNodeCreationChange() co
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qobjectpicker.cpp"
diff --git a/src/render/picking/qpickevent.cpp b/src/render/picking/qpickevent.cpp
index ae5748082..180925faf 100644
--- a/src/render/picking/qpickevent.cpp
+++ b/src/render/picking/qpickevent.cpp
@@ -353,3 +353,5 @@ Qt3DCore::QEntity *QPickEvent::entity() const
QT_END_NAMESPACE
+#include "moc_qpickevent.cpp"
+
diff --git a/src/render/picking/qpicklineevent.cpp b/src/render/picking/qpicklineevent.cpp
index a079fb557..50b8e7803 100644
--- a/src/render/picking/qpicklineevent.cpp
+++ b/src/render/picking/qpicklineevent.cpp
@@ -171,3 +171,5 @@ uint QPickLineEvent::vertex2Index() const
QT_END_NAMESPACE
+#include "moc_qpicklineevent.cpp"
+
diff --git a/src/render/picking/qpickpointevent.cpp b/src/render/picking/qpickpointevent.cpp
index 2e035d3f2..76680ff92 100644
--- a/src/render/picking/qpickpointevent.cpp
+++ b/src/render/picking/qpickpointevent.cpp
@@ -129,3 +129,5 @@ uint QPickPointEvent::pointIndex() const
QT_END_NAMESPACE
+#include "moc_qpickpointevent.cpp"
+
diff --git a/src/render/picking/qpicktriangleevent.cpp b/src/render/picking/qpicktriangleevent.cpp
index c077d412f..05d0014cc 100644
--- a/src/render/picking/qpicktriangleevent.cpp
+++ b/src/render/picking/qpicktriangleevent.cpp
@@ -273,3 +273,5 @@ QVector3D QPickTriangleEvent::uvw() const
QT_END_NAMESPACE
+#include "moc_qpicktriangleevent.cpp"
+
diff --git a/src/render/picking/qpicktriangleevent_p.h b/src/render/picking/qpicktriangleevent_p.h
index d646ac2bb..8ed4f26f5 100644
--- a/src/render/picking/qpicktriangleevent_p.h
+++ b/src/render/picking/qpicktriangleevent_p.h
@@ -40,6 +40,17 @@
#ifndef QT3DRENDER_QPICKTRIANGLEEVENT_P_H
#define QT3DRENDER_QPICKTRIANGLEEVENT_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of other Qt classes. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
#include <Qt3DRender/private/qpickevent_p.h>
QT_BEGIN_NAMESPACE
diff --git a/src/render/picking/qraycaster.cpp b/src/render/picking/qraycaster.cpp
index f32ea32f1..e8fab7967 100644
--- a/src/render/picking/qraycaster.cpp
+++ b/src/render/picking/qraycaster.cpp
@@ -206,3 +206,5 @@ void QRayCaster::trigger(const QVector3D &origin, const QVector3D &direction, fl
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qraycaster.cpp"
diff --git a/src/render/picking/qraycasterhit.cpp b/src/render/picking/qraycasterhit.cpp
index 6e81c05d0..37ba26956 100644
--- a/src/render/picking/qraycasterhit.cpp
+++ b/src/render/picking/qraycasterhit.cpp
@@ -231,3 +231,5 @@ void QRayCasterHit::setEntity(Qt3DCore::QEntity *entity) const
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qraycasterhit.cpp"
diff --git a/src/render/picking/qscreenraycaster.cpp b/src/render/picking/qscreenraycaster.cpp
index 3e47c2a01..0276bcac9 100644
--- a/src/render/picking/qscreenraycaster.cpp
+++ b/src/render/picking/qscreenraycaster.cpp
@@ -143,3 +143,5 @@ void QScreenRayCaster::trigger(const QPoint &position)
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qscreenraycaster.cpp"
diff --git a/src/render/qrendererplugin.cpp b/src/render/qrendererplugin.cpp
index eb54a0ead..24a4f6a2c 100644
--- a/src/render/qrendererplugin.cpp
+++ b/src/render/qrendererplugin.cpp
@@ -66,3 +66,5 @@ AbstractRenderer *QRendererPlugin::create(const QString &key, QRenderAspect::Ren
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qrendererplugin_p.cpp"
diff --git a/src/render/raycasting/qabstractcollisionqueryservice.cpp b/src/render/raycasting/qabstractcollisionqueryservice.cpp
index 5148df911..852c11794 100644
--- a/src/render/raycasting/qabstractcollisionqueryservice.cpp
+++ b/src/render/raycasting/qabstractcollisionqueryservice.cpp
@@ -72,3 +72,5 @@ void QAbstractCollisionQueryService::addEntityHit(QCollisionQueryResult &result,
} // Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qabstractcollisionqueryservice_p.cpp"
diff --git a/src/render/renderstates/qalphacoverage.cpp b/src/render/renderstates/qalphacoverage.cpp
index 785e79057..6b372860f 100644
--- a/src/render/renderstates/qalphacoverage.cpp
+++ b/src/render/renderstates/qalphacoverage.cpp
@@ -161,3 +161,5 @@ QAlphaCoverage::~QAlphaCoverage()
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qalphacoverage.cpp"
diff --git a/src/render/renderstates/qalphatest.cpp b/src/render/renderstates/qalphatest.cpp
index 1e6606c02..16457dd42 100644
--- a/src/render/renderstates/qalphatest.cpp
+++ b/src/render/renderstates/qalphatest.cpp
@@ -173,3 +173,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QAlphaTest::createNodeCreationChange() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qalphatest.cpp"
diff --git a/src/render/renderstates/qblendequation.cpp b/src/render/renderstates/qblendequation.cpp
index 1f3f56f92..1144f2abb 100644
--- a/src/render/renderstates/qblendequation.cpp
+++ b/src/render/renderstates/qblendequation.cpp
@@ -133,3 +133,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QBlendEquation::createNodeCreationChange() c
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qblendequation.cpp"
diff --git a/src/render/renderstates/qblendequationarguments.cpp b/src/render/renderstates/qblendequationarguments.cpp
index 94693cab9..088594fa3 100644
--- a/src/render/renderstates/qblendequationarguments.cpp
+++ b/src/render/renderstates/qblendequationarguments.cpp
@@ -307,3 +307,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QBlendEquationArguments::createNodeCreationC
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qblendequationarguments.cpp"
diff --git a/src/render/renderstates/qclipplane.cpp b/src/render/renderstates/qclipplane.cpp
index 8f67ae11c..8c1a2ae96 100644
--- a/src/render/renderstates/qclipplane.cpp
+++ b/src/render/renderstates/qclipplane.cpp
@@ -178,3 +178,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QClipPlane::createNodeCreationChange() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qclipplane.cpp"
diff --git a/src/render/renderstates/qcolormask.cpp b/src/render/renderstates/qcolormask.cpp
index fde09d7b0..e9fad7dc2 100644
--- a/src/render/renderstates/qcolormask.cpp
+++ b/src/render/renderstates/qcolormask.cpp
@@ -199,3 +199,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QColorMask::createNodeCreationChange() const
QT_END_NAMESPACE
+#include "moc_qcolormask.cpp"
+
diff --git a/src/render/renderstates/qcullface.cpp b/src/render/renderstates/qcullface.cpp
index 4be395464..b1c9edc8e 100644
--- a/src/render/renderstates/qcullface.cpp
+++ b/src/render/renderstates/qcullface.cpp
@@ -202,3 +202,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QCullFace::createNodeCreationChange() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qcullface.cpp"
diff --git a/src/render/renderstates/qdepthrange.cpp b/src/render/renderstates/qdepthrange.cpp
index ec5bbce9f..f7011c844 100644
--- a/src/render/renderstates/qdepthrange.cpp
+++ b/src/render/renderstates/qdepthrange.cpp
@@ -154,3 +154,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QDepthRange::createNodeCreationChange() cons
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qdepthrange.cpp"
diff --git a/src/render/renderstates/qdepthtest.cpp b/src/render/renderstates/qdepthtest.cpp
index 7e67ba5ba..f751b5770 100644
--- a/src/render/renderstates/qdepthtest.cpp
+++ b/src/render/renderstates/qdepthtest.cpp
@@ -158,3 +158,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QDepthTest::createNodeCreationChange() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qdepthtest.cpp"
diff --git a/src/render/renderstates/qdithering.cpp b/src/render/renderstates/qdithering.cpp
index a449be508..409e3c9c3 100644
--- a/src/render/renderstates/qdithering.cpp
+++ b/src/render/renderstates/qdithering.cpp
@@ -99,3 +99,5 @@ QDithering::~QDithering()
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qdithering.cpp"
diff --git a/src/render/renderstates/qfrontface.cpp b/src/render/renderstates/qfrontface.cpp
index a814be82f..761bfc687 100644
--- a/src/render/renderstates/qfrontface.cpp
+++ b/src/render/renderstates/qfrontface.cpp
@@ -131,3 +131,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QFrontFace::createNodeCreationChange() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qfrontface.cpp"
diff --git a/src/render/renderstates/qlinewidth.cpp b/src/render/renderstates/qlinewidth.cpp
index f5ef04ebb..755d80fd9 100644
--- a/src/render/renderstates/qlinewidth.cpp
+++ b/src/render/renderstates/qlinewidth.cpp
@@ -123,3 +123,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QLineWidth::createNodeCreationChange() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qlinewidth.cpp"
diff --git a/src/render/renderstates/qmultisampleantialiasing.cpp b/src/render/renderstates/qmultisampleantialiasing.cpp
index 249dcd4bd..303474fbb 100644
--- a/src/render/renderstates/qmultisampleantialiasing.cpp
+++ b/src/render/renderstates/qmultisampleantialiasing.cpp
@@ -203,3 +203,5 @@ QMultiSampleAntiAliasing::~QMultiSampleAntiAliasing()
QT_END_NAMESPACE
+#include "moc_qmultisampleantialiasing.cpp"
+
diff --git a/src/render/renderstates/qnodepthmask.cpp b/src/render/renderstates/qnodepthmask.cpp
index 241751a26..bd1af22f0 100644
--- a/src/render/renderstates/qnodepthmask.cpp
+++ b/src/render/renderstates/qnodepthmask.cpp
@@ -100,3 +100,5 @@ QNoDepthMask::~QNoDepthMask()
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qnodepthmask.cpp"
diff --git a/src/render/renderstates/qpointsize.cpp b/src/render/renderstates/qpointsize.cpp
index 10687f8f2..060aeea9e 100644
--- a/src/render/renderstates/qpointsize.cpp
+++ b/src/render/renderstates/qpointsize.cpp
@@ -151,3 +151,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QPointSize::createNodeCreationChange() const
QT_END_NAMESPACE
+#include "moc_qpointsize.cpp"
+
diff --git a/src/render/renderstates/qpolygonoffset.cpp b/src/render/renderstates/qpolygonoffset.cpp
index 0d397f159..159168557 100644
--- a/src/render/renderstates/qpolygonoffset.cpp
+++ b/src/render/renderstates/qpolygonoffset.cpp
@@ -152,3 +152,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QPolygonOffset::createNodeCreationChange() c
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qpolygonoffset.cpp"
diff --git a/src/render/renderstates/qrastermode.cpp b/src/render/renderstates/qrastermode.cpp
index 648872a84..e1a71a7b8 100644
--- a/src/render/renderstates/qrastermode.cpp
+++ b/src/render/renderstates/qrastermode.cpp
@@ -193,3 +193,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QRasterMode::createNodeCreationChange() cons
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qrastermode.cpp"
diff --git a/src/render/renderstates/qrenderstate.cpp b/src/render/renderstates/qrenderstate.cpp
index cd5346710..0e01efb73 100644
--- a/src/render/renderstates/qrenderstate.cpp
+++ b/src/render/renderstates/qrenderstate.cpp
@@ -114,3 +114,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QRenderState::createNodeCreationChange() con
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qrenderstate.cpp"
diff --git a/src/render/renderstates/qscissortest.cpp b/src/render/renderstates/qscissortest.cpp
index 718978b7a..0940bd006 100644
--- a/src/render/renderstates/qscissortest.cpp
+++ b/src/render/renderstates/qscissortest.cpp
@@ -203,3 +203,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QScissorTest::createNodeCreationChange() con
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qscissortest.cpp"
diff --git a/src/render/renderstates/qseamlesscubemap.cpp b/src/render/renderstates/qseamlesscubemap.cpp
index 8458aded8..b05e4b9ca 100644
--- a/src/render/renderstates/qseamlesscubemap.cpp
+++ b/src/render/renderstates/qseamlesscubemap.cpp
@@ -97,3 +97,5 @@ QSeamlessCubemap::~QSeamlessCubemap()
QT_END_NAMESPACE
+#include "moc_qseamlesscubemap.cpp"
+
diff --git a/src/render/renderstates/qstencilmask.cpp b/src/render/renderstates/qstencilmask.cpp
index 1b9b2cd10..1bbb8dced 100644
--- a/src/render/renderstates/qstencilmask.cpp
+++ b/src/render/renderstates/qstencilmask.cpp
@@ -155,3 +155,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QStencilMask::createNodeCreationChange() con
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qstencilmask.cpp"
diff --git a/src/render/renderstates/qstenciloperation.cpp b/src/render/renderstates/qstenciloperation.cpp
index 34f95c03d..0af9ec5fa 100644
--- a/src/render/renderstates/qstenciloperation.cpp
+++ b/src/render/renderstates/qstenciloperation.cpp
@@ -158,3 +158,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QStencilOperation::createNodeCreationChange(
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qstenciloperation.cpp"
diff --git a/src/render/renderstates/qstenciloperationarguments.cpp b/src/render/renderstates/qstenciloperationarguments.cpp
index f5d0c1f4f..06c8016da 100644
--- a/src/render/renderstates/qstenciloperationarguments.cpp
+++ b/src/render/renderstates/qstenciloperationarguments.cpp
@@ -227,3 +227,5 @@ QStencilOperationArguments::Operation QStencilOperationArguments::allTestsPassOp
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qstenciloperationarguments.cpp"
diff --git a/src/render/renderstates/qstenciltest.cpp b/src/render/renderstates/qstenciltest.cpp
index 7284af140..3ef6f2e79 100644
--- a/src/render/renderstates/qstenciltest.cpp
+++ b/src/render/renderstates/qstenciltest.cpp
@@ -161,3 +161,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QStencilTest::createNodeCreationChange() con
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qstenciltest.cpp"
diff --git a/src/render/renderstates/qstenciltestarguments.cpp b/src/render/renderstates/qstenciltestarguments.cpp
index dc8ff7292..9aeb0c5ac 100644
--- a/src/render/renderstates/qstenciltestarguments.cpp
+++ b/src/render/renderstates/qstenciltestarguments.cpp
@@ -217,3 +217,5 @@ QStencilTestArguments::StencilFaceMode QStencilTestArguments::faceMode() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qstenciltestarguments.cpp"
diff --git a/src/render/shadergraph/qshaderlanguage.cpp b/src/render/shadergraph/qshaderlanguage.cpp
index 1630e3de8..25c19cb18 100644
--- a/src/render/shadergraph/qshaderlanguage.cpp
+++ b/src/render/shadergraph/qshaderlanguage.cpp
@@ -55,3 +55,5 @@ void qt_register_ShaderLanguage_enums()
}
QT_END_NAMESPACE
+
+#include "moc_qshaderlanguage_p.cpp"
diff --git a/src/render/shadergraph/qshadernode.cpp b/src/render/shadergraph/qshadernode.cpp
index e0421e006..56c9961f3 100644
--- a/src/render/shadergraph/qshadernode.cpp
+++ b/src/render/shadergraph/qshadernode.cpp
@@ -152,11 +152,15 @@ QVector<QShaderFormat> QShaderNode::availableFormats() const
QShaderNode::Rule QShaderNode::rule(const QShaderFormat &format) const
{
- const auto it = std::find_if(m_rules.crbegin(), m_rules.crend(),
- [format](const QPair<QShaderFormat, Rule> &entry) {
- return format.supports(entry.first);
- });
- return it != m_rules.crend() ? it->second : Rule();
+ const QPair<QShaderFormat, Rule> *selected = nullptr;
+ for (auto it = m_rules.crbegin(); it != m_rules.crend(); ++it) {
+ const auto &entry = *it;
+ if (format.supports(entry.first)) {
+ if (!selected || entry.first.version() > selected->first.version())
+ selected = &entry;
+ }
+ }
+ return selected ? selected->second : Rule();
}
QShaderNode::Rule::Rule(const QByteArray &subs, const QByteArrayList &snippets) noexcept
diff --git a/src/render/texture/qabstracttexture.cpp b/src/render/texture/qabstracttexture.cpp
index 364cd4bb6..187d09816 100644
--- a/src/render/texture/qabstracttexture.cpp
+++ b/src/render/texture/qabstracttexture.cpp
@@ -1191,3 +1191,5 @@ void QAbstractTexture::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change)
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qabstracttexture.cpp"
diff --git a/src/render/texture/qabstracttextureimage.cpp b/src/render/texture/qabstracttextureimage.cpp
index 6f68221fd..440e2fdfa 100644
--- a/src/render/texture/qabstracttextureimage.cpp
+++ b/src/render/texture/qabstracttextureimage.cpp
@@ -284,3 +284,5 @@ Qt3DCore::QNodeCreatedChangeBasePtr QAbstractTextureImage::createNodeCreationCha
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qabstracttextureimage.cpp"
diff --git a/src/render/texture/qpaintedtextureimage.cpp b/src/render/texture/qpaintedtextureimage.cpp
index 86df2c562..13d9d1ae1 100644
--- a/src/render/texture/qpaintedtextureimage.cpp
+++ b/src/render/texture/qpaintedtextureimage.cpp
@@ -87,6 +87,7 @@ void QPaintedTextureImagePrivate::repaint()
{
m_image.reset(new QImage(m_imageSize, QImage::Format_RGBA8888));
m_image->setDevicePixelRatio(m_devicePixelRatio);
+ m_image->fill(Qt::transparent);
}
QPainter painter(m_image.data());
@@ -264,3 +265,5 @@ bool QPaintedTextureImageDataGenerator::operator ==(const QTextureImageDataGener
QT_END_NAMESPACE
+#include "moc_qpaintedtextureimage.cpp"
+
diff --git a/src/render/texture/qtexture.cpp b/src/render/texture/qtexture.cpp
index 6b7b92166..cabd3f54e 100644
--- a/src/render/texture/qtexture.cpp
+++ b/src/render/texture/qtexture.cpp
@@ -1514,8 +1514,8 @@ QTextureLoader::QTextureLoader(QNode *parent)
// Regenerate the texture functor when properties we support overriding
// from QAbstractTexture get changed.
- Q_D(QTextureLoader);
- auto regenerate = [=] () {
+ auto regenerate = [this] () {
+ Q_D(QTextureLoader);
if (!notificationsBlocked()) // check the change doesn't come from the backend
d->updateGenerator();
};
@@ -1775,3 +1775,5 @@ void QSharedGLTexture::setTextureId(int id)
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qtexture.cpp"
diff --git a/src/render/texture/qtextureimage.cpp b/src/render/texture/qtextureimage.cpp
index b4e9ed46f..5b1346d2f 100644
--- a/src/render/texture/qtextureimage.cpp
+++ b/src/render/texture/qtextureimage.cpp
@@ -332,3 +332,5 @@ bool QImageTextureDataFunctor::isMirrored() const
QT_END_NAMESPACE
+#include "moc_qtextureimage.cpp"
+
diff --git a/src/render/texture/qtexturewrapmode.cpp b/src/render/texture/qtexturewrapmode.cpp
index cb9272895..18a7f78a1 100644
--- a/src/render/texture/qtexturewrapmode.cpp
+++ b/src/render/texture/qtexturewrapmode.cpp
@@ -182,3 +182,5 @@ QTextureWrapMode::WrapMode QTextureWrapMode::z() const
} // namespace Qt3DRender
QT_END_NAMESPACE
+
+#include "moc_qtexturewrapmode.cpp"