{"version":3,"file":"utils.mjs","sources":["../../../src/filters/utils.ts"],"sourcesContent":["import { getFabricWindow } from '../env';\nimport { createCanvasElement, createCanvasElementFor } 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 = createCanvasElementFor({ width, height });\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\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","createCanvasElementFor","sourceCanvas","createCanvasElement","gl","getContext","imageBuffer","ArrayBuffer","testContext","testPipelineState","destinationWidth","destinationHeight","startTime","getFabricWindow","performance","now","WebGLFilterBackend","prototype","copyGLTo2D","call","drawImageTime","copyGLTo2DPutImageData","putImageDataTime"],"mappings":";;;;AAKO,MAAMA,oBAAoB,GAC/BC,OAA+C,IACZ;AACnC,EAAA,OAAQA,OAAO,CAAyBC,KAAK,KAAKC,SAAS;AAC7D;;AAEA;AACA;AACA;AACA;AACA;AACA;MACaC,gBAAgB,GAAGA,CAACC,KAAa,EAAEC,MAAc,KAAc;EAC1E,MAAMC,YAAY,GAAGC,sBAAsB,CAAC;IAAEH,KAAK;AAAEC,IAAAA;AAAO,GAAC,CAAC;AAC9D,EAAA,MAAMG,YAAY,GAAGC,mBAAmB,EAAE;AAC1C,EAAA,MAAMC,EAAE,GAAGF,YAAY,CAACG,UAAU,CAAC,OAAO,CAAE;AAC5C;EACA,MAAMC,WAAW,GAAG,IAAIC,WAAW,CAACT,KAAK,GAAGC,MAAM,GAAG,CAAC,CAAC;AAEvD,EAAA,MAAMS,WAAW,GAAG;AAClBF,IAAAA,WAAW,EAAEA;GAC6B;AAC5C,EAAA,MAAMG,iBAAiB,GAAG;AACxBC,IAAAA,gBAAgB,EAAEZ,KAAK;AACvBa,IAAAA,iBAAiB,EAAEZ,MAAM;AACzBC,IAAAA,YAAY,EAAEA;GACmB;AACnC,EAAA,IAAIY,SAAS;EAEbA,SAAS,GAAGC,eAAe,EAAE,CAACC,WAAW,CAACC,GAAG,EAAE;AAC/CC,EAAAA,kBAAkB,CAACC,SAAS,CAACC,UAAU,CAACC,IAAI,CAC1CX,WAAW,EACXJ,EAAE,EACFK,iBACF,CAAC;AACD,EAAA,MAAMW,aAAa,GAAGP,eAAe,EAAE,CAACC,WAAW,CAACC,GAAG,EAAE,GAAGH,SAAS;EAErEA,SAAS,GAAGC,eAAe,EAAE,CAACC,WAAW,CAACC,GAAG,EAAE;AAC/CC,EAAAA,kBAAkB,CAACC,SAAS,CAACI,sBAAsB,CAACF,IAAI,CACtDX,WAAW,EACXJ,EAAE,EACFK,iBACF,CAAC;AACD,EAAA,MAAMa,gBAAgB,GAAGT,eAAe,EAAE,CAACC,WAAW,CAACC,GAAG,EAAE,GAAGH,SAAS;EAExE,OAAOQ,aAAa,GAAGE,gBAAgB;AACzC;;;;"}