40 : mSize( new
Qt3DRender::QParameter(
"BB_SIZE", QSizeF( 100, 100 ), this ) )
41 , mViewportSize( new
Qt3DRender::QParameter(
"WIN_SCALE", QSizeF( 800, 600 ), this ) )
43 addParameter( mSize );
44 addParameter( mViewportSize );
47 mTexture2D =
new Qt3DRender::QParameter(
"tex0", QVariant(),
this );
48 addParameter( mTexture2D );
51 Qt3DRender::QBlendEquationArguments *blendState =
new Qt3DRender::QBlendEquationArguments;
52 blendState->setSourceRgb( Qt3DRender::QBlendEquationArguments::SourceAlpha );
53 blendState->setDestinationRgb( Qt3DRender::QBlendEquationArguments::OneMinusSourceAlpha );
55 Qt3DRender::QBlendEquation *blendEquation =
new Qt3DRender::QBlendEquation;
56 blendEquation->setBlendFunction( Qt3DRender::QBlendEquation::Add );
59 Qt3DRender::QShaderProgram *shaderProgram =
new Qt3DRender::QShaderProgram(
this );
61 const QUrl urlVert( u
"qrc:/shaders/billboards.vert"_s );
62 const QUrl urlGeom( u
"qrc:/shaders/billboards.geom"_s );
68 shaderProgram->setVertexShaderCode( Qt3DRender::QShaderProgram::loadSource( urlVert ) );
69 shaderProgram->setGeometryShaderCode( Qt3DRender::QShaderProgram::loadSource( urlGeom ) );
74 const QByteArray vertexShaderCode = Qt3DRender::QShaderProgram::loadSource( urlVert );
76 shaderProgram->setVertexShaderCode( finalVertexShaderCode );
78 const QByteArray geomShaderCode = Qt3DRender::QShaderProgram::loadSource( urlGeom );
80 shaderProgram->setGeometryShaderCode( finalGeomShaderCode );
85 const QByteArray vertexShaderCode = Qt3DRender::QShaderProgram::loadSource( urlVert );
87 shaderProgram->setVertexShaderCode( finalVertexShaderCode );
89 const QByteArray geomShaderCode = Qt3DRender::QShaderProgram::loadSource( urlGeom );
91 shaderProgram->setGeometryShaderCode( finalGeomShaderCode );
95 shaderProgram->setFragmentShaderCode( Qt3DRender::QShaderProgram::loadSource( QUrl( u
"qrc:/shaders/billboards.frag"_s ) ) );
98 Qt3DRender::QRenderPass *renderPass =
new Qt3DRender::QRenderPass(
this );
99 renderPass->setShaderProgram( shaderProgram );
100 renderPass->addRenderState( blendState );
101 renderPass->addRenderState( blendEquation );
104 Qt3DRender::QFilterKey *filterKey =
new Qt3DRender::QFilterKey;
105 filterKey->setName( u
"renderingStyle"_s );
106 filterKey->setValue(
"forward" );
109 Qt3DRender::QTechnique *technique =
new Qt3DRender::QTechnique;
110 technique->addRenderPass( renderPass );
111 technique->addFilterKey( filterKey );
112 technique->graphicsApiFilter()->setApi( Qt3DRender::QGraphicsApiFilter::OpenGL );
113 technique->graphicsApiFilter()->setProfile( Qt3DRender::QGraphicsApiFilter::CoreProfile );
114 technique->graphicsApiFilter()->setMajorVersion( 3 );
115 technique->graphicsApiFilter()->setMinorVersion( 1 );
118 Qt3DRender::QEffect *effect =
new Qt3DRender::QEffect(
this );
119 effect->addTechnique( technique );
170 std::unique_ptr< QgsMarkerSymbol > clonedSymbol( markerSymbol->
clone() );
171 clonedSymbol->startRender( context2D );
173 constexpr int BUFFER_SIZE_PIXELS = 2;
175 const QRectF bounds = markerSymbol->
bounds( QPointF( 0, 0 ), context2D );
177 QImage image(
static_cast< int >( std::ceil( bounds.size().width() ) ) + 2 * BUFFER_SIZE_PIXELS,
static_cast< int >( std::ceil( bounds.size().height() ) ) + 2 * BUFFER_SIZE_PIXELS, QImage::Format_ARGB32_Premultiplied );
178 image.fill( Qt::transparent );
180 QPainter painter( &image );
183 clonedSymbol->renderPoint( QPointF( -bounds.left() + BUFFER_SIZE_PIXELS, -bounds.top() + BUFFER_SIZE_PIXELS ),
nullptr, context2D, -1, selected );
187 clonedSymbol->stopRender( context2D );
Rendering context for preparation of 3D entities.
QColor selectionColor() const
Returns color used for selected features.
double outputDpi() const
Returns DPI used for conversion between real world units (e.g.
Holds an image that can be used as a texture in the 3D view.
Contains information about the context of a rendering operation.
void setScaleFactor(double factor)
Sets the scaling factor for the render to convert painter units to physical sizes.
void setFlag(Qgis::RenderContextFlag flag, bool on=true)
Enable or disable a particular flag (other flags are not affected).
void setPainter(QPainter *p)
Sets the destination QPainter for the render operation.
void setSelectionColor(const QColor &color)
Sets the color to use when rendering selected features.