Details
-
Task
-
Resolution: Done
-
P2: Important
-
None
-
5.11
Description
The way Scene3D (and all similar solutions like Studio3D or even the upcoming future Studio3DEngine+Layer3D combo) works is highly not ideal for 3D scenes that are not constantly changing.
Marking the node as dirty and scheduling a Quick re-render by calling QQuickWindow::update() on each and every frame (this is hooked up to QQuickWindow::beforeRendering) is wasteful (performance, power) and is not acceptable to some customers. Qt Quick itself does not have this problem: if nothing changes in the Qt Quick scene (e.g. all animations stop) the render loop will not render anything.
So Scene3DRenderer::render() (and all similar solutions in Studio3D and elsewhere) would need a way to tell if rendering needs to be done:
if (renderAspectPrivate->needsRender()) { // ... set up fbo, call renderSynchronous, etc. node->markDirty(DirtyMaterial); m_window->update(); } // else do nothing, no dirty, no update
Attachments
Issue Links
- relates to
-
QT3DS-2981 Support customer project B
- Closed
-
QTBUG-72923 Scene3D does not stop processing even when visible property is set to false
- Closed
-
QTBUG-70035 Qt 3D renderer design not suitable for proper Qt Quick integration
- Open
-
QT3DS-660 Qt 3D bugs and features required for Runtime 2
- Withdrawn