Introduce QSGMaterial::CustomCompileStep

Nobody reimplements the virtual QSGMaterialShader::compile()
function, so we disable that code path and make it opt-in for
compatibility.

We do this, because opens up for that the renderer can do something
different, including changing the source code to allow for better
optimization.

Change-Id: Ia72f9eda7d6428e26878158ab03349f753a35c66
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Public API for creating atlas textures, when available.

Atlas textures are currently only used when scenegraph is
combined with the customcontext from the playground/scenegraph
module.

Change-Id: I42f62abdad42e97cc1dcdc05bfb16ecf2839dc0e
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
New scenegraph renderer and atlas textures.

The renderer tries to batch primitives together where possible, isolate
non-changing subparts of the scene from changing subparts and retain
vertexdata on the GPU as much as possible. Atlas textures are crucial
in enabling batching.

The renderer and atlas texture are described in detail in the doc page
"Qt Quick Scene Graph Renderer".

Change-Id: Ia476c7f0f42e1fc57a2cef528e93ee88cf8f7055
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Off-by-one error in batch recylcing lead to leaks and no recycling

Change-Id: Ic6b126bbc929c2062fd3e77253ad8bba60376a50
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Fix rendering errors in Qt Quick Controls gallery

First, when doing a partial rebuild, we need to mark
all elements for orphaning, not just those without a batch,
as the renderlist should at all times contain everything
that is rendered on screen.

Second, we had a small bug with material changes where we
would overwrite the rebuild state instead of adding to it.
This led to the render lists not being rebuilt from scratch
in some scenarios.

Third, after the shadow nodes rewrite, we didn't mark
for a full rebuild when clips were added.

Change-Id: I6707ebfa2908fcedd7fb636fb25b844be15fdea1
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Fix build on iOS: define GL_DOUBLE

This patch will fix the build error:

qsgbatchrenderer.cpp:1844: error: use of undeclared identifier
GL_DOUBLE

Change-Id: I7981e303e4743bb610822633c7da433238de4683
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Fix partial rebuilds and geometry changes.

When we do partial rebuilds, we need to update the render order
for the entire subtree unconditionally. The previous logic
was to reuse existing render orders beneath batch roots, which
caused overlapping orders to be used.

When geometry of an alpha batch changes, we need to rebuild
everything under the current root. Otherwise, we might end
up with previously batched content which incorrectly
overlaps the changed geometry.

Change-Id: I7b6de5ce34a02434294ac5ae29ae1b87eb3c4464
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Trigger rebuild when xform of alpha nodes change.

When transforms change, overlaps may have changed, so we
need to rebuild all batches under the current root.

Instead of adding taggedRoots logic for rebuilding
batches only, we reuse the existing tagged roots for render
lists. This one is slightly more expensive, but for now
I believe the reduced code complexity outweights the tiny
overhead.

Change-Id: I1bd0efc18e5628f404d6d4dce38c725436e87ce5
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>