33 QByteArray *buf = state.uniformData();
34 const int shaderMatrixCount = newMaterial->viewCount();
35 const int matrixCount = qMin(state.projectionMatrixCount(), shaderMatrixCount);
37 for (
int viewIndex = 0; viewIndex < matrixCount; ++viewIndex) {
38 if (state.isMatrixDirty()) {
39 const QMatrix4x4 m = state.combinedMatrix(viewIndex);
40 memcpy(buf->data() + 64 * viewIndex, m.constData(), 64);
45 if (oldMaterial ==
nullptr) {
47 const QRect r = state.viewportRect();
48 const QVector2D v(2.0f / r.width(), 2.0f / r.height());
49 Q_ASSERT(
sizeof(v) == 8);
50 memcpy(buf->data() + 64 * shaderMatrixCount, &v, 8);
54 if (state.isOpacityDirty()) {
55 const float opacity = state.opacity();
56 memcpy(buf->data() + 64 * shaderMatrixCount + 8, &opacity, 4);
101void QSGDefaultInternalRectangleNode::updateMaterialBlending(QSGNode::DirtyState *state)
104 if (material() == &m_material) {
105 bool wasBlending = (m_material.flags() & QSGMaterial::Blending);
106 bool isBlending = (m_gradient_stops.size() > 0 && !m_gradient_is_opaque)
107 || (m_color.alpha() < 255 && m_color.alpha() != 0)
108 || (m_pen_width > 0 && m_border_color.alpha() < 255);
109 if (wasBlending != isBlending) {
110 m_material.setFlag(QSGMaterial::Blending, isBlending);
111 *state |= QSGNode::DirtyMaterial;