QGIS API Documentation 3.99.0-Master (09f76ad7019)
Loading...
Searching...
No Matches
qgsglobematerial.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsglobematerial.cpp
3 --------------------------------------
4 Date : April 2025
5 Copyright : (C) 2025 by Martin Dobias
6 Email : wonder dot sk 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
16#include "qgsglobematerial.h"
17
18#include <QString>
19#include <QUrl>
20#include <Qt3DRender/QEffect>
21#include <Qt3DRender/QGraphicsApiFilter>
22#include <Qt3DRender/QParameter>
23#include <Qt3DRender/QRenderPass>
24#include <Qt3DRender/QShaderProgram>
25#include <Qt3DRender/QTechnique>
26#include <Qt3DRender/QTexture>
27
28#include "moc_qgsglobematerial.cpp"
29
30using namespace Qt::StringLiterals;
31
33QgsGlobeMaterial::QgsGlobeMaterial( QNode *parent )
34 : QgsMaterial( parent )
35 , mTextureParameter( new Qt3DRender::QParameter( u"diffuseTexture"_s, new Qt3DRender::QTexture2D ) )
36 , mDiffuseTextureScaleParameter( new Qt3DRender::QParameter( u"texCoordScale"_s, 1.0f ) )
37 , mGL3Technique( new Qt3DRender::QTechnique( this ) )
38 , mGL3RenderPass( new Qt3DRender::QRenderPass( this ) )
39 , mGL3Shader( new Qt3DRender::QShaderProgram( this ) )
40 , mFilterKey( new Qt3DRender::QFilterKey( this ) )
41{
42 init();
43}
44
45QgsGlobeMaterial::~QgsGlobeMaterial() = default;
46
47
48void QgsGlobeMaterial::init()
49{
50 connect( mTextureParameter, &Qt3DRender::QParameter::valueChanged, this, &QgsGlobeMaterial::handleTextureChanged );
51
52 Qt3DRender::QEffect *effect = new Qt3DRender::QEffect();
53
54 effect->addParameter( mTextureParameter );
55 effect->addParameter( mDiffuseTextureScaleParameter );
56
57 mGL3Shader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u"qrc:/shaders/globe.frag"_s ) ) );
58 mGL3Shader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u"qrc:/shaders/default.vert"_s ) ) );
59
60 mGL3Technique->graphicsApiFilter()->setApi( Qt3DRender::QGraphicsApiFilter::OpenGL );
61 mGL3Technique->graphicsApiFilter()->setMajorVersion( 3 );
62 mGL3Technique->graphicsApiFilter()->setMinorVersion( 1 );
63 mGL3Technique->graphicsApiFilter()->setProfile( Qt3DRender::QGraphicsApiFilter::CoreProfile );
64
65 mFilterKey->setParent( this );
66 mFilterKey->setName( u"renderingStyle"_s );
67 mFilterKey->setValue( u"forward"_s );
68
69 mGL3Technique->addFilterKey( mFilterKey );
70 mGL3RenderPass->setShaderProgram( mGL3Shader );
71 mGL3Technique->addRenderPass( mGL3RenderPass );
72 effect->addTechnique( mGL3Technique );
73
74 setEffect( effect );
75}
76
77void QgsGlobeMaterial::setTexture( Qt3DRender::QAbstractTexture *texture )
78{
79 mTextureParameter->setValue( QVariant::fromValue( texture ) );
80}
81
82Qt3DRender::QAbstractTexture *QgsGlobeMaterial::texture() const
83{
84 return mTextureParameter->value().value<Qt3DRender::QAbstractTexture *>();
85}
86
87void QgsGlobeMaterial::handleTextureChanged( const QVariant &var )
88{
89 emit textureChanged( var.value<Qt3DRender::QAbstractTexture *>() );
90}
91
Base class for all materials used within QGIS 3D views.
Definition qgsmaterial.h:39