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>
30 const QPointF ¢erTexCoords,
const QSizeF &sizeTexCoords,
31 QVector<Qt3DRender::QParameter *> additionalShaderParameters,
32 Qt3DCore::QEntity *parent )
35 setObjectName(
"Preview Quad" );
36 Qt3DRender::QGeometry *geom =
new Qt3DRender::QGeometry;
37 Qt3DRender::QAttribute *positionAttribute =
new Qt3DRender::QAttribute;
38 const 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 };
40 const QByteArray vertexArr( (
const char * ) vert.constData(), vert.size() *
sizeof(
float ) );
41 Qt3DRender::QBuffer *vertexBuffer =
nullptr;
42 vertexBuffer =
new Qt3DRender::QBuffer(
this );
43 vertexBuffer->setData( vertexArr );
45 positionAttribute->setName( Qt3DRender::QAttribute::defaultPositionAttributeName() );
46 positionAttribute->setVertexBaseType( Qt3DRender::QAttribute::Float );
47 positionAttribute->setVertexSize( 3 );
48 positionAttribute->setAttributeType( Qt3DRender::QAttribute::VertexAttribute );
49 positionAttribute->setBuffer( vertexBuffer );
50 positionAttribute->setByteOffset( 0 );
51 positionAttribute->setByteStride( 3 *
sizeof(
float ) );
52 positionAttribute->setCount( 6 );
54 geom->addAttribute( positionAttribute );
56 Qt3DRender::QGeometryRenderer *renderer =
new Qt3DRender::QGeometryRenderer;
57 renderer->setPrimitiveType( Qt3DRender::QGeometryRenderer::PrimitiveType::Triangles );
58 renderer->setGeometry( geom );
60 addComponent( renderer );
64 addComponent( mMaterial );
71 mMaterial->
setViewPort( QVector2D( centerTexCoords.x(), centerTexCoords.y() ), QVector2D( sizeTexCoords.width(), sizeTexCoords.height() ) );
77 mTextureParameter =
new Qt3DRender::QParameter(
"previewTexture", texture );
78 mCenterTextureCoords =
new Qt3DRender::QParameter(
"centerTexCoords", QVector2D( 0, 0 ) );
79 mSizeTextureCoords =
new Qt3DRender::QParameter(
"sizeTexCoords", QVector2D( 1, 1 ) );
80 addParameter( mTextureParameter );
81 addParameter( mCenterTextureCoords );
82 addParameter( mSizeTextureCoords );
83 for ( Qt3DRender::QParameter *parameter : additionalShaderParameters ) addParameter( parameter );
85 mEffect =
new Qt3DRender::QEffect;
87 Qt3DRender::QTechnique *technique =
new Qt3DRender::QTechnique;
89 Qt3DRender::QGraphicsApiFilter *graphicsApiFilter = technique->graphicsApiFilter();
90 graphicsApiFilter->setApi( Qt3DRender::QGraphicsApiFilter::Api::OpenGL );
91 graphicsApiFilter->setProfile( Qt3DRender::QGraphicsApiFilter::OpenGLProfile::CoreProfile );
92 graphicsApiFilter->setMajorVersion( 1 );
93 graphicsApiFilter->setMinorVersion( 5 );
95 Qt3DRender::QRenderPass *renderPass =
new Qt3DRender::QRenderPass;
97 Qt3DRender::QShaderProgram *shader =
new Qt3DRender::QShaderProgram;
98 shader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl(
"qrc:/shaders/preview.vert" ) ) );
99 shader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl(
"qrc:/shaders/preview.frag" ) ) );
100 renderPass->setShaderProgram( shader );
102 technique->addRenderPass( renderPass );
104 mEffect->addTechnique( technique );
105 setEffect( mEffect );
110 mCenterTextureCoords->setValue( centerTexCoords );
111 mSizeTextureCoords->setValue( sizeTexCoords );