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>
32#include "moc_qgslinematerial_p.cpp"
34using namespace Qt::StringLiterals;
39QgsLineMaterial::QgsLineMaterial()
40 : mParameterThickness( new
Qt3DRender::QParameter(
"THICKNESS", 10, this ) )
41 , mParameterMiterLimit( new
Qt3DRender::QParameter(
"MITER_LIMIT", -1, this ) )
42 , mParameterLineColor( new
Qt3DRender::QParameter(
"lineColor", QColor( 0, 255, 0 ), this ) )
43 , mParameterUseVertexColors( new
Qt3DRender::QParameter(
"useVertexColors", false, this ) )
44 , mParameterWindowScale( new
Qt3DRender::QParameter(
"WIN_SCALE", QSizeF(), this ) )
46 addParameter( mParameterThickness );
47 addParameter( mParameterMiterLimit );
48 addParameter( mParameterLineColor );
49 addParameter( mParameterUseVertexColors );
50 addParameter( mParameterWindowScale );
55 Qt3DRender::QShaderProgram *shaderProgram =
new Qt3DRender::QShaderProgram(
this );
56 shaderProgram->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u
"qrc:/shaders/lines.vert"_s ) ) );
57 shaderProgram->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u
"qrc:/shaders/lines.frag"_s ) ) );
58 shaderProgram->setGeometryShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u
"qrc:/shaders/lines.geom"_s ) ) );
60 Qt3DRender::QRenderPass *renderPass =
new Qt3DRender::QRenderPass(
this );
61 renderPass->setShaderProgram( shaderProgram );
64 Qt3DRender::QFilterKey *filterKey =
new Qt3DRender::QFilterKey;
65 filterKey->setName( u
"renderingStyle"_s );
66 filterKey->setValue(
"forward" );
68 Qt3DRender::QTechnique *technique =
new Qt3DRender::QTechnique;
69 technique->addFilterKey( filterKey );
70 technique->addRenderPass( renderPass );
71 technique->graphicsApiFilter()->setApi( Qt3DRender::QGraphicsApiFilter::OpenGL );
72 technique->graphicsApiFilter()->setProfile( Qt3DRender::QGraphicsApiFilter::CoreProfile );
73 technique->graphicsApiFilter()->setMajorVersion( 3 );
74 technique->graphicsApiFilter()->setMinorVersion( 1 );
76 Qt3DRender::QEffect *effect =
new Qt3DRender::QEffect(
this );
77 effect->addTechnique( technique );
82void QgsLineMaterial::setLineColor(
const QColor &color )
84 mParameterLineColor->setValue( color );
87QColor QgsLineMaterial::lineColor()
const
89 return mParameterLineColor->value().value<QColor>();
92void QgsLineMaterial::setUseVertexColors(
bool enabled )
94 mParameterUseVertexColors->setValue( enabled );
97bool QgsLineMaterial::useVertexColors()
const
99 return mParameterUseVertexColors->value().toBool();
102void QgsLineMaterial::setLineWidth(
float width )
104 mParameterThickness->setValue( width );
107float QgsLineMaterial::lineWidth()
const
109 return mParameterThickness->value().toFloat();
112void QgsLineMaterial::setViewportSize(
const QSizeF &viewportSize )
114 mParameterWindowScale->setValue( viewportSize );