aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2017-08-04 11:28:25 +0200
committerLaszlo Agocs <laszlo.agocs@qt.io>2017-09-05 10:34:06 +0000
commit32063559d6232ec9af3c9004ea66fd57d2e690f5 (patch)
tree7da184f81e1b569f9e311c3f7ce951c5747d5b3f /src/imports
parent2795ac5d5930fa28ea329529c0dd2e515b361531 (diff)
shapes: Reduce stroke/fill node data
Do not store the superfluous window and geometry pointers. Change-Id: Ib9cf4e62bdc6f32dc99cda25eddfebdfa05d579b Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'src/imports')
-rw-r--r--src/imports/shapes/qquickshapegenericrenderer.cpp34
-rw-r--r--src/imports/shapes/qquickshapegenericrenderer_p.h7
2 files changed, 14 insertions, 27 deletions
diff --git a/src/imports/shapes/qquickshapegenericrenderer.cpp b/src/imports/shapes/qquickshapegenericrenderer.cpp
index 98ba89dc3d..8131f02f1a 100644
--- a/src/imports/shapes/qquickshapegenericrenderer.cpp
+++ b/src/imports/shapes/qquickshapegenericrenderer.cpp
@@ -75,38 +75,32 @@ static inline QQuickShapeGenericRenderer::Color4ub colorToColor4ub(const QColor
}
QQuickShapeGenericStrokeFillNode::QQuickShapeGenericStrokeFillNode(QQuickWindow *window)
- : m_geometry(new QSGGeometry(QSGGeometry::defaultAttributes_ColoredPoint2D(), 0, 0)),
- m_window(window),
- m_material(nullptr)
+ : m_material(nullptr)
{
- setGeometry(m_geometry);
- activateMaterial(MatSolidColor);
+ setFlag(QSGNode::OwnsGeometry, true);
+ setGeometry(new QSGGeometry(QSGGeometry::defaultAttributes_ColoredPoint2D(), 0, 0));
+ activateMaterial(window, MatSolidColor);
#ifdef QSG_RUNTIME_DESCRIPTION
qsgnode_set_description(this, QLatin1String("stroke-fill"));
#endif
}
-QQuickShapeGenericStrokeFillNode::~QQuickShapeGenericStrokeFillNode()
-{
- delete m_geometry;
-}
-
-void QQuickShapeGenericStrokeFillNode::activateMaterial(Material m)
+void QQuickShapeGenericStrokeFillNode::activateMaterial(QQuickWindow *window, Material m)
{
switch (m) {
case MatSolidColor:
// Use vertexcolor material. Items with different colors remain batchable
// this way, at the expense of having to provide per-vertex color values.
- m_material.reset(QQuickShapeGenericMaterialFactory::createVertexColor(m_window));
+ m_material.reset(QQuickShapeGenericMaterialFactory::createVertexColor(window));
break;
case MatLinearGradient:
- m_material.reset(QQuickShapeGenericMaterialFactory::createLinearGradient(m_window, this));
+ m_material.reset(QQuickShapeGenericMaterialFactory::createLinearGradient(window, this));
break;
case MatRadialGradient:
- m_material.reset(QQuickShapeGenericMaterialFactory::createRadialGradient(m_window, this));
+ m_material.reset(QQuickShapeGenericMaterialFactory::createRadialGradient(window, this));
break;
case MatConicalGradient:
- m_material.reset(QQuickShapeGenericMaterialFactory::createConicalGradient(m_window, this));
+ m_material.reset(QQuickShapeGenericMaterialFactory::createConicalGradient(window, this));
break;
default:
qWarning("Unknown material %d", m);
@@ -583,7 +577,7 @@ void QQuickShapeGenericRenderer::updateFillNode(ShapePathData *d, QQuickShapeGen
QQuickShapeGenericStrokeFillNode *n = node->m_fillNode;
updateShadowDataInNode(d, n);
- QSGGeometry *g = n->m_geometry;
+ QSGGeometry *g = n->geometry();
if (d->fillVertices.isEmpty()) {
if (g->vertexCount() || g->indexCount()) {
g->allocate(0, 0);
@@ -607,7 +601,7 @@ void QQuickShapeGenericRenderer::updateFillNode(ShapePathData *d, QQuickShapeGen
default:
Q_UNREACHABLE();
}
- n->activateMaterial(gradMat);
+ n->activateMaterial(m_item->window(), gradMat);
if (d->effectiveDirty & DirtyFillGradient) {
// Gradients are implemented via a texture-based material.
n->markDirty(QSGNode::DirtyMaterial);
@@ -616,7 +610,7 @@ void QQuickShapeGenericRenderer::updateFillNode(ShapePathData *d, QQuickShapeGen
return;
}
} else {
- n->activateMaterial(QQuickShapeGenericStrokeFillNode::MatSolidColor);
+ n->activateMaterial(m_item->window(), QQuickShapeGenericStrokeFillNode::MatSolidColor);
// fast path for updating only color values when no change in vertex positions
if ((d->effectiveDirty & DirtyColor) && !(d->effectiveDirty & DirtyFillGeom)) {
ColoredVertex *vdst = reinterpret_cast<ColoredVertex *>(g->vertexData());
@@ -633,8 +627,6 @@ void QQuickShapeGenericRenderer::updateFillNode(ShapePathData *d, QQuickShapeGen
g = new QSGGeometry(QSGGeometry::defaultAttributes_ColoredPoint2D(),
d->fillVertices.count(), indexCount, d->indexType);
n->setGeometry(g);
- delete n->m_geometry;
- n->m_geometry = g;
} else {
g->allocate(d->fillVertices.count(), indexCount);
}
@@ -653,7 +645,7 @@ void QQuickShapeGenericRenderer::updateStrokeNode(ShapePathData *d, QQuickShapeG
return;
QQuickShapeGenericStrokeFillNode *n = node->m_strokeNode;
- QSGGeometry *g = n->m_geometry;
+ QSGGeometry *g = n->geometry();
if (d->strokeVertices.isEmpty()) {
if (g->vertexCount() || g->indexCount()) {
g->allocate(0, 0);
diff --git a/src/imports/shapes/qquickshapegenericrenderer_p.h b/src/imports/shapes/qquickshapegenericrenderer_p.h
index 32cec798ec..11070ae7dc 100644
--- a/src/imports/shapes/qquickshapegenericrenderer_p.h
+++ b/src/imports/shapes/qquickshapegenericrenderer_p.h
@@ -205,7 +205,6 @@ class QQuickShapeGenericStrokeFillNode : public QSGGeometryNode
{
public:
QQuickShapeGenericStrokeFillNode(QQuickWindow *window);
- ~QQuickShapeGenericStrokeFillNode();
enum Material {
MatSolidColor,
@@ -214,16 +213,12 @@ public:
MatConicalGradient
};
- void activateMaterial(Material m);
-
- QQuickWindow *window() const { return m_window; }
+ void activateMaterial(QQuickWindow *window, Material m);
// shadow data for custom materials
QQuickAbstractPathRenderer::GradientDesc m_fillGradient;
private:
- QSGGeometry *m_geometry;
- QQuickWindow *m_window;
QScopedPointer<QSGMaterial> m_material;
friend class QQuickShapeGenericRenderer;