qgsrenderpassquad: Do not create its own Qlayer

Homogenize the layer responsibility: it is handled outside the entity and then passed to it.
This commit is contained in:
Jean Felder 2024-06-22 04:20:37 +02:00 committed by bdm-oslandia
parent 3b912d171c
commit 9d5363dc18
9 changed files with 21 additions and 25 deletions

View File

@ -17,8 +17,8 @@
#include <Qt3DRender/QParameter>
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 ) ) );
}

View File

@ -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;
};

View File

@ -19,8 +19,8 @@
#include <Qt3DRender/QParameter>
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 );

View File

@ -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 );

View File

@ -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;
}

View File

@ -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() );

View File

@ -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

View File

@ -43,7 +43,7 @@ typedef Qt3DCore::QGeometry Qt3DQGeometry;
#include <QUrl>
#include <QVector3D>
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 );
}

View File

@ -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