46 , mMaterial( new
Qt3DRender::QMaterial( this ) )
47 , mGl3Technique( new
Qt3DRender::QTechnique( this ) )
48 , mFilterKey( new
Qt3DRender::QFilterKey( this ) )
49 , mGl3RenderPass( new
Qt3DRender::QRenderPass( this ) )
50 , mMesh( new
Qt3DRender::QGeometryRenderer( this ) )
51 , mGlShader( new
Qt3DRender::QShaderProgram( this ) )
52 , mTopColorParameter( new
Qt3DRender::QParameter( u
"topColor"_s, QVariant() ) )
53 , mBottomColorParameter( new
Qt3DRender::QParameter( u
"bottomColor"_s, QVariant() ) )
57 mTopColorParameter->setValue( QVector3D( linearTopColor.redF(), linearTopColor.greenF(), linearTopColor.blueF() ) );
58 mBottomColorParameter->setValue( QVector3D( linearBottomColor.redF(), linearBottomColor.greenF(), linearBottomColor.blueF() ) );
60 mGl3Technique->graphicsApiFilter()->setApi( Qt3DRender::QGraphicsApiFilter::OpenGL );
61 mGl3Technique->graphicsApiFilter()->setMajorVersion( 3 );
62 mGl3Technique->graphicsApiFilter()->setMinorVersion( 3 );
63 mGl3Technique->graphicsApiFilter()->setProfile( Qt3DRender::QGraphicsApiFilter::CoreProfile );
65 mFilterKey->setParent( mEffect );
66 mFilterKey->setName( u
"renderingStyle"_s );
67 mFilterKey->setValue( u
"forward"_s );
69 mGl3Technique->addFilterKey( mFilterKey );
71 Qt3DRender::QDepthTest *depthTest =
new Qt3DRender::QDepthTest();
72 depthTest->setDepthFunction( Qt3DRender::QDepthTest::LessOrEqual );
73 Qt3DRender::QNoDepthMask *noDepthMask =
new Qt3DRender::QNoDepthMask();
75 mGl3RenderPass->addRenderState( depthTest );
76 mGl3RenderPass->addRenderState( noDepthMask );
78 mGlShader->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u
"qrc:/shaders/gradient_static.vert"_s ) ) );
79 mGlShader->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u
"qrc:/shaders/gradient_background.frag"_s ) ) );
80 mGl3RenderPass->setShaderProgram( mGlShader );
82 mGl3Technique->addRenderPass( mGl3RenderPass );
83 mEffect->addTechnique( mGl3Technique );
85 mMaterial->setEffect( mEffect );
86 mMaterial->addParameter( mTopColorParameter );
87 mMaterial->addParameter( mBottomColorParameter );
89 Qt3DCore::QGeometry *geom =
new Qt3DCore::QGeometry(
this );
90 Qt3DCore::QAttribute *posAttr =
new Qt3DCore::QAttribute(
this );
92 const QVector<float> verts = { -1.0f, -1.0f, 0.0f,
99 Qt3DCore::QBuffer *vbo =
new Qt3DCore::QBuffer(
this );
100 vbo->setData( QByteArray(
reinterpret_cast<const char *
>( verts.constData() ), verts.size() *
sizeof(
float ) ) );
101 posAttr->setName( Qt3DCore::QAttribute::defaultPositionAttributeName() );
102 posAttr->setVertexBaseType( Qt3DCore::QAttribute::Float );
103 posAttr->setVertexSize( 3 );
104 posAttr->setAttributeType( Qt3DCore::QAttribute::VertexAttribute );
105 posAttr->setBuffer( vbo );
106 posAttr->setByteStride( 3 *
sizeof(
float ) );
107 posAttr->setCount( 6 );
108 geom->addAttribute( posAttr );
109 mMesh->setPrimitiveType( Qt3DRender::QGeometryRenderer::Triangles );
110 mMesh->setGeometry( geom );
112 addComponent( mMesh );
113 addComponent( mMaterial );