43 Qt3DRender::QEffect *materialEffect = effect();
44 if ( !materialEffect )
49 if ( clipPlanesEquations.isEmpty() )
55 for ( Qt3DRender::QTechnique *technique : materialEffect->techniques() )
57 for ( Qt3DRender::QRenderPass *renderPass : technique->renderPasses() )
59 Qt3DRender::QShaderProgram *shaderProgram = renderPass->shaderProgram();
60 const QByteArray geomCode = shaderProgram->geometryShaderCode();
61 if ( !geomCode.isEmpty() )
64 shaderProgram->setGeometryShaderCode( newGeomCode );
67 const QByteArray vertexCode = shaderProgram->vertexShaderCode();
68 if ( !vertexCode.isEmpty() )
71 shaderProgram->setVertexShaderCode( newVertexCode );
77 const int nrClipPlanes = clipPlanesEquations.size();
78 QVariantList clipPlanesEquationsVariant = QVariantList();
79 for (
int i = 0; i < nrClipPlanes; ++i )
81 clipPlanesEquationsVariant << clipPlanesEquations[i];
83 Qt3DRender::QParameter *clipPlane =
new Qt3DRender::QParameter( QgsMaterial::CLIP_PLANE_ARRAY_PARAMETER_NAME, clipPlanesEquationsVariant );
84 Qt3DRender::QParameter *clipPlaneNumber =
new Qt3DRender::QParameter( QgsMaterial::CLIP_PLANE_MAX_PLANE_PARAMETER_NAME, nrClipPlanes );
86 materialEffect->addParameter( clipPlane );
87 materialEffect->addParameter( clipPlaneNumber );
89 mClippingEnabled =
true;
94 Qt3DRender::QEffect *materialEffect = effect();
95 if ( !materialEffect || !mClippingEnabled )
99 for ( Qt3DRender::QTechnique *technique : materialEffect->techniques() )
101 for ( Qt3DRender::QRenderPass *renderPass : technique->renderPasses() )
103 Qt3DRender::QShaderProgram *shaderProgram = renderPass->shaderProgram();
104 const QByteArray geomCode = shaderProgram->geometryShaderCode();
105 if ( !geomCode.isEmpty() )
108 shaderProgram->setGeometryShaderCode( newGeomCode );
111 const QByteArray vertexCode = shaderProgram->vertexShaderCode();
112 if ( !vertexCode.isEmpty() )
115 shaderProgram->setVertexShaderCode( newVertexCode );
121 for ( Qt3DRender::QParameter *parameter : materialEffect->parameters() )
123 const QString parameterName = parameter->name();
124 if ( parameterName == QgsMaterial::CLIP_PLANE_ARRAY_PARAMETER_NAME || parameterName == QgsMaterial::CLIP_PLANE_MAX_PLANE_PARAMETER_NAME )
126 materialEffect->removeParameter( parameter );
130 mClippingEnabled =
false;