diff options
Diffstat (limited to 'src/quick/items/context2d/qquickcontext2d.cpp')
-rw-r--r-- | src/quick/items/context2d/qquickcontext2d.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/quick/items/context2d/qquickcontext2d.cpp b/src/quick/items/context2d/qquickcontext2d.cpp index 4b70934320..57c7bd4a00 100644 --- a/src/quick/items/context2d/qquickcontext2d.cpp +++ b/src/quick/items/context2d/qquickcontext2d.cpp @@ -4031,6 +4031,8 @@ public: void run() Q_DECL_OVERRIDE { delete texture; } }; +QMutex QQuickContext2D::mutex; + QQuickContext2D::QQuickContext2D(QObject *parent) : QQuickCanvasContext(parent) , m_buffer(new QQuickContext2DCommandBuffer) @@ -4044,6 +4046,8 @@ QQuickContext2D::QQuickContext2D(QObject *parent) QQuickContext2D::~QQuickContext2D() { + mutex.lock(); + m_texture->setItem(0); delete m_buffer; if (m_renderTarget == QQuickCanvasItem::FramebufferObject) { @@ -4064,7 +4068,7 @@ QQuickContext2D::~QQuickContext2D() c->texture = m_texture; m_canvas->window()->scheduleRenderJob(c, QQuickWindow::AfterSynchronizingStage); } else { - delete m_texture; + m_texture->deleteLater(); } } } else { @@ -4073,6 +4077,7 @@ QQuickContext2D::~QQuickContext2D() // currently be doing. m_texture->deleteLater(); } + mutex.unlock(); } QV4::ReturnedValue QQuickContext2D::v4value() const @@ -4143,6 +4148,7 @@ void QQuickContext2D::init(QQuickCanvasItem *canvasItem, const QVariantMap &args m_glContext->setShareContext(cc); if (renderThread != QThread::currentThread()) m_glContext->moveToThread(renderThread); + m_texture->initializeOpenGL(m_glContext, m_surface.data()); } connect(m_texture, SIGNAL(textureChanged()), SIGNAL(textureChanged())); @@ -4331,10 +4337,4 @@ void QQuickContext2D::setV8Engine(QV8Engine *engine) } } -QQuickContext2DCommandBuffer* QQuickContext2D::nextBuffer() -{ - QMutexLocker lock(&m_mutex); - return m_bufferQueue.isEmpty() ? 0 : m_bufferQueue.dequeue(); -} - QT_END_NAMESPACE |