10QSGCurveFillNode::QSGCurveFillNode()
12 setFlag(OwnsGeometry,
true);
13 setFlag(UsePreprocess,
true);
14 setGeometry(
new QSGGeometry(attributes(), 0, 0));
19void QSGCurveFillNode::updateMaterialFlags()
21 Q_ASSERT(m_material !=
nullptr);
23 const bool wasFullMatrixEnabled = m_material->flags().testFlag(QSGMaterial::RequiresFullMatrix);
24 const bool needsFullMatrixEnabled =
25 m_gradientType != QGradient::NoGradient || m_textureProvider !=
nullptr;
27 if (wasFullMatrixEnabled == needsFullMatrixEnabled)
30 m_material->setFlag(QSGMaterial::RequiresFullMatrix, needsFullMatrixEnabled);
34 if (!needsFullMatrixEnabled)
35 m_material->setFlag(QSGMaterial::RequiresFullMatrixExceptTranslate,
true);
37 markDirty(DirtyGeometry);
40void QSGCurveFillNode::updateMaterial()
42 m_material.reset(
new QSGCurveFillMaterial(
this));
43 setMaterial(m_material.data());
44 updateMaterialFlags();
47void QSGCurveFillNode::cookGeometry()
51 const QSGGeometry::Type indexType = m_uncookedVertexes.size() <= 0xffff
52 ? QSGGeometry::UnsignedShortType
53 : QSGGeometry::UnsignedIntType;
54 QSGGeometry *g = geometry();
55 if (g->indexType() != indexType) {
56 g =
new QSGGeometry(attributes(),
57 m_uncookedVertexes.size(),
58 m_uncookedIndexes.size(),
62 g->allocate(m_uncookedVertexes.size(), m_uncookedIndexes.size());
65 g->setDrawingMode(QSGGeometry::DrawTriangles);
66 memcpy(g->vertexData(),
67 m_uncookedVertexes.constData(),
68 g->vertexCount() * g->sizeOfVertex());
69 if (indexType == QSGGeometry::UnsignedShortType) {
70 quint16 *dst =
static_cast<quint16 *>(g->indexData());
71 for (qsizetype i = 0; i < m_uncookedIndexes.size(); ++i)
72 dst[i] = quint16(m_uncookedIndexes.at(i));
74 memcpy(g->indexData(),
75 m_uncookedIndexes.constData(),
76 g->indexCount() * g->sizeOfIndex());
79 m_uncookedIndexes.clear();
80 m_uncookedIndexes.squeeze();
81 m_uncookedVertexes.clear();
82 m_uncookedVertexes.squeeze();
85const QSGGeometry::AttributeSet &QSGCurveFillNode::attributes()
87 static QSGGeometry::Attribute data[] = {
88 QSGGeometry::Attribute::createWithAttributeType(0, 2, QSGGeometry::FloatType, QSGGeometry::PositionAttribute),
89 QSGGeometry::Attribute::createWithAttributeType(1, 3, QSGGeometry::FloatType, QSGGeometry::TexCoordAttribute),
90 QSGGeometry::Attribute::createWithAttributeType(2, 4, QSGGeometry::FloatType, QSGGeometry::UnknownAttribute),
91 QSGGeometry::Attribute::createWithAttributeType(3, 2, QSGGeometry::FloatType, QSGGeometry::UnknownAttribute),
93 static QSGGeometry::AttributeSet attrs = { 4,
sizeof(CurveNodeVertex), data };
99#include "moc_qsgcurvefillnode_p.cpp"
Combined button and popup list for selecting options.