diff --git a/src/imports/qtcanvas3d/canvasrenderer.cpp b/src/imports/qtcanvas3d/canvasrenderer.cpp index 86ca838e26b4106488985ba2504bd3d4fb406e0d..7939c3bcf10e251fc05979103e6c0a8c5e553e14 100644 --- a/src/imports/qtcanvas3d/canvasrenderer.cpp +++ b/src/imports/qtcanvas3d/canvasrenderer.cpp @@ -315,64 +315,64 @@ void CanvasRenderer::init(QQuickWindow *window, const CanvasContextAttributes &c */ void CanvasRenderer::shutDown() { - if (!m_glContext) - return; - QMutexLocker locker(&m_shutdownMutex); - m_fps = 0; + if (m_glContext) { + if (m_renderTarget == Canvas::RenderTargetOffscreenBuffer) + m_glContext->makeCurrent(m_offscreenSurface); + + m_commandQueue.clearResourceMaps(); - if (m_renderTarget == Canvas::RenderTargetOffscreenBuffer) - m_glContext->makeCurrent(m_offscreenSurface); + deleteCommandData(); + m_executeQueue.clear(); - m_commandQueue.clearResourceMaps(); + delete m_renderFbo; + delete m_displayFbo; + delete m_antialiasFbo; - deleteCommandData(); - m_executeQueue.clear(); + if (m_renderTarget == Canvas::RenderTargetOffscreenBuffer) { + delete m_alphaMultiplierFbo; + m_alphaMultiplierFbo = 0; + glDeleteBuffers(1, &m_alphaMultiplierUVBuffer); + glDeleteBuffers(1, &m_alphaMultiplierVertexBuffer); + m_alphaMultiplierUVBuffer = 0; + m_alphaMultiplierVertexBuffer = 0; + delete m_alphaMultiplierProgram; + delete m_alphaMultiplierVertexShader; + delete m_alphaMultiplierFragmentShader; + m_alphaMultiplierProgram = 0; + m_alphaMultiplierVertexShader = 0; + m_alphaMultiplierFragmentShader = 0; - delete m_renderFbo; - delete m_displayFbo; - delete m_antialiasFbo; + m_glContext->doneCurrent(); + delete m_glContext; + } - if (m_renderTarget == Canvas::RenderTargetOffscreenBuffer) { - delete m_alphaMultiplierFbo; - m_alphaMultiplierFbo = 0; - glDeleteBuffers(1, &m_alphaMultiplierUVBuffer); - glDeleteBuffers(1, &m_alphaMultiplierVertexBuffer); - m_alphaMultiplierUVBuffer = 0; - m_alphaMultiplierVertexBuffer = 0; - delete m_alphaMultiplierProgram; - delete m_alphaMultiplierVertexShader; - delete m_alphaMultiplierFragmentShader; - m_alphaMultiplierProgram = 0; - m_alphaMultiplierVertexShader = 0; - m_alphaMultiplierFragmentShader = 0; + m_renderFbo = 0; + m_displayFbo = 0; + m_antialiasFbo = 0; - m_glContext->doneCurrent(); - delete m_glContext; - } + // m_offscreenSurface is owned by main thread, as on some platforms that is required. + if (m_offscreenSurface) { + m_offscreenSurface->deleteLater(); + m_offscreenSurface = 0; + } - m_renderFbo = 0; - m_displayFbo = 0; - m_antialiasFbo = 0; + m_currentFramebufferId = 0; + m_forceViewportRect = QRect(); - delete m_glContextShare; + delete m_stateStore; + m_stateStore = 0; - // m_offscreenSurface is owned by main thread, as on some platforms that is required. - if (m_offscreenSurface) { - m_offscreenSurface->deleteLater(); - m_offscreenSurface = 0; + m_glContext = 0; } - m_glContext = 0; + delete m_glContextShare; + m_glContextQt = 0; m_glContextShare = 0; - m_currentFramebufferId = 0; - m_forceViewportRect = QRect(); - - delete m_stateStore; - m_stateStore = 0; + m_fps = 0; } /*!