18#include <Qt3DRender/QEffect> 
   19#include <Qt3DRender/QGraphicsApiFilter> 
   20#include <Qt3DRender/QParameter> 
   21#include <Qt3DRender/QRenderPass> 
   22#include <Qt3DRender/QShaderProgram> 
   23#include <Qt3DRender/QTechnique> 
   24#include <Qt3DRender/QTexture> 
   27#include "moc_qgsglobematerial.cpp" 
   30QgsGlobeMaterial::QgsGlobeMaterial( QNode *parent )
 
   32  , mTextureParameter( new 
Qt3DRender::QParameter( QStringLiteral( 
"diffuseTexture" ), new 
Qt3DRender::QTexture2D ) )
 
   33  , mDiffuseTextureScaleParameter( new 
Qt3DRender::QParameter( QStringLiteral( 
"texCoordScale" ), 1.0f ) )
 
   34  , mGL3Technique( new 
Qt3DRender::QTechnique( this ) )
 
   35  , mGL3RenderPass( new 
Qt3DRender::QRenderPass( this ) )
 
   36  , mGL3Shader( new 
Qt3DRender::QShaderProgram( this ) )
 
   37  , mFilterKey( new 
Qt3DRender::QFilterKey( this ) )
 
   42QgsGlobeMaterial::~QgsGlobeMaterial() = 
default;
 
   45void QgsGlobeMaterial::init()
 
   47  connect( mTextureParameter, &Qt3DRender::QParameter::valueChanged, 
this, &QgsGlobeMaterial::handleTextureChanged );
 
   49  Qt3DRender::QEffect *effect = 
new Qt3DRender::QEffect();
 
   51  effect->addParameter( mTextureParameter );
 
   52  effect->addParameter( mDiffuseTextureScaleParameter );
 
   54  mGL3Shader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( QStringLiteral( 
"qrc:/shaders/globe.frag" ) ) ) );
 
   55  mGL3Shader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( QStringLiteral( 
"qrc:/shaders/default.vert" ) ) ) );
 
   57  mGL3Technique->graphicsApiFilter()->setApi( Qt3DRender::QGraphicsApiFilter::OpenGL );
 
   58  mGL3Technique->graphicsApiFilter()->setMajorVersion( 3 );
 
   59  mGL3Technique->graphicsApiFilter()->setMinorVersion( 1 );
 
   60  mGL3Technique->graphicsApiFilter()->setProfile( Qt3DRender::QGraphicsApiFilter::CoreProfile );
 
   62  mFilterKey->setParent( 
this );
 
   63  mFilterKey->setName( QStringLiteral( 
"renderingStyle" ) );
 
   64  mFilterKey->setValue( QStringLiteral( 
"forward" ) );
 
   66  mGL3Technique->addFilterKey( mFilterKey );
 
   67  mGL3RenderPass->setShaderProgram( mGL3Shader );
 
   68  mGL3Technique->addRenderPass( mGL3RenderPass );
 
   69  effect->addTechnique( mGL3Technique );
 
   74void QgsGlobeMaterial::setTexture( Qt3DRender::QAbstractTexture *texture )
 
   76  mTextureParameter->setValue( QVariant::fromValue( texture ) );
 
   79Qt3DRender::QAbstractTexture *QgsGlobeMaterial::texture()
 const 
   81  return mTextureParameter->value().value<Qt3DRender::QAbstractTexture *>();
 
   84void QgsGlobeMaterial::handleTextureChanged( 
const QVariant &var )
 
   86  emit textureChanged( var.value<Qt3DRender::QAbstractTexture *>() );
 
Base class for all materials used within QGIS 3D views.