renderFastRotated method

void renderFastRotated({
  1. required double srcX,
  2. required double srcY,
  3. required double srcWidth,
  4. required double srcHeight,
  5. required double dstX,
  6. required double dstY,
  7. required double rotation,
  8. required Int32List clr,
  9. required Float32List src,
  10. required Float32List dst,
  11. double anchorX = 0.5,
  12. double anchorY = 0.5,
  13. double scale = 1.0,
  14. int color = 1,
})

Implementation

void renderFastRotated({
  required double srcX,
  required double srcY,
  required double srcWidth,
  required double srcHeight,
  required double dstX,
  required double dstY,
  required double rotation,
  required Int32List clr,
  required Float32List src,
  required Float32List dst,
  double anchorX = 0.5,
  double anchorY = 0.5,
  double scale = 1.0,
  int color = 1,
}){
  renders++;
  const PI_HALF = pi * 0.5;

  final scos = cos(rotation) * scale;
  final ssin = sin(rotation) * scale;
  final width = -scos * anchorX + ssin * anchorY;
  final height = -ssin * anchorX - scos * anchorY;
  final tx = dstX + width;
  final ty = dstY + height;
  final scaledHeight = srcHeight * scale * anchorY;
  final scaledWidth = srcWidth * scale * anchorX;
  final adjX = _adj(rotation - PI_HALF, scaledHeight);
  final adjY = _opp(rotation - PI_HALF, scaledHeight);
  final adjY2 = _adj(rotation - PI_HALF, scaledWidth);
  final adjX2 = _opp(rotation - PI_HALF, scaledWidth);
  final index = bufferIndex++;
  final i = index << 2;

  clr[index] = color;
  src[i] = srcX;
  src[i + 1] = srcY;
  src[i + 2] = srcX + srcWidth;
  src[i + 3] = srcY + srcHeight;
  dst[i] = cos(rotation) * scale;
  dst[i + 1] = sin(rotation) * scale;
  dst[i + 2] = tx + adjX2 + adjX;
  dst[i + 3] = ty - adjY2 + adjY;
}