@@ -37,6 +37,9 @@ PenLayer::~PenLayer()
37
37
// Delete vertex array and buffer
38
38
m_glF->glDeleteVertexArrays (1 , &m_vao);
39
39
m_glF->glDeleteBuffers (1 , &m_vbo);
40
+
41
+ // Delete stamp FBO
42
+ m_glF->glDeleteFramebuffers (1 , &m_stampFbo);
40
43
}
41
44
}
42
45
@@ -99,6 +102,9 @@ void PenLayer::setEngine(libscratchcpp::IEngine *newEngine)
99
102
100
103
m_glF->glBindVertexArray (0 );
101
104
m_glF->glBindBuffer (GL_ARRAY_BUFFER, 0 );
105
+
106
+ // Create stamp FBO
107
+ m_glF->glGenFramebuffers (1 , &m_stampFbo);
102
108
}
103
109
104
110
clear ();
@@ -268,14 +274,12 @@ void PenLayer::stamp(IRenderedTarget *target)
268
274
m_painter->endFrame ();
269
275
270
276
// Create a FBO for the current texture
271
- unsigned int fbo;
272
- m_glF->glGenFramebuffers (1 , &fbo);
273
- m_glF->glBindFramebuffer (GL_FRAMEBUFFER, fbo);
277
+ m_glF->glBindFramebuffer (GL_FRAMEBUFFER, m_stampFbo);
274
278
m_glF->glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture.handle (), 0 );
275
279
276
280
if (m_glF->glCheckFramebufferStatus (GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
277
281
qWarning () << " error: framebuffer incomplete (stamp " + target->scratchTarget ()->name () + " )" ;
278
- m_glF->glDeleteFramebuffers ( 1 , &fbo );
282
+ m_glF->glBindFramebuffer (GL_FRAMEBUFFER, 0 );
279
283
return ;
280
284
}
281
285
@@ -308,7 +312,6 @@ void PenLayer::stamp(IRenderedTarget *target)
308
312
m_glF->glBindVertexArray (0 );
309
313
m_glF->glBindBuffer (GL_ARRAY_BUFFER, 0 );
310
314
m_glF->glBindFramebuffer (GL_FRAMEBUFFER, 0 );
311
- m_glF->glDeleteFramebuffers (1 , &fbo);
312
315
313
316
m_glF->glEnable (GL_SCISSOR_TEST);
314
317
0 commit comments