diff --git a/src/core/qgsmaprenderercustompainterjob.cpp b/src/core/qgsmaprenderercustompainterjob.cpp index feaff46a567..83aed3789f8 100644 --- a/src/core/qgsmaprenderercustompainterjob.cpp +++ b/src/core/qgsmaprenderercustompainterjob.cpp @@ -257,7 +257,10 @@ void QgsMapRendererCustomPainterJob::doRender() layerTime.start(); if ( job.img ) + { job.img->fill( 0 ); + job.imageInitialized = true; + } job.renderer->render(); diff --git a/src/core/qgsmaprendererjob.cpp b/src/core/qgsmaprendererjob.cpp index c7a1a5899f4..70668f0f627 100644 --- a/src/core/qgsmaprendererjob.cpp +++ b/src/core/qgsmaprendererjob.cpp @@ -462,6 +462,9 @@ QImage QgsMapRendererJob::composeImage( const QgsMapSettings &settings, const La if ( job.layer && job.layer->customProperty( QStringLiteral( "rendering/renderAboveLabels" ) ).toBool() ) continue; // skip layer for now, it will be rendered after labels + if ( !job.imageInitialized ) + continue; // img not safe to compose + painter.setCompositionMode( job.blendMode ); painter.setOpacity( job.opacity ); @@ -488,6 +491,9 @@ QImage QgsMapRendererJob::composeImage( const QgsMapSettings &settings, const La if ( !job.layer || !job.layer->customProperty( QStringLiteral( "rendering/renderAboveLabels" ) ).toBool() ) continue; + if ( !job.imageInitialized ) + continue; // img not safe to compose + painter.setCompositionMode( job.blendMode ); painter.setOpacity( job.opacity ); diff --git a/src/core/qgsmaprendererjob.h b/src/core/qgsmaprendererjob.h index 8ff038c893a..652fc6072b1 100644 --- a/src/core/qgsmaprendererjob.h +++ b/src/core/qgsmaprendererjob.h @@ -46,6 +46,8 @@ struct LayerRenderJob { QgsRenderContext context; QImage *img; // may be null if it is not necessary to draw to separate image (e.g. sequential rendering) + //! True when img has been initialized (filled with transparent pixels) and is safe to compose + bool imageInitialized = false; QgsMapLayerRenderer *renderer; // must be deleted QPainter::CompositionMode blendMode; double opacity; diff --git a/src/core/qgsmaprendererparalleljob.cpp b/src/core/qgsmaprendererparalleljob.cpp index 45fae4ef29e..cab41ddbb80 100644 --- a/src/core/qgsmaprendererparalleljob.cpp +++ b/src/core/qgsmaprendererparalleljob.cpp @@ -244,7 +244,10 @@ void QgsMapRendererParallelJob::renderLayerStatic( LayerRenderJob &job ) return; if ( job.img ) + { job.img->fill( 0 ); + job.imageInitialized = true; + } QTime t; t.start();