53 Qt3DRender::QEffect *materialEffect = effect();
54 if ( !materialEffect )
59 if ( clipPlanesEquations.isEmpty() )
65 for ( Qt3DRender::QTechnique *technique : materialEffect->techniques() )
67 for ( Qt3DRender::QRenderPass *renderPass : technique->renderPasses() )
69 Qt3DRender::QShaderProgram *shaderProgram = renderPass->shaderProgram();
70 const QByteArray geomCode = shaderProgram->geometryShaderCode();
71 if ( !geomCode.isEmpty() )
74 shaderProgram->setGeometryShaderCode( newGeomCode );
77 const QByteArray vertexCode = shaderProgram->vertexShaderCode();
78 if ( !vertexCode.isEmpty() )
81 shaderProgram->setVertexShaderCode( newVertexCode );
87 const int nrClipPlanes = clipPlanesEquations.size();
88 QVariantList clipPlanesEquationsVariant = QVariantList();
89 for (
int i = 0; i < nrClipPlanes; ++i )
91 clipPlanesEquationsVariant << clipPlanesEquations[i];
93 Qt3DRender::QParameter *clipPlane =
new Qt3DRender::QParameter( QgsMaterial::CLIP_PLANE_ARRAY_PARAMETER_NAME, clipPlanesEquationsVariant );
94 Qt3DRender::QParameter *clipPlaneNumber =
new Qt3DRender::QParameter( QgsMaterial::CLIP_PLANE_MAX_PLANE_PARAMETER_NAME, nrClipPlanes );
96 materialEffect->addParameter( clipPlane );
97 materialEffect->addParameter( clipPlaneNumber );
99 mClippingEnabled =
true;
104 Qt3DRender::QEffect *materialEffect = effect();
105 if ( !materialEffect || !mClippingEnabled )
109 for ( Qt3DRender::QTechnique *technique : materialEffect->techniques() )
111 for ( Qt3DRender::QRenderPass *renderPass : technique->renderPasses() )
113 Qt3DRender::QShaderProgram *shaderProgram = renderPass->shaderProgram();
114 const QByteArray geomCode = shaderProgram->geometryShaderCode();
115 if ( !geomCode.isEmpty() )
118 shaderProgram->setGeometryShaderCode( newGeomCode );
121 const QByteArray vertexCode = shaderProgram->vertexShaderCode();
122 if ( !vertexCode.isEmpty() )
125 shaderProgram->setVertexShaderCode( newVertexCode );
131 for ( Qt3DRender::QParameter *parameter : materialEffect->parameters() )
133 const QString parameterName = parameter->name();
134 if ( parameterName == QgsMaterial::CLIP_PLANE_ARRAY_PARAMETER_NAME || parameterName == QgsMaterial::CLIP_PLANE_MAX_PLANE_PARAMETER_NAME )
136 materialEffect->removeParameter( parameter );
140 mClippingEnabled =
false;