diff --git a/app/paint/gimppaintcore-loops.cc b/app/paint/gimppaintcore-loops.cc
index 3613d877f4..8631a3e9d9 100644
--- a/app/paint/gimppaintcore-loops.cc
+++ b/app/paint/gimppaintcore-loops.cc
@@ -907,11 +907,15 @@ struct CanvasBufferIterator : Base
const GeglRectangle *roi,
const GeglRectangle *area) const
{
- Base::init (params, state, iter, roi, area);
-
state->canvas_buffer_iterator = gegl_buffer_iterator_add (
iter, params->canvas_buffer, area, 0, babl_format ("Y float"),
Derived::canvas_buffer_access, GEGL_ABYSS_NONE);
+
+ /* initialize the base class *after* initializing the iterator, to make
+ * sure that canvas_buffer is the primary buffer of the iterator, if no
+ * subclass added an iterator first.
+ */
+ Base::init (params, state, iter, roi, area);
}
};
@@ -1317,8 +1321,6 @@ struct DoLayerBlend : Base
const GeglRectangle *roi,
const GeglRectangle *area) const
{
- Base::init (params, state, iter, roi, area);
-
state->iterator_base = gegl_buffer_iterator_add (iter, params->dest_buffer,
area, 0, iterator_format,
GEGL_ACCESS_WRITE,
@@ -1327,6 +1329,12 @@ struct DoLayerBlend : Base
gegl_buffer_iterator_add (iter, params->src_buffer, area, 0,
iterator_format,
GEGL_ACCESS_READ, GEGL_ABYSS_NONE);
+
+ /* initialize the base class *after* initializing the iterator, to make
+ * sure that dest_buffer is the primary buffer of the iterator, if no
+ * subclass added an iterator first.
+ */
+ Base::init (params, state, iter, roi, area);
}
template