Avoid renderlist rebuilds in the scene graph renderer.
authorGunnar Sletta <gunnar.sletta@jollamobile.com>
Tue, 28 Jan 2014 19:53:01 +0000 (20:53 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Thu, 6 Feb 2014 15:02:02 +0000 (16:02 +0100)
commitb70ab35b21665510a7af85c549964ebe6d39b115
treea5f33a6b23ade62043c0e6e6626fd811272acf32
parent4e835a592901364599da364cfe2006f99e34a6c9
Avoid renderlist rebuilds in the scene graph renderer.

Transform, material, opacity and geometry changes all used to trigger
full rebuilds, which meant that very little geometry could be retained
between frames. For instance, a rotating spinner on top of a gridview
this would cause a full rebuild where nothing is retained.

This change introduces new concept to the renderer: partial rebuilding
based on render order ranges. Since the render order of nodes is
strictly defined by their position in the tree and nothing else, we
should use that for the majority of rebuilds. When a change comes in
for a node, we invalidate its batch and all batches which it has
overlapping render orders with.

Render order rebuilds only happen when nodes are added and removed.

Change-Id: Ib4cb284164892b409e3fff5c492a54d60a5de2d7
Reviewed-by: Michael Brasser <michael.brasser@live.com>
src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h