{"version":3,"file":"utils.mjs","sources":["../../../src/filters/utils.ts"],"sourcesContent":["import { getFabricWindow } from '../env';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { WebGLFilterBackend } from './WebGLFilterBackend';\nimport type { TWebGLPipelineState, T2DPipelineState } from './typedefs';\n\nexport const isWebGLPipelineState = (\n  options: TWebGLPipelineState | T2DPipelineState\n): options is TWebGLPipelineState => {\n  return (options as TWebGLPipelineState).webgl !== undefined;\n};\n\n/**\n * Pick a method to copy data from GL context to 2d canvas.  In some browsers using\n * drawImage should be faster, but is also bugged for a small combination of old hardware\n * and drivers.\n * putImageData is faster than drawImage for that specific operation.\n */\nexport const isPutImageFaster = (width: number, height: number): boolean => {\n  const targetCanvas = createCanvasElement();\n  const sourceCanvas = createCanvasElement();\n  const gl = sourceCanvas.getContext('webgl')!;\n  // eslint-disable-next-line no-undef\n  const imageBuffer = new ArrayBuffer(width * height * 4);\n\n  const testContext = {\n    imageBuffer: imageBuffer,\n  } as unknown as Required<WebGLFilterBackend>;\n  const testPipelineState = {\n    destinationWidth: width,\n    destinationHeight: height,\n    targetCanvas: targetCanvas,\n  } as unknown as TWebGLPipelineState;\n  let startTime;\n  targetCanvas.width = width;\n  targetCanvas.height = height;\n\n  startTime = getFabricWindow().performance.now();\n  WebGLFilterBackend.prototype.copyGLTo2D.call(\n    testContext,\n    gl,\n    testPipelineState\n  );\n  const drawImageTime = getFabricWindow().performance.now() - startTime;\n\n  startTime = getFabricWindow().performance.now();\n  WebGLFilterBackend.prototype.copyGLTo2DPutImageData.call(\n    testContext,\n    gl,\n    testPipelineState\n  );\n  const putImageDataTime = getFabricWindow().performance.now() - startTime;\n\n  return drawImageTime > putImageDataTime;\n};\n"],"names":["isWebGLPipelineState","options","webgl","undefined","isPutImageFaster","width","height","targetCanvas","createCanvasElement","sourceCanvas","gl","getContext","imageBuffer","ArrayBuffer","testContext","testPipelineState","destinationWidth","destinationHeight","startTime","getFabricWindow","performance","now","WebGLFilterBackend","prototype","copyGLTo2D","call","drawImageTime","copyGLTo2DPutImageData","putImageDataTime"],"mappings":";;;;AAKaA,MAAAA,oBAAoB,GAC/BC,OAA+C,IACZ;AACnC,EAAA,OAAQA,OAAO,CAAyBC,KAAK,KAAKC,SAAS,CAAA;AAC7D,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;MACaC,gBAAgB,GAAGA,CAACC,KAAa,EAAEC,MAAc,KAAc;AAC1E,EAAA,MAAMC,YAAY,GAAGC,mBAAmB,EAAE,CAAA;AAC1C,EAAA,MAAMC,YAAY,GAAGD,mBAAmB,EAAE,CAAA;AAC1C,EAAA,MAAME,EAAE,GAAGD,YAAY,CAACE,UAAU,CAAC,OAAO,CAAE,CAAA;AAC5C;EACA,MAAMC,WAAW,GAAG,IAAIC,WAAW,CAACR,KAAK,GAAGC,MAAM,GAAG,CAAC,CAAC,CAAA;AAEvD,EAAA,MAAMQ,WAAW,GAAG;AAClBF,IAAAA,WAAW,EAAEA,WAAAA;GAC6B,CAAA;AAC5C,EAAA,MAAMG,iBAAiB,GAAG;AACxBC,IAAAA,gBAAgB,EAAEX,KAAK;AACvBY,IAAAA,iBAAiB,EAAEX,MAAM;AACzBC,IAAAA,YAAY,EAAEA,YAAAA;GACmB,CAAA;AACnC,EAAA,IAAIW,SAAS,CAAA;EACbX,YAAY,CAACF,KAAK,GAAGA,KAAK,CAAA;EAC1BE,YAAY,CAACD,MAAM,GAAGA,MAAM,CAAA;EAE5BY,SAAS,GAAGC,eAAe,EAAE,CAACC,WAAW,CAACC,GAAG,EAAE,CAAA;AAC/CC,EAAAA,kBAAkB,CAACC,SAAS,CAACC,UAAU,CAACC,IAAI,CAC1CX,WAAW,EACXJ,EAAE,EACFK,iBACF,CAAC,CAAA;AACD,EAAA,MAAMW,aAAa,GAAGP,eAAe,EAAE,CAACC,WAAW,CAACC,GAAG,EAAE,GAAGH,SAAS,CAAA;EAErEA,SAAS,GAAGC,eAAe,EAAE,CAACC,WAAW,CAACC,GAAG,EAAE,CAAA;AAC/CC,EAAAA,kBAAkB,CAACC,SAAS,CAACI,sBAAsB,CAACF,IAAI,CACtDX,WAAW,EACXJ,EAAE,EACFK,iBACF,CAAC,CAAA;AACD,EAAA,MAAMa,gBAAgB,GAAGT,eAAe,EAAE,CAACC,WAAW,CAACC,GAAG,EAAE,GAAGH,SAAS,CAAA;EAExE,OAAOQ,aAAa,GAAGE,gBAAgB,CAAA;AACzC;;;;"}