apply method

  1. @override
void apply(
  1. BitmapData bitmapData,
  2. [Rectangle<num>? rectangle]
)
override

Implementation

@override
void apply(BitmapData bitmapData, [Rectangle<num>? rectangle]) {
  final renderTextureQuad = rectangle == null
      ? bitmapData.renderTextureQuad
      : bitmapData.renderTextureQuad.cut(rectangle);

  final imageData = renderTextureQuad.getImageData();
  final data = imageData.data;
  final width = imageData.width;
  final height = imageData.height;

  final pixelRatio = renderTextureQuad.pixelRatio;
  final blurX = (this.blurX * pixelRatio).round();
  final blurY = (this.blurY * pixelRatio).round();
  final stride = width * 4;

  premultiplyAlpha(data);

  for (var x = 0; x < width; x++) {
    blur(data, x * 4 + 0, height, stride, blurY);
    blur(data, x * 4 + 1, height, stride, blurY);
    blur(data, x * 4 + 2, height, stride, blurY);
    blur(data, x * 4 + 3, height, stride, blurY);
  }

  for (var y = 0; y < height; y++) {
    blur(data, y * stride + 0, width, 4, blurX);
    blur(data, y * stride + 1, width, 4, blurX);
    blur(data, y * stride + 2, width, 4, blurX);
    blur(data, y * stride + 3, width, 4, blurX);
  }

  unpremultiplyAlpha(data);

  renderTextureQuad.putImageData(imageData);
}