私はopenGLを少し使って、自分に合った解決策を見つけました
QSGGeometry::Point2D
頂点の設定に使用される通常の OpenGL の例。ただし、カラー対応のバージョンもあります(QSGGeometry::defaultAttributes_ColoredPoint2D())
。だから私は頂点を設定することができます
vertices[i].set(x, y, r,g, b, a);
//編集: 次の問題は、QSGeometry-Object に多くの頂点がある場合、GUI が時々フリーズすることです。どうしてか分かりません。頂点にメモリを割り当てた後、GUI の速度が低下するため、この方法ではパフォーマンスが低下します。
//編集 2:
現在のメソッドの簡略化されたコードを追加しましたupdatePaint
。データ オブジェクトが非常に大きい (>2.000.000 ポイント) 場合、ウィジェットはポイントをレンダリングしますが、GUI 全体がハングして途切れます。
QSGNode *HistogramView::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *)
{
QSGGeometryNode *node = 0;
QSGGeometry *geometry = 0;
if (!oldNode) {
node = new QSGGeometryNode;
geometry = new QSGGeometry(QSGGeometry::defaultAttributes_ColoredPoint2D(), data.size());
geometry->setDrawingModeelsize(GL_POINTS);
node->setGeometry(geometry);
node->setFlag(QSGNode::OwnsGeometry);
QSGVertexColorMaterial *material = new QSGVertexColorMaterial();
//material->setColor(QColor(255, 0, 0));
node->setMaterial(material);
node->setFlag(QSGNode::OwnsMaterial);
} else {
node = static_cast<QSGGeometryNode *>(oldNode);
geometry = node->geometry();
geometry->allocate(222);
}
QSGGeometry::ColoredPoint2D *vertices = geometry->vertexDataAsColoredPoint2D();
for (int i = 0; i < data.size(); i++) {
vertices[id].set(x, y,red, green, blue, 255);
}
}
}
node->markDirty(QSGNode::DirtyGeometry);
return node;
}
エラーを特定できました。QSGGeometry
-object(
) の初期化を呼び出した後geometry = new QSGGeometry(QSGGeometry::defaultAttributes_ColoredPoint2D(), data.size());
、GUI は非常に遅くなります。
ご挨拶