14 const int matrixCount =
qMin(
state.projectionMatrixCount(), newEffect->viewCount());
19 auto *newNode = newMaterial !=
nullptr ? newMaterial->
node() :
nullptr;
20 auto *oldNode = oldMaterial !=
nullptr ? oldMaterial->node() :
nullptr;
22 if (
state.isMatrixDirty()) {
23 float localScale = newNode !=
nullptr ? newNode->
localScale() : 1.0f;
24 for (
int viewIndex = 0; viewIndex < matrixCount; ++viewIndex) {
27 memcpy(
buf->data() + viewIndex * 64,
m.constData(), 64);
29 float matrixScale =
qSqrt(
qAbs(
state.determinant())) *
state.devicePixelRatio() * localScale;
30 memcpy(
buf->data() + matrixCount * 64, &matrixScale, 4);
34 if (
state.isOpacityDirty()) {
35 const float opacity =
state.opacity();
36 memcpy(
buf->data() + matrixCount * 64 + 4, &opacity, 4);
40 int offset = matrixCount * 64 + 16;
41 if (newNode ==
nullptr)
44 QVector4D newStrokeColor(newNode->color().redF(),
45 newNode->color().greenF(),
46 newNode->color().blueF(),
47 newNode->color().alphaF());
48 QVector4D oldStrokeColor = oldNode !=
nullptr
50 oldNode->color().greenF(),
51 oldNode->color().blueF(),
52 oldNode->color().alphaF())
55 if (oldNode ==
nullptr || oldStrokeColor != newStrokeColor) {
56 memcpy(
buf->data() +
offset, &newStrokeColor, 16);
61 if (oldNode ==
nullptr || newNode->strokeWidth() != oldNode->strokeWidth()) {
62 float w = newNode->strokeWidth();
67 if (oldNode ==
nullptr || newNode->debug() != oldNode->debug()) {
68 float w = newNode->debug();