text: import { Filter } from '@pixi/core';
  import { Matrix, Point } from '@pixi/math';
  import vertex from './displacement.vert';
  import fragment from './displacement.frag';
  
  /**
   * The DisplacementFilter class uses the pixel values from the specified texture
   * (called the displacement map) to perform a displacement of an object. You can
   * use this filter to apply all manor of crazy warping effects. Currently the r
   * property of the texture is used to offset the x and the g property of the texture
   * is used to offset the y.
   *
   * @class
   * @extends PIXI.Filter
   * @memberof PIXI.filters
   */
  export default class DisplacementFilter extends Filter
  {
      /**
       * @param {PIXI.Sprite} sprite - The sprite used for the displacement map. (make sure its added to the scene!)
       * @param {number} scale - The scale of the displacement
       */
      constructor(sprite, scale)
      {
          const maskMatrix = new Matrix();
  
          sprite.renderable = false;
  
          super(vertex, fragment, {
              mapSampler: sprite._texture,
              filterMatrix: maskMatrix,
              scale: { x: 1, y: 1 },
          });
  
          this.maskSprite = sprite;
          this.maskMatrix = maskMatrix;
  
          if (scale === null || scale === undefined)
          {
              scale = 20;
          }
  
          this.scale = new Point(scale, scale);
      }
  
      /**
       * Applies the filter.
       *
       * @param {PIXI.FilterManager} filterManager - The manager.
       * @param {PIXI.RenderTarget} input - The input target.
       * @param {PIXI.RenderTarget} output - The output target.
       */
      apply(filterManager, input, output)
      {
          this.uniforms.filterMatrix = filterManager.calculateSpriteMatrix(this.maskMatrix, this.maskSprite);
          this.uniforms.scale.x = this.scale.x;
          this.uniforms.scale.y = this.scale.y;
  
          // draw the filter...
          filterManager.applyFilter(this, input, output);
      }
  
      /**
       * The texture used for the displacement map. Must be power of 2 sized texture.
       *
       * @member {PIXI.Texture}
       */
      get map()
      {
          return this.uniforms.mapSampler;
      }
  
      set map(value) // eslint-disable-line require-jsdoc
      {
          this.uniforms.mapSampler = value;
      }
  }
  