diff options
Diffstat (limited to 'examples/quick/scenegraph/rendernode/customrenderitem.cpp')
-rw-r--r-- | examples/quick/scenegraph/rendernode/customrenderitem.cpp | 64 |
1 files changed, 18 insertions, 46 deletions
diff --git a/examples/quick/scenegraph/rendernode/customrenderitem.cpp b/examples/quick/scenegraph/rendernode/customrenderitem.cpp index dbb9ee79e8..4070a86395 100644 --- a/examples/quick/scenegraph/rendernode/customrenderitem.cpp +++ b/examples/quick/scenegraph/rendernode/customrenderitem.cpp @@ -45,63 +45,35 @@ #include "openglrenderer.h" #include "d3d12renderer.h" -CustomRenderNode::~CustomRenderNode() +CustomRenderItem::CustomRenderItem(QQuickItem *parent) + : QQuickItem(parent) { - releaseResources(); + // Our item shows something so set the flag. + setFlag(ItemHasContents); } -void CustomRenderNode::render(const RenderState *state) +QSGNode *CustomRenderItem::updatePaintNode(QSGNode *node, UpdatePaintNodeData *) { - QSGRendererInterface *ri = m_item->window()->rendererInterface(); - if (!ri) - return; - - if (!m_renderer) { + QSGRenderNode *n = static_cast<QSGRenderNode *>(node); + if (!n) { + QSGRendererInterface *ri = window()->rendererInterface(); + if (!ri) + return nullptr; switch (ri->graphicsAPI()) { - case QSGRendererInterface::OpenGL: + case QSGRendererInterface::OpenGL: #ifndef QT_NO_OPENGL - m_renderer = new OpenGLRenderer(m_item, this); + n = new OpenGLRenderNode(this); + break; #endif - break; - case QSGRendererInterface::Direct3D12: + case QSGRendererInterface::Direct3D12: #ifdef HAS_D3D12 - m_renderer = new D3D12Renderer(m_item, this); + n = new D3D12RenderNode(this); + break; #endif - break; - default: - break; + default: + return nullptr; } - Q_ASSERT(m_renderer); - m_renderer->init(); } - m_renderer->render(state); -} - -// No need to reimplement changedStates() since our rendering is so simple, -// without involving any state changes. - -void CustomRenderNode::releaseResources() -{ - if (!m_renderer) - return; - - delete m_renderer; - m_renderer = nullptr; -} - -CustomRenderItem::CustomRenderItem(QQuickItem *parent) - : QQuickItem(parent) -{ - // Our item shows something so set the flag. - setFlag(ItemHasContents); -} - -QSGNode *CustomRenderItem::updatePaintNode(QSGNode *node, UpdatePaintNodeData *) -{ - CustomRenderNode *n = static_cast<CustomRenderNode *>(node); - if (!node) - n = new CustomRenderNode(this); - return n; } |