diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2016-09-05 09:09:36 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2016-11-23 20:22:43 +0000 |
commit | d0fc03f301cb3bbd69d9e43cd6a984cbc8296d05 (patch) | |
tree | 1ccf2451e3a26a718d776a1bb728938ee07bf6d0 /src/quick3d | |
parent | f58a99e8bafdd4222f347644b8d88adef87b2433 (diff) |
Scene3DItem: no need to destoy the SGNode on size change
This was needed when we were using a QQFBO approach but now we can keep the
same SGNode but tell it to recreate the FBO instead which it already does in
render by checking if the size has change between the last time it was called
Change-Id: I45e2ebb5102126cc9a31485ec87a94365e54a5e1
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Reviewed-by: Kevin Ottens <kevin.ottens@kdab.com>
Diffstat (limited to 'src/quick3d')
-rw-r--r-- | src/quick3d/imports/scene3d/scene3ditem.cpp | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/src/quick3d/imports/scene3d/scene3ditem.cpp b/src/quick3d/imports/scene3d/scene3ditem.cpp index c03e77018..4a5c959c4 100644 --- a/src/quick3d/imports/scene3d/scene3ditem.cpp +++ b/src/quick3d/imports/scene3d/scene3ditem.cpp @@ -273,19 +273,11 @@ void Scene3DItem::setMultisample(bool enable) QSGNode *Scene3DItem::updatePaintNode(QSGNode *node, QQuickItem::UpdatePaintNodeData *) { // If the render aspect wasn't created yet, do so now - if (!m_renderAspect) { + if (m_renderAspect == nullptr) { m_renderAspect = new QRenderAspect(QRenderAspect::Synchronous); m_aspectEngine->registerAspect(m_renderAspect); } - // If the node already exists - // we delete it and recreate it - // as we need to resize the FBO - if (node) { - delete node; - node = nullptr; - } - if (m_renderer == nullptr) { m_renderer = new Scene3DRenderer(this, m_aspectEngine, m_renderAspect); m_renderer->setCleanerHelper(m_rendererCleaner); @@ -294,9 +286,13 @@ QSGNode *Scene3DItem::updatePaintNode(QSGNode *node, QQuickItem::UpdatePaintNode // The main thread is blocked, it is now time to sync data between the renderer and the item. m_renderer->synchronize(); - Scene3DSGNode *fboNode = new Scene3DSGNode(); + Scene3DSGNode *fboNode = static_cast<Scene3DSGNode *>(node); + if (fboNode == nullptr) { + fboNode = new Scene3DSGNode(); + m_renderer->setSGNode(fboNode); + } fboNode->setRect(boundingRect()); - m_renderer->setSGNode(fboNode); + return fboNode; } |