{"version":3,"file":"GlitchPass.cjs","sources":["../../src/postprocessing/GlitchPass.ts"],"sourcesContent":["import { Pass, FullScreenQuad } from './Pass'\nimport {\n  DataTexture,\n  FloatType,\n  MathUtils,\n  RedFormat,\n  LuminanceFormat,\n  ShaderMaterial,\n  UniformsUtils,\n  WebGLRenderTarget,\n  WebGLRenderer,\n  IUniform,\n} from 'three'\nimport { DigitalGlitch } from '../shaders/DigitalGlitch'\n\nclass GlitchPass extends Pass {\n  public material: ShaderMaterial\n  public fsQuad: FullScreenQuad\n  public goWild: boolean\n  public curF: number\n  public randX!: number\n\n  public uniforms: Record<keyof typeof DigitalGlitch['uniforms'], IUniform<any>>\n\n  constructor(dt_size = 64) {\n    super()\n    this.uniforms = UniformsUtils.clone(DigitalGlitch.uniforms)\n    this.uniforms['tDisp'].value = this.generateHeightmap(dt_size)\n\n    this.material = new ShaderMaterial({\n      uniforms: this.uniforms,\n      vertexShader: DigitalGlitch.vertexShader,\n      fragmentShader: DigitalGlitch.fragmentShader,\n    })\n\n    this.fsQuad = new FullScreenQuad(this.material)\n    this.goWild = false\n    this.curF = 0\n    this.generateTrigger()\n  }\n\n  public render(\n    renderer: WebGLRenderer,\n    writeBuffer: WebGLRenderTarget,\n    readBuffer: WebGLRenderTarget,\n    /*, deltaTime, maskActive */\n  ): void {\n    if (renderer.capabilities.isWebGL2 === false) this.uniforms['tDisp'].value.format = LuminanceFormat\n\n    this.uniforms['tDiffuse'].value = readBuffer.texture\n    this.uniforms['seed'].value = Math.random() //default seeding\n    this.uniforms['byp'].value = 0\n\n    if (this.curF % this.randX == 0 || this.goWild == true) {\n      this.uniforms['amount'].value = Math.random() / 30\n      this.uniforms['angle'].value = MathUtils.randFloat(-Math.PI, Math.PI)\n      this.uniforms['seed_x'].value = MathUtils.randFloat(-1, 1)\n      this.uniforms['seed_y'].value = MathUtils.randFloat(-1, 1)\n      this.uniforms['distortion_x'].value = MathUtils.randFloat(0, 1)\n      this.uniforms['distortion_y'].value = MathUtils.randFloat(0, 1)\n      this.curF = 0\n      this.generateTrigger()\n    } else if (this.curF % this.randX < this.randX / 5) {\n      this.uniforms['amount'].value = Math.random() / 90\n      this.uniforms['angle'].value = MathUtils.randFloat(-Math.PI, Math.PI)\n      this.uniforms['distortion_x'].value = MathUtils.randFloat(0, 1)\n      this.uniforms['distortion_y'].value = MathUtils.randFloat(0, 1)\n      this.uniforms['seed_x'].value = MathUtils.randFloat(-0.3, 0.3)\n      this.uniforms['seed_y'].value = MathUtils.randFloat(-0.3, 0.3)\n    } else if (this.goWild == false) {\n      this.uniforms['byp'].value = 1\n    }\n\n    this.curF++\n\n    if (this.renderToScreen) {\n      renderer.setRenderTarget(null)\n      this.fsQuad.render(renderer)\n    } else {\n      renderer.setRenderTarget(writeBuffer)\n      if (this.clear) renderer.clear()\n      this.fsQuad.render(renderer)\n    }\n  }\n\n  generateTrigger(): void {\n    this.randX = MathUtils.randInt(120, 240)\n  }\n\n  generateHeightmap(dt_size: number): DataTexture {\n    const data_arr = new Float32Array(dt_size * dt_size)\n    const length = dt_size * dt_size\n\n    for (let i = 0; i < length; i++) {\n      const val = MathUtils.randFloat(0, 1)\n      data_arr[i] = val\n    }\n\n    const texture = new DataTexture(data_arr, dt_size, dt_size, RedFormat, FloatType)\n    texture.needsUpdate = true\n    return texture\n  }\n}\n\nexport { GlitchPass }\n"],"names":["Pass","UniformsUtils","DigitalGlitch","ShaderMaterial","FullScreenQuad","LuminanceFormat","MathUtils","DataTexture","RedFormat","FloatType"],"mappings":"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"}