encodeUniversalBlock function
Encodes one 4×4 block (sixteen (r, g, b, a) tuples, row-major).
Implementation
Uint8List encodeUniversalBlock(List<(int, int, int, int)> pixels) {
final fit = blockEndpoints(pixels);
final e0 = _round(fit.high);
final e1 = _round(fit.low);
final alpha = blockAlphaRange(pixels);
final block = Uint8List(kUniversalBlockBytes);
block[0] = e0.$1;
block[1] = e0.$2;
block[2] = e0.$3;
block[3] = e1.$1;
block[4] = e1.$2;
block[5] = e1.$3;
block[_kAlphaHigh] = alpha.high;
block[_kAlphaLow] = alpha.low;
for (var i = 0; i < 16; i++) {
final (r, g, b, a) = pixels[i];
_putWeight(block, _kColorWeights, i, _nearestColorWeight(r, g, b, e0, e1));
_putWeight(
block,
_kAlphaWeights,
i,
_nearestAlphaWeight(a, alpha.high, alpha.low),
);
}
return block;
}