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 sourceImageData = hideObject == false || knockout
      ? renderTextureQuad.getImageData()
      : null;

  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 alphaChannel =
      BitmapDataChannel.getCanvasIndex(BitmapDataChannel.ALPHA);
  final stride = width * 4;

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

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

  if (knockout) {
    setColorKnockout(data, color, sourceImageData!.data);
  } else if (hideObject) {
    setColor(data, color);
  } else {
    setColorBlend(data, color, sourceImageData!.data);
  }

  renderTextureQuad.putImageData(imageData);
}