@@ -18,38 +18,58 @@ SelectionHighlightMaterial::SelectionHighlightMaterial(Qt3DCore::QNode *parent)
1818 shaderGL3->setVertexShaderCode (Qt3DRender::QShaderProgram::loadSource (QUrl (QStringLiteral (" qrc:/shaders/gl3/selection_hightlight.vert" ))));
1919 shaderGL3->setFragmentShaderCode (Qt3DRender::QShaderProgram::loadSource (QUrl (QStringLiteral (" qrc:/shaders/gl3/selection_hightlight.frag" ))));
2020
21- colorParam = new Qt3DRender::QParameter (QStringLiteral (" color" ), QColor::fromRgbF (1 .0f , 0 .0f , 0 .0f , 1 .0f ));
21+ auto shaderRHI = new Qt3DRender::QShaderProgram ();
22+ shaderRHI->setVertexShaderCode (Qt3DRender::QShaderProgram::loadSource (QUrl (QStringLiteral (" qrc:/shaders/rhi/selection_hightlight.vert" ))));
23+ shaderRHI->setFragmentShaderCode (Qt3DRender::QShaderProgram::loadSource (QUrl (QStringLiteral (" qrc:/shaders/rhi/selection_hightlight.frag" ))));
2224
2325 auto techniqueGL3 = new Qt3DRender::QTechnique ();
24- auto apiFilterGL3 = techniqueGL3->graphicsApiFilter ();
25- apiFilterGL3->setApi (Qt3DRender::QGraphicsApiFilter::OpenGL);
26- apiFilterGL3->setMajorVersion (3 );
27- apiFilterGL3->setMinorVersion (1 );
28- apiFilterGL3->setProfile (Qt3DRender::QGraphicsApiFilter::CoreProfile);
26+ techniqueGL3->graphicsApiFilter ()->setApi (Qt3DRender::QGraphicsApiFilter::OpenGL);
27+ techniqueGL3->graphicsApiFilter ()->setMajorVersion (3 );
28+ techniqueGL3->graphicsApiFilter ()->setMinorVersion (1 );
29+ techniqueGL3->graphicsApiFilter ()->setProfile (Qt3DRender::QGraphicsApiFilter::CoreProfile);
2930
30- auto filterKeyGL3 = new Qt3DRender::QFilterKey ( this );
31- filterKeyGL3-> setName ( QStringLiteral ( " renderingStyle " ) );
32- filterKeyGL3-> setValue ( QStringLiteral ( " forward " ) );
33- techniqueGL3-> addFilterKey (filterKeyGL3 );
31+ auto techniqueRHI = new Qt3DRender::QTechnique ( );
32+ techniqueRHI-> graphicsApiFilter ()-> setApi (Qt3DRender::QGraphicsApiFilter::RHI );
33+ techniqueRHI-> graphicsApiFilter ()-> setMajorVersion ( 1 );
34+ techniqueRHI-> graphicsApiFilter ()-> setMinorVersion ( 0 );
3435
35- auto renderPassGL3 = new Qt3DRender::QRenderPass ();
36- renderPassGL3->setShaderProgram (shaderGL3);
36+ // Shared by both render backeneds
37+ colorParam = new Qt3DRender::QParameter (QStringLiteral (" color" ), QColor::fromRgbF (1 .0f , 0 .0f , 0 .0f , 1 .0f ));
38+
39+ auto filterKey = new Qt3DRender::QFilterKey (this );
40+ filterKey->setName (QStringLiteral (" renderingStyle" ));
41+ filterKey->setValue (QStringLiteral (" forward" ));
3742
38- // Enable alpha blending
3943 auto noDepthMask = new Qt3DRender::QNoDepthMask ();
40- renderPassGL3->addRenderState (noDepthMask);
4144 auto blendState = new Qt3DRender::QBlendEquationArguments ();
4245 blendState->setSourceRgb (Qt3DRender::QBlendEquationArguments::SourceAlpha);
4346 blendState->setDestinationRgb (Qt3DRender::QBlendEquationArguments::OneMinusSourceAlpha);
44- renderPassGL3->addRenderState (blendState);
4547 auto blendEquation = new Qt3DRender::QBlendEquation ();
4648 blendEquation->setBlendFunction (Qt3DRender::QBlendEquation::Add);
49+
50+ // Configure GL render pass
51+ auto renderPassGL3 = new Qt3DRender::QRenderPass ();
52+ renderPassGL3->setShaderProgram (shaderGL3);
53+ renderPassGL3->addRenderState (noDepthMask);
54+ renderPassGL3->addRenderState (blendState);
4755 renderPassGL3->addRenderState (blendEquation);
4856
57+ // Configure RHI render pass
58+ auto renderPassRHI = new Qt3DRender::QRenderPass ();
59+ renderPassRHI->setShaderProgram (shaderRHI);
60+ renderPassRHI->addRenderState (noDepthMask);
61+ renderPassRHI->addRenderState (blendState);
62+ renderPassRHI->addRenderState (blendEquation);
63+
64+ techniqueGL3->addFilterKey (filterKey);
4965 techniqueGL3->addRenderPass (renderPassGL3);
5066
67+ techniqueRHI->addFilterKey (filterKey);
68+ techniqueRHI->addRenderPass (renderPassRHI);
69+
5170 auto effect = new Qt3DRender::QEffect (this );
5271 effect->addTechnique (techniqueGL3);
72+ effect->addTechnique (techniqueRHI);
5373 effect->addParameter (colorParam);
5474 setEffect (effect);
5575}
0 commit comments