QGIS API Documentation 4.1.0-Master (376402f9aeb)
Loading...
Searching...
No Matches
qgshighlightmaterial.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgshighlightmaterial.cpp
3 ---------------------
4 begin : December 2025
5 copyright : (C) 2025 by Stefanos Natsis
6 email : uclaros at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
17
18#include "qgs3dutils.h"
19#include "qgssettings.h"
20
21#include <QColor>
22#include <QString>
23#include <QUrl>
24#include <Qt3DRender/QEffect>
25#include <Qt3DRender/QGraphicsApiFilter>
26#include <Qt3DRender/QParameter>
27#include <Qt3DRender/QTechnique>
28
29#include "moc_qgshighlightmaterial.cpp"
30
31using namespace Qt::StringLiterals;
32
34
35QgsHighlightMaterial::QgsHighlightMaterial( Qgis::MaterialRenderingTechnique technique, QNode *parent )
36 : QgsMaterial( parent )
37{
38 init( technique );
39}
40
41QgsHighlightMaterial::~QgsHighlightMaterial() = default;
42
43void QgsHighlightMaterial::init( Qgis::MaterialRenderingTechnique renderingTechnique )
44{
45 Qt3DRender::QEffect *effect = new Qt3DRender::QEffect;
46 Qt3DRender::QTechnique *technique = new Qt3DRender::QTechnique;
47 technique->graphicsApiFilter()->setApi( Qt3DRender::QGraphicsApiFilter::OpenGL );
48 technique->graphicsApiFilter()->setProfile( Qt3DRender::QGraphicsApiFilter::CoreProfile );
49 technique->graphicsApiFilter()->setMajorVersion( 3 );
50 technique->graphicsApiFilter()->setMinorVersion( 3 );
51
52 Qt3DRender::QRenderPass *pass = new Qt3DRender::QRenderPass;
53
54 Qt3DRender::QShaderProgram *shaderProgram = new Qt3DRender::QShaderProgram;
55 switch ( renderingTechnique )
56 {
61 {
62 shaderProgram->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u"qrc:/shaders/default.vert"_s ) ) );
63 break;
64 }
66 {
67 shaderProgram->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u"qrc:/shaders/instanced.vert"_s ) ) );
68 break;
69 }
73 {
74 // Lines are single color and do not need the highlight material
75 // Billboards are not supported yet
76 break;
77 }
78 }
79
80 shaderProgram->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u"qrc:/shaders/singlecolor.frag"_s ) ) );
81 pass->setShaderProgram( shaderProgram );
82
83 const QgsSettings settings;
84 const float alpha = settings.value( u"Map/highlight/colorAlpha"_s, Qgis::DEFAULT_HIGHLIGHT_COLOR.alpha() ).toFloat() / 255.f;
85 QColor color = QColor( settings.value( u"Map/highlight/color"_s, Qgis::DEFAULT_HIGHLIGHT_COLOR.name() ).toString() );
86 color.setAlphaF( alpha );
87 Qt3DRender::QParameter *colorParam = new Qt3DRender::QParameter( u"color"_s, Qgs3DUtils::srgbToLinear( color ) );
88 pass->addParameter( colorParam );
89
90 technique->addRenderPass( pass );
91 effect->addTechnique( technique );
92 setEffect( effect );
93}
94
static const QColor DEFAULT_HIGHLIGHT_COLOR
Default highlight color.
Definition qgis.h:6709
MaterialRenderingTechnique
Material rendering techniques.
Definition qgis.h:4342
@ Points
Point based rendering, requires point data.
Definition qgis.h:4346
@ Triangles
Triangle based rendering (default).
Definition qgis.h:4343
@ TrianglesFromModel
Triangle based rendering, using a model object source.
Definition qgis.h:4348
@ Lines
Line based rendering, requires line data.
Definition qgis.h:4344
@ Billboards
Flat billboard rendering.
Definition qgis.h:4350
@ TrianglesDataDefined
Triangle based rendering with possibility of datadefined color.
Definition qgis.h:4349
@ InstancedPoints
Instanced based rendering, requiring triangles and point data.
Definition qgis.h:4345
@ TrianglesWithFixedTexture
Triangle based rendering, using a fixed, non-user-configurable texture (e.g. for terrain rendering).
Definition qgis.h:4347
static QColor srgbToLinear(const QColor &color)
Converts a SRGB color to a linear color.
Base class for all materials used within QGIS 3D views.
Definition qgsmaterial.h:40
Stores settings for use within QGIS.
Definition qgssettings.h:68
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.