67QSGNode* VideoItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data)
71 QRectF r = boundingRect();
74 if (d->surfaceDirty) {
77 d->surfaceDirty =
false;
80 if (!d->surface || d->surface.data()->d->videoSink.isNull()) {
82 QSGFlatColorMaterial *material =
new QSGFlatColorMaterial;
83 material->setColor(Qt::black);
85 QSGGeometryNode *node =
new QSGGeometryNode;
86 node->setMaterial(material);
87 node->setFlag(QSGNode::OwnsMaterial);
88 node->setFlag(QSGNode::OwnsGeometry);
91 d->targetArea = QRectF();
96 if (r != d->targetArea) {
97 QSGGeometry *geometry =
new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 4);
98 geometry->vertexDataAsPoint2D()[0].set(r.x(), r.y());
99 geometry->vertexDataAsPoint2D()[1].set(r.x(), r.height());
100 geometry->vertexDataAsPoint2D()[2].set(r.width(), r.y());
101 geometry->vertexDataAsPoint2D()[3].set(r.width(), r.height());
103 QSGGeometryNode *node =
static_cast<QSGGeometryNode*
>(newNode);
104 node->setGeometry(geometry);
109 newNode = (QSGNode*) QGlib::emit<void*>(d->surface.data()->d->videoSink,
110 "update-node", (
void*)oldNode,
111 r.x(), r.y(), r.width(), r.height());