UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

1 lines 3.67 kB
{"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":";;;;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;EAC1E,MAAMC,YAAY,GAAGC,sBAAsB,CAAC;IAAEH,KAAK;AAAEC,IAAAA,MAAAA;AAAO,GAAC,CAAC,CAAA;AAC9D,EAAA,MAAMG,YAAY,GAAGC,mBAAmB,EAAE,CAAA;AAC1C,EAAA,MAAMC,EAAE,GAAGF,YAAY,CAACG,UAAU,CAAC,OAAO,CAAE,CAAA;AAC5C;EACA,MAAMC,WAAW,GAAG,IAAIC,WAAW,CAACT,KAAK,GAAGC,MAAM,GAAG,CAAC,CAAC,CAAA;AAEvD,EAAA,MAAMS,WAAW,GAAG;AAClBF,IAAAA,WAAW,EAAEA,WAAAA;GAC6B,CAAA;AAC5C,EAAA,MAAMG,iBAAiB,GAAG;AACxBC,IAAAA,gBAAgB,EAAEZ,KAAK;AACvBa,IAAAA,iBAAiB,EAAEZ,MAAM;AACzBC,IAAAA,YAAY,EAAEA,YAAAA;GACmB,CAAA;AACnC,EAAA,IAAIY,SAAS,CAAA;EAEbA,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;;;;"}