From 9d5363dc18a71b12e65471ea09a11d18d8c6a5ad Mon Sep 17 00:00:00 2001 From: Jean Felder Date: Sat, 22 Jun 2024 04:20:37 +0200 Subject: [PATCH] qgsrenderpassquad: Do not create its own Qlayer Homogenize the layer responsibility: it is handled outside the entity and then passed to it. --- src/3d/qgsambientocclusionblurentity.cpp | 5 ++--- src/3d/qgsambientocclusionblurentity.h | 2 +- src/3d/qgsambientocclusionrenderentity.cpp | 4 ++-- src/3d/qgsambientocclusionrenderentity.h | 2 +- src/3d/qgsframegraph.cpp | 15 +++++++++------ src/3d/qgspostprocessingentity.cpp | 4 ++-- src/3d/qgspostprocessingentity.h | 2 +- src/3d/qgsrenderpassquad.cpp | 7 ++----- src/3d/qgsrenderpassquad.h | 5 +---- 9 files changed, 21 insertions(+), 25 deletions(-) diff --git a/src/3d/qgsambientocclusionblurentity.cpp b/src/3d/qgsambientocclusionblurentity.cpp index 57b67ac0492..837a8f5549a 100644 --- a/src/3d/qgsambientocclusionblurentity.cpp +++ b/src/3d/qgsambientocclusionblurentity.cpp @@ -17,8 +17,8 @@ #include -QgsAmbientOcclusionBlurEntity::QgsAmbientOcclusionBlurEntity( Qt3DRender::QTexture2D *texture, QNode *parent ) - : QgsRenderPassQuad( parent ) +QgsAmbientOcclusionBlurEntity::QgsAmbientOcclusionBlurEntity( Qt3DRender::QTexture2D *texture, Qt3DRender::QLayer *layer, QNode *parent ) + : QgsRenderPassQuad( layer, parent ) { mAmbientOcclusionFactorTextureParameter = new Qt3DRender::QParameter( QStringLiteral( "texture" ), texture ); mMaterial->addParameter( mAmbientOcclusionFactorTextureParameter ); @@ -29,4 +29,3 @@ QgsAmbientOcclusionBlurEntity::QgsAmbientOcclusionBlurEntity( Qt3DRender::QTextu mShader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( vertexShaderPath ) ) ); mShader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( fragmentShaderPath ) ) ); } - diff --git a/src/3d/qgsambientocclusionblurentity.h b/src/3d/qgsambientocclusionblurentity.h index ed6562bfdd8..3afb9e622a7 100644 --- a/src/3d/qgsambientocclusionblurentity.h +++ b/src/3d/qgsambientocclusionblurentity.h @@ -33,7 +33,7 @@ class QgsAmbientOcclusionBlurEntity : public QgsRenderPassQuad Q_OBJECT public: //! Constructor - QgsAmbientOcclusionBlurEntity( Qt3DRender::QTexture2D *texture, QNode *parent = nullptr ); + QgsAmbientOcclusionBlurEntity( Qt3DRender::QTexture2D *texture, Qt3DRender::QLayer *layer, QNode *parent = nullptr ); private: Qt3DRender::QParameter *mAmbientOcclusionFactorTextureParameter = nullptr; }; diff --git a/src/3d/qgsambientocclusionrenderentity.cpp b/src/3d/qgsambientocclusionrenderentity.cpp index 5dcd274665f..c7263db1afa 100644 --- a/src/3d/qgsambientocclusionrenderentity.cpp +++ b/src/3d/qgsambientocclusionrenderentity.cpp @@ -19,8 +19,8 @@ #include -QgsAmbientOcclusionRenderEntity::QgsAmbientOcclusionRenderEntity( Qt3DRender::QTexture2D *depthTexture, Qt3DRender::QCamera *camera, QNode *parent ) - : QgsRenderPassQuad( parent ) +QgsAmbientOcclusionRenderEntity::QgsAmbientOcclusionRenderEntity( Qt3DRender::QTexture2D *depthTexture, Qt3DRender::QLayer *layer, Qt3DRender::QCamera *camera, QNode *parent ) + : QgsRenderPassQuad( layer, parent ) { mDepthTextureParameter = new Qt3DRender::QParameter( QStringLiteral( "depthTexture" ), depthTexture ); mMaterial->addParameter( mDepthTextureParameter ); diff --git a/src/3d/qgsambientocclusionrenderentity.h b/src/3d/qgsambientocclusionrenderentity.h index b8daeb3c373..6478fbdaabf 100644 --- a/src/3d/qgsambientocclusionrenderentity.h +++ b/src/3d/qgsambientocclusionrenderentity.h @@ -33,7 +33,7 @@ class QgsAmbientOcclusionRenderEntity : public QgsRenderPassQuad Q_OBJECT public: //! Constructor - QgsAmbientOcclusionRenderEntity( Qt3DRender::QTexture2D *depthTexture, Qt3DRender::QCamera *camera, QNode *parent = nullptr ); + QgsAmbientOcclusionRenderEntity( Qt3DRender::QTexture2D *depthTexture, Qt3DRender::QLayer *layer, Qt3DRender::QCamera *camera, QNode *parent = nullptr ); //! Sets the intensity for the ambient occlusion effect void setIntensity( float intensity ); diff --git a/src/3d/qgsframegraph.cpp b/src/3d/qgsframegraph.cpp index 75c707bf816..c87a67d783a 100644 --- a/src/3d/qgsframegraph.cpp +++ b/src/3d/qgsframegraph.cpp @@ -332,8 +332,9 @@ Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructPostprocessingPass() mRenderCapture = new Qt3DRender::QRenderCapture( mRenderCaptureTargetSelector ); - mPostprocessingEntity = new QgsPostprocessingEntity( this, mRootEntity ); - mPostprocessPassLayerFilter->addLayer( mPostprocessingEntity->layer() ); + Qt3DRender::QLayer *postProcessingLayer = new Qt3DRender::QLayer(); + mPostprocessingEntity = new QgsPostprocessingEntity( this, postProcessingLayer, mRootEntity ); + mPostprocessPassLayerFilter->addLayer( postProcessingLayer ); mPostprocessingEntity->setObjectName( "PostProcessingPassEntity" ); return mPostProcessingCameraSelector; @@ -380,8 +381,9 @@ Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructAmbientOcclusionRenderPass( mAmbientOcclusionRenderCaptureTargetSelector->setTarget( colorRenderTarget ); - mAmbientOcclusionRenderEntity = new QgsAmbientOcclusionRenderEntity( mForwardDepthTexture, mMainCamera, mRootEntity ); - mAmbientOcclusionRenderLayerFilter->addLayer( mAmbientOcclusionRenderEntity->layer() ); + Qt3DRender::QLayer *ambientOcclusionRenderLayer = new Qt3DRender::QLayer(); + mAmbientOcclusionRenderEntity = new QgsAmbientOcclusionRenderEntity( mForwardDepthTexture, ambientOcclusionRenderLayer, mMainCamera, mRootEntity ); + mAmbientOcclusionRenderLayerFilter->addLayer( ambientOcclusionRenderLayer ); return mAmbientOcclusionRenderCameraSelector; } @@ -427,8 +429,9 @@ Qt3DRender::QFrameGraphNode *QgsFrameGraph::constructAmbientOcclusionBlurPass() mAmbientOcclusionBlurRenderCaptureTargetSelector->setTarget( depthRenderTarget ); - mAmbientOcclusionBlurEntity = new QgsAmbientOcclusionBlurEntity( mAmbientOcclusionRenderTexture, mRootEntity ); - mAmbientOcclusionBlurLayerFilter->addLayer( mAmbientOcclusionBlurEntity->layer() ); + Qt3DRender::QLayer *ambientOcclusionBlurLayer = new Qt3DRender::QLayer(); + mAmbientOcclusionBlurEntity = new QgsAmbientOcclusionBlurEntity( mAmbientOcclusionRenderTexture, ambientOcclusionBlurLayer, mRootEntity ); + mAmbientOcclusionBlurLayerFilter->addLayer( ambientOcclusionBlurLayer ); return mAmbientOcclusionBlurCameraSelector; } diff --git a/src/3d/qgspostprocessingentity.cpp b/src/3d/qgspostprocessingentity.cpp index cd025c6d7c0..1e562bee8aa 100644 --- a/src/3d/qgspostprocessingentity.cpp +++ b/src/3d/qgspostprocessingentity.cpp @@ -42,8 +42,8 @@ typedef Qt3DCore::QGeometry Qt3DQGeometry; #include "qgsframegraph.h" -QgsPostprocessingEntity::QgsPostprocessingEntity( QgsFrameGraph *frameGraph, QNode *parent ) - : QgsRenderPassQuad( parent ) +QgsPostprocessingEntity::QgsPostprocessingEntity( QgsFrameGraph *frameGraph, Qt3DRender::QLayer *layer, QNode *parent ) + : QgsRenderPassQuad( layer, parent ) , mFrameGraph( frameGraph ) { mColorTextureParameter = new Qt3DRender::QParameter( QStringLiteral( "colorTexture" ), frameGraph->forwardRenderColorTexture() ); diff --git a/src/3d/qgspostprocessingentity.h b/src/3d/qgspostprocessingentity.h index 9494c29e95d..71058fd8dee 100644 --- a/src/3d/qgspostprocessingentity.h +++ b/src/3d/qgspostprocessingentity.h @@ -36,7 +36,7 @@ class QgsPostprocessingEntity : public QgsRenderPassQuad public: //! Constructor - QgsPostprocessingEntity( QgsFrameGraph *frameGraph, QNode *parent = nullptr ); + QgsPostprocessingEntity( QgsFrameGraph *frameGraph, Qt3DRender::QLayer *layer, QNode *parent = nullptr ); //! Sets the parts of the scene where objects cast shadows void setupShadowRenderingExtent( float minX, float maxX, float minZ, float maxZ ); //! Sets up a directional light that is used to render shadows diff --git a/src/3d/qgsrenderpassquad.cpp b/src/3d/qgsrenderpassquad.cpp index 331a9c76dd4..146d58180fe 100644 --- a/src/3d/qgsrenderpassquad.cpp +++ b/src/3d/qgsrenderpassquad.cpp @@ -43,7 +43,7 @@ typedef Qt3DCore::QGeometry Qt3DQGeometry; #include #include -QgsRenderPassQuad::QgsRenderPassQuad( QNode *parent ) +QgsRenderPassQuad::QgsRenderPassQuad( Qt3DRender::QLayer *layer, QNode *parent ) : Qt3DCore::QEntity( parent ) { Qt3DQGeometry *geom = new Qt3DQGeometry( this ); @@ -98,8 +98,5 @@ QgsRenderPassQuad::QgsRenderPassQuad( QNode *parent ) addComponent( mMaterial ); - mLayer = new Qt3DRender::QLayer( this ); - mLayer->setRecursive( true ); - addComponent( mLayer ); + addComponent( layer ); } - diff --git a/src/3d/qgsrenderpassquad.h b/src/3d/qgsrenderpassquad.h index 35d61971b67..e0bca9fadf2 100644 --- a/src/3d/qgsrenderpassquad.h +++ b/src/3d/qgsrenderpassquad.h @@ -40,14 +40,11 @@ class QgsRenderPassQuad : public Qt3DCore::QEntity Q_OBJECT public: //! Constructor - QgsRenderPassQuad( QNode *parent = nullptr ); + QgsRenderPassQuad( Qt3DRender::QLayer *layer, QNode *parent = nullptr ); - //! Returns the layer object used to select this entity for rendering in a specific rendering pass - Qt3DRender::QLayer *layer() { return mLayer; } protected: Qt3DRender::QMaterial *mMaterial = nullptr; Qt3DRender::QShaderProgram *mShader = nullptr; - Qt3DRender::QLayer *mLayer = nullptr; }; #endif // QGSRENDERPASSQUAD_H