QGIS API Documentation 3.99.0-Master (c22de0620c0)
Loading...
Searching...
No Matches
qgsoverlaytextureentity.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsoverlaytextureentity.cpp
3 --------------------------------------
4 Date : June 2024
5 Copyright : (C) 2024 by Benoit De Mezzo
6 Email : benoit dot de dot mezzo at oslandia 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 <QUrl>
19#include <QVector2D>
20#include <Qt3DRender/QMaterial>
21#include <Qt3DRender/QParameter>
22#include <Qt3DRender/QShaderProgram>
23#include <Qt3DRender/QTexture>
24
25#include "moc_qgsoverlaytextureentity.cpp"
26
27QgsOverlayTextureEntity::QgsOverlayTextureEntity( Qt3DRender::QTexture2D *texture, Qt3DRender::QLayer *layer, QNode *parent )
28 : QgsRenderPassQuad( layer, parent )
29{
30 setObjectName( "OverlayTextureQuad" );
31
32 mTextureParameter = new Qt3DRender::QParameter( "previewTexture", texture );
33 mCenterTextureCoords = new Qt3DRender::QParameter( "centerTexCoords", QVector2D( 0, 0 ) );
34 mSizeTextureCoords = new Qt3DRender::QParameter( "sizeTexCoords", QVector2D( 1, 1 ) );
35 mIsDepth = new Qt3DRender::QParameter( "isDepth", true );
36 mFlipTextureY = new Qt3DRender::QParameter( "flipTextureY", true );
37
38 mMaterial->addParameter( mTextureParameter );
39 mMaterial->addParameter( mCenterTextureCoords );
40 mMaterial->addParameter( mSizeTextureCoords );
41 mMaterial->addParameter( mIsDepth );
42 mMaterial->addParameter( mFlipTextureY );
43
44 mShader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( "qrc:/shaders/preview.vert" ) ) );
45 mShader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( "qrc:/shaders/preview.frag" ) ) );
46
47 setViewport( QPointF( 0.9f, 0.9f ), QSizeF( 0.1, 0.1 ) );
48
49 setEnabled( false );
50}
51
52void QgsOverlayTextureEntity::setPosition( Qt::Corner corner, double size, double offset )
53{
54 setPosition( corner, QSizeF( size, size ), QSizeF( offset, offset ) );
55}
56
57void QgsOverlayTextureEntity::setPosition( Qt::Corner corner, QSizeF size, QSizeF offset )
58{
59 switch ( corner )
60 {
61 case Qt::Corner::TopRightCorner:
62 setViewport( QPointF( 1.0f - size.width() / 2 - offset.width(), offset.height() + size.height() / 2 ), 0.5 * size );
63 break;
64 case Qt::Corner::TopLeftCorner:
65 setViewport( QPointF( offset.width() + size.width() / 2, offset.height() + size.height() / 2 ), 0.5 * size );
66 break;
67 case Qt::Corner::BottomRightCorner:
68 setViewport( QPointF( 1.0f - size.width() / 2 - offset.width(), 1.0f - size.height() / 2 - offset.height() ), 0.5 * size );
69 break;
70 case Qt::Corner::BottomLeftCorner:
71 setViewport( QPointF( offset.width() + size.width() / 2, 1.0f - size.height() / 2 - offset.height() ), 0.5 * size );
72 break;
73 }
74}
75
76
77void QgsOverlayTextureEntity::setViewport( const QPointF &centerTexCoords, const QSizeF &sizeTexCoords )
78{
79 mCenterTextureCoords->setValue( QVector2D( static_cast<float>( centerTexCoords.x() ), static_cast<float>( centerTexCoords.y() ) ) );
80 mSizeTextureCoords->setValue( QVector2D( static_cast<float>( sizeTexCoords.width() ), static_cast<float>( sizeTexCoords.height() ) ) );
81}
void setPosition(Qt::Corner corner, QSizeF size, QSizeF offset=QSizeF(0., 0.))
Sets the texture debugging parameters.
Qt3DRender::QParameter * mSizeTextureCoords
Qt3DRender::QParameter * mTextureParameter
Qt3DRender::QParameter * mFlipTextureY
Qt3DRender::QParameter * mCenterTextureCoords
QgsOverlayTextureEntity(Qt3DRender::QTexture2D *texture, Qt3DRender::QLayer *layer, QNode *parent=nullptr)
Constructor.
Qt3DRender::QParameter * mIsDepth
QgsRenderPassQuad(Qt3DRender::QLayer *layer, QNode *parent=nullptr)
Constructor.
Qt3DRender::QShaderProgram * mShader
Qt3DRender::QMaterial * mMaterial