QGIS API Documentation 3.43.0-Master (69d1901085b)
qgsdebugtextureentity.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsdebugtextureentity.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#include "moc_qgsdebugtextureentity.cpp"
18#include <Qt3DRender/QTexture>
19
20#include <Qt3DRender/QParameter>
21#include <QUrl>
22#include <QVector2D>
23
24QgsDebugTextureEntity::QgsDebugTextureEntity( Qt3DRender::QTexture2D *texture, Qt3DRender::QLayer *layer, QNode *parent )
25 : QgsRenderPassQuad( layer, parent )
26{
27 setObjectName( "DebugTextureQuad" );
28
29 mTextureParameter = new Qt3DRender::QParameter( "previewTexture", texture );
30 mCenterTextureCoords = new Qt3DRender::QParameter( "centerTexCoords", QVector2D( 0, 0 ) );
31 mSizeTextureCoords = new Qt3DRender::QParameter( "sizeTexCoords", QVector2D( 1, 1 ) );
32 mMaterial->addParameter( mTextureParameter );
33 mMaterial->addParameter( mCenterTextureCoords );
34 mMaterial->addParameter( mSizeTextureCoords );
35 mMaterial->addParameter( new Qt3DRender::QParameter( "isDepth", true ) );
36
37 mShader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( "qrc:/shaders/preview.vert" ) ) );
38 mShader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( "qrc:/shaders/preview.frag" ) ) );
39
40 setViewport( QPointF( 0.9f, 0.9f ), QSizeF( 0.1, 0.1 ) );
41
42 setEnabled( false );
43}
44
45void QgsDebugTextureEntity::setPosition( Qt::Corner corner, double size )
46{
47 switch ( corner )
48 {
49 case Qt::Corner::TopRightCorner:
50 setViewport( QPointF( 1.0f - size / 2, 0.0f + size / 2 ), 0.5 * QSizeF( size, size ) );
51 break;
52 case Qt::Corner::TopLeftCorner:
53 setViewport( QPointF( 0.0f + size / 2, 0.0f + size / 2 ), 0.5 * QSizeF( size, size ) );
54 break;
55 case Qt::Corner::BottomRightCorner:
56 setViewport( QPointF( 1.0f - size / 2, 1.0f - size / 2 ), 0.5 * QSizeF( size, size ) );
57 break;
58 case Qt::Corner::BottomLeftCorner:
59 setViewport( QPointF( 0.0f + size / 2, 1.0f - size / 2 ), 0.5 * QSizeF( size, size ) );
60 break;
61 }
62}
63
64
65void QgsDebugTextureEntity::setViewport( const QPointF &centerTexCoords, const QSizeF &sizeTexCoords )
66{
67 mCenterTextureCoords->setValue( QVector2D( static_cast<float>( centerTexCoords.x() ), static_cast<float>( centerTexCoords.y() ) ) );
68 mSizeTextureCoords->setValue( QVector2D( static_cast<float>( sizeTexCoords.width() ), static_cast<float>( sizeTexCoords.height() ) ) );
69}
Qt3DRender::QParameter * mSizeTextureCoords
void setPosition(Qt::Corner corner, double size)
Sets the texture debugging parameters.
Qt3DRender::QParameter * mCenterTextureCoords
QgsDebugTextureEntity(Qt3DRender::QTexture2D *texture, Qt3DRender::QLayer *layer, QNode *parent=nullptr)
Constructor.
Qt3DRender::QParameter * mTextureParameter
An entity that is responsible for rendering a screen quad for a specific rendering pass.
Qt3DRender::QShaderProgram * mShader
Qt3DRender::QMaterial * mMaterial