updateInstanceTransforms method

void updateInstanceTransforms(
  1. void update(
    1. List<Matrix4> transforms
    ), {
  2. bool recomputeWinding = true,
})

Updates every instance transform in place and invalidates the batch once.

update receives a fixed-length view. Mutate its matrices without adding, removing, or replacing entries. Set recomputeWinding to false only when the edits cannot change any transform's winding parity.

Implementation

void updateInstanceTransforms(
  void Function(List<Matrix4> transforms) update, {
  bool recomputeWinding = true,
}) {
  try {
    update(_instanceUpdateView ??= UnmodifiableListView<Matrix4>(_instances));
  } finally {
    if (recomputeWinding) {
      for (var i = 0; i < _instances.length; i++) {
        _windingFlipped[i] = _instances[i].determinant() < 0;
      }
    }
    _boundsDirty = true;
    _revision++;
  }
}