44 Qt3DRender::QEffect *materialEffect = effect();
45 if ( !materialEffect )
50 if ( clipPlanesEquations.isEmpty() )
56 for ( Qt3DRender::QTechnique *technique : materialEffect->techniques() )
58 for ( Qt3DRender::QRenderPass *renderPass : technique->renderPasses() )
60 Qt3DRender::QShaderProgram *shaderProgram = renderPass->shaderProgram();
61 const QByteArray geomCode = shaderProgram->geometryShaderCode();
62 if ( !geomCode.isEmpty() )
65 shaderProgram->setGeometryShaderCode( newGeomCode );
68 const QByteArray vertexCode = shaderProgram->vertexShaderCode();
69 if ( !vertexCode.isEmpty() )
72 shaderProgram->setVertexShaderCode( newVertexCode );
78 const int nrClipPlanes = clipPlanesEquations.size();
79 QVariantList clipPlanesEquationsVariant = QVariantList();
80 for (
int i = 0; i < nrClipPlanes; ++i )
82 clipPlanesEquationsVariant << clipPlanesEquations[i];
84 Qt3DRender::QParameter *clipPlane =
new Qt3DRender::QParameter( QgsMaterial::CLIP_PLANE_ARRAY_PARAMETER_NAME, clipPlanesEquationsVariant );
85 Qt3DRender::QParameter *clipPlaneNumber =
new Qt3DRender::QParameter( QgsMaterial::CLIP_PLANE_MAX_PLANE_PARAMETER_NAME, nrClipPlanes );
87 materialEffect->addParameter( clipPlane );
88 materialEffect->addParameter( clipPlaneNumber );
90 mClippingEnabled =
true;
95 Qt3DRender::QEffect *materialEffect = effect();
96 if ( !materialEffect || !mClippingEnabled )
100 for ( Qt3DRender::QTechnique *technique : materialEffect->techniques() )
102 for ( Qt3DRender::QRenderPass *renderPass : technique->renderPasses() )
104 Qt3DRender::QShaderProgram *shaderProgram = renderPass->shaderProgram();
105 const QByteArray geomCode = shaderProgram->geometryShaderCode();
106 if ( !geomCode.isEmpty() )
109 shaderProgram->setGeometryShaderCode( newGeomCode );
112 const QByteArray vertexCode = shaderProgram->vertexShaderCode();
113 if ( !vertexCode.isEmpty() )
116 shaderProgram->setVertexShaderCode( newVertexCode );
122 for ( Qt3DRender::QParameter *parameter : materialEffect->parameters() )
124 const QString parameterName = parameter->name();
125 if ( parameterName == QgsMaterial::CLIP_PLANE_ARRAY_PARAMETER_NAME || parameterName == QgsMaterial::CLIP_PLANE_MAX_PLANE_PARAMETER_NAME )
127 materialEffect->removeParameter( parameter );
131 mClippingEnabled =
false;