63void QSGNodeUpdater::enterTransformNode(QSGTransformNode *t)
65#ifdef QSG_UPDATER_DEBUG
66 qDebug() <<
"enter transform:" << t <<
"force=" << m_force_update;
69 if (!t->matrix().isIdentity()) {
70 if (!m_combined_matrix_stack.isEmpty()) {
71 t->setCombinedMatrix(*m_combined_matrix_stack.last() * t->matrix());
73 t->setCombinedMatrix(t->matrix());
75 m_combined_matrix_stack.add(&t->combinedMatrix());
77 if (!m_combined_matrix_stack.isEmpty()) {
78 t->setCombinedMatrix(*m_combined_matrix_stack.last());
80 t->setCombinedMatrix(QMatrix4x4());
141void QSGNodeUpdater::enterRenderNode(QSGRenderNode *r)
143#ifdef QSG_UPDATER_DEBUG
144 qDebug() <<
"enter render:" << r;
147 QSGRenderNodePrivate *rd = QSGRenderNodePrivate::get(r);
148 rd->m_matrix = m_combined_matrix_stack.isEmpty() ? 0 : m_combined_matrix_stack.last();
149 rd->m_clip_list = m_current_clip;
150 rd->m_opacity = m_opacity_stack.last();
190void QSGNodeUpdater::visitNode(QSGNode *n)
192#ifdef QSG_UPDATER_DEBUG
193 qDebug() <<
"enter:" << n;
198 if (n->isSubtreeBlocked())
202 case QSGNode::TransformNodeType: {
203 QSGTransformNode *t =
static_cast<QSGTransformNode *>(n);
204 enterTransformNode(t);
206 leaveTransformNode(t);
208 case QSGNode::GeometryNodeType: {
209 QSGGeometryNode *g =
static_cast<QSGGeometryNode *>(n);
210 enterGeometryNode(g);
212 leaveGeometryNode(g);
214 case QSGNode::RenderNodeType: {
215 QSGRenderNode *r =
static_cast<QSGRenderNode *>(n);
220 case QSGNode::ClipNodeType: {
221 QSGClipNode *c =
static_cast<QSGClipNode *>(n);
226 case QSGNode::OpacityNodeType: {
227 QSGOpacityNode *o =
static_cast<QSGOpacityNode *>(n);