23 #include <Qt3DRender/QBlendEquation>
24 #include <Qt3DRender/QBlendEquationArguments>
25 #include <Qt3DRender/QCamera>
26 #include <Qt3DRender/QEffect>
27 #include <Qt3DRender/QGraphicsApiFilter>
28 #include <Qt3DRender/QParameter>
29 #include <Qt3DRender/QRenderPass>
30 #include <Qt3DRender/QTechnique>
35 QgsLineMaterial::QgsLineMaterial()
36 : mParameterThickness( new
Qt3DRender::QParameter(
"THICKNESS", 10, this ) )
37 , mParameterMiterLimit( new
Qt3DRender::QParameter(
"MITER_LIMIT", -1, this ) )
38 , mParameterLineColor( new
Qt3DRender::QParameter(
"lineColor", QColor( 0, 255, 0 ), this ) )
39 , mParameterWindowScale( new
Qt3DRender::QParameter(
"WIN_SCALE", QSizeF(), this ) )
41 addParameter( mParameterThickness );
42 addParameter( mParameterMiterLimit );
43 addParameter( mParameterLineColor );
44 addParameter( mParameterWindowScale );
49 Qt3DRender::QShaderProgram *shaderProgram =
new Qt3DRender::QShaderProgram(
this );
50 shaderProgram->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( QStringLiteral(
"qrc:/shaders/lines.vert" ) ) ) );
51 shaderProgram->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( QStringLiteral(
"qrc:/shaders/lines.frag" ) ) ) );
52 shaderProgram->setGeometryShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( QStringLiteral(
"qrc:/shaders/lines.geom" ) ) ) );
54 Qt3DRender::QBlendEquation *blendEquation =
new Qt3DRender::QBlendEquation(
this );
55 blendEquation->setBlendFunction( Qt3DRender::QBlendEquation::Add );
57 Qt3DRender::QBlendEquationArguments *blendEquationArgs =
new Qt3DRender::QBlendEquationArguments(
this );
58 blendEquationArgs->setSourceRgb( Qt3DRender::QBlendEquationArguments::SourceAlpha );
59 blendEquationArgs->setDestinationRgb( Qt3DRender::QBlendEquationArguments::OneMinusSourceAlpha );
61 Qt3DRender::QRenderPass *renderPass =
new Qt3DRender::QRenderPass(
this );
62 renderPass->setShaderProgram( shaderProgram );
63 renderPass->addRenderState( blendEquation );
64 renderPass->addRenderState( blendEquationArgs );
67 Qt3DRender::QFilterKey *filterKey =
new Qt3DRender::QFilterKey;
68 filterKey->setName( QStringLiteral(
"renderingStyle" ) );
69 filterKey->setValue(
"forward" );
71 Qt3DRender::QTechnique *technique =
new Qt3DRender::QTechnique;
72 technique->addFilterKey( filterKey );
73 technique->addRenderPass( renderPass );
74 technique->graphicsApiFilter()->setApi( Qt3DRender::QGraphicsApiFilter::OpenGL );
75 technique->graphicsApiFilter()->setProfile( Qt3DRender::QGraphicsApiFilter::CoreProfile );
76 technique->graphicsApiFilter()->setMajorVersion( 3 );
77 technique->graphicsApiFilter()->setMinorVersion( 1 );
79 Qt3DRender::QEffect *effect =
new Qt3DRender::QEffect(
this );
80 effect->addTechnique( technique );
85 void QgsLineMaterial::setLineColor(
const QColor &color )
87 mParameterLineColor->setValue( color );
90 QColor QgsLineMaterial::lineColor()
const
92 return mParameterLineColor->value().value<QColor>();
95 void QgsLineMaterial::setLineWidth(
float width )
97 mParameterThickness->setValue( width );
100 float QgsLineMaterial::lineWidth()
const
102 return mParameterThickness->value().toFloat();
105 void QgsLineMaterial::setViewportSize(
const QSizeF &viewportSize )
107 mParameterWindowScale->setValue( viewportSize );