@@ -119,12 +119,13 @@ void PenLayer::setEngine(libscratchcpp::IEngine *newEngine)
119119void PenLayer::beginFrame ()
120120{
121121 m_fbo->bind ();
122- m_painter->beginFrame (m_fbo->width (), m_fbo->height ());
122+ beginPainterFrame ();
123+ m_frameChanged = false ;
123124}
124125
125126void PenLayer::endFrame ()
126127{
127- m_painter-> endFrame ();
128+ endPainterFrame ();
128129 m_fbo->release ();
129130}
130131
@@ -149,6 +150,13 @@ void scratchcpprender::PenLayer::clear()
149150 return ;
150151
151152 Q_ASSERT (m_fbo->isBound ());
153+
154+ if (m_frameChanged) {
155+ endPainterFrame ();
156+ beginPainterFrame ();
157+ m_frameChanged = false ;
158+ }
159+
152160 m_glF->glDisable (GL_SCISSOR_TEST);
153161 m_glF->glClearColor (0 .0f , 0 .0f , 0 .0f , 0 .0f );
154162 m_glF->glClear (GL_COLOR_BUFFER_BIT);
@@ -210,6 +218,7 @@ void scratchcpprender::PenLayer::drawLine(const PenAttributes &penAttributes, do
210218
211219 m_textureDirty = true ;
212220 m_boundsDirty = true ;
221+ m_frameChanged = true ;
213222 update ();
214223}
215224
@@ -220,6 +229,9 @@ void PenLayer::stamp(IRenderedTarget *target)
220229
221230 Q_ASSERT (m_fbo->isBound ());
222231
232+ if (m_frameChanged)
233+ endPainterFrame ();
234+
223235 m_glF->glDisable (GL_SCISSOR_TEST);
224236 m_glF->glDisable (GL_DEPTH_TEST);
225237
@@ -234,6 +246,11 @@ void PenLayer::stamp(IRenderedTarget *target)
234246 m_glF->glEnable (GL_SCISSOR_TEST);
235247 m_glF->glEnable (GL_DEPTH_TEST);
236248
249+ if (m_frameChanged) {
250+ beginPainterFrame ();
251+ m_frameChanged = false ;
252+ }
253+
237254 m_textureDirty = true ;
238255 m_boundsDirty = true ;
239256 update ();
@@ -415,6 +432,17 @@ void PenLayer::geometryChange(const QRectF &newGeometry, const QRectF &oldGeomet
415432 QNanoQuickItem::geometryChange (newGeometry, oldGeometry);
416433}
417434
435+ void PenLayer::beginPainterFrame ()
436+ {
437+ m_painter->beginFrame (m_fbo->width (), m_fbo->height ());
438+ }
439+
440+ void PenLayer::endPainterFrame ()
441+ {
442+ m_glF->glViewport (0 , 0 , m_fbo->width (), m_fbo->height ());
443+ m_painter->endFrame ();
444+ }
445+
418446void PenLayer::updateTexture ()
419447{
420448 if (!m_fbo)
0 commit comments