25#include <Qt3DRender/QBlendEquation>
26#include <Qt3DRender/QBlendEquationArguments>
27#include <Qt3DRender/QCamera>
28#include <Qt3DRender/QCullFace>
29#include <Qt3DRender/QDepthTest>
30#include <Qt3DRender/QEffect>
31#include <Qt3DRender/QGraphicsApiFilter>
32#include <Qt3DRender/QParameter>
33#include <Qt3DRender/QRenderPass>
34#include <Qt3DRender/QTechnique>
36#include "moc_qgslinematerial_p.cpp"
38using namespace Qt::StringLiterals;
43QgsLineMaterial::QgsLineMaterial( LinePart part )
45 , mParameterThickness( new
Qt3DRender::QParameter(
"THICKNESS", 10, this ) )
46 , mParameterLineColor( new
Qt3DRender::QParameter(
"lineColor", QVariant(), this ) )
47 , mParameterUseVertexColors( new
Qt3DRender::QParameter(
"useVertexColors", false, this ) )
48 , mParameterWindowScale( new
Qt3DRender::QParameter(
"WIN_SCALE", QSizeF(), this ) )
50 addParameter( mParameterThickness );
51 addParameter( mParameterLineColor );
52 addParameter( mParameterUseVertexColors );
53 addParameter( mParameterWindowScale );
55 if ( mPart == LinePart::Join )
57 mParameterMiterLimit =
new Qt3DRender::QParameter(
"MITER_LIMIT", -1,
this );
58 addParameter( mParameterMiterLimit );
61 setLineColor( QColor( 0, 255, 0 ) );
63 Qt3DRender::QShaderProgram *shaderProgram =
new Qt3DRender::QShaderProgram(
this );
64 shaderProgram->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( mPart == LinePart::Join ? u
"qrc:/shaders/line_joins.vert"_s : u
"qrc:/shaders/line_segments.vert"_s ) ) );
65 shaderProgram->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u
"qrc:/shaders/lines.frag"_s ) ) );
67 Qt3DRender::QRenderPass *renderPass =
new Qt3DRender::QRenderPass(
this );
68 renderPass->setShaderProgram( shaderProgram );
71 Qt3DRender::QFilterKey *filterKey =
new Qt3DRender::QFilterKey;
72 filterKey->setName( u
"renderingStyle"_s );
73 filterKey->setValue(
"forward" );
75 Qt3DRender::QTechnique *technique =
new Qt3DRender::QTechnique;
76 technique->addFilterKey( filterKey );
77 technique->addRenderPass( renderPass );
78 technique->graphicsApiFilter()->setApi( Qt3DRender::QGraphicsApiFilter::OpenGL );
79 technique->graphicsApiFilter()->setProfile( Qt3DRender::QGraphicsApiFilter::CoreProfile );
80 technique->graphicsApiFilter()->setMajorVersion( 3 );
81 technique->graphicsApiFilter()->setMinorVersion( 3 );
82 Qt3DRender::QEffect *effect =
new Qt3DRender::QEffect(
this );
83 effect->addTechnique( technique );
88void QgsLineMaterial::copyLineParametersTo( QgsLineMaterial *other )
const
90 other->mParameterThickness->setValue( mParameterThickness->value() );
91 other->mParameterLineColor->setValue( mParameterLineColor->value() );
92 other->mParameterUseVertexColors->setValue( mParameterUseVertexColors->value() );
93 other->mParameterWindowScale->setValue( mParameterWindowScale->value() );
96void QgsLineMaterial::setLineColor(
const QColor &color )
101void QgsLineMaterial::setUseVertexColors(
bool enabled )
103 mParameterUseVertexColors->setValue( enabled );
106void QgsLineMaterial::setLineWidth(
float width )
108 mParameterThickness->setValue( width );
111void QgsLineMaterial::setViewportSize(
const QSizeF &viewportSize )
113 mParameterWindowScale->setValue( viewportSize );
static QColor srgbToLinear(const QColor &color)
Converts a SRGB color to a linear color.