Use RendererInfo in the rendernode example
Simplifies things a lot. Change-Id: I57fbedeeb99884aa5b14532c7be33f6373551b5f Reviewed-by: Andy Nichols <andy.nichols@qt.io>
This commit is contained in:
parent
84fb780d83
commit
0ea01a229b
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue