41 Qt3DRender::QEffect *materialEffect = effect();
42 if ( !materialEffect )
47 if ( clipPlanesEquations.isEmpty() )
53 for ( Qt3DRender::QTechnique *technique : materialEffect->techniques() )
55 for ( Qt3DRender::QRenderPass *renderPass : technique->renderPasses() )
57 Qt3DRender::QShaderProgram *shaderProgram = renderPass->shaderProgram();
58 const QByteArray geomCode = shaderProgram->geometryShaderCode();
59 if ( !geomCode.isEmpty() )
62 shaderProgram->setGeometryShaderCode( newGeomCode );
65 const QByteArray vertexCode = shaderProgram->vertexShaderCode();
66 if ( !vertexCode.isEmpty() )
69 shaderProgram->setVertexShaderCode( newVertexCode );
75 const int nrClipPlanes = clipPlanesEquations.size();
76 QVariantList clipPlanesEquationsVariant = QVariantList();
77 for (
int i = 0; i < nrClipPlanes; ++i )
79 clipPlanesEquationsVariant << clipPlanesEquations[i];
81 Qt3DRender::QParameter *clipPlane =
new Qt3DRender::QParameter( QgsMaterial::CLIP_PLANE_ARRAY_PARAMETER_NAME, clipPlanesEquationsVariant );
82 Qt3DRender::QParameter *clipPlaneNumber =
new Qt3DRender::QParameter( QgsMaterial::CLIP_PLANE_MAX_PLANE_PARAMETER_NAME, nrClipPlanes );
84 materialEffect->addParameter( clipPlane );
85 materialEffect->addParameter( clipPlaneNumber );
87 mClippingEnabled =
true;
92 Qt3DRender::QEffect *materialEffect = effect();
93 if ( !materialEffect || !mClippingEnabled )
97 for ( Qt3DRender::QTechnique *technique : materialEffect->techniques() )
99 for ( Qt3DRender::QRenderPass *renderPass : technique->renderPasses() )
101 Qt3DRender::QShaderProgram *shaderProgram = renderPass->shaderProgram();
102 const QByteArray geomCode = shaderProgram->geometryShaderCode();
103 if ( !geomCode.isEmpty() )
106 shaderProgram->setGeometryShaderCode( newGeomCode );
109 const QByteArray vertexCode = shaderProgram->vertexShaderCode();
110 if ( !vertexCode.isEmpty() )
113 shaderProgram->setVertexShaderCode( newVertexCode );
119 for ( Qt3DRender::QParameter *parameter : materialEffect->parameters() )
121 const QString parameterName = parameter->name();
122 if ( parameterName == QgsMaterial::CLIP_PLANE_ARRAY_PARAMETER_NAME || parameterName == QgsMaterial::CLIP_PLANE_MAX_PLANE_PARAMETER_NAME )
124 materialEffect->removeParameter( parameter );
128 mClippingEnabled =
false;