aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/scenegraph/qsgcurvefillnode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/scenegraph/qsgcurvefillnode.cpp')
-rw-r--r--src/quick/scenegraph/qsgcurvefillnode.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/quick/scenegraph/qsgcurvefillnode.cpp b/src/quick/scenegraph/qsgcurvefillnode.cpp
new file mode 100644
index 0000000000..9fa526bb0a
--- /dev/null
+++ b/src/quick/scenegraph/qsgcurvefillnode.cpp
@@ -0,0 +1,60 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qsgcurvefillnode_p.h"
+#include "qsgcurvefillnode_p_p.h"
+
+QT_BEGIN_NAMESPACE
+
+QSGCurveFillNode::QSGCurveFillNode()
+{
+ setFlag(OwnsGeometry, true);
+ setGeometry(new QSGGeometry(attributes(), 0, 0));
+
+ updateMaterial();
+}
+
+void QSGCurveFillNode::updateMaterial()
+{
+ m_material.reset(new QSGCurveFillMaterial(this));
+ setMaterial(m_material.data());
+}
+
+void QSGCurveFillNode::cookGeometry()
+{
+ QSGGeometry *g = geometry();
+ if (g->indexType() != QSGGeometry::UnsignedIntType) {
+ g = new QSGGeometry(attributes(),
+ m_uncookedVertexes.size(),
+ m_uncookedIndexes.size(),
+ QSGGeometry::UnsignedIntType);
+ setGeometry(g);
+ } else {
+ g->allocate(m_uncookedVertexes.size(), m_uncookedIndexes.size());
+ }
+
+ g->setDrawingMode(QSGGeometry::DrawTriangles);
+ memcpy(g->vertexData(),
+ m_uncookedVertexes.constData(),
+ g->vertexCount() * g->sizeOfVertex());
+ memcpy(g->indexData(),
+ m_uncookedIndexes.constData(),
+ g->indexCount() * g->sizeOfIndex());
+
+ m_uncookedIndexes.clear();
+ m_uncookedVertexes.clear();
+}
+
+const QSGGeometry::AttributeSet &QSGCurveFillNode::attributes()
+{
+ static QSGGeometry::Attribute data[] = {
+ QSGGeometry::Attribute::createWithAttributeType(0, 2, QSGGeometry::FloatType, QSGGeometry::PositionAttribute),
+ QSGGeometry::Attribute::createWithAttributeType(1, 3, QSGGeometry::FloatType, QSGGeometry::TexCoordAttribute),
+ QSGGeometry::Attribute::createWithAttributeType(2, 4, QSGGeometry::FloatType, QSGGeometry::UnknownAttribute),
+ QSGGeometry::Attribute::createWithAttributeType(3, 2, QSGGeometry::FloatType, QSGGeometry::UnknownAttribute),
+ };
+ static QSGGeometry::AttributeSet attrs = { 4, sizeof(CurveNodeVertex), data };
+ return attrs;
+}
+
+QT_END_NAMESPACE