18 #include <Qt3DRender/QGeometry> 
   19 #include <Qt3DRender/QAttribute> 
   20 #include <Qt3DRender/QBuffer> 
   21 #include <Qt3DRender/QGeometryRenderer> 
   22 #include <Qt3DRender/QTechnique> 
   23 #include <Qt3DRender/QGraphicsApiFilter> 
   24 #include <Qt3DRender/QShaderProgram> 
   29                                 const QPointF ¢erNDC, 
const QSizeF &size,
 
   30                                 QVector<Qt3DRender::QParameter *> additionalShaderParameters,
 
   31                                 Qt3DCore::QEntity *parent )
 
   34   setObjectName( 
"Preview Quad" );
 
   35   Qt3DRender::QGeometry *geom = 
new Qt3DRender::QGeometry;
 
   36   Qt3DRender::QAttribute *positionAttribute = 
new Qt3DRender::QAttribute;
 
   37   QVector<float> vert = { -1.0f, -1.0f, 1.0f,  1.0f, -1.0f, 1.0f,  -1.0f,  1.0f, 1.0f,  -1.0f,  1.0f, 1.0f,  1.0f, -1.0f, 1.0f,  1.0f,  1.0f, 1.0f };
 
   39   QByteArray vertexArr( ( 
const char * ) vert.constData(), vert.size() * 
sizeof( 
float ) );
 
   40   Qt3DRender::QBuffer *vertexBuffer = 
nullptr;
 
   41   vertexBuffer = 
new Qt3DRender::QBuffer( 
this );
 
   42   vertexBuffer->setData( vertexArr );
 
   44   positionAttribute->setName( Qt3DRender::QAttribute::defaultPositionAttributeName() );
 
   45   positionAttribute->setVertexBaseType( Qt3DRender::QAttribute::Float );
 
   46   positionAttribute->setVertexSize( 3 );
 
   47   positionAttribute->setAttributeType( Qt3DRender::QAttribute::VertexAttribute );
 
   48   positionAttribute->setBuffer( vertexBuffer );
 
   49   positionAttribute->setByteOffset( 0 );
 
   50   positionAttribute->setByteStride( 3 * 
sizeof( 
float ) );
 
   51   positionAttribute->setCount( 6 );
 
   53   geom->addAttribute( positionAttribute );
 
   55   Qt3DRender::QGeometryRenderer *renderer = 
new Qt3DRender::QGeometryRenderer;
 
   56   renderer->setPrimitiveType( Qt3DRender::QGeometryRenderer::PrimitiveType::Triangles );
 
   57   renderer->setGeometry( geom );
 
   59   addComponent( renderer );
 
   61   QMatrix4x4 modelMatrix;
 
   62   modelMatrix.setToIdentity();
 
   63   modelMatrix.translate( centerNDC.x(), centerNDC.y() );
 
   64   modelMatrix.scale( size.width(), size.height() );
 
   67   addComponent( mMaterial );
 
   72   QMatrix4x4 modelMatrix;
 
   73   modelMatrix.setToIdentity();
 
   74   modelMatrix.translate( centerNDC.x(), centerNDC.y() );
 
   75   modelMatrix.scale( size.width(), size.height() );
 
   82   mTextureParameter = 
new Qt3DRender::QParameter( 
"previewTexture", texture );
 
   83   mTextureTransformParameter = 
new Qt3DRender::QParameter( 
"modelMatrix", QVariant::fromValue( modelMatrix ) );
 
   84   addParameter( mTextureParameter );
 
   85   addParameter( mTextureTransformParameter );
 
   86   for ( Qt3DRender::QParameter *parameter : additionalShaderParameters ) addParameter( parameter );
 
   88   mEffect = 
new Qt3DRender::QEffect;
 
   90   Qt3DRender::QTechnique *technique = 
new Qt3DRender::QTechnique;
 
   92   Qt3DRender::QGraphicsApiFilter *graphicsApiFilter = technique->graphicsApiFilter();
 
   93   graphicsApiFilter->setApi( Qt3DRender::QGraphicsApiFilter::Api::OpenGL );
 
   94   graphicsApiFilter->setProfile( Qt3DRender::QGraphicsApiFilter::OpenGLProfile::CoreProfile );
 
   95   graphicsApiFilter->setMajorVersion( 1 );
 
   96   graphicsApiFilter->setMinorVersion( 5 );
 
   98   Qt3DRender::QRenderPass *renderPass = 
new Qt3DRender::QRenderPass;
 
  100   Qt3DRender::QShaderProgram *shader = 
new Qt3DRender::QShaderProgram;
 
  101   shader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( 
"qrc:/shaders/preview.vert" ) ) );
 
  102   shader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( 
"qrc:/shaders/preview.frag" ) ) );
 
  103   renderPass->setShaderProgram( shader );
 
  105   technique->addRenderPass( renderPass );
 
  107   mEffect->addTechnique( technique );
 
  108   setEffect( mEffect );
 
  113   mTextureTransformParameter->setValue( modelMatrix );
 
void setModelMatrix(const QMatrix4x4 &modelMatrix)
Sets the model matrix of the quad.
QgsPreviewQuadMaterial(Qt3DRender::QAbstractTexture *texture, const QMatrix4x4 &modelMatrix, QVector< Qt3DRender::QParameter * > additionalShaderParameters=QVector< Qt3DRender::QParameter * >(), QNode *parent=nullptr)
Constructor.
void setViewPort(const QPointF ¢erNDC, const QSizeF &size)
Sets where the quad will be located on the scene.
QgsPreviewQuad(Qt3DRender::QAbstractTexture *texture, const QPointF ¢erNDC, const QSizeF &size, QVector< Qt3DRender::QParameter * > additionalShaderParameters=QVector< Qt3DRender::QParameter * >(), Qt3DCore::QEntity *parent=nullptr)
Construct an object that displays a texture for debugging purposes (example: depth buffer)