22#include <Qt3DRender/QEffect>
23#include <Qt3DRender/QGraphicsApiFilter>
24#include <Qt3DRender/QParameter>
25#include <Qt3DRender/QRenderPass>
26#include <Qt3DRender/QShaderProgram>
27#include <Qt3DRender/QTechnique>
28#include <Qt3DRender/QTexture>
30#include "moc_qgstexturematerial.cpp"
32using namespace Qt::StringLiterals;
35QgsTextureMaterial::QgsTextureMaterial( QNode *parent )
37 , mTextureParameter( new
Qt3DRender::QParameter( u
"diffuseTexture"_s, new
Qt3DRender::QTexture2D ) )
38 , mGL3Technique( new
Qt3DRender::QTechnique( this ) )
39 , mGL3RenderPass( new
Qt3DRender::QRenderPass( this ) )
40 , mGL3Shader( new
Qt3DRender::QShaderProgram( this ) )
41 , mFilterKey( new
Qt3DRender::QFilterKey( this ) )
46QgsTextureMaterial::~QgsTextureMaterial() =
default;
49void QgsTextureMaterial::init()
51 Qt3DRender::QEffect *effect =
new Qt3DRender::QEffect();
53 effect->addParameter( mTextureParameter );
55 mGL3Shader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u
"qrc:/shaders/texture.frag"_s ) ) );
56 mGL3Shader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u
"qrc:/shaders/texture.vert"_s ) ) );
58 mGL3Technique->graphicsApiFilter()->setApi( Qt3DRender::QGraphicsApiFilter::OpenGL );
59 mGL3Technique->graphicsApiFilter()->setMajorVersion( 3 );
60 mGL3Technique->graphicsApiFilter()->setMinorVersion( 1 );
61 mGL3Technique->graphicsApiFilter()->setProfile( Qt3DRender::QGraphicsApiFilter::CoreProfile );
63 mFilterKey->setParent(
this );
64 mFilterKey->setName( u
"renderingStyle"_s );
65 mFilterKey->setValue( u
"forward"_s );
67 mGL3Technique->addFilterKey( mFilterKey );
68 mGL3RenderPass->setShaderProgram( mGL3Shader );
69 mGL3Technique->addRenderPass( mGL3RenderPass );
70 effect->addTechnique( mGL3Technique );
75void QgsTextureMaterial::setTexture( Qt3DRender::QAbstractTexture *texture )
77 mTextureParameter->setValue( QVariant::fromValue( texture ) );
80Qt3DRender::QAbstractTexture *QgsTextureMaterial::texture()
const
82 return mTextureParameter->value().value<Qt3DRender::QAbstractTexture *>();
88 mInstanceFlags = flags;
92 QStringList defines = { u
"HAS_TEXTURE"_s };
94 defines << u
"USE_INSTANCE_SCALE"_s;
96 defines << u
"USE_INSTANCE_ROTATION"_s;
97 const QByteArray vertCode = Qt3DRender::QShaderProgram::loadSource( QUrl( u
"qrc:/shaders/instanced.vert"_s ) );
102 mGL3Shader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u
"qrc:/shaders/texture.vert"_s ) ) );
QFlags< InstancedMaterialFlag > InstancedMaterialFlags
@ DataDefinedRotation
Per-instance data-defined rotation.
@ DataDefinedScale
Per-instance data-defined scale.
static QByteArray addDefinesToShaderCode(const QByteArray &shaderCode, const QStringList &defines)
Inserts some define macros into a shader source code.
Base class for all materials used within QGIS 3D views.