diff options
Diffstat (limited to 'examples/quick/scenegraph/rendernode/customrenderitem.cpp')
-rw-r--r-- | examples/quick/scenegraph/rendernode/customrenderitem.cpp | 58 |
1 files changed, 33 insertions, 25 deletions
diff --git a/examples/quick/scenegraph/rendernode/customrenderitem.cpp b/examples/quick/scenegraph/rendernode/customrenderitem.cpp index 67a9cccfc6..8aaa56c359 100644 --- a/examples/quick/scenegraph/rendernode/customrenderitem.cpp +++ b/examples/quick/scenegraph/rendernode/customrenderitem.cpp @@ -70,48 +70,56 @@ CustomRenderItem::CustomRenderItem(QQuickItem *parent) QSGNode *CustomRenderItem::updatePaintNode(QSGNode *node, UpdatePaintNodeData *) { QSGRenderNode *n = static_cast<QSGRenderNode *>(node); - if (!n) { - QSGRendererInterface *ri = window()->rendererInterface(); - if (!ri) - return nullptr; - switch (ri->graphicsApi()) { - case QSGRendererInterface::OpenGL: - Q_FALLTHROUGH(); - case QSGRendererInterface::OpenGLRhi: + + QSGRendererInterface *ri = window()->rendererInterface(); + if (!ri) + return nullptr; + + switch (ri->graphicsApi()) { + case QSGRendererInterface::OpenGL: + Q_FALLTHROUGH(); + case QSGRendererInterface::OpenGLRhi: #if QT_CONFIG(opengl) - n = new OpenGLRenderNode(this); + if (!n) + n = new OpenGLRenderNode; + static_cast<OpenGLRenderNode *>(n)->sync(this); #endif - break; + break; - case QSGRendererInterface::MetalRhi: + case QSGRendererInterface::MetalRhi: #ifdef Q_OS_DARWIN - { - MetalRenderNode *metalNode = new MetalRenderNode(this); + if (!n) { + MetalRenderNode *metalNode = new MetalRenderNode; n = metalNode; metalNode->resourceBuilder()->setWindow(window()); QObject::connect(window(), &QQuickWindow::beforeRendering, metalNode->resourceBuilder(), &MetalRenderNodeResourceBuilder::build); } + static_cast<MetalRenderNode *>(n)->sync(this); #endif - break; + break; - case QSGRendererInterface::Direct3D12: // ### Qt 6: remove + case QSGRendererInterface::Direct3D12: // ### Qt 6: remove #if QT_CONFIG(d3d12) - n = new D3D12RenderNode(this); + if (!n) + n = new D3D12RenderNode; + static_cast<D3D12RenderNode *>(n)->sync(this); #endif - break; + break; - case QSGRendererInterface::Software: - n = new SoftwareRenderNode(this); - break; - - default: - break; - } + case QSGRendererInterface::Software: if (!n) - qWarning("QSGRendererInterface reports unknown graphics API %d", ri->graphicsApi()); + n = new SoftwareRenderNode; + static_cast<SoftwareRenderNode *>(n)->sync(this); + break; + + default: + break; } + if (!n) + qWarning("QSGRendererInterface reports unknown graphics API %d", ri->graphicsApi()); + return n; } //! [2] |