summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/qt3d/anaglyph-rendering/main.qml1
-rw-r--r--examples/qt3d/bigmodel-qml/main.qml1
-rw-r--r--examples/qt3d/bigscene-instanced-qml/main.qml1
-rw-r--r--examples/qt3d/clip-planes-qml/main.qml1
-rw-r--r--examples/qt3d/custom-mesh-qml/main.qml1
-rw-r--r--examples/qt3d/cylinder-qml/main.qml1
-rw-r--r--examples/qt3d/examples-common/qt3dquickwindow.cpp41
-rw-r--r--examples/qt3d/examples-common/qt3dquickwindow.h2
-rw-r--r--examples/qt3d/gooch-qml/main.qml1
-rw-r--r--examples/qt3d/instanced-arrays-qml/main.qml1
-rw-r--r--examples/qt3d/keyboardinput-qml/main.qml1
-rw-r--r--examples/qt3d/lights/main.qml1
-rw-r--r--examples/qt3d/materials/main.qml1
-rw-r--r--examples/qt3d/mouseinput-qml/main.qml1
-rw-r--r--examples/qt3d/multiviewport/main.qml1
-rw-r--r--examples/qt3d/picking-qml/main.qml1
-rw-r--r--examples/qt3d/plasma/main.qml4
-rw-r--r--examples/qt3d/simple-qml/main.qml1
-rw-r--r--examples/qt3d/simple-shaders-qml/main.qml1
-rw-r--r--examples/qt3d/skybox/main.qml1
-rw-r--r--examples/qt3d/tessellation-modes/main.qml1
-rw-r--r--examples/qt3d/torus-qml/main.qml1
-rw-r--r--examples/qt3d/transforms-qml/main.qml1
-rw-r--r--examples/qt3d/transparency-qml/main.qml1
-rw-r--r--examples/qt3d/wave/main.qml1
-rw-r--r--examples/qt3d/wireframe/main.qml1
-rw-r--r--src/quick3d/quick3d/qqmlaspectengine.cpp5
-rw-r--r--src/quick3d/quick3d/qqmlaspectengine.h1
28 files changed, 48 insertions, 28 deletions
diff --git a/examples/qt3d/anaglyph-rendering/main.qml b/examples/qt3d/anaglyph-rendering/main.qml
index 7b9d5afd1..cb852a675 100644
--- a/examples/qt3d/anaglyph-rendering/main.qml
+++ b/examples/qt3d/anaglyph-rendering/main.qml
@@ -46,7 +46,6 @@ Entity {
id: stereoFrameGraph
leftCamera: stereoCamera.leftCamera
rightCamera: stereoCamera.rightCamera
- window: _q_window
}
}
diff --git a/examples/qt3d/bigmodel-qml/main.qml b/examples/qt3d/bigmodel-qml/main.qml
index d261dafdb..6280ad2d6 100644
--- a/examples/qt3d/bigmodel-qml/main.qml
+++ b/examples/qt3d/bigmodel-qml/main.qml
@@ -48,7 +48,6 @@ Entity {
FrameGraph {
activeFrameGraph:ForwardRenderer {
camera: mainCamera
- window: _q_window
}
}
]
diff --git a/examples/qt3d/bigscene-instanced-qml/main.qml b/examples/qt3d/bigscene-instanced-qml/main.qml
index 83fb57c4f..8b7623732 100644
--- a/examples/qt3d/bigscene-instanced-qml/main.qml
+++ b/examples/qt3d/bigscene-instanced-qml/main.qml
@@ -60,7 +60,6 @@ Entity {
activeFrameGraph: ForwardRenderer {
clearColor: Qt.rgba(0, 0.5, 1, 1)
camera: camera
- window: _q_window
}
}
]
diff --git a/examples/qt3d/clip-planes-qml/main.qml b/examples/qt3d/clip-planes-qml/main.qml
index e2f210122..06fd5bf14 100644
--- a/examples/qt3d/clip-planes-qml/main.qml
+++ b/examples/qt3d/clip-planes-qml/main.qml
@@ -59,7 +59,6 @@ Entity {
ClipCappingFrameGraph {
camera: camera;
clearColor: Qt.rgba(0.0, 0.5, 1, 1)
- window: _q_window
}
}
diff --git a/examples/qt3d/custom-mesh-qml/main.qml b/examples/qt3d/custom-mesh-qml/main.qml
index 1257676a5..cb7175b07 100644
--- a/examples/qt3d/custom-mesh-qml/main.qml
+++ b/examples/qt3d/custom-mesh-qml/main.qml
@@ -60,7 +60,6 @@ Entity {
activeFrameGraph: ForwardRenderer {
clearColor: Qt.rgba(0.5, 0.5, 1, 1)
camera: camera
- window: _q_window
}
}
]
diff --git a/examples/qt3d/cylinder-qml/main.qml b/examples/qt3d/cylinder-qml/main.qml
index b628faad9..d27439fe0 100644
--- a/examples/qt3d/cylinder-qml/main.qml
+++ b/examples/qt3d/cylinder-qml/main.qml
@@ -59,7 +59,6 @@ Entity {
activeFrameGraph : ForwardRenderer {
camera: camera
clearColor: "black"
- window: _q_window
}
}
diff --git a/examples/qt3d/examples-common/qt3dquickwindow.cpp b/examples/qt3d/examples-common/qt3dquickwindow.cpp
index 5aa5a6e85..4e633fc55 100644
--- a/examples/qt3d/examples-common/qt3dquickwindow.cpp
+++ b/examples/qt3d/examples-common/qt3dquickwindow.cpp
@@ -37,6 +37,8 @@
#include "qt3dquickwindow.h"
#include <Qt3DQuick/QQmlAspectEngine>
#include <Qt3DRender/qrenderaspect.h>
+#include <Qt3DRender/qframegraph.h>
+#include <Qt3DRender/qrendersurfaceselector.h>
#include <Qt3DInput/qinputaspect.h>
#include <Qt3DLogic/qlogicaspect.h>
@@ -110,8 +112,12 @@ void Qt3DQuickWindow::showEvent(QShowEvent *e)
data.insert(QStringLiteral("eventSource"), QVariant::fromValue(this));
m_engine->aspectEngine()->setData(data);
- // TODO: Remove this hack once we can automagically set the window on the framegraph
- m_engine->qmlEngine()->rootContext()->setContextProperty("_q_window", this);
+ // Connect to the QQmlAspectEngine's statusChanged signal so that when the QML is loaded
+ // and th eobjects hav ebeen instantiated, but before we set them on the QAspectEngine we
+ // can swoop in and set the window surface and camera on the framegraph and ensure the camera
+ // respects the window's aspect ratio
+ connect(m_engine.data(), &Qt3DCore::Quick::QQmlAspectEngine::sceneCreated,
+ this, &Qt3DQuickWindow::onSceneCreated);
m_engine->setSource(m_source);
@@ -124,4 +130,35 @@ void Qt3DQuickWindow::showEvent(QShowEvent *e)
QQuickWindow::showEvent(e);
}
+void Qt3DQuickWindow::onSceneCreated(QObject *rootObject)
+{
+ Q_ASSERT(rootObject);
+
+ // Find surface selector in framegraph and set ourselves up as the
+ // render surface there
+ Qt3DRender::QFrameGraph *frameGraphComponent
+ = rootObject->findChild<Qt3DRender::QFrameGraph *>();
+ if (!frameGraphComponent) {
+ qWarning() << "No frame graph component found";
+ return;
+ }
+
+ Qt3DCore::QNode *frameGraphRoot = frameGraphComponent->activeFrameGraph();
+ if (!frameGraphRoot) {
+ qWarning() << "No active frame graph found";
+ return;
+ }
+
+ Qt3DRender::QRenderSurfaceSelector *surfaceSelector
+ = frameGraphRoot->findChild<Qt3DRender::QRenderSurfaceSelector *>();
+ if (!surfaceSelector) {
+ qWarning() << "No render surface selector found in frame graph";
+ return;
+ }
+
+ surfaceSelector->setWindow(this);
+
+ // TODO: Set ourselves up as a source of input events for the input aspect
+}
+
QT_END_NAMESPACE
diff --git a/examples/qt3d/examples-common/qt3dquickwindow.h b/examples/qt3d/examples-common/qt3dquickwindow.h
index 85009de20..9991a85e5 100644
--- a/examples/qt3d/examples-common/qt3dquickwindow.h
+++ b/examples/qt3d/examples-common/qt3dquickwindow.h
@@ -78,6 +78,8 @@ protected:
void showEvent(QShowEvent *e) Q_DECL_OVERRIDE;
private:
+ void onSceneCreated(QObject *rootObject);
+
QScopedPointer<Qt3DCore::Quick::QQmlAspectEngine> m_engine;
// Aspects
diff --git a/examples/qt3d/gooch-qml/main.qml b/examples/qt3d/gooch-qml/main.qml
index 5649a03eb..abed8974b 100644
--- a/examples/qt3d/gooch-qml/main.qml
+++ b/examples/qt3d/gooch-qml/main.qml
@@ -47,7 +47,6 @@ Entity {
FrameGraph {
ForwardRenderer {
camera: mainCamera
- window: _q_window
}
}
]
diff --git a/examples/qt3d/instanced-arrays-qml/main.qml b/examples/qt3d/instanced-arrays-qml/main.qml
index fb17cae7f..4e9d7e144 100644
--- a/examples/qt3d/instanced-arrays-qml/main.qml
+++ b/examples/qt3d/instanced-arrays-qml/main.qml
@@ -60,7 +60,6 @@ Entity {
activeFrameGraph: ForwardRenderer {
clearColor: Qt.rgba(0, 0.5, 1, 1)
camera: camera
- window: _q_window
}
}
]
diff --git a/examples/qt3d/keyboardinput-qml/main.qml b/examples/qt3d/keyboardinput-qml/main.qml
index c07597e13..96cf9148e 100644
--- a/examples/qt3d/keyboardinput-qml/main.qml
+++ b/examples/qt3d/keyboardinput-qml/main.qml
@@ -58,7 +58,6 @@ Entity {
components: FrameGraph {
activeFrameGraph: ForwardRenderer {
camera: camera
- window: _q_window
}
}
diff --git a/examples/qt3d/lights/main.qml b/examples/qt3d/lights/main.qml
index 267582a74..1cfeb0cd4 100644
--- a/examples/qt3d/lights/main.qml
+++ b/examples/qt3d/lights/main.qml
@@ -44,7 +44,6 @@ Entity
activeFrameGraph: ForwardRenderer {
clearColor: Qt.rgba(0, 0, 0, 1)
camera: camera
- window: _q_window
}
}
diff --git a/examples/qt3d/materials/main.qml b/examples/qt3d/materials/main.qml
index 1d94c8c6f..a470e2415 100644
--- a/examples/qt3d/materials/main.qml
+++ b/examples/qt3d/materials/main.qml
@@ -49,7 +49,6 @@ Entity {
activeFrameGraph: SortedForwardRenderer {
id: renderer
camera: mainCamera
- window: _q_window
}
}
]
diff --git a/examples/qt3d/mouseinput-qml/main.qml b/examples/qt3d/mouseinput-qml/main.qml
index f38f85371..8158e18f7 100644
--- a/examples/qt3d/mouseinput-qml/main.qml
+++ b/examples/qt3d/mouseinput-qml/main.qml
@@ -59,7 +59,6 @@ Entity {
ForwardRenderer {
camera: camera
clearColor: "black"
- window: _q_window
}
}
diff --git a/examples/qt3d/multiviewport/main.qml b/examples/qt3d/multiviewport/main.qml
index 66ab274ab..cfdd7a1a5 100644
--- a/examples/qt3d/multiviewport/main.qml
+++ b/examples/qt3d/multiviewport/main.qml
@@ -48,7 +48,6 @@ Entity {
topRightCamera: cameraSet.cameras[1]
bottomLeftCamera: cameraSet.cameras[2]
bottomRightCamera: cameraSet.cameras[3]
- window: _q_window
}
Entity {
diff --git a/examples/qt3d/picking-qml/main.qml b/examples/qt3d/picking-qml/main.qml
index a1d3e6aa8..2c9e7a955 100644
--- a/examples/qt3d/picking-qml/main.qml
+++ b/examples/qt3d/picking-qml/main.qml
@@ -60,7 +60,6 @@ Entity {
ForwardRenderer {
camera: camera
clearColor: "black"
- window: _q_window
}
}
diff --git a/examples/qt3d/plasma/main.qml b/examples/qt3d/plasma/main.qml
index 8d6ce7f37..6e850bf8a 100644
--- a/examples/qt3d/plasma/main.qml
+++ b/examples/qt3d/plasma/main.qml
@@ -39,9 +39,7 @@ import Qt3D.Render 2.0
Entity {
components: FrameGraph {
- ForwardRenderer {
- window: _q_window
- }
+ ForwardRenderer {}
}
Entity {
diff --git a/examples/qt3d/simple-qml/main.qml b/examples/qt3d/simple-qml/main.qml
index aa4b5d7d5..9d25da81a 100644
--- a/examples/qt3d/simple-qml/main.qml
+++ b/examples/qt3d/simple-qml/main.qml
@@ -63,7 +63,6 @@ Entity {
activeFrameGraph: ForwardRenderer {
clearColor: Qt.rgba(0, 0.5, 1, 1)
camera: camera
- window: _q_window
}
}
]
diff --git a/examples/qt3d/simple-shaders-qml/main.qml b/examples/qt3d/simple-shaders-qml/main.qml
index c01fc8eb1..b51a25712 100644
--- a/examples/qt3d/simple-shaders-qml/main.qml
+++ b/examples/qt3d/simple-shaders-qml/main.qml
@@ -60,7 +60,6 @@ Entity {
activeFrameGraph: ForwardRenderer {
clearColor: Qt.rgba(0, 0.5, 1, 1)
camera: camera
- window: _q_window
}
}
]
diff --git a/examples/qt3d/skybox/main.qml b/examples/qt3d/skybox/main.qml
index 65947ee10..e8cfdb2cf 100644
--- a/examples/qt3d/skybox/main.qml
+++ b/examples/qt3d/skybox/main.qml
@@ -44,7 +44,6 @@ Entity {
ForwardRenderer {
camera: basicCamera
clearColor: "black"
- window: _q_window
}
}
diff --git a/examples/qt3d/tessellation-modes/main.qml b/examples/qt3d/tessellation-modes/main.qml
index 487f75a39..e2b06f21f 100644
--- a/examples/qt3d/tessellation-modes/main.qml
+++ b/examples/qt3d/tessellation-modes/main.qml
@@ -50,7 +50,6 @@ Entity {
id: renderer
camera: mainCamera
clearColor: "black"
- window: _q_window
}
}
]
diff --git a/examples/qt3d/torus-qml/main.qml b/examples/qt3d/torus-qml/main.qml
index 1fbd62494..fc86231d8 100644
--- a/examples/qt3d/torus-qml/main.qml
+++ b/examples/qt3d/torus-qml/main.qml
@@ -59,7 +59,6 @@ Entity {
activeFrameGraph : ForwardRenderer {
camera: camera
clearColor: "black"
- window: _q_window
}
}
diff --git a/examples/qt3d/transforms-qml/main.qml b/examples/qt3d/transforms-qml/main.qml
index 493c4c932..332905f65 100644
--- a/examples/qt3d/transforms-qml/main.qml
+++ b/examples/qt3d/transforms-qml/main.qml
@@ -45,7 +45,6 @@ Entity {
activeFrameGraph: ForwardRenderer {
clearColor: Qt.rgba(0, 0.5, 1, 1)
camera: camera
- window: _q_window
}
}
]
diff --git a/examples/qt3d/transparency-qml/main.qml b/examples/qt3d/transparency-qml/main.qml
index e98531787..c9ae6b7f7 100644
--- a/examples/qt3d/transparency-qml/main.qml
+++ b/examples/qt3d/transparency-qml/main.qml
@@ -59,7 +59,6 @@ Entity {
activeFrameGraph: ForwardRenderer{
camera: camera
clearColor: Qt.rgba(0.0, 0.5, 1, 1)
- window: _q_window
}
}
diff --git a/examples/qt3d/wave/main.qml b/examples/qt3d/wave/main.qml
index 1006f69d8..a6f46bfa7 100644
--- a/examples/qt3d/wave/main.qml
+++ b/examples/qt3d/wave/main.qml
@@ -62,7 +62,6 @@ Entity {
id: frameGraph
activeFrameGraph: WaveForwardRenderer {
camera: mainCamera
- window: _q_window
}
}
diff --git a/examples/qt3d/wireframe/main.qml b/examples/qt3d/wireframe/main.qml
index 944923618..35033951d 100644
--- a/examples/qt3d/wireframe/main.qml
+++ b/examples/qt3d/wireframe/main.qml
@@ -47,7 +47,6 @@ Entity {
activeFrameGraph: ForwardRenderer {
id: renderer
camera: mainCamera
- window: _q_window
}
}
]
diff --git a/src/quick3d/quick3d/qqmlaspectengine.cpp b/src/quick3d/quick3d/qqmlaspectengine.cpp
index cf2372ca5..d7e540c42 100644
--- a/src/quick3d/quick3d/qqmlaspectengine.cpp
+++ b/src/quick3d/quick3d/qqmlaspectengine.cpp
@@ -133,6 +133,11 @@ void QQmlAspectEnginePrivate::_q_continueExecute()
return;
}
+ // Let users know we have loaded the QML file, and the scene has been instantiated.
+ // This gives a chance to manipulate the scene before passing it over to the
+ // aspect engine. Useful for convenience window classes to set up cameras and surfaces
+ // on the framegraph and event sources for the input aspect etc.
+ emit q->sceneCreated(obj);
m_aspectEngine->setRootEntity(qobject_cast<QEntity *>(obj));
emit q->statusChanged(q->status());
}
diff --git a/src/quick3d/quick3d/qqmlaspectengine.h b/src/quick3d/quick3d/qqmlaspectengine.h
index 7f742e83f..b94c6ab10 100644
--- a/src/quick3d/quick3d/qqmlaspectengine.h
+++ b/src/quick3d/quick3d/qqmlaspectengine.h
@@ -64,6 +64,7 @@ public:
Q_SIGNALS:
void statusChanged(Status);
+ void sceneCreated(QObject* rootObject);
private:
Q_DECLARE_PRIVATE(QQmlAspectEngine)