aboutsummaryrefslogtreecommitdiffstats
path: root/examples/quick/scenegraph/rendernode/customrenderitem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/quick/scenegraph/rendernode/customrenderitem.cpp')
-rw-r--r--examples/quick/scenegraph/rendernode/customrenderitem.cpp58
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]