Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-69985

Scene3D (and Studio3D) needs a way to determine if the Qt 3D scene changes

    XMLWordPrintable

    Details

    • Type: Task
    • Status: Closed
    • Priority: P2: Important
    • Resolution: Done
    • Affects Version/s: 5.11
    • Fix Version/s: None
    • Component/s: Qt3D

      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

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            Activity

              People

              Assignee:
              zakalawe James Turner
              Reporter:
              lagocs Laszlo Agocs
              Votes:
              10 Vote for this issue
              Watchers:
              20 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved:

                  Gerrit Reviews

                  There are no open Gerrit changes