@flighthq/surface 0.3.0-next.906.07cea63 → 0.5.1-edge.1467.7e2fc7d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +17 -0
  3. package/dist/canvasSurface.d.ts +5 -0
  4. package/dist/canvasSurface.d.ts.map +1 -0
  5. package/dist/canvasSurface.js +24 -0
  6. package/dist/canvasSurface.js.map +1 -0
  7. package/dist/contract.d.ts +4 -40
  8. package/dist/contract.d.ts.map +1 -1
  9. package/dist/contract.js +4 -40
  10. package/dist/contract.js.map +1 -1
  11. package/dist/glSurface.d.ts +5 -0
  12. package/dist/glSurface.d.ts.map +1 -0
  13. package/dist/glSurface.js +29 -0
  14. package/dist/glSurface.js.map +1 -0
  15. package/dist/index.d.ts +4 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +4 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/surface.d.ts +4 -15
  20. package/dist/surface.d.ts.map +1 -1
  21. package/dist/surface.js +18 -82
  22. package/dist/surface.js.map +1 -1
  23. package/dist/surfaceDisplay.d.ts +4 -0
  24. package/dist/surfaceDisplay.d.ts.map +1 -0
  25. package/dist/surfaceDisplay.js +11 -0
  26. package/dist/surfaceDisplay.js.map +1 -0
  27. package/dist/wgpuSurface.d.ts +5 -0
  28. package/dist/wgpuSurface.d.ts.map +1 -0
  29. package/dist/wgpuSurface.js +30 -0
  30. package/dist/wgpuSurface.js.map +1 -0
  31. package/package.json +6 -5
  32. package/src/canvasSurface.test.ts +68 -0
  33. package/src/glSurface.test.ts +99 -0
  34. package/src/surface.test.ts +32 -63
  35. package/src/surfaceDisplay.test.ts +45 -0
  36. package/src/wgpuSurface.test.ts +74 -0
  37. package/dist/surfaceAffine.d.ts +0 -27
  38. package/dist/surfaceAffine.d.ts.map +0 -1
  39. package/dist/surfaceAffine.js +0 -159
  40. package/dist/surfaceAffine.js.map +0 -1
  41. package/dist/surfaceAlpha.d.ts +0 -27
  42. package/dist/surfaceAlpha.d.ts.map +0 -1
  43. package/dist/surfaceAlpha.js +0 -83
  44. package/dist/surfaceAlpha.js.map +0 -1
  45. package/dist/surfaceBevel.d.ts +0 -24
  46. package/dist/surfaceBevel.d.ts.map +0 -1
  47. package/dist/surfaceBevel.js +0 -102
  48. package/dist/surfaceBevel.js.map +0 -1
  49. package/dist/surfaceBlur.d.ts +0 -57
  50. package/dist/surfaceBlur.d.ts.map +0 -1
  51. package/dist/surfaceBlur.js +0 -263
  52. package/dist/surfaceBlur.js.map +0 -1
  53. package/dist/surfaceChannel.d.ts +0 -24
  54. package/dist/surfaceChannel.d.ts.map +0 -1
  55. package/dist/surfaceChannel.js +0 -127
  56. package/dist/surfaceChannel.js.map +0 -1
  57. package/dist/surfaceColorMatrix.d.ts +0 -57
  58. package/dist/surfaceColorMatrix.d.ts.map +0 -1
  59. package/dist/surfaceColorMatrix.js +0 -127
  60. package/dist/surfaceColorMatrix.js.map +0 -1
  61. package/dist/surfaceCompare.d.ts +0 -18
  62. package/dist/surfaceCompare.d.ts.map +0 -1
  63. package/dist/surfaceCompare.js +0 -64
  64. package/dist/surfaceCompare.js.map +0 -1
  65. package/dist/surfaceComposite.d.ts +0 -54
  66. package/dist/surfaceComposite.d.ts.map +0 -1
  67. package/dist/surfaceComposite.js +0 -262
  68. package/dist/surfaceComposite.js.map +0 -1
  69. package/dist/surfaceConvolution.d.ts +0 -17
  70. package/dist/surfaceConvolution.d.ts.map +0 -1
  71. package/dist/surfaceConvolution.js +0 -103
  72. package/dist/surfaceConvolution.js.map +0 -1
  73. package/dist/surfaceCopy.d.ts +0 -23
  74. package/dist/surfaceCopy.d.ts.map +0 -1
  75. package/dist/surfaceCopy.js +0 -78
  76. package/dist/surfaceCopy.js.map +0 -1
  77. package/dist/surfaceCoverage.d.ts +0 -11
  78. package/dist/surfaceCoverage.d.ts.map +0 -1
  79. package/dist/surfaceCoverage.js +0 -29
  80. package/dist/surfaceCoverage.js.map +0 -1
  81. package/dist/surfaceCrop.d.ts +0 -33
  82. package/dist/surfaceCrop.d.ts.map +0 -1
  83. package/dist/surfaceCrop.js +0 -177
  84. package/dist/surfaceCrop.js.map +0 -1
  85. package/dist/surfaceDisplacement.d.ts +0 -22
  86. package/dist/surfaceDisplacement.d.ts.map +0 -1
  87. package/dist/surfaceDisplacement.js +0 -131
  88. package/dist/surfaceDisplacement.js.map +0 -1
  89. package/dist/surfaceDissolve.d.ts +0 -21
  90. package/dist/surfaceDissolve.d.ts.map +0 -1
  91. package/dist/surfaceDissolve.js +0 -97
  92. package/dist/surfaceDissolve.js.map +0 -1
  93. package/dist/surfaceDraw.d.ts +0 -8
  94. package/dist/surfaceDraw.d.ts.map +0 -1
  95. package/dist/surfaceDraw.js +0 -14
  96. package/dist/surfaceDraw.js.map +0 -1
  97. package/dist/surfaceEncode.d.ts +0 -3
  98. package/dist/surfaceEncode.d.ts.map +0 -1
  99. package/dist/surfaceEncode.js +0 -18
  100. package/dist/surfaceEncode.js.map +0 -1
  101. package/dist/surfaceFill.d.ts +0 -12
  102. package/dist/surfaceFill.d.ts.map +0 -1
  103. package/dist/surfaceFill.js +0 -85
  104. package/dist/surfaceFill.js.map +0 -1
  105. package/dist/surfaceFingerprint.d.ts +0 -26
  106. package/dist/surfaceFingerprint.d.ts.map +0 -1
  107. package/dist/surfaceFingerprint.js +0 -99
  108. package/dist/surfaceFingerprint.js.map +0 -1
  109. package/dist/surfaceFlip.d.ts +0 -16
  110. package/dist/surfaceFlip.d.ts.map +0 -1
  111. package/dist/surfaceFlip.js +0 -98
  112. package/dist/surfaceFlip.js.map +0 -1
  113. package/dist/surfaceFormat.d.ts +0 -26
  114. package/dist/surfaceFormat.d.ts.map +0 -1
  115. package/dist/surfaceFormat.js +0 -80
  116. package/dist/surfaceFormat.js.map +0 -1
  117. package/dist/surfaceFrom.d.ts +0 -14
  118. package/dist/surfaceFrom.d.ts.map +0 -1
  119. package/dist/surfaceFrom.js +0 -91
  120. package/dist/surfaceFrom.js.map +0 -1
  121. package/dist/surfaceGradient.d.ts +0 -36
  122. package/dist/surfaceGradient.d.ts.map +0 -1
  123. package/dist/surfaceGradient.js +0 -176
  124. package/dist/surfaceGradient.js.map +0 -1
  125. package/dist/surfaceGradientFill.d.ts +0 -32
  126. package/dist/surfaceGradientFill.d.ts.map +0 -1
  127. package/dist/surfaceGradientFill.js +0 -120
  128. package/dist/surfaceGradientFill.js.map +0 -1
  129. package/dist/surfaceHistogram.d.ts +0 -20
  130. package/dist/surfaceHistogram.d.ts.map +0 -1
  131. package/dist/surfaceHistogram.js +0 -61
  132. package/dist/surfaceHistogram.js.map +0 -1
  133. package/dist/surfaceImageChannel.d.ts +0 -2
  134. package/dist/surfaceImageChannel.d.ts.map +0 -1
  135. package/dist/surfaceImageChannel.js +0 -2
  136. package/dist/surfaceImageChannel.js.map +0 -1
  137. package/dist/surfaceMedian.d.ts +0 -14
  138. package/dist/surfaceMedian.d.ts.map +0 -1
  139. package/dist/surfaceMedian.js +0 -77
  140. package/dist/surfaceMedian.js.map +0 -1
  141. package/dist/surfaceMorphological.d.ts +0 -29
  142. package/dist/surfaceMorphological.d.ts.map +0 -1
  143. package/dist/surfaceMorphological.js +0 -81
  144. package/dist/surfaceMorphological.js.map +0 -1
  145. package/dist/surfaceNoise.d.ts +0 -48
  146. package/dist/surfaceNoise.d.ts.map +0 -1
  147. package/dist/surfaceNoise.js +0 -245
  148. package/dist/surfaceNoise.js.map +0 -1
  149. package/dist/surfacePaletteMap.d.ts +0 -17
  150. package/dist/surfacePaletteMap.d.ts.map +0 -1
  151. package/dist/surfacePaletteMap.js +0 -45
  152. package/dist/surfacePaletteMap.js.map +0 -1
  153. package/dist/surfacePixel.d.ts +0 -9
  154. package/dist/surfacePixel.d.ts.map +0 -1
  155. package/dist/surfacePixel.js +0 -36
  156. package/dist/surfacePixel.js.map +0 -1
  157. package/dist/surfacePixelate.d.ts +0 -13
  158. package/dist/surfacePixelate.d.ts.map +0 -1
  159. package/dist/surfacePixelate.js +0 -61
  160. package/dist/surfacePixelate.js.map +0 -1
  161. package/dist/surfaceQuery.d.ts +0 -13
  162. package/dist/surfaceQuery.d.ts.map +0 -1
  163. package/dist/surfaceQuery.js +0 -46
  164. package/dist/surfaceQuery.js.map +0 -1
  165. package/dist/surfaceRegion.d.ts +0 -20
  166. package/dist/surfaceRegion.d.ts.map +0 -1
  167. package/dist/surfaceRegion.js +0 -28
  168. package/dist/surfaceRegion.js.map +0 -1
  169. package/dist/surfaceResize.d.ts +0 -17
  170. package/dist/surfaceResize.d.ts.map +0 -1
  171. package/dist/surfaceResize.js +0 -191
  172. package/dist/surfaceResize.js.map +0 -1
  173. package/dist/surfaceRotate.d.ts +0 -32
  174. package/dist/surfaceRotate.d.ts.map +0 -1
  175. package/dist/surfaceRotate.js +0 -143
  176. package/dist/surfaceRotate.js.map +0 -1
  177. package/dist/surfaceShadow.d.ts +0 -72
  178. package/dist/surfaceShadow.d.ts.map +0 -1
  179. package/dist/surfaceShadow.js +0 -175
  180. package/dist/surfaceShadow.js.map +0 -1
  181. package/dist/surfaceSharpen.d.ts +0 -16
  182. package/dist/surfaceSharpen.d.ts.map +0 -1
  183. package/dist/surfaceSharpen.js +0 -47
  184. package/dist/surfaceSharpen.js.map +0 -1
  185. package/dist/surfaceTone.d.ts +0 -28
  186. package/dist/surfaceTone.d.ts.map +0 -1
  187. package/dist/surfaceTone.js +0 -69
  188. package/dist/surfaceTone.js.map +0 -1
  189. package/dist/surfaceTransform.d.ts +0 -40
  190. package/dist/surfaceTransform.d.ts.map +0 -1
  191. package/dist/surfaceTransform.js +0 -163
  192. package/dist/surfaceTransform.js.map +0 -1
  193. package/dist/surfaceWarp.d.ts +0 -48
  194. package/dist/surfaceWarp.d.ts.map +0 -1
  195. package/dist/surfaceWarp.js +0 -284
  196. package/dist/surfaceWarp.js.map +0 -1
  197. package/src/surfaceAffine.test.ts +0 -98
  198. package/src/surfaceAlpha.test.ts +0 -113
  199. package/src/surfaceBevel.test.ts +0 -67
  200. package/src/surfaceBlur.test.ts +0 -240
  201. package/src/surfaceChannel.test.ts +0 -97
  202. package/src/surfaceColorMatrix.test.ts +0 -220
  203. package/src/surfaceCompare.test.ts +0 -92
  204. package/src/surfaceComposite.test.ts +0 -265
  205. package/src/surfaceConvolution.test.ts +0 -136
  206. package/src/surfaceCopy.test.ts +0 -54
  207. package/src/surfaceCoverage.test.ts +0 -39
  208. package/src/surfaceCrop.test.ts +0 -116
  209. package/src/surfaceDisplacement.test.ts +0 -142
  210. package/src/surfaceDissolve.test.ts +0 -99
  211. package/src/surfaceDraw.test.ts +0 -74
  212. package/src/surfaceEncode.test.ts +0 -18
  213. package/src/surfaceFill.test.ts +0 -89
  214. package/src/surfaceFingerprint.test.ts +0 -103
  215. package/src/surfaceFlip.test.ts +0 -59
  216. package/src/surfaceFormat.test.ts +0 -124
  217. package/src/surfaceFrom.test.ts +0 -62
  218. package/src/surfaceGradient.test.ts +0 -91
  219. package/src/surfaceGradientFill.test.ts +0 -107
  220. package/src/surfaceHistogram.test.ts +0 -70
  221. package/src/surfaceImageChannel.test.ts +0 -19
  222. package/src/surfaceMedian.test.ts +0 -45
  223. package/src/surfaceMorphological.test.ts +0 -75
  224. package/src/surfaceNoise.test.ts +0 -169
  225. package/src/surfacePaletteMap.test.ts +0 -55
  226. package/src/surfacePixel.test.ts +0 -117
  227. package/src/surfacePixelate.test.ts +0 -46
  228. package/src/surfaceQuery.test.ts +0 -48
  229. package/src/surfaceRegion.test.ts +0 -34
  230. package/src/surfaceResize.test.ts +0 -112
  231. package/src/surfaceRotate.test.ts +0 -119
  232. package/src/surfaceShadow.test.ts +0 -165
  233. package/src/surfaceSharpen.test.ts +0 -50
  234. package/src/surfaceTone.test.ts +0 -104
  235. package/src/surfaceTransform.test.ts +0 -134
  236. package/src/surfaceWarp.test.ts +0 -124
@@ -1,57 +0,0 @@
1
- import type { SurfaceRegion } from '@flighthq/types/contract';
2
- /**
3
- * Writes a brightness color matrix into `out` (length 20). Multiplies RGB by
4
- * `amount` (CSS `brightness()` semantics): 1 is identity, 0 is black, >1 brightens.
5
- */
6
- export declare function buildSurfaceBrightnessColorMatrix(out: number[], amount: number): void;
7
- /**
8
- * Writes a contrast color matrix into `out` (length 20). Scales RGB around the
9
- * midpoint (CSS `contrast()` semantics): 1 is identity, 0 is flat grey, >1 raises
10
- * contrast.
11
- */
12
- export declare function buildSurfaceContrastColorMatrix(out: number[], amount: number): void;
13
- /**
14
- * Writes a grayscale color matrix into `out` (length 20). Equivalent to
15
- * `buildSurfaceSaturationColorMatrix(out, 0)`; uses the W3C luma coefficients.
16
- */
17
- export declare function buildSurfaceGrayscaleColorMatrix(out: number[]): void;
18
- /**
19
- * Writes a hue-rotation color matrix into `out` (length 20). `degrees` rotates
20
- * hue around the luma axis (CSS `hue-rotate()` semantics, W3C coefficients).
21
- * 0° is identity; 180° inverts hue; values outside 0..360 wrap naturally.
22
- */
23
- export declare function buildSurfaceHueRotationColorMatrix(out: number[], degrees: number): void;
24
- /**
25
- * Writes an invert color matrix into `out` (length 20). Inverts RGB
26
- * (`255 - channel`); alpha is preserved.
27
- */
28
- export declare function buildSurfaceInvertColorMatrix(out: number[]): void;
29
- /**
30
- * Writes a saturation color matrix into `out` (length 20). `amount` is 1 for
31
- * identity, 0 for grayscale, >1 for oversaturated (CSS `saturate()` semantics,
32
- * W3C luma coefficients).
33
- */
34
- export declare function buildSurfaceSaturationColorMatrix(out: number[], amount: number): void;
35
- /**
36
- * Writes a sepia color matrix into `out` (length 20), matching CSS `sepia(1)`.
37
- */
38
- export declare function buildSurfaceSepiaColorMatrix(out: number[]): void;
39
- /**
40
- * Applies a 4×5 color matrix to `source` and writes into `out`.
41
- * `out` must be at least `source.width * source.height * 4` bytes.
42
- *
43
- * Safe to pass `source.surface.data` as `out` when the region covers the
44
- * full surface — each pixel's input channels are read before any channel
45
- * of that pixel is written.
46
- */
47
- export declare function colorMatrixSurface(out: Uint8ClampedArray, source: Readonly<SurfaceRegion>, matrix: ReadonlyArray<number>): void;
48
- /**
49
- * Composes two 4×5 color matrices into `out` (length 20): the result applies
50
- * `first`, then `second`. `out` must not alias `first` or `second`.
51
- */
52
- export declare function concatSurfaceColorMatrix(out: number[], first: ReadonlyArray<number>, second: ReadonlyArray<number>): void;
53
- /**
54
- * Writes the identity color matrix into `out` (length 20).
55
- */
56
- export declare function setSurfaceColorMatrixIdentity(out: number[]): void;
57
- //# sourceMappingURL=surfaceColorMatrix.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"surfaceColorMatrix.d.ts","sourceRoot":"","sources":["../src/surfaceColorMatrix.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAK9D;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAErF;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGnF;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA2BvF;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAEjE;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAMrF;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAEhE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAC5B,IAAI,CAqBN;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EAAE,EACb,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,EAC5B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAC5B,IAAI,CAUN;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAEjE"}
@@ -1,127 +0,0 @@
1
- // 4×5 color matrices are row-major: 4 rows (R, G, B, A output), each with 5
2
- // columns (R, G, B, A multipliers + a constant offset in 0..255 units).
3
- /**
4
- * Writes a brightness color matrix into `out` (length 20). Multiplies RGB by
5
- * `amount` (CSS `brightness()` semantics): 1 is identity, 0 is black, >1 brightens.
6
- */
7
- export function buildSurfaceBrightnessColorMatrix(out, amount) {
8
- setColorMatrix(out, amount, 0, 0, 0, 0, 0, amount, 0, 0, 0, 0, 0, amount, 0, 0, 0, 0, 0, 1, 0);
9
- }
10
- /**
11
- * Writes a contrast color matrix into `out` (length 20). Scales RGB around the
12
- * midpoint (CSS `contrast()` semantics): 1 is identity, 0 is flat grey, >1 raises
13
- * contrast.
14
- */
15
- export function buildSurfaceContrastColorMatrix(out, amount) {
16
- const t = 127.5 * (1 - amount);
17
- setColorMatrix(out, amount, 0, 0, 0, t, 0, amount, 0, 0, t, 0, 0, amount, 0, t, 0, 0, 0, 1, 0);
18
- }
19
- /**
20
- * Writes a grayscale color matrix into `out` (length 20). Equivalent to
21
- * `buildSurfaceSaturationColorMatrix(out, 0)`; uses the W3C luma coefficients.
22
- */
23
- export function buildSurfaceGrayscaleColorMatrix(out) {
24
- buildSurfaceSaturationColorMatrix(out, 0);
25
- }
26
- /**
27
- * Writes a hue-rotation color matrix into `out` (length 20). `degrees` rotates
28
- * hue around the luma axis (CSS `hue-rotate()` semantics, W3C coefficients).
29
- * 0° is identity; 180° inverts hue; values outside 0..360 wrap naturally.
30
- */
31
- export function buildSurfaceHueRotationColorMatrix(out, degrees) {
32
- const radians = (degrees * Math.PI) / 180;
33
- const c = Math.cos(radians);
34
- const s = Math.sin(radians);
35
- setColorMatrix(out, 0.213 + c * 0.787 - s * 0.213, 0.715 - c * 0.715 - s * 0.715, 0.072 - c * 0.072 + s * 0.928, 0, 0, 0.213 - c * 0.213 + s * 0.143, 0.715 + c * 0.285 + s * 0.14, 0.072 - c * 0.072 - s * 0.283, 0, 0, 0.213 - c * 0.213 - s * 0.787, 0.715 - c * 0.715 + s * 0.715, 0.072 + c * 0.928 + s * 0.072, 0, 0, 0, 0, 0, 1, 0);
36
- }
37
- /**
38
- * Writes an invert color matrix into `out` (length 20). Inverts RGB
39
- * (`255 - channel`); alpha is preserved.
40
- */
41
- export function buildSurfaceInvertColorMatrix(out) {
42
- setColorMatrix(out, -1, 0, 0, 0, 255, 0, -1, 0, 0, 255, 0, 0, -1, 0, 255, 0, 0, 0, 1, 0);
43
- }
44
- /**
45
- * Writes a saturation color matrix into `out` (length 20). `amount` is 1 for
46
- * identity, 0 for grayscale, >1 for oversaturated (CSS `saturate()` semantics,
47
- * W3C luma coefficients).
48
- */
49
- export function buildSurfaceSaturationColorMatrix(out, amount) {
50
- const inv = 1 - amount;
51
- const r = LUMA_R * inv;
52
- const g = LUMA_G * inv;
53
- const b = LUMA_B * inv;
54
- setColorMatrix(out, r + amount, g, b, 0, 0, r, g + amount, b, 0, 0, r, g, b + amount, 0, 0, 0, 0, 0, 1, 0);
55
- }
56
- /**
57
- * Writes a sepia color matrix into `out` (length 20), matching CSS `sepia(1)`.
58
- */
59
- export function buildSurfaceSepiaColorMatrix(out) {
60
- setColorMatrix(out, 0.393, 0.769, 0.189, 0, 0, 0.349, 0.686, 0.168, 0, 0, 0.272, 0.534, 0.131, 0, 0, 0, 0, 0, 1, 0);
61
- }
62
- /**
63
- * Applies a 4×5 color matrix to `source` and writes into `out`.
64
- * `out` must be at least `source.width * source.height * 4` bytes.
65
- *
66
- * Safe to pass `source.surface.data` as `out` when the region covers the
67
- * full surface — each pixel's input channels are read before any channel
68
- * of that pixel is written.
69
- */
70
- export function colorMatrixSurface(out, source, matrix) {
71
- if (matrix.length < 20)
72
- throw new Error('Color matrix filter requires 20 values');
73
- for (let py = 0; py < source.height; py++) {
74
- const sourceY = source.y + py;
75
- if (sourceY < 0 || sourceY >= source.surface.height)
76
- continue;
77
- for (let px = 0; px < source.width; px++) {
78
- const sourceX = source.x + px;
79
- if (sourceX < 0 || sourceX >= source.surface.width)
80
- continue;
81
- const si = (sourceY * source.surface.width + sourceX) * 4;
82
- const di = (py * source.width + px) * 4;
83
- const r = source.surface.data[si];
84
- const g = source.surface.data[si + 1];
85
- const b = source.surface.data[si + 2];
86
- const a = source.surface.data[si + 3];
87
- out[di] = clampByte(r * matrix[0] + g * matrix[1] + b * matrix[2] + a * matrix[3] + matrix[4]);
88
- out[di + 1] = clampByte(r * matrix[5] + g * matrix[6] + b * matrix[7] + a * matrix[8] + matrix[9]);
89
- out[di + 2] = clampByte(r * matrix[10] + g * matrix[11] + b * matrix[12] + a * matrix[13] + matrix[14]);
90
- out[di + 3] = clampByte(r * matrix[15] + g * matrix[16] + b * matrix[17] + a * matrix[18] + matrix[19]);
91
- }
92
- }
93
- }
94
- /**
95
- * Composes two 4×5 color matrices into `out` (length 20): the result applies
96
- * `first`, then `second`. `out` must not alias `first` or `second`.
97
- */
98
- export function concatSurfaceColorMatrix(out, first, second) {
99
- for (let row = 0; row < 4; row++) {
100
- for (let col = 0; col < 5; col++) {
101
- let sum = col === 4 ? second[row * 5 + 4] : 0;
102
- for (let k = 0; k < 4; k++) {
103
- sum += second[row * 5 + k] * (col === 4 ? first[k * 5 + 4] : first[k * 5 + col]);
104
- }
105
- out[row * 5 + col] = sum;
106
- }
107
- }
108
- }
109
- /**
110
- * Writes the identity color matrix into `out` (length 20).
111
- */
112
- export function setSurfaceColorMatrixIdentity(out) {
113
- setColorMatrix(out, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0);
114
- }
115
- // W3C luma coefficients (matching CSS saturate/grayscale), so the CPU result
116
- // agrees with the eventual CSS filter backend.
117
- const LUMA_R = 0.213;
118
- const LUMA_G = 0.715;
119
- const LUMA_B = 0.072;
120
- function clampByte(value) {
121
- return Math.max(0, Math.min(255, Math.round(value)));
122
- }
123
- function setColorMatrix(out, ...values) {
124
- for (let i = 0; i < 20; i++)
125
- out[i] = values[i];
126
- }
127
- //# sourceMappingURL=surfaceColorMatrix.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"surfaceColorMatrix.js","sourceRoot":"","sources":["../src/surfaceColorMatrix.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import type { Surface, SurfaceMismatch } from '@flighthq/types/contract';
2
- /**
3
- * Compares two surfaces pixel by pixel. Returns `null` if they are identical,
4
- * or a new Surface showing per-channel absolute differences (with alpha set to
5
- * 255 wherever any channel differs). Throws if the surfaces have different
6
- * dimensions — comparing incompatible surfaces is a programmer error.
7
- */
8
- export declare function compareSurface(source: Readonly<Surface>, other: Readonly<Surface>): Surface | null;
9
- /**
10
- * Compares two equally sized surfaces with a per-channel tolerance and returns summary metrics rather
11
- * than a diff image. A pixel is "mismatched" when its largest RGBA channel difference exceeds
12
- * `channelTolerance` (0..255). Use a small tolerance plus a `fraction` threshold to assert that two
13
- * backends rendered the same scene (cross-backend differential) or that a render still matches a prior
14
- * one, while ignoring antialiasing noise. Throws if the surfaces differ in size — comparing
15
- * incompatible surfaces is a programmer error (mirrors compareSurface).
16
- */
17
- export declare function getSurfaceMismatch(source: Readonly<Surface>, other: Readonly<Surface>, channelTolerance?: number): SurfaceMismatch;
18
- //# sourceMappingURL=surfaceCompare.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"surfaceCompare.d.ts","sourceRoot":"","sources":["../src/surfaceCompare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAIzE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI,CAyBlG;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,EACzB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EACxB,gBAAgB,GAAE,MAAU,GAC3B,eAAe,CA6BjB"}
@@ -1,64 +0,0 @@
1
- import { createSurface } from './surface';
2
- /**
3
- * Compares two surfaces pixel by pixel. Returns `null` if they are identical,
4
- * or a new Surface showing per-channel absolute differences (with alpha set to
5
- * 255 wherever any channel differs). Throws if the surfaces have different
6
- * dimensions — comparing incompatible surfaces is a programmer error.
7
- */
8
- export function compareSurface(source, other) {
9
- if (source.width !== other.width || source.height !== other.height) {
10
- throw new Error(`compareSurface: surface dimensions do not match (${source.width}×${source.height} vs ${other.width}×${other.height})`);
11
- }
12
- const result = createSurface(source.width, source.height);
13
- let hasDiff = false;
14
- for (let i = 0; i < source.data.length; i += 4) {
15
- const dr = Math.abs(source.data[i] - other.data[i]);
16
- const dg = Math.abs(source.data[i + 1] - other.data[i + 1]);
17
- const db = Math.abs(source.data[i + 2] - other.data[i + 2]);
18
- const da = Math.abs(source.data[i + 3] - other.data[i + 3]);
19
- if (dr !== 0 || dg !== 0 || db !== 0 || da !== 0) {
20
- result.data[i] = dr;
21
- result.data[i + 1] = dg;
22
- result.data[i + 2] = db;
23
- result.data[i + 3] = 255;
24
- hasDiff = true;
25
- }
26
- }
27
- return hasDiff ? result : null;
28
- }
29
- /**
30
- * Compares two equally sized surfaces with a per-channel tolerance and returns summary metrics rather
31
- * than a diff image. A pixel is "mismatched" when its largest RGBA channel difference exceeds
32
- * `channelTolerance` (0..255). Use a small tolerance plus a `fraction` threshold to assert that two
33
- * backends rendered the same scene (cross-backend differential) or that a render still matches a prior
34
- * one, while ignoring antialiasing noise. Throws if the surfaces differ in size — comparing
35
- * incompatible surfaces is a programmer error (mirrors compareSurface).
36
- */
37
- export function getSurfaceMismatch(source, other, channelTolerance = 0) {
38
- if (source.width !== other.width || source.height !== other.height) {
39
- throw new Error(`getSurfaceMismatch: surface dimensions do not match (${source.width}×${source.height} vs ${other.width}×${other.height})`);
40
- }
41
- const a = source.data;
42
- const b = other.data;
43
- const totalPixels = source.width * source.height;
44
- let mismatchedPixels = 0;
45
- let maxChannelDelta = 0;
46
- for (let i = 0; i < a.length; i += 4) {
47
- const dr = Math.abs(a[i] - b[i]);
48
- const dg = Math.abs(a[i + 1] - b[i + 1]);
49
- const db = Math.abs(a[i + 2] - b[i + 2]);
50
- const da = Math.abs(a[i + 3] - b[i + 3]);
51
- const pixelDelta = Math.max(dr, dg, db, da);
52
- if (pixelDelta > maxChannelDelta)
53
- maxChannelDelta = pixelDelta;
54
- if (pixelDelta > channelTolerance)
55
- mismatchedPixels++;
56
- }
57
- return {
58
- mismatchedPixels,
59
- totalPixels,
60
- fraction: totalPixels === 0 ? 0 : mismatchedPixels / totalPixels,
61
- maxChannelDelta,
62
- };
63
- }
64
- //# sourceMappingURL=surfaceCompare.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"surfaceCompare.js","sourceRoot":"","sources":["../src/surfaceCompare.ts"],"names":[],"mappings":"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"}
@@ -1,54 +0,0 @@
1
- import type { SurfaceRegion } from '@flighthq/types/contract';
2
- import { SurfaceCompositeMode } from '@flighthq/types/contract';
3
- /**
4
- * Alpha-composites `pixels` over `dest`. `pixels` must be at least
5
- * `dest.width * dest.height * 4` bytes in row-major RGBA order.
6
- *
7
- * `mode` is a SurfaceCompositeMode — surface's single vocabulary spanning both the color-blend functions
8
- * (Normal (default), Multiply, Screen, Add, Subtract, Darken, Lighten, Difference, Exclusion, Overlay,
9
- * HardLight, SoftLight, ColorDodge, ColorBurn, Invert) and the Porter-Duff coverage operators (SourceOver,
10
- * DestinationOut = erase, DestinationIn = alpha mask, Copy, Clear, Xor, and the atop/in/out set). A
11
- * color-blend mode composites source-over; a coverage operator applies its factors with a Normal blend. An
12
- * unknown mode composites source-over.
13
- */
14
- export declare function compositeSurfacePixels(dest: Readonly<SurfaceRegion>, pixels: Readonly<Uint8ClampedArray>, mode?: SurfaceCompositeMode): void;
15
- /**
16
- * Alpha-composites `source` over `dest`. See `compositeSurfacePixels` for the
17
- * `mode` semantics.
18
- */
19
- export declare function compositeSurfaceRegion(dest: Readonly<SurfaceRegion>, source: Readonly<SurfaceRegion>, mode?: SurfaceCompositeMode): void;
20
- /**
21
- * Copies `source` into `out` in row-major, tightly-packed RGBA order
22
- * (stride = source.width). `out` must be at least
23
- * `source.width * source.height * 4` bytes.
24
- *
25
- * Safe to pass `source.surface.data` as `out` when the region covers the
26
- * full surface (x=0, y=0, width=source.surface.width,
27
- * height=source.surface.height).
28
- */
29
- export declare function extractSurfacePixels(out: Uint8ClampedArray, source: Readonly<SurfaceRegion>): void;
30
- /**
31
- * Copies `source` into `out` as one packed `0xRRGGBBAA` color per pixel
32
- * (`0xRRGGBBAA` packed colors, the same packing `getSurfacePixel` returns), in row-major order with
33
- * stride = source.width. `out` must hold at least
34
- * `source.width * source.height` entries.
35
- *
36
- * This is the bulk, color-per-element counterpart to the byte-per-channel
37
- * `extractSurfacePixels`: use it when you want to read or compare whole
38
- * regions of colors without reassembling channel bytes.
39
- */
40
- export declare function extractSurfacePixels32(out: Uint32Array, source: Readonly<SurfaceRegion>): void;
41
- /**
42
- * Writes `pixels` into `dest`, overwriting existing content.
43
- * `pixels` must be at least `dest.width * dest.height * 4` bytes in
44
- * row-major RGBA order.
45
- */
46
- export declare function writeSurfacePixels(dest: Readonly<SurfaceRegion>, pixels: Readonly<Uint8ClampedArray>): void;
47
- /**
48
- * Writes `pixels` into `dest`, overwriting existing content. Each entry is a
49
- * packed `0xRRGGBBAA` color (the form `setSurfacePixel` takes), read in
50
- * row-major order. `pixels` must hold at least `dest.width * dest.height`
51
- * entries. This is the color-per-element counterpart to `writeSurfacePixels`.
52
- */
53
- export declare function writeSurfacePixels32(dest: Readonly<SurfaceRegion>, pixels: Readonly<Uint32Array>): void;
54
- //# sourceMappingURL=surfaceComposite.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"surfaceComposite.d.ts","sourceRoot":"","sources":["../src/surfaceComposite.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC7B,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACnC,IAAI,GAAE,oBAAkD,GACvD,IAAI,CAoBN;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC7B,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,IAAI,GAAE,oBAAkD,GACvD,IAAI,CAwBN;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,IAAI,CAelG;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,IAAI,CAgB9F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAgB3G;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAgBvG"}
@@ -1,262 +0,0 @@
1
- import { invalidateImageResource } from '@flighthq/image/contract';
2
- import { SurfaceCompositeMode } from '@flighthq/types/contract';
3
- /**
4
- * Alpha-composites `pixels` over `dest`. `pixels` must be at least
5
- * `dest.width * dest.height * 4` bytes in row-major RGBA order.
6
- *
7
- * `mode` is a SurfaceCompositeMode — surface's single vocabulary spanning both the color-blend functions
8
- * (Normal (default), Multiply, Screen, Add, Subtract, Darken, Lighten, Difference, Exclusion, Overlay,
9
- * HardLight, SoftLight, ColorDodge, ColorBurn, Invert) and the Porter-Duff coverage operators (SourceOver,
10
- * DestinationOut = erase, DestinationIn = alpha mask, Copy, Clear, Xor, and the atop/in/out set). A
11
- * color-blend mode composites source-over; a coverage operator applies its factors with a Normal blend. An
12
- * unknown mode composites source-over.
13
- */
14
- export function compositeSurfacePixels(dest, pixels, mode = SurfaceCompositeMode.Normal) {
15
- for (let py = 0; py < dest.height; py++) {
16
- const y = dest.y + py;
17
- if (y < 0 || y >= dest.surface.height)
18
- continue;
19
- for (let px = 0; px < dest.width; px++) {
20
- const x = dest.x + px;
21
- if (x < 0 || x >= dest.surface.width)
22
- continue;
23
- const si = (py * dest.width + px) * 4;
24
- compositePixelInto(dest.surface.data, (y * dest.surface.width + x) * 4, pixels[si], pixels[si + 1], pixels[si + 2], pixels[si + 3], mode);
25
- }
26
- }
27
- invalidateImageResource(dest.surface);
28
- }
29
- /**
30
- * Alpha-composites `source` over `dest`. See `compositeSurfacePixels` for the
31
- * `mode` semantics.
32
- */
33
- export function compositeSurfaceRegion(dest, source, mode = SurfaceCompositeMode.Normal) {
34
- const sw = Math.min(dest.width, source.width);
35
- const sh = Math.min(dest.height, source.height);
36
- for (let py = 0; py < sh; py++) {
37
- const sourceY = source.y + py;
38
- const y = dest.y + py;
39
- if (sourceY < 0 || sourceY >= source.surface.height || y < 0 || y >= dest.surface.height)
40
- continue;
41
- for (let px = 0; px < sw; px++) {
42
- const sourceX = source.x + px;
43
- const x = dest.x + px;
44
- if (sourceX < 0 || sourceX >= source.surface.width || x < 0 || x >= dest.surface.width)
45
- continue;
46
- const si = (sourceY * source.surface.width + sourceX) * 4;
47
- compositePixelInto(dest.surface.data, (y * dest.surface.width + x) * 4, source.surface.data[si], source.surface.data[si + 1], source.surface.data[si + 2], source.surface.data[si + 3], mode);
48
- }
49
- }
50
- invalidateImageResource(dest.surface);
51
- }
52
- /**
53
- * Copies `source` into `out` in row-major, tightly-packed RGBA order
54
- * (stride = source.width). `out` must be at least
55
- * `source.width * source.height * 4` bytes.
56
- *
57
- * Safe to pass `source.surface.data` as `out` when the region covers the
58
- * full surface (x=0, y=0, width=source.surface.width,
59
- * height=source.surface.height).
60
- */
61
- export function extractSurfacePixels(out, source) {
62
- for (let py = 0; py < source.height; py++) {
63
- const sourceY = source.y + py;
64
- if (sourceY < 0 || sourceY >= source.surface.height)
65
- continue;
66
- for (let px = 0; px < source.width; px++) {
67
- const sourceX = source.x + px;
68
- if (sourceX < 0 || sourceX >= source.surface.width)
69
- continue;
70
- const si = (sourceY * source.surface.width + sourceX) * 4;
71
- const di = (py * source.width + px) * 4;
72
- out[di] = source.surface.data[si];
73
- out[di + 1] = source.surface.data[si + 1];
74
- out[di + 2] = source.surface.data[si + 2];
75
- out[di + 3] = source.surface.data[si + 3];
76
- }
77
- }
78
- }
79
- /**
80
- * Copies `source` into `out` as one packed `0xRRGGBBAA` color per pixel
81
- * (`0xRRGGBBAA` packed colors, the same packing `getSurfacePixel` returns), in row-major order with
82
- * stride = source.width. `out` must hold at least
83
- * `source.width * source.height` entries.
84
- *
85
- * This is the bulk, color-per-element counterpart to the byte-per-channel
86
- * `extractSurfacePixels`: use it when you want to read or compare whole
87
- * regions of colors without reassembling channel bytes.
88
- */
89
- export function extractSurfacePixels32(out, source) {
90
- for (let py = 0; py < source.height; py++) {
91
- const sourceY = source.y + py;
92
- if (sourceY < 0 || sourceY >= source.surface.height)
93
- continue;
94
- for (let px = 0; px < source.width; px++) {
95
- const sourceX = source.x + px;
96
- if (sourceX < 0 || sourceX >= source.surface.width)
97
- continue;
98
- const si = (sourceY * source.surface.width + sourceX) * 4;
99
- out[py * source.width + px] =
100
- ((source.surface.data[si] << 24) |
101
- (source.surface.data[si + 1] << 16) |
102
- (source.surface.data[si + 2] << 8) |
103
- source.surface.data[si + 3]) >>>
104
- 0;
105
- }
106
- }
107
- }
108
- /**
109
- * Writes `pixels` into `dest`, overwriting existing content.
110
- * `pixels` must be at least `dest.width * dest.height * 4` bytes in
111
- * row-major RGBA order.
112
- */
113
- export function writeSurfacePixels(dest, pixels) {
114
- for (let py = 0; py < dest.height; py++) {
115
- const y = dest.y + py;
116
- if (y < 0 || y >= dest.surface.height)
117
- continue;
118
- for (let px = 0; px < dest.width; px++) {
119
- const x = dest.x + px;
120
- if (x < 0 || x >= dest.surface.width)
121
- continue;
122
- const si = (py * dest.width + px) * 4;
123
- const di = (y * dest.surface.width + x) * 4;
124
- dest.surface.data[di] = pixels[si];
125
- dest.surface.data[di + 1] = pixels[si + 1];
126
- dest.surface.data[di + 2] = pixels[si + 2];
127
- dest.surface.data[di + 3] = pixels[si + 3];
128
- }
129
- }
130
- invalidateImageResource(dest.surface);
131
- }
132
- /**
133
- * Writes `pixels` into `dest`, overwriting existing content. Each entry is a
134
- * packed `0xRRGGBBAA` color (the form `setSurfacePixel` takes), read in
135
- * row-major order. `pixels` must hold at least `dest.width * dest.height`
136
- * entries. This is the color-per-element counterpart to `writeSurfacePixels`.
137
- */
138
- export function writeSurfacePixels32(dest, pixels) {
139
- for (let py = 0; py < dest.height; py++) {
140
- const y = dest.y + py;
141
- if (y < 0 || y >= dest.surface.height)
142
- continue;
143
- for (let px = 0; px < dest.width; px++) {
144
- const x = dest.x + px;
145
- if (x < 0 || x >= dest.surface.width)
146
- continue;
147
- const color = pixels[py * dest.width + px];
148
- const di = (y * dest.surface.width + x) * 4;
149
- dest.surface.data[di] = (color >>> 24) & 0xff;
150
- dest.surface.data[di + 1] = (color >> 16) & 0xff;
151
- dest.surface.data[di + 2] = (color >> 8) & 0xff;
152
- dest.surface.data[di + 3] = color & 0xff;
153
- }
154
- }
155
- invalidateImageResource(dest.surface);
156
- }
157
- // Premultiplied-free Porter-Duff coverage factors [Fa, Fb] for a SurfaceCompositeMode, applied to the
158
- // source and backdrop contributions respectively (out = Fa·αs·Cs' + Fb·αb·Cb over αo = Fa·αs + Fb·αb). The
159
- // color-blend modes and any unknown mode composite source-over ([1, 1−αs]); the coverage operators pick
160
- // their own factor pair. surface owns this Porter-Duff kernel (it does not depend on @flighthq/effects) so
161
- // it stays self-contained for the WASM port.
162
- function porterDuffFactors(mode, srcA, dstA) {
163
- switch (mode) {
164
- case SurfaceCompositeMode.DestinationOver:
165
- return [1 - dstA, 1];
166
- case SurfaceCompositeMode.SourceIn:
167
- return [dstA, 0];
168
- case SurfaceCompositeMode.DestinationIn:
169
- return [0, srcA];
170
- case SurfaceCompositeMode.SourceOut:
171
- return [1 - dstA, 0];
172
- case SurfaceCompositeMode.DestinationOut:
173
- return [0, 1 - srcA];
174
- case SurfaceCompositeMode.SourceAtop:
175
- return [dstA, 1 - srcA];
176
- case SurfaceCompositeMode.DestinationAtop:
177
- return [1 - dstA, srcA];
178
- case SurfaceCompositeMode.Xor:
179
- return [1 - dstA, 1 - srcA];
180
- case SurfaceCompositeMode.Copy:
181
- return [1, 0];
182
- case SurfaceCompositeMode.Clear:
183
- return [0, 0];
184
- default:
185
- return [1, 1 - srcA];
186
- }
187
- }
188
- // Separable per-channel color blend on 0..255 values. The coverage operators, Normal, and any unlisted
189
- // mode return the source channel unchanged, so the composite reduces to the operator's Porter-Duff combine
190
- // with no color mixing.
191
- function blendChannel(mode, cb, cs) {
192
- switch (mode) {
193
- case SurfaceCompositeMode.Multiply:
194
- return (cb * cs) / 255;
195
- case SurfaceCompositeMode.Screen:
196
- return cb + cs - (cb * cs) / 255;
197
- case SurfaceCompositeMode.Add:
198
- return Math.min(255, cb + cs);
199
- case SurfaceCompositeMode.Subtract:
200
- return Math.max(0, cb - cs);
201
- case SurfaceCompositeMode.Darken:
202
- return Math.min(cb, cs);
203
- case SurfaceCompositeMode.Lighten:
204
- return Math.max(cb, cs);
205
- case SurfaceCompositeMode.Difference:
206
- return Math.abs(cb - cs);
207
- case SurfaceCompositeMode.Exclusion:
208
- return cb + cs - (2 * cb * cs) / 255;
209
- case SurfaceCompositeMode.Overlay:
210
- return cb < 128 ? (2 * cb * cs) / 255 : 255 - (2 * (255 - cb) * (255 - cs)) / 255;
211
- case SurfaceCompositeMode.HardLight:
212
- return cs < 128 ? (2 * cb * cs) / 255 : 255 - (2 * (255 - cb) * (255 - cs)) / 255;
213
- case SurfaceCompositeMode.SoftLight:
214
- return softLightChannel(cb, cs);
215
- case SurfaceCompositeMode.ColorDodge:
216
- return cs >= 255 ? 255 : Math.min(255, (cb * 255) / (255 - cs));
217
- case SurfaceCompositeMode.ColorBurn:
218
- return cs <= 0 ? 0 : 255 - Math.min(255, ((255 - cb) * 255) / cs);
219
- case SurfaceCompositeMode.Invert:
220
- return 255 - cb;
221
- default:
222
- return cs;
223
- }
224
- }
225
- // W3C soft-light per channel on 0..255 (the Photoshop/CSS pegtop-free formula). `cb` = backdrop,
226
- // `cs` = source; both 0..255. The two-branch D(cb) form used by the spec, evaluated in normalized
227
- // 0..1 space then scaled back.
228
- function softLightChannel(cb, cs) {
229
- const b = cb / 255;
230
- const s = cs / 255;
231
- const d = b <= 0.25 ? ((16 * b - 12) * b + 4) * b : Math.sqrt(b);
232
- const out = s <= 0.5 ? b - (1 - 2 * s) * b * (1 - b) : b + (2 * s - 1) * (d - b);
233
- return out * 255;
234
- }
235
- function compositePixelInto(dest, di, r, g, b, a, mode) {
236
- const srcA = a / 255;
237
- const dstA = dest[di + 3] / 255;
238
- // W3C compositing: αo = Fa·αs + Fb·αb, Co = (Fa·αs·Cs' + Fb·αb·Cb) / αo, where Cs' is the blended source
239
- // color and (Fa, Fb) are the mode's Porter-Duff factors. Source-over + a blend function covers the color
240
- // modes; the coverage operators (Erase = DestinationOut, Alpha = DestinationIn, …) fall out of the same
241
- // formula with a Normal blend. Read backdrop channels before writing any of them.
242
- const [fa, fb] = porterDuffFactors(mode, srcA, dstA);
243
- const outA = fa * srcA + fb * dstA;
244
- if (outA <= 0) {
245
- dest[di] = 0;
246
- dest[di + 1] = 0;
247
- dest[di + 2] = 0;
248
- dest[di + 3] = 0;
249
- return;
250
- }
251
- const cbR = dest[di];
252
- const cbG = dest[di + 1];
253
- const cbB = dest[di + 2];
254
- const csR = (1 - dstA) * r + dstA * blendChannel(mode, cbR, r);
255
- const csG = (1 - dstA) * g + dstA * blendChannel(mode, cbG, g);
256
- const csB = (1 - dstA) * b + dstA * blendChannel(mode, cbB, b);
257
- dest[di] = Math.round((fa * srcA * csR + fb * dstA * cbR) / outA);
258
- dest[di + 1] = Math.round((fa * srcA * csG + fb * dstA * cbG) / outA);
259
- dest[di + 2] = Math.round((fa * srcA * csB + fb * dstA * cbB) / outA);
260
- dest[di + 3] = Math.round(outA * 255);
261
- }
262
- //# sourceMappingURL=surfaceComposite.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"surfaceComposite.js","sourceRoot":"","sources":["../src/surfaceComposite.ts"],"names":[],"mappings":"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"}