From 0ea01a229b42eacee340cd1dc6895a7de99ea895 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Mon, 2 May 2016 21:49:43 +0200 Subject: Use RendererInfo in the rendernode example Simplifies things a lot. Change-Id: I57fbedeeb99884aa5b14532c7be33f6373551b5f Reviewed-by: Andy Nichols --- .../scenegraph/rendernode/customrenderitem.cpp | 53 +--------------------- .../quick/scenegraph/rendernode/customrenderitem.h | 15 ------ examples/quick/scenegraph/rendernode/main.qml | 5 +- 3 files changed, 4 insertions(+), 69 deletions(-) (limited to 'examples/quick/scenegraph') diff --git a/examples/quick/scenegraph/rendernode/customrenderitem.cpp b/examples/quick/scenegraph/rendernode/customrenderitem.cpp index 124a57a5d6..dbb9ee79e8 100644 --- a/examples/quick/scenegraph/rendernode/customrenderitem.cpp +++ b/examples/quick/scenegraph/rendernode/customrenderitem.cpp @@ -56,10 +56,8 @@ void CustomRenderNode::render(const RenderState *state) if (!ri) return; - m_api = ri->graphicsAPI(); - if (!m_renderer) { - switch (m_api) { + switch (ri->graphicsAPI()) { case QSGRendererInterface::OpenGL: #ifndef QT_NO_OPENGL m_renderer = new OpenGLRenderer(m_item, this); @@ -97,13 +95,6 @@ CustomRenderItem::CustomRenderItem(QQuickItem *parent) { // Our item shows something so set the flag. setFlag(ItemHasContents); - - // We want the graphics API type to be exposed to QML. The value is easy to - // get during rendering on the render thread in CustomRenderNode::render(), - // but is more tricky here since the item gets a window associated later, - // which in turn will get the underlying scenegraph started at some later - // point. So defer. - connect(this, &QQuickItem::windowChanged, this, &CustomRenderItem::onWindowChanged); } QSGNode *CustomRenderItem::updatePaintNode(QSGNode *node, UpdatePaintNodeData *) @@ -114,45 +105,3 @@ QSGNode *CustomRenderItem::updatePaintNode(QSGNode *node, UpdatePaintNodeData *) return n; } - -void CustomRenderItem::onWindowChanged(QQuickWindow *w) -{ - if (w) { - if (w->isSceneGraphInitialized()) - updateGraphicsAPI(); - else - connect(w, &QQuickWindow::sceneGraphInitialized, this, &CustomRenderItem::updateGraphicsAPI); - } else { - updateGraphicsAPI(); - } -} - -void CustomRenderItem::updateGraphicsAPI() -{ - QString newAPI; - if (!window()) { - newAPI = QLatin1String("[no window]"); - } else { - QSGRendererInterface *ri = window()->rendererInterface(); - if (!ri) { - newAPI = QLatin1String("[no renderer interface]"); - } else { - switch (ri->graphicsAPI()) { - case QSGRendererInterface::OpenGL: - newAPI = QLatin1String("OpenGL"); - break; - case QSGRendererInterface::Direct3D12: - newAPI = QLatin1String("D3D12"); - break; - default: - newAPI = QString(QLatin1String("[unsupported graphics API %1]")).arg(ri->graphicsAPI()); - break; - } - } - } - - if (newAPI != m_api) { - m_api = newAPI; - emit graphicsAPIChanged(); - } -} diff --git a/examples/quick/scenegraph/rendernode/customrenderitem.h b/examples/quick/scenegraph/rendernode/customrenderitem.h index fb4c392148..b9828adaeb 100644 --- a/examples/quick/scenegraph/rendernode/customrenderitem.h +++ b/examples/quick/scenegraph/rendernode/customrenderitem.h @@ -63,31 +63,16 @@ public: private: QQuickItem *m_item; - int m_api; CustomRenderer *m_renderer = nullptr; }; class CustomRenderItem : public QQuickItem { Q_OBJECT - Q_PROPERTY(QString graphicsAPI READ graphicsAPI NOTIFY graphicsAPIChanged) public: CustomRenderItem(QQuickItem *parent = nullptr); - QSGNode *updatePaintNode(QSGNode *node, UpdatePaintNodeData *) override; - - QString graphicsAPI() const { return m_api; } - -private slots: - void onWindowChanged(QQuickWindow *w); - void updateGraphicsAPI(); - -signals: - void graphicsAPIChanged(); - -private: - QString m_api; }; #endif diff --git a/examples/quick/scenegraph/rendernode/main.qml b/examples/quick/scenegraph/rendernode/main.qml index 32154cc930..bae77aabd3 100644 --- a/examples/quick/scenegraph/rendernode/main.qml +++ b/examples/quick/scenegraph/rendernode/main.qml @@ -38,7 +38,7 @@ ** ****************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.8 // for RendererInfo import SceneGraphRendering 2.0 Item { @@ -89,7 +89,8 @@ Item { anchors.right: renderer.right anchors.margins: 20 wrapMode: Text.WordWrap - text: "Custom rendering via the graphics API " + renderer.graphicsAPI + property int api: RendererInfo.api + text: "Custom rendering via the graphics API " + (api === RendererInfo.OpenGL ? "OpenGL" : (api === RendererInfo.Direct3D12 ? "Direct3D 12" : "")) color: "yellow" } } -- cgit v1.2.3