@pixerate/editor 0.243.0 → 0.244.0

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 (62) hide show
  1. package/dist/animation-editor/index.cjs +59 -59
  2. package/dist/animation-editor/index.js +3 -3
  3. package/dist/{brushstrokeRender-274HGNZR.js → brushstrokeRender-4542T5HP.js} +2 -2
  4. package/dist/{brushstrokeRender-C7RJZPMC.cjs → brushstrokeRender-QA5WVIDT.cjs} +5 -5
  5. package/dist/canvas/index.cjs +8 -8
  6. package/dist/canvas/index.js +1 -1
  7. package/dist/{chunk-6L3WWIDW.js → chunk-4EQY4TZJ.js} +1 -1
  8. package/dist/{chunk-5FZS7J7C.cjs → chunk-4T47Z4J3.cjs} +18 -2
  9. package/dist/{chunk-4ZHXLFXS.js → chunk-5RFENYO5.js} +1 -1
  10. package/dist/{chunk-SRXWDOUI.js → chunk-7YQNKSQ7.js} +1 -1
  11. package/dist/{chunk-OONFIFEU.cjs → chunk-BDIH4DYR.cjs} +23 -23
  12. package/dist/{chunk-KK2FWMA2.cjs → chunk-HZ547SGQ.cjs} +1 -1
  13. package/dist/{chunk-3WOZEBXZ.cjs → chunk-IZL5V5RK.cjs} +2 -2
  14. package/dist/{chunk-IXI5KATU.js → chunk-L5PB7EG3.js} +1 -1
  15. package/dist/{chunk-R2FVAKFH.cjs → chunk-M6JORA5Z.cjs} +86 -86
  16. package/dist/{chunk-H4Z72Z4Z.js → chunk-OSTKS3YN.js} +1 -1
  17. package/dist/{chunk-HLBTRSQJ.js → chunk-P3NIPIKS.js} +263 -63
  18. package/dist/{chunk-UV7OOZJQ.cjs → chunk-SD23XMVJ.cjs} +35 -35
  19. package/dist/{chunk-HQZHOPNE.js → chunk-TBJEMELS.js} +18 -2
  20. package/dist/{chunk-XFYLA3ZO.cjs → chunk-VMROIWLL.cjs} +290 -90
  21. package/dist/image-editor/index.cjs +785 -777
  22. package/dist/image-editor/index.js +13 -5
  23. package/dist/kernel-wasm-4KVONDAU.js +9 -0
  24. package/dist/kernel-wasm-TTYRBGAK.cjs +9 -0
  25. package/dist/paint/index.cjs +10 -2
  26. package/dist/paint/index.js +9 -1
  27. package/dist/paint/wet/film.d.cts +19 -1
  28. package/dist/paint/wet/film.d.ts +19 -1
  29. package/dist/paint/wet/gpu-kernels.d.cts +2 -2
  30. package/dist/paint/wet/gpu-kernels.d.ts +2 -2
  31. package/dist/paint/wet/kernel-wasm.d.cts +5 -5
  32. package/dist/paint/wet/kernel-wasm.d.ts +5 -5
  33. package/dist/paint/wet/kernel.d.cts +1 -1
  34. package/dist/paint/wet/kernel.d.ts +1 -1
  35. package/dist/paint/wet/medium.d.cts +3 -1
  36. package/dist/paint/wet/medium.d.ts +3 -1
  37. package/dist/paint/wet/model.d.cts +19 -4
  38. package/dist/paint/wet/model.d.ts +19 -4
  39. package/dist/paint/wet/world.d.cts +34 -8
  40. package/dist/paint/wet/world.d.ts +34 -8
  41. package/dist/paint-editor/backlight.d.cts +77 -0
  42. package/dist/paint-editor/backlight.d.ts +77 -0
  43. package/dist/paint-editor/controller.d.cts +11 -0
  44. package/dist/paint-editor/controller.d.ts +11 -0
  45. package/dist/paint-editor/index.cjs +685 -397
  46. package/dist/paint-editor/index.d.cts +1 -0
  47. package/dist/paint-editor/index.d.ts +1 -0
  48. package/dist/paint-editor/index.js +308 -20
  49. package/dist/paint-editor/paper.d.cts +7 -0
  50. package/dist/paint-editor/paper.d.ts +7 -0
  51. package/dist/paint-editor/wet.d.cts +9 -0
  52. package/dist/paint-editor/wet.d.ts +9 -0
  53. package/dist/vector/index.cjs +962 -962
  54. package/dist/vector/index.js +4 -4
  55. package/package.json +1 -1
  56. package/skills/pixerate-paint-editor/SKILL.md +3 -3
  57. package/skills/pixerate-paint-editor/references/light-paint.md +24 -7
  58. package/skills/pixerate-paint-watercolour/SKILL.md +10 -1
  59. package/skills/pixerate-paint-watercolour/evals/glowing-wash.json +22 -0
  60. package/skills/pixerate-paint-watercolour/evals/stained-glass.json +16 -0
  61. package/dist/kernel-wasm-6FPOLVUZ.cjs +0 -9
  62. package/dist/kernel-wasm-WIMMJUF2.js +0 -9
@@ -8,7 +8,7 @@ import {
8
8
  parseOpenTypeFont,
9
9
  removeAnchorsKeepingShape,
10
10
  traceField
11
- } from "../chunk-H4Z72Z4Z.js";
11
+ } from "../chunk-OSTKS3YN.js";
12
12
  import {
13
13
  ColorGmm,
14
14
  GAMMA,
@@ -410,7 +410,7 @@ import {
410
410
  writePsd,
411
411
  xyToTempTint,
412
412
  xyToUv
413
- } from "../chunk-SRXWDOUI.js";
413
+ } from "../chunk-7YQNKSQ7.js";
414
414
  import {
415
415
  parseCssColor
416
416
  } from "../chunk-3CI7FRMK.js";
@@ -586,6 +586,7 @@ import {
586
586
  FLAT,
587
587
  FREE_INTERVAL,
588
588
  HIDE,
589
+ MASS_CHANNELS,
589
590
  MAX_BATCH,
590
591
  MAX_TILT_ACCEL,
591
592
  MAX_WET_LANES,
@@ -599,10 +600,12 @@ import {
599
600
  PLANE,
600
601
  PLANE_BYTES,
601
602
  P_D0,
603
+ P_DL,
602
604
  P_EDGE,
603
605
  P_FX,
604
606
  P_FY,
605
607
  P_H,
608
+ P_L,
606
609
  P_P0,
607
610
  P_RHO,
608
611
  P_SW,
@@ -654,13 +657,14 @@ import {
654
657
  pointerPressure,
655
658
  pointerStrokeSample,
656
659
  pointerStrokeSamples,
660
+ shadeLightTile,
657
661
  shadeTile,
658
662
  srgbByteToLinear,
659
663
  stepSlotTs,
660
664
  wetGpuSupport,
661
665
  wetSimdSupported,
662
666
  wetSupport
663
- } from "../chunk-HLBTRSQJ.js";
667
+ } from "../chunk-P3NIPIKS.js";
664
668
  import {
665
669
  BUILTIN_PROFILES,
666
670
  CmsError,
@@ -729,8 +733,8 @@ import {
729
733
  warpMeshParamAt,
730
734
  warpMeshRows,
731
735
  warpPresetMesh
732
- } from "../chunk-6L3WWIDW.js";
733
- import "../chunk-HQZHOPNE.js";
736
+ } from "../chunk-4EQY4TZJ.js";
737
+ import "../chunk-TBJEMELS.js";
734
738
  import "../chunk-M6DNZNVY.js";
735
739
  import {
736
740
  bezierPathToSvg,
@@ -23095,6 +23099,7 @@ export {
23095
23099
  MARGIN_FIT_MIN_GUTTER,
23096
23100
  MASK_EDGE_THRESHOLDS,
23097
23101
  MASK_FILE_ACCEPT,
23102
+ MASS_CHANNELS,
23098
23103
  MAX_BATCH,
23099
23104
  MAX_BRUSH_SIZE,
23100
23105
  MAX_CANVAS_BACKING_SIDE,
@@ -23148,10 +23153,12 @@ export {
23148
23153
  PSD_BLEND_KEYS,
23149
23154
  PSD_FILE_ACCEPT,
23150
23155
  P_D0,
23156
+ P_DL,
23151
23157
  P_EDGE,
23152
23158
  P_FX,
23153
23159
  P_FY,
23154
23160
  P_H,
23161
+ P_L,
23155
23162
  P_P0,
23156
23163
  P_RHO,
23157
23164
  P_SW,
@@ -23957,6 +23964,7 @@ export {
23957
23964
  setSmartFilterMask,
23958
23965
  setSmartFiltersEnabled,
23959
23966
  setSmartPlacement,
23967
+ shadeLightTile,
23960
23968
  shadeTile,
23961
23969
  shapeAsPixelLayer,
23962
23970
  shapeFromAnnotation,
@@ -0,0 +1,9 @@
1
+ // src/paint/wet/kernel-wasm.ts
2
+ var WET_KERNEL_SOURCE_HASH = "ba31a8ff0de38d96";
3
+ var WET_KERNEL_SHARED = "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";
4
+ var WET_KERNEL_SINGLE = "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";
5
+ export {
6
+ WET_KERNEL_SHARED,
7
+ WET_KERNEL_SINGLE,
8
+ WET_KERNEL_SOURCE_HASH
9
+ };
@@ -0,0 +1,9 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/paint/wet/kernel-wasm.ts
2
+ var WET_KERNEL_SOURCE_HASH = "ba31a8ff0de38d96";
3
+ var WET_KERNEL_SHARED = "AGFzbQEAAAABFQNgAABgA39/fwF/YAd/f39/f39/AAISAQNlbnYGbWVtb3J5AgMBgIAEAwQDAAECBn8GewH9DAAAAAAAAAAAAAAAAAAAAAALewH9DAAAAAAAAAAAAAAAAAAAAAALewH9DAAAAAAAAAAAAAAAAAAAAAALewH9DAAAAAAAAAAAAAAAAAAAAAALewH9DAAAAAAAAAAAAAAAAAAAAAALewH9DAAAAAAAAAAAAAAAAAAAAAALBxgDBHN0ZXAAAQRoYWxvAAIGbWVtb3J5AgAIAQAKgkMDegD9DAAAAAAAAAAAAAAAAAAAAAAkAP0MAAAAAAAAAAAAAAAAAAAAACQB/QwAAAAAAAAAAAAAAAAAAAAAJAL9DAAAAAAAAAAAAAAAAAAAAAAkA/0MAAAAAAAAAAAAAAAAAAAAACQE/QwAAAAAAAAAAAAAAAAAAAAAJAUL1ToCFH8veyACKgIA/RMhGiACKgIE/RMhHCACKgII/RMhHyACKgIM/RMhICACKgIQ/RMhGyACKgIU/RMhISACKgIY/RMhIiACKgIc/RMhIyACKgIg/RMkBCACKgIk/RMkASACKgIo/RMkAyACKgIs/RMkAiACKgIw/RMhHSACKgI0/RMhGCACKgI4/RMhHiACKgI8/RMhJCACQUBrKgIA/RMhJSACKgJE/RMhJiACKgJI/RMhJyACKgJMQwAAAABcIQcgAioCUP0TIRkjBCEoIwEhKSMDISojAiErIABBASABa0Gw4rQCbGohCyAAQbDlugVqIQ0gAEHgxOkEaiECIABBwIXLBWohCCAAQdCl2wVqIQkgACABQbDitAJsaiIMQZChkgFqIQ4gDEGgwaIBaiEFIAxBsOGyAWohBiAMQcCBwwFqIQ8gDEHQodMBaiEAIAxBoMKkAmohCkEBIQEDQCABQYACTARAQQEhBANAIARBgAJMBEAgKSANIAFBggJsIARqQQJ0IhBq/QAEACIt/eYBIRcgKyAqIC395gH95AH9DAAAAAAAAAAAAAAAAAAAAAD9DAAAgD8AAIA/AACAPwAAgD8gDyAQav0ABAAiLCAo/eYB/eUB/ekBIi795gEhLyAOIBBq/QAEACIw/QxvEoM6bxKDOm8SgzpvEoM6/UMhMSAt/QwAAAAAAAAAAAAAAAAAAAAA/UMkBf0MAAAAAAAAAAAAAAAAAAAAACQAIAwgEGr9AAQAITIgDSAQQQRrIhFq/QAEACIz/QwAAAAAAAAAAAAAAAAAAAAA/UMhNP0MAAAAAAAAAAAAAAAAAAAAAP0MAAAAAAAAAAAAAAAAAAAAAP0MAACAPwAAgD8AAIA/AACAPyAPIBFq/QAEACME/eYB/eUB/ekBIjX9DAAAAAAAAAAAAAAAAAAAAAAgDiARav0ABAAiNv0MbxKDOm8SgzpvEoM6bxKDOv1DIjcgNP1P/VL95AEkAP0MAACAPwAAgD8AAIA/AACAP/0MAACAPwAAgD8AAIA/AACAPyAXIwEgM/3mAf3pASA0IwX9UCAxIDYgL/1D/U4gNyAwIwIjAyAz/eYB/eQBIDX95gH9Q/1O/VD9UP1SIjP95QEgDEGQoBBqIhIgEWr9AAQA/eYBIDMgDEGw4DBqIhEgEGr9AAQA/eYB/eQBITMgDSAQQYgIayITav0ABAAiNP0MAAAAAAAAAAAAAAAAAAAAAP1DITUjAP0MAAAAAAAAAAAAAAAAAAAAAP0MAACAPwAAgD8AAIA/AACAPyAPIBNq/QAEACME/eYB/eUB/ekBIjb9DAAAAAAAAAAAAAAAAAAAAAAgDiATav0ABAAiN/0MbxKDOm8SgzpvEoM6bxKDOv1DIjggNf1P/VL95AEkAP0MAACAPwAAgD8AAIA/AACAP/0MAACAPwAAgD8AAIA/AACAPyAXIwEgNP3mAf3pASA1IwX9UCAxIDcgL/1D/U4gOCAwIwIjAyA0/eYB/eQBIDb95gH9Q/1O/VD9UP1SIjT95QEgDEGgwCBqIhQgE2r9AAQA/eYBIDQgDEHAgMEAaiITIBBq/QAEAP3mAf3kASE0IA0gEEEEaiIVav0ABAAiNf0MAAAAAAAAAAAAAAAAAAAAAP1DITYjAP0MAAAAAAAAAAAAAAAAAAAAAP0MAACAPwAAgD8AAIA/AACAPyAPIBVq/QAEACME/eYB/eUB/ekBIjf9DAAAAAAAAAAAAAAAAAAAAAAgDiAVav0ABAAiOP0MbxKDOm8SgzpvEoM6bxKDOv1DIjkgNv1P/VL95AEkAP0MAACAPwAAgD8AAIA/AACAP/0MAACAPwAAgD8AAIA/AACAPyAXIwEgNf3mAf3pASA2IwX9UCAxIDggL/1D/U4gOSAwIwIjAyA1/eYB/eQBIDf95gH9Q/1O/VD9UP1SIjX95QEgESAVav0ABAD95gEgNSAQIBJq/QAEAP3mAf3kASE1IA0gEEGICGoiEWr9AAQAIjb9DAAAAAAAAAAAAAAAAAAAAAD9QyE3IwD9DAAAAAAAAAAAAAAAAAAAAAD9DAAAgD8AAIA/AACAPwAAgD8gDyARav0ABAAjBP3mAf3lAf3pASI4/QwAAAAAAAAAAAAAAAAAAAAAIA4gEWr9AAQAIjn9DG8SgzpvEoM6bxKDOm8Sgzr9QyI6IDf9T/1S/eQBJAD9DAAAgD8AAIA/AACAPwAAgD/9DAAAgD8AAIA/AACAPwAAgD8gFyMBIDb95gH96QEgNyMF/VAgMSA5IC/9Q/1OIDogMCMCIwMgNv3mAf3kASA4/eYB/UP9Tv1Q/VD9UiI2/eUBIBEgE2r9AAQA/eYBIDYgECAUav0ABAD95gH95AEhNiANIBBBjAhrIhFq/QAEACI3/QwAAAAAAAAAAAAAAAAAAAAA/UMhOCMA/QwAAAAAAAAAAAAAAAAAAAAA/QwAAIA/AACAPwAAgD8AAIA/IA8gEWr9AAQAIwT95gH95QH96QEiOf0MAAAAAAAAAAAAAAAAAAAAACAOIBFq/QAEACI6/QxvEoM6bxKDOm8SgzpvEoM6/UMiOyA4/U/9Uv3kASQA/QwAAIA/AACAPwAAgD8AAIA//QwAAIA/AACAPwAAgD8AAIA/IBcjASA3/eYB/ekBIDgjBf1QIDEgOiAv/UP9TiA7IDAjAiMDIDf95gH95AEgOf3mAf1D/U79UP1Q/VIiN/3lASAMQdCg0QBqIhIgEWr9AAQA/eYBIDcgDEHw4PEAaiIRIBBq/QAEAP3mAf3kASE3IA0gEEGECGsiE2r9AAQAIjj9DAAAAAAAAAAAAAAAAAAAAAD9QyE5IwD9DAAAAAAAAAAAAAAAAAAAAAD9DAAAgD8AAIA/AACAPwAAgD8gDyATav0ABAAjBP3mAf3lAf3pASI6/QwAAAAAAAAAAAAAAAAAAAAAIA4gE2r9AAQAIjv9DG8SgzpvEoM6bxKDOm8Sgzr9QyI8IDn9T/1S/eQBJAD9DAAAgD8AAIA/AACAPwAAgD/9DAAAgD8AAIA/AACAPwAAgD8gFyMBIDj95gH96QEgOSMF/VAgMSA7IC/9Q/1OIDwgMCMCIwMgOP3mAf3kASA6/eYB/UP9Tv1Q/VD9UiI4/eUBIAxB4MDhAGoiFCATav0ABAD95gEgOCAMQYCBggFqIhMgEGr9AAQA/eYB/eQBITggDSAQQYwIaiIVav0ABAAiOf0MAAAAAAAAAAAAAAAAAAAAAP1DITojAP0MAAAAAAAAAAAAAAAAAAAAAP0MAACAPwAAgD8AAIA/AACAPyAPIBVq/QAEACME/eYB/eUB/ekBIjv9DAAAAAAAAAAAAAAAAAAAAAAgDiAVav0ABAAiPP0MbxKDOm8SgzpvEoM6bxKDOv1DIj0gOv1P/VL95AEkAP0MAACAPwAAgD8AAIA/AACAP/0MAACAPwAAgD8AAIA/AACAPyAXIwEgOf3mAf3pASA6IwX9UCAxIDwgL/1D/U4gPSAwIwIjAyA5/eYB/eQBIDv95gH9Q/1O/VD9UP1SIjn95QEgESAVav0ABAD95gEgOSAQIBJq/QAEAP3mAf3kASE5IA0gEEGECGoiEWr9AAQAIjr9DAAAAAAAAAAAAAAAAAAAAAD9QyE7IwD9DAAAAAAAAAAAAAAAAAAAAAD9DAAAgD8AAIA/AACAPwAAgD8gDyARav0ABAAjBP3mAf3lAf3pASI8/QwAAAAAAAAAAAAAAAAAAAAAIA4gEWr9AAQAIj39DG8SgzpvEoM6bxKDOm8Sgzr9QyI+IDv9T/1S/eQBJAAjACE/IDQgNv3lASA3/eQBIDj95AEgOf3lAf0MAACAPwAAgD8AAIA/AACAP/0MAACAPwAAgD8AAIA/AACAPyAXIwEgOv3mAf3pASA7IwX9UCAxID0gL/1D/U4gPiAwIwIjAyA6/eYB/eQBIDz95gH9Q/1O/VD9UP1SIhf95QEgESATav0ABAD95gEgFyAQIBRq/QAEAP3mAf3kASIv/eUBITogGCEXIDMgNf3lASA3/eQBIDj95QEgOf3lASAv/eQBIDIgM/3kASA0/eQBIDX95AEgNv3kASA3/eQBIDj95AEgOf3kASAv/eQBIjv95wEgHCAHBHsgFyAeIAkgEGr9AAQA/eYB/eQBIRcgHSAeIAggEGr9AAQA/eYB/eQBBSAdC/3mAf3kAf0MAAAAAAAAAAAAAAAAAAAAACA7/QxvEoM6bxKDOm8SgzpvEoM6/UQiPP1SIj0gPf3mASA6IDv95wEgHCAX/eYB/eQB/QwAAAAAAAAAAAAAAAAAAAAAIDz9UiI6IDr95gH95AEiPP0MAACAPQAAgD0AAIA9AACAPf1EIT79DAAAAAAAAAAAAAAAAAAAAAAgOyA7ICP9DAAAgD8AAIA/AACAPwAAgD/9DAAAAD8AAAA/AAAAPwAAAD8gLf3mAf3lAf3mASA7/eYBIC795gH96AEiLv3lASAf/QwAAIA/AACAPwAAgD8AAIA/ICAgCiAQaiIR/QAEACJA/eYB/eQB/eYB/QwAAAAAAAAAAAAAAAAAAAAAIDv9DAAAAAAAAAAAAAAAAAAAAAD9RP1S/eUB/ekBIhcgO/3nAf0MAAAAAAAAAAAAAAAAAAAAACA7/QxfcIkwX3CJMF9wiTBfcIkw/UT9UiFBIAtBwIHDAWogEGr9DAAAAAAAAAAAAAAAAAAAAAAgLCAu/eQBICf9DAAAAAAAAAAAAAAAAAAAAAAgLP0MAAAAAAAAAAAAAAAAAAAAAP1E/VL95QH96QEiLv0LBAAgCyAQaiAyIBr9DDmO4z45juM+OY7jPjmO4z4gO/3mAf0MAACAPwAAgD8AAIA/AACAP/0MAADAPwAAwD8AAMA/AADAPyA9/QwAAIA+AACAPgAAgD4AAIA+IDz94wH95wEiLP3mASA9ID79UiI8IDz95gEgOiAs/eYBIDogPv1SIjogOv3mAf3kAf3mASIs/eUB/eYBIDL95QH95gH95AEgQf3mAf0LBAAgC0GQoBBqIBBqIDMgGv0MOY7jPTmO4z05juM9OY7jPSA7/eYBIjL9DAAAgD8AAIA/AACAPwAAgD/9DAAAQEAAAEBAAABAQAAAQEAgPP3mAf3kAf0MAACQQAAAkEAAAJBAAACQQCA8/eYBIDz95gH95AEgLP3lAf3mASAz/eUB/eYB/eQBIEH95gH9CwQAIAtBoMAgaiAQaiA0IBogMv0MAACAPwAAgD8AAIA/AACAP/0MAABAQAAAQEAAAEBAAABAQCA6/eYB/eQB/QwAAJBAAACQQAAAkEAAAJBAIDr95gEgOv3mAf3kASAs/eUB/eYBIDT95QH95gH95AEgQf3mAf0LBAAgC0Gw4DBqIBBqIDUgGiAy/QwAAIA/AACAPwAAgD8AAIA//QwAAEBAAABAQAAAQEAAAEBAIDz94QEiM/3mAf3kAf0MAACQQAAAkEAAAJBAAACQQCAz/eYBIDP95gH95AEgLP3lAf3mASA1/eUB/eYB/eQBIEH95gH9CwQAIAtBwIDBAGogEGogNiAaIDL9DAAAgD8AAIA/AACAPwAAgD/9DAAAQEAAAEBAAABAQAAAQEAgOv3hASIy/eYB/eQB/QwAAJBAAACQQAAAkEAAAJBAIDL95gEgMv3mAf3kASAs/eUB/eYBIDb95QH95gH95AEgQf3mAf0LBAAgC0HQoNEAaiAQaiA3IBr9DDmO4zw5juM8OY7jPDmO4zwgO/3mASIy/QwAAIA/AACAPwAAgD8AAIA//QwAAEBAAABAQAAAQEAAAEBAIDwgOv3kASIz/eYB/eQB/QwAAJBAAACQQAAAkEAAAJBAIDP95gEgM/3mAf3kASAs/eUB/eYBIDf95QH95gH95AEgQf3mAf0LBAAgC0HgwOEAaiAQaiA4IBogMv0MAACAPwAAgD8AAIA/AACAP/0MAABAQAAAQEAAAEBAAABAQCA6IDz95QEiNP3mAf3kAf0MAACQQAAAkEAAAJBAAACQQCA0/eYBIDT95gH95AEgLP3lAf3mASA4/eUB/eYB/eQBIEH95gH9CwQAIAtB8ODxAGogEGogOSAaIDL9DAAAgD8AAIA/AACAPwAAgD/9DAAAQEAAAEBAAABAQAAAQEAgM/3hASIz/eYB/eQB/QwAAJBAAACQQAAAkEAAAJBAIDP95gEgM/3mAf3kASAs/eUB/eYBIDn95QH95gH95AEgQf3mAf0LBAAgC0GAgYIBaiAQaiAvIBogMv0MAACAPwAAgD8AAIA/AACAP/0MAABAQAAAQEAAAEBAAABAQCA8IDr95QEiMv3mAf3kAf0MAACQQAAAkEAAAJBAAACQQCAy/eYBIDL95gH95AEgLP3lAf3mASAv/eUB/eYB/eQBIEH95gH9CwQAIDH9TSIsIA4gEEEEaiISav0ABAD9DG8SgzpvEoM6bxKDOm8Sgzr9Rv1OIS8gGyAFIBBq/QAEACIxIAUgEmr9AAQA/eQB/eYBIjL9DAAAAAAAAAAAAAAAAAAAAAD9RCEzICwgEEEEayITIA5q/QAEAP0MbxKDOm8SgzpvEoM6bxKDOv1G/U4hNCAbIAUgE2r9AAQAIDH95AH95gEiMf0MAAAAAAAAAAAAAAAAAAAAAP1EITUgLCAQQYgIaiIUIA5q/QAEAP0MbxKDOm8SgzpvEoM6bxKDOv1G/U4hNiAbIAYgEGr9AAQAIjcgBiAUav0ABAD95AH95gEiOP0MAAAAAAAAAAAAAAAAAAAAAP1EITkgLCAQQYgIayIVIA5q/QAEAP0MbxKDOm8SgzpvEoM6bxKDOv1G/U4hOyAbIAYgFWr9AAQAIDf95AH95gEiN/0MAAAAAAAAAAAAAAAAAAAAAP1EIT0gAEGQoBBqIhYgEGr9AAQAIiwgMiAs/eYBIDIgEiAWav0ABAAiPv3mASAz/VL95QEgGSA+ICz95QH95gH95AEgLCAv/VIiPiAxIBMgFmr9AAQAIkH95gEgMSAs/eYBIDX9Uv3kASAZIEEgLP3lAf3mAf3kASA+IDT9UiI+IDggLP3mASA4IBQgFmr9AAQAIkH95gEgOf1S/eUBIBkgQSAs/eUB/eYB/eQBID4gNv1SIj4gNyAVIBZq/QAEACJB/eYBIDcgLP3mASA9/VL95AEgGSBBICz95QH95gH95AEgPiA7/VIhPiAAQaDAIGoiFiAQav0ABAAiLCAyICz95gEgMiASIBZq/QAEACJB/eYBIDP9Uv3lASAZIEEgLP3lAf3mAf3kASAsIC/9UiJBIDEgEyAWav0ABAAiQv3mASAxICz95gEgNf1S/eQBIBkgQiAs/eUB/eYB/eQBIEEgNP1SIkEgOCAs/eYBIDggFCAWav0ABAAiQv3mASA5/VL95QEgGSBCICz95QH95gH95AEgQSA2/VIiQSA3IBUgFmr9AAQAIkL95gEgNyAs/eYBID39Uv3kASAZIEIgLP3lAf3mAf3kASBBIDv9UiFBIABBsOAwaiIWIBBq/QAEACIsIDIgLP3mASAyIBIgFmr9AAQAIkL95gEgM/1S/eUBIBkgQiAs/eUB/eYB/eQBICwgL/1SIkIgMSATIBZq/QAEACJD/eYBIDEgLP3mASA1/VL95AEgGSBDICz95QH95gH95AEgQiA0/VIiQiA4ICz95gEgOCAUIBZq/QAEACJD/eYBIDn9Uv3lASAZIEMgLP3lAf3mAf3kASBCIDb9UiJCIDcgFSAWav0ABAAiQ/3mASA3ICz95gEgPf1S/eQBIBkgQyAs/eUB/eYB/eQBIEIgO/1SIUIgAEHAgMEAaiIWIBBq/QAEACIsIDIgLP3mASAyIBIgFmr9AAQAIkP95gEgM/1S/eUBIBkgQyAs/eUB/eYB/eQBICwgL/1SIkMgMSATIBZq/QAEACJE/eYBIDEgLP3mASA1/VL95AEgGSBEICz95QH95gH95AEgQyA0/VIiQyA4ICz95gEgOCAUIBZq/QAEACJE/eYBIDn9Uv3lASAZIEQgLP3lAf3mAf3kASBDIDb9UiJDIDcgFSAWav0ABAAiRP3mASA3ICz95gEgPf1S/eQBIBkgRCAs/eUB/eYB/eQBIEMgO/1SIUP9DAAAAAAAAAAAAAAAAAAAAAAgIiAX/QwAAIA/AACAPwAAgD8AAIA//egB/eYB/QwAAIA/AACAPwAAgD8AAIA/ICb9DAAAAAAAAAAAAAAAAAAAAAAgFyAw/eUB/ekB/eYB/eQB/eYBIBf9DG8SgzpvEoM6bxKDOm8Sgzr9QyIw/VIhRCAyIAAgEGr9AAQAIiz95gEhRSALQdCh0wFqIBBq/QwAAAAAAAAAAAAAAAAAAAAAICwgRSAyIAAgEmr9AAQAIjL95gEgM/1S/eUBIBkgMiAs/eUB/eYB/eQBICwgL/1SIi8gMSAAIBNq/QAEACIy/eYBIDEgLP3mASA1/VL95AEgGSAyICz95QH95gH95AEgLyA0/VIiLyA4ICz95gEgOCAAIBRq/QAEACIx/eYBIDn9Uv3lASAZIDEgLP3lAf3mAf3kASAvIDb9UiIvIDcgACAVav0ABAAiMf3mASA3ICz95gEgPf1S/eQBIBkgMSAs/eUB/eYB/eQBIC8gO/1S/ekBIiwgLCAsICwgIf0MAACAPwAAgD8AAIA/AACAPyAk/QwAAIA/AACAPwAAgD8AAIA/IC395QH95gH95AH95gH9DAAAgD8AAIA/AACAPwAAgD8gJSBA/eYB/eQB/eYBIiz95gH96AEgMP1SIi395QEgAiAQaiIS/QAEACIvIET95gEiMf3kAf0LBAAgEiAvIC395AEgMf3lAf0LBAD9DAAAAAAAAAAAAAAAAAAAAAAgPv3pASItIC0gLSAs/eYB/egBIDD9UiEvIAtB4MHjAWogEGogLSAv/eUBIAJBkKAQaiAQaiIS/QAEACItIET95gEiMf3kAf0LBAAgEiAtIC/95AEgMf3lAf0LBAD9DAAAAAAAAAAAAAAAAAAAAAAgQf3pASItIC0gLSAs/eYB/egBIDD9UiEvIAtB8OHzAWogEGogLSAv/eUBIAJBoMAgaiAQaiIS/QAEACItIET95gEiMf3kAf0LBAAgEiAtIC/95AEgMf3lAf0LBAD9DAAAAAAAAAAAAAAAAAAAAAAgQv3pASItIC0gLSAs/eYB/egBIDD9UiEvIAtBgIKEAmogEGogLSAv/eUBIAJBsOAwaiAQaiIS/QAEACItIET95gEiMf3kAf0LBAAgEiAtIC/95AEgMf3lAf0LBAD9DAAAAAAAAAAAAAAAAAAAAAAgQ/3pASItIC0gLSAs/eYB/egBIDD9UiEsIAtBkKKUAmogEGogLSAs/eUBIAJBwIDBAGogEGoiEv0ABAAiLSBE/eYBIi/95AH9CwQAIBIgLSAs/eQBIC/95QH9CwQAIAtBoMKkAmogEGr9DAAAAAAAAAAAAAAAAAAAAAD9DAAAgD8AAIA/AACAPwAAgD/9DAAAgD8AAIA/AACAPwAAgD8gP/0MAACAPgAAgD4AAIA+AACAPv3mAf3oAf0MpHB9P6RwfT+kcH0/pHB9PyAR/QAEBCARQQRr/QAEAP3kASARQYgIav0ABAD95AEgEUGICGv9AAQA/eQB/QwAAIA+AACAPgAAgD4AAIA+/eYB/eYB/ekB/egBIDD9Uv0LBAAgC0GQoZIBaiAQaiAX/QsEACALQaDBogFqIBBq/QwAAAAAAAAAAAAAAAAAAAAAIDwgMP1S/QsEACALQbDhsgFqIBBq/QwAAAAAAAAAAAAAAAAAAAAAIDogMP1S/QsEACAX/QwAAAAAAAAAAAAAAAAAAAAA/UQgLv0MAAAAAAAAAAAAAAAAAAAAAP1E/VD9UwRAQQNBASAEQQFrIhBBwABIGyIRQQRyIBEgEEHAAU4bIhBBCHIgECABQQFrIhBBwABIGyIRQRByIBEgEEHAAU4bIANyIQMLIANBIHIgAyAw/U39UxshAyAEQQRqIQQMAQsLIAFBAWohAQwBCwsgAwutBwEKfyABIAAgAkECdGooAgBB4MXrBWxqIAZBsOK0AmxqIQcgAiACIANtIANsIgJrIgMgBG8iCCADIARtIgNBAWsiCXJBAEggBCAITHIgBSAJTHIEf0F/BSAAIAIgBCAJbGogCGpBAnRqKAIACyEJIANBAWoiCiAIckEASCAEIAhMciAFIApMcgR/QX8FIAAgAiAEIApsaiAIakECdGooAgALIQogCEEBayILIANyQQBIIAQgC0xyIAMgBU5yBH9BfwUgACACIAMgBGxqIAtqQQJ0aigCAAshCyAIQQFqIgwgA3JBAEggBCAMTHIgAyAFTnIEf0F/BSAAIAIgAyAEbGogDGpBAnRqKAIACyEMIANBAWsiDSAIQQFrIg5yQQBIIAQgDkxyIAUgDUxyBH9BfwUgACACIAQgDWxqIA5qQQJ0aigCAAshDSADQQFrIg4gCEEBaiIPckEASCAEIA9MciAFIA5McgR/QX8FIAAgAiAEIA5saiAPakECdGooAgALIQ4gA0EBaiIPIAhBAWsiEHJBAEggBCAQTHIgBSAPTHIEf0F/BSAAIAIgBCAPbGogEGpBAnRqKAIACyEPIANBAWoiAyAIQQFqIghyQQBIIAQgCExyIAMgBU5yBH9BfwUgACACIAMgBGxqIAhqQQJ0aigCAAshACAGQbDitAJsIQJBACEDA0AgA0ETSQRAIAcgA0GQoBBsIgRqIQUgAiAEaiEGIAlBAE4EQCAFQQRqIAEgCUHgxesFbGogBmpBhJAQakGACPwKAAALIApBAE4EQCAFQYyYEGogASAKQeDF6wVsaiAGakGMCGpBgAj8CgAACyALQQBOBEAgASALQeDF6wVsaiAGakGACGohCEEBIQQDQCAEQYACTQRAIARBiAhsIhAgBWogCCAQaioCADgCACAEQQFqIQQMAQsLCyAMQQBOBEAgASAMQeDF6wVsaiAGakEEaiEIQQEhBANAIARBgAJNBEAgBEGICGwiECAFakGECGogCCAQaioCADgCACAEQQFqIQQMAQsLCyANQQBOBEAgBSABIA1B4MXrBWxqIAZqQYCYEGoqAgA4AgALIA5BAE4EQCAFQYQIaiABIA5B4MXrBWxqIAZqQYSQEGoqAgA4AgALIA9BAE4EQCAFQYiYEGogASAPQeDF6wVsaiAGakGIEGoqAgA4AgALIABBAE4EQCAFQYygEGogASAAQeDF6wVsaiAGakGMCGoqAgA4AgALIANBAWohAwwBCwsL";
4
+ var WET_KERNEL_SINGLE = "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";
5
+
6
+
7
+
8
+
9
+ exports.WET_KERNEL_SHARED = WET_KERNEL_SHARED; exports.WET_KERNEL_SINGLE = WET_KERNEL_SINGLE; exports.WET_KERNEL_SOURCE_HASH = WET_KERNEL_SOURCE_HASH;
@@ -130,7 +130,11 @@ var _chunkBB6TR422cjs = require('../chunk-BB6TR422.cjs');
130
130
 
131
131
 
132
132
 
133
- var _chunkXFYLA3ZOcjs = require('../chunk-XFYLA3ZO.cjs');
133
+
134
+
135
+
136
+
137
+ var _chunkVMROIWLLcjs = require('../chunk-VMROIWLL.cjs');
134
138
 
135
139
 
136
140
 
@@ -485,4 +489,8 @@ require('../chunk-XFM3OCHU.cjs');
485
489
 
486
490
 
487
491
 
488
- exports.BODY_SCATTER = _chunkXFYLA3ZOcjs.BODY_SCATTER; exports.BRUSHSTROKE_MAX_SCALE = _chunkYQGCPL5Xcjs.BRUSHSTROKE_MAX_SCALE; exports.BRUSHSTROKE_MIN_SCALE = _chunkYQGCPL5Xcjs.BRUSHSTROKE_MIN_SCALE; exports.BrushstrokeCache = _chunkPQ3H2AANcjs.BrushstrokeCache; exports.CoverageMap = _chunkPQ3H2AANcjs.CoverageMap; exports.DEFAULT_BLENDER = _chunkPQ3H2AANcjs.DEFAULT_BLENDER; exports.DEFAULT_BRUSH = _chunkPQ3H2AANcjs.DEFAULT_BRUSH; exports.DEFAULT_FLOW = _chunkXFYLA3ZOcjs.DEFAULT_FLOW; exports.DEFAULT_MIXER = _chunkPQ3H2AANcjs.DEFAULT_MIXER; exports.DEFAULT_PAINT_GRADIENT = _chunkPQ3H2AANcjs.DEFAULT_PAINT_GRADIENT; exports.DEFAULT_PAINT_GRADIENT_MAPPING = _chunkPQ3H2AANcjs.DEFAULT_PAINT_GRADIENT_MAPPING; exports.DEFAULT_RETOUCH = _chunk2ONK3ERDcjs.DEFAULT_RETOUCH; exports.DEFAULT_SMUDGE = _chunkPQ3H2AANcjs.DEFAULT_SMUDGE; exports.DEFAULT_WET_PAPER = _chunkXFYLA3ZOcjs.DEFAULT_WET_PAPER; exports.DEFAULT_WET_PARAMS = _chunkXFYLA3ZOcjs.DEFAULT_WET_PARAMS; exports.DRY_EPS = _chunkXFYLA3ZOcjs.DRY_EPS; exports.DabWalker = _chunkPQ3H2AANcjs.DabWalker; exports.EMPTY_MIXER_LOAD = _chunkPQ3H2AANcjs.EMPTY_MIXER_LOAD; exports.EX = _chunkXFYLA3ZOcjs.EX; exports.EY = _chunkXFYLA3ZOcjs.EY; exports.FLAG_ALIVE = _chunkXFYLA3ZOcjs.FLAG_ALIVE; exports.FLAG_BOTTOM = _chunkXFYLA3ZOcjs.FLAG_BOTTOM; exports.FLAG_LEFT = _chunkXFYLA3ZOcjs.FLAG_LEFT; exports.FLAG_RIGHT = _chunkXFYLA3ZOcjs.FLAG_RIGHT; exports.FLAG_TOP = _chunkXFYLA3ZOcjs.FLAG_TOP; exports.FLAG_WET = _chunkXFYLA3ZOcjs.FLAG_WET; exports.FLAT = _chunkXFYLA3ZOcjs.FLAT; exports.FREE_INTERVAL = _chunkXFYLA3ZOcjs.FREE_INTERVAL; exports.GRAIN_PATTERNS = _chunkPQ3H2AANcjs.GRAIN_PATTERNS; exports.GRAIN_TILE = _chunkPQ3H2AANcjs.GRAIN_TILE; exports.HIDE = _chunkXFYLA3ZOcjs.HIDE; exports.IDENTITY_CLONE_TRANSFORM = _chunk2ONK3ERDcjs.IDENTITY_CLONE_TRANSFORM; exports.MAX_BATCH = _chunkXFYLA3ZOcjs.MAX_BATCH; exports.MAX_BRUSH_SIZE = _chunkPQ3H2AANcjs.MAX_BRUSH_SIZE; exports.MAX_TILT_ACCEL = _chunkXFYLA3ZOcjs.MAX_TILT_ACCEL; exports.MAX_WET_LANES = _chunkXFYLA3ZOcjs.MAX_WET_LANES; exports.MAX_WET_SLOTS = _chunkXFYLA3ZOcjs.MAX_WET_SLOTS; exports.MIXER_DRAIN = _chunkPQ3H2AANcjs.MIXER_DRAIN; exports.MIXER_PICKUP_RATE = _chunkPQ3H2AANcjs.MIXER_PICKUP_RATE; exports.MIXING_MODELS = _chunkPQ3H2AANcjs.MIXING_MODELS; exports.MixerStroke = _chunkPQ3H2AANcjs.MixerStroke; exports.OPP = _chunkXFYLA3ZOcjs.OPP; exports.PAINT_COLOR_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_COLOR_JSON_SCHEMA; exports.PAINT_GRADIENT_FULL_SPEED = _chunkPQ3H2AANcjs.PAINT_GRADIENT_FULL_SPEED; exports.PAINT_GRADIENT_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_GRADIENT_JSON_SCHEMA; exports.PAINT_GRADIENT_KIT = _chunkPQ3H2AANcjs.PAINT_GRADIENT_KIT; exports.PAINT_GRADIENT_MAPPINGS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_MAPPINGS; exports.PAINT_GRADIENT_MAPPING_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_MAPPING_LABELS; exports.PAINT_GRADIENT_PRESETS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_PRESETS; exports.PAINT_GRADIENT_REPEATS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_REPEATS; exports.PAINT_GRADIENT_REPEAT_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_REPEAT_LABELS; exports.PAINT_GRADIENT_SPACES = _chunkPQ3H2AANcjs.PAINT_GRADIENT_SPACES; exports.PAINT_GRADIENT_SPACE_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_SPACE_LABELS; exports.PAINT_SOURCE_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_SOURCE_JSON_SCHEMA; exports.PAPER_CAPACITY = _chunkXFYLA3ZOcjs.PAPER_CAPACITY; exports.PARAM = _chunkXFYLA3ZOcjs.PARAM; exports.PARAM_FLOATS = _chunkXFYLA3ZOcjs.PARAM_FLOATS; exports.PIGMENT_BANDS = _chunkOLNIPTB3cjs.PIGMENT_BANDS; exports.PIGMENT_CHANNELS = _chunkXFYLA3ZOcjs.PIGMENT_CHANNELS; exports.PIGMENT_LAMBDA_MIN = _chunkOLNIPTB3cjs.PIGMENT_LAMBDA_MIN; exports.PIGMENT_LAMBDA_STEP = _chunkOLNIPTB3cjs.PIGMENT_LAMBDA_STEP; exports.PIGMENT_UNIT = _chunkXFYLA3ZOcjs.PIGMENT_UNIT; exports.PIGMENT_WAVELENGTHS = _chunkOLNIPTB3cjs.PIGMENT_WAVELENGTHS; exports.PLANE = _chunkXFYLA3ZOcjs.PLANE; exports.PLANE_BYTES = _chunkXFYLA3ZOcjs.PLANE_BYTES; exports.P_D0 = _chunkXFYLA3ZOcjs.P_D0; exports.P_EDGE = _chunkXFYLA3ZOcjs.P_EDGE; exports.P_FX = _chunkXFYLA3ZOcjs.P_FX; exports.P_FY = _chunkXFYLA3ZOcjs.P_FY; exports.P_H = _chunkXFYLA3ZOcjs.P_H; exports.P_P0 = _chunkXFYLA3ZOcjs.P_P0; exports.P_RHO = _chunkXFYLA3ZOcjs.P_RHO; exports.P_SW = _chunkXFYLA3ZOcjs.P_SW; exports.P_UX = _chunkXFYLA3ZOcjs.P_UX; exports.P_UY = _chunkXFYLA3ZOcjs.P_UY; exports.PaintExchange = _chunkPQ3H2AANcjs.PaintExchange; exports.PaintGradientSampler = _chunkPQ3H2AANcjs.PaintGradientSampler; exports.PaintSourceError = _chunkPQ3H2AANcjs.PaintSourceError; exports.PaperGrain = _chunkPQ3H2AANcjs.PaperGrain; exports.RETOUCH_SAMPLES = _chunk2ONK3ERDcjs.RETOUCH_SAMPLES; exports.RegionPixelSource = _chunk2ONK3ERDcjs.RegionPixelSource; exports.RetouchDabStroke = _chunk2ONK3ERDcjs.RetouchDabStroke; exports.SET_PLANES = _chunkXFYLA3ZOcjs.SET_PLANES; exports.SLOT_BYTES = _chunkXFYLA3ZOcjs.SLOT_BYTES; exports.SLOT_PLANES = _chunkXFYLA3ZOcjs.SLOT_PLANES; exports.SLOT_SIDE = _chunkXFYLA3ZOcjs.SLOT_SIDE; exports.SPOT_HEAL_TYPES = _chunk2ONK3ERDcjs.SPOT_HEAL_TYPES; exports.SRGB_TO_LINEAR = _chunkXFYLA3ZOcjs.SRGB_TO_LINEAR; exports.STRIP = _chunkXFYLA3ZOcjs.STRIP; exports.SmudgeTip = _chunkPQ3H2AANcjs.SmudgeTip; exports.StrokeCoverage = _chunkPQ3H2AANcjs.StrokeCoverage; exports.TIP_GRADIENT_STEPS = _chunkPQ3H2AANcjs.TIP_GRADIENT_STEPS; exports.TONE_RANGES = _chunk2ONK3ERDcjs.TONE_RANGES; exports.TileMedium = _chunkPQ3H2AANcjs.TileMedium; exports.TilePixelSource = _chunk2ONK3ERDcjs.TilePixelSource; exports.TileableNoise = _chunkPQ3H2AANcjs.TileableNoise; exports.TransformedPixelSource = _chunk2ONK3ERDcjs.TransformedPixelSource; exports.U_MAX = _chunkXFYLA3ZOcjs.U_MAX; exports.W9 = _chunkXFYLA3ZOcjs.W9; exports.WET_FLOW_KINDS = _chunkXFYLA3ZOcjs.WET_FLOW_KINDS; exports.WET_PARAM_KEYS = _chunkXFYLA3ZOcjs.WET_PARAM_KEYS; exports.WET_TILE = _chunkXFYLA3ZOcjs.WET_TILE; exports.WGSL_HALO = _chunkXFYLA3ZOcjs.WGSL_HALO; exports.WGSL_SHADE = _chunkXFYLA3ZOcjs.WGSL_SHADE; exports.WGSL_STEP = _chunkXFYLA3ZOcjs.WGSL_STEP; exports.WetGpuEngine = _chunkXFYLA3ZOcjs.WetGpuEngine; exports.WetMedium = _chunkXFYLA3ZOcjs.WetMedium; exports.WetWorkerPool = _chunkXFYLA3ZOcjs.WetWorkerPool; exports.WetWorld = _chunkXFYLA3ZOcjs.WetWorld; exports.WetWorldError = _chunkXFYLA3ZOcjs.WetWorldError; exports.addPaintGradientStop = _chunkPQ3H2AANcjs.addPaintGradientStop; exports.applyRetouchToTile = _chunk2ONK3ERDcjs.applyRetouchToTile; exports.applyStrokeToDeepTile = _chunkPQ3H2AANcjs.applyStrokeToDeepTile; exports.applyStrokeToTile = _chunkPQ3H2AANcjs.applyStrokeToTile; exports.applyToneToDeepTile = _chunk2ONK3ERDcjs.applyToneToDeepTile; exports.bestOffset = _chunkBB6TR422cjs.bestOffset; exports.blendRadius = _chunkPQ3H2AANcjs.blendRadius; exports.blenderDab = _chunkPQ3H2AANcjs.blenderDab; exports.boxBlurPixels = _chunk2ONK3ERDcjs.boxBlurPixels; exports.brushstrokeDataUrl = _chunkPQ3H2AANcjs.brushstrokeDataUrl; exports.brushstrokeKey = _chunkPQ3H2AANcjs.brushstrokeKey; exports.brushstrokeSamples = _chunkPQ3H2AANcjs.brushstrokeSamples; exports.brushstrokeScaleBucket = _chunkYQGCPL5Xcjs.brushstrokeScaleBucket; exports.brushstrokeStrokeOptions = _chunkPQ3H2AANcjs.brushstrokeStrokeOptions; exports.brushstrokeToCanvas = _chunkPQ3H2AANcjs.brushstrokeToCanvas; exports.canShareMemory = _chunkXFYLA3ZOcjs.canShareMemory; exports.cleanMixer = _chunkPQ3H2AANcjs.cleanMixer; exports.cloneSamplePoint = _chunk2ONK3ERDcjs.cloneSamplePoint; exports.contentAwareFill = _chunkBB6TR422cjs.contentAwareFill; exports.coverageTileCoord = _chunkPQ3H2AANcjs.coverageTileCoord; exports.createBlenderScratch = _chunkPQ3H2AANcjs.createBlenderScratch; exports.createPigment = _chunkOLNIPTB3cjs.createPigment; exports.createPigmentTools = _chunkXFYLA3ZOcjs.createPigmentTools; exports.createWetGpuEngine = _chunkXFYLA3ZOcjs.createWetGpuEngine; exports.dabCoverage = _chunkPQ3H2AANcjs.dabCoverage; exports.dabRect = _chunkPQ3H2AANcjs.dabRect; exports.dexp = _chunkXFYLA3ZOcjs.dexp; exports.dilateMask = _chunkBB6TR422cjs.dilateMask; exports.dlog = _chunkXFYLA3ZOcjs.dlog; exports.dodgeBurn = _chunk2ONK3ERDcjs.dodgeBurn; exports.dodgeBurnCurve = _chunk2ONK3ERDcjs.dodgeBurnCurve; exports.dpow = _chunkXFYLA3ZOcjs.dpow; exports.dsincos = _chunkXFYLA3ZOcjs.dsincos; exports.edgeBits = _chunkXFYLA3ZOcjs.edgeBits; exports.exchangeRates = _chunkPQ3H2AANcjs.exchangeRates; exports.expNeg = _chunkXFYLA3ZOcjs.expNeg; exports.filmPixel = _chunkXFYLA3ZOcjs.filmPixel; exports.filmReflectance = _chunkXFYLA3ZOcjs.filmReflectance; exports.findWebGpu = _chunkXFYLA3ZOcjs.findWebGpu; exports.flowField = _chunkXFYLA3ZOcjs.flowField; exports.gradientDabColor = _chunkPQ3H2AANcjs.gradientDabColor; exports.grainCatch = _chunkPQ3H2AANcjs.grainCatch; exports.grainHeights = _chunkPQ3H2AANcjs.grainHeights; exports.hash2 = _chunkPQ3H2AANcjs.hash2; exports.healPixels = _chunk2ONK3ERDcjs.healPixels; exports.hexToPaintRgb = _chunkPQ3H2AANcjs.hexToPaintRgb; exports.isBrushstrokeBrush = _chunkPQ3H2AANcjs.isBrushstrokeBrush; exports.isGradientPaint = _chunkPQ3H2AANcjs.isGradientPaint; exports.isIdentityCloneTransform = _chunk2ONK3ERDcjs.isIdentityCloneTransform; exports.latticeViscosity = _chunkXFYLA3ZOcjs.latticeViscosity; exports.lerpPigment = _chunkOLNIPTB3cjs.lerpPigment; exports.lerpPigmentInto = _chunkOLNIPTB3cjs.lerpPigmentInto; exports.linearToSrgb8 = _chunkXFYLA3ZOcjs.linearToSrgb8; exports.loadMixer = _chunkPQ3H2AANcjs.loadMixer; exports.loadWetKernel = _chunkXFYLA3ZOcjs.loadWetKernel; exports.luma = _chunk2ONK3ERDcjs.luma; exports.maskBounds = _chunkBB6TR422cjs.maskBounds; exports.membraneFill = _chunkBB6TR422cjs.membraneFill; exports.mix32 = _chunkPQ3H2AANcjs.mix32; exports.mixPigments = _chunkOLNIPTB3cjs.mixPigments; exports.mixerRates = _chunkPQ3H2AANcjs.mixerRates; exports.moveWetSnapshot = _chunkXFYLA3ZOcjs.moveWetSnapshot; exports.normalizeBlender = _chunkPQ3H2AANcjs.normalizeBlender; exports.normalizeBrush = _chunkPQ3H2AANcjs.normalizeBrush; exports.normalizeFlow = _chunkXFYLA3ZOcjs.normalizeFlow; exports.normalizeHexColor = _chunkPQ3H2AANcjs.normalizeHexColor; exports.normalizeMixer = _chunkPQ3H2AANcjs.normalizeMixer; exports.normalizeRetouch = _chunk2ONK3ERDcjs.normalizeRetouch; exports.normalizeSmudge = _chunkPQ3H2AANcjs.normalizeSmudge; exports.normalizeTilt = _chunkXFYLA3ZOcjs.normalizeTilt; exports.normalizeWetParams = _chunkXFYLA3ZOcjs.normalizeWetParams; exports.packWetParams = _chunkXFYLA3ZOcjs.packWetParams; exports.paintGradientMappingFor = _chunkPQ3H2AANcjs.paintGradientMappingFor; exports.paintPathStroke = _chunkPQ3H2AANcjs.paintPathStroke; exports.paintSourceColor = _chunkPQ3H2AANcjs.paintSourceColor; exports.paintSourceCss = _chunkPQ3H2AANcjs.paintSourceCss; exports.parsePaintSource = _chunkPQ3H2AANcjs.parsePaintSource; exports.pathStrokeCoverage = _chunkPQ3H2AANcjs.pathStrokeCoverage; exports.pathStrokeDabs = _chunkPQ3H2AANcjs.pathStrokeDabs; exports.perDabStrength = _chunk2ONK3ERDcjs.perDabStrength; exports.pigmentColor = _chunkXFYLA3ZOcjs.pigmentColor; exports.pigmentOf = _chunkXFYLA3ZOcjs.pigmentOf; exports.pixelPigment = _chunkXFYLA3ZOcjs.pixelPigment; exports.pointerPressure = _chunkXFYLA3ZOcjs.pointerPressure; exports.pointerStrokeSample = _chunkXFYLA3ZOcjs.pointerStrokeSample; exports.pointerStrokeSamples = _chunkXFYLA3ZOcjs.pointerStrokeSamples; exports.put255 = _chunkPQ3H2AANcjs.put255; exports.rand01 = _chunkPQ3H2AANcjs.rand01; exports.randSigned = _chunkPQ3H2AANcjs.randSigned; exports.rasterizeDab = _chunkPQ3H2AANcjs.rasterizeDab; exports.readPaintSource = _chunkPQ3H2AANcjs.readPaintSource; exports.readSourceRegion = _chunk2ONK3ERDcjs.readSourceRegion; exports.reflectanceToRgb = _chunkOLNIPTB3cjs.reflectanceToRgb; exports.removePaintGradientStop = _chunkPQ3H2AANcjs.removePaintGradientStop; exports.renderBrushstroke = _chunkPQ3H2AANcjs.renderBrushstroke; exports.resolvePaintGradient = _chunkPQ3H2AANcjs.resolvePaintGradient; exports.retouchFilter = _chunk2ONK3ERDcjs.retouchFilter; exports.reversePaintGradient = _chunkPQ3H2AANcjs.reversePaintGradient; exports.rgbToReflectance = _chunkOLNIPTB3cjs.rgbToReflectance; exports.rgbaViewOfGrey = _chunk2ONK3ERDcjs.rgbaViewOfGrey; exports.saturationOf = _chunk2ONK3ERDcjs.saturationOf; exports.scalePaintGradient = _chunkPQ3H2AANcjs.scalePaintGradient; exports.seamlessClone = _chunkBB6TR422cjs.seamlessClone; exports.seedFromString = _chunkPQ3H2AANcjs.seedFromString; exports.setPigmentColor = _chunkOLNIPTB3cjs.setPigmentColor; exports.shadeTile = _chunkXFYLA3ZOcjs.shadeTile; exports.smoothPoints = _chunkPQ3H2AANcjs.smoothPoints; exports.smudgeEffect = _chunk2ONK3ERDcjs.smudgeEffect; exports.solidPaint = _chunkPQ3H2AANcjs.solidPaint; exports.solveMembrane = _chunkBB6TR422cjs.solveMembrane; exports.sponge = _chunk2ONK3ERDcjs.sponge; exports.spongeEffect = _chunk2ONK3ERDcjs.spongeEffect; exports.spotHealPixels = _chunk2ONK3ERDcjs.spotHealPixels; exports.spotHealWindow = _chunk2ONK3ERDcjs.spotHealWindow; exports.srgbByteToLinear = _chunkXFYLA3ZOcjs.srgbByteToLinear; exports.stepSlotTs = _chunkXFYLA3ZOcjs.stepSlotTs; exports.strokeGrainCatch = _chunkPQ3H2AANcjs.strokeGrainCatch; exports.tipFalloff = _chunkPQ3H2AANcjs.tipFalloff; exports.tipReach = _chunkPQ3H2AANcjs.tipReach; exports.tipShape = _chunkPQ3H2AANcjs.tipShape; exports.toneOf = _chunk2ONK3ERDcjs.toneOf; exports.updatePaintGradientStop = _chunkPQ3H2AANcjs.updatePaintGradientStop; exports.walkDabs = _chunkPQ3H2AANcjs.walkDabs; exports.wetGpuSupport = _chunkXFYLA3ZOcjs.wetGpuSupport; exports.wetSimdSupported = _chunkXFYLA3ZOcjs.wetSimdSupported; exports.wetSupport = _chunkXFYLA3ZOcjs.wetSupport;
492
+
493
+
494
+
495
+
496
+ exports.BODY_SCATTER = _chunkVMROIWLLcjs.BODY_SCATTER; exports.BRUSHSTROKE_MAX_SCALE = _chunkYQGCPL5Xcjs.BRUSHSTROKE_MAX_SCALE; exports.BRUSHSTROKE_MIN_SCALE = _chunkYQGCPL5Xcjs.BRUSHSTROKE_MIN_SCALE; exports.BrushstrokeCache = _chunkPQ3H2AANcjs.BrushstrokeCache; exports.CoverageMap = _chunkPQ3H2AANcjs.CoverageMap; exports.DEFAULT_BLENDER = _chunkPQ3H2AANcjs.DEFAULT_BLENDER; exports.DEFAULT_BRUSH = _chunkPQ3H2AANcjs.DEFAULT_BRUSH; exports.DEFAULT_FLOW = _chunkVMROIWLLcjs.DEFAULT_FLOW; exports.DEFAULT_MIXER = _chunkPQ3H2AANcjs.DEFAULT_MIXER; exports.DEFAULT_PAINT_GRADIENT = _chunkPQ3H2AANcjs.DEFAULT_PAINT_GRADIENT; exports.DEFAULT_PAINT_GRADIENT_MAPPING = _chunkPQ3H2AANcjs.DEFAULT_PAINT_GRADIENT_MAPPING; exports.DEFAULT_RETOUCH = _chunk2ONK3ERDcjs.DEFAULT_RETOUCH; exports.DEFAULT_SMUDGE = _chunkPQ3H2AANcjs.DEFAULT_SMUDGE; exports.DEFAULT_WET_PAPER = _chunkVMROIWLLcjs.DEFAULT_WET_PAPER; exports.DEFAULT_WET_PARAMS = _chunkVMROIWLLcjs.DEFAULT_WET_PARAMS; exports.DRY_EPS = _chunkVMROIWLLcjs.DRY_EPS; exports.DabWalker = _chunkPQ3H2AANcjs.DabWalker; exports.EMPTY_MIXER_LOAD = _chunkPQ3H2AANcjs.EMPTY_MIXER_LOAD; exports.EX = _chunkVMROIWLLcjs.EX; exports.EY = _chunkVMROIWLLcjs.EY; exports.FLAG_ALIVE = _chunkVMROIWLLcjs.FLAG_ALIVE; exports.FLAG_BOTTOM = _chunkVMROIWLLcjs.FLAG_BOTTOM; exports.FLAG_LEFT = _chunkVMROIWLLcjs.FLAG_LEFT; exports.FLAG_RIGHT = _chunkVMROIWLLcjs.FLAG_RIGHT; exports.FLAG_TOP = _chunkVMROIWLLcjs.FLAG_TOP; exports.FLAG_WET = _chunkVMROIWLLcjs.FLAG_WET; exports.FLAT = _chunkVMROIWLLcjs.FLAT; exports.FREE_INTERVAL = _chunkVMROIWLLcjs.FREE_INTERVAL; exports.GRAIN_PATTERNS = _chunkPQ3H2AANcjs.GRAIN_PATTERNS; exports.GRAIN_TILE = _chunkPQ3H2AANcjs.GRAIN_TILE; exports.HIDE = _chunkVMROIWLLcjs.HIDE; exports.IDENTITY_CLONE_TRANSFORM = _chunk2ONK3ERDcjs.IDENTITY_CLONE_TRANSFORM; exports.MASS_CHANNELS = _chunkVMROIWLLcjs.MASS_CHANNELS; exports.MAX_BATCH = _chunkVMROIWLLcjs.MAX_BATCH; exports.MAX_BRUSH_SIZE = _chunkPQ3H2AANcjs.MAX_BRUSH_SIZE; exports.MAX_TILT_ACCEL = _chunkVMROIWLLcjs.MAX_TILT_ACCEL; exports.MAX_WET_LANES = _chunkVMROIWLLcjs.MAX_WET_LANES; exports.MAX_WET_SLOTS = _chunkVMROIWLLcjs.MAX_WET_SLOTS; exports.MIXER_DRAIN = _chunkPQ3H2AANcjs.MIXER_DRAIN; exports.MIXER_PICKUP_RATE = _chunkPQ3H2AANcjs.MIXER_PICKUP_RATE; exports.MIXING_MODELS = _chunkPQ3H2AANcjs.MIXING_MODELS; exports.MixerStroke = _chunkPQ3H2AANcjs.MixerStroke; exports.OPP = _chunkVMROIWLLcjs.OPP; exports.PAINT_COLOR_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_COLOR_JSON_SCHEMA; exports.PAINT_GRADIENT_FULL_SPEED = _chunkPQ3H2AANcjs.PAINT_GRADIENT_FULL_SPEED; exports.PAINT_GRADIENT_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_GRADIENT_JSON_SCHEMA; exports.PAINT_GRADIENT_KIT = _chunkPQ3H2AANcjs.PAINT_GRADIENT_KIT; exports.PAINT_GRADIENT_MAPPINGS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_MAPPINGS; exports.PAINT_GRADIENT_MAPPING_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_MAPPING_LABELS; exports.PAINT_GRADIENT_PRESETS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_PRESETS; exports.PAINT_GRADIENT_REPEATS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_REPEATS; exports.PAINT_GRADIENT_REPEAT_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_REPEAT_LABELS; exports.PAINT_GRADIENT_SPACES = _chunkPQ3H2AANcjs.PAINT_GRADIENT_SPACES; exports.PAINT_GRADIENT_SPACE_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_SPACE_LABELS; exports.PAINT_SOURCE_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_SOURCE_JSON_SCHEMA; exports.PAPER_CAPACITY = _chunkVMROIWLLcjs.PAPER_CAPACITY; exports.PARAM = _chunkVMROIWLLcjs.PARAM; exports.PARAM_FLOATS = _chunkVMROIWLLcjs.PARAM_FLOATS; exports.PIGMENT_BANDS = _chunkOLNIPTB3cjs.PIGMENT_BANDS; exports.PIGMENT_CHANNELS = _chunkVMROIWLLcjs.PIGMENT_CHANNELS; exports.PIGMENT_LAMBDA_MIN = _chunkOLNIPTB3cjs.PIGMENT_LAMBDA_MIN; exports.PIGMENT_LAMBDA_STEP = _chunkOLNIPTB3cjs.PIGMENT_LAMBDA_STEP; exports.PIGMENT_UNIT = _chunkVMROIWLLcjs.PIGMENT_UNIT; exports.PIGMENT_WAVELENGTHS = _chunkOLNIPTB3cjs.PIGMENT_WAVELENGTHS; exports.PLANE = _chunkVMROIWLLcjs.PLANE; exports.PLANE_BYTES = _chunkVMROIWLLcjs.PLANE_BYTES; exports.P_D0 = _chunkVMROIWLLcjs.P_D0; exports.P_DL = _chunkVMROIWLLcjs.P_DL; exports.P_EDGE = _chunkVMROIWLLcjs.P_EDGE; exports.P_FX = _chunkVMROIWLLcjs.P_FX; exports.P_FY = _chunkVMROIWLLcjs.P_FY; exports.P_H = _chunkVMROIWLLcjs.P_H; exports.P_L = _chunkVMROIWLLcjs.P_L; exports.P_P0 = _chunkVMROIWLLcjs.P_P0; exports.P_RHO = _chunkVMROIWLLcjs.P_RHO; exports.P_SW = _chunkVMROIWLLcjs.P_SW; exports.P_UX = _chunkVMROIWLLcjs.P_UX; exports.P_UY = _chunkVMROIWLLcjs.P_UY; exports.PaintExchange = _chunkPQ3H2AANcjs.PaintExchange; exports.PaintGradientSampler = _chunkPQ3H2AANcjs.PaintGradientSampler; exports.PaintSourceError = _chunkPQ3H2AANcjs.PaintSourceError; exports.PaperGrain = _chunkPQ3H2AANcjs.PaperGrain; exports.RETOUCH_SAMPLES = _chunk2ONK3ERDcjs.RETOUCH_SAMPLES; exports.RegionPixelSource = _chunk2ONK3ERDcjs.RegionPixelSource; exports.RetouchDabStroke = _chunk2ONK3ERDcjs.RetouchDabStroke; exports.SET_PLANES = _chunkVMROIWLLcjs.SET_PLANES; exports.SLOT_BYTES = _chunkVMROIWLLcjs.SLOT_BYTES; exports.SLOT_PLANES = _chunkVMROIWLLcjs.SLOT_PLANES; exports.SLOT_SIDE = _chunkVMROIWLLcjs.SLOT_SIDE; exports.SPOT_HEAL_TYPES = _chunk2ONK3ERDcjs.SPOT_HEAL_TYPES; exports.SRGB_TO_LINEAR = _chunkVMROIWLLcjs.SRGB_TO_LINEAR; exports.STRIP = _chunkVMROIWLLcjs.STRIP; exports.SmudgeTip = _chunkPQ3H2AANcjs.SmudgeTip; exports.StrokeCoverage = _chunkPQ3H2AANcjs.StrokeCoverage; exports.TIP_GRADIENT_STEPS = _chunkPQ3H2AANcjs.TIP_GRADIENT_STEPS; exports.TONE_RANGES = _chunk2ONK3ERDcjs.TONE_RANGES; exports.TileMedium = _chunkPQ3H2AANcjs.TileMedium; exports.TilePixelSource = _chunk2ONK3ERDcjs.TilePixelSource; exports.TileableNoise = _chunkPQ3H2AANcjs.TileableNoise; exports.TransformedPixelSource = _chunk2ONK3ERDcjs.TransformedPixelSource; exports.U_MAX = _chunkVMROIWLLcjs.U_MAX; exports.W9 = _chunkVMROIWLLcjs.W9; exports.WET_FLOW_KINDS = _chunkVMROIWLLcjs.WET_FLOW_KINDS; exports.WET_PARAM_KEYS = _chunkVMROIWLLcjs.WET_PARAM_KEYS; exports.WET_TILE = _chunkVMROIWLLcjs.WET_TILE; exports.WGSL_HALO = _chunkVMROIWLLcjs.WGSL_HALO; exports.WGSL_SHADE = _chunkVMROIWLLcjs.WGSL_SHADE; exports.WGSL_STEP = _chunkVMROIWLLcjs.WGSL_STEP; exports.WetGpuEngine = _chunkVMROIWLLcjs.WetGpuEngine; exports.WetMedium = _chunkVMROIWLLcjs.WetMedium; exports.WetWorkerPool = _chunkVMROIWLLcjs.WetWorkerPool; exports.WetWorld = _chunkVMROIWLLcjs.WetWorld; exports.WetWorldError = _chunkVMROIWLLcjs.WetWorldError; exports.addPaintGradientStop = _chunkPQ3H2AANcjs.addPaintGradientStop; exports.applyRetouchToTile = _chunk2ONK3ERDcjs.applyRetouchToTile; exports.applyStrokeToDeepTile = _chunkPQ3H2AANcjs.applyStrokeToDeepTile; exports.applyStrokeToTile = _chunkPQ3H2AANcjs.applyStrokeToTile; exports.applyToneToDeepTile = _chunk2ONK3ERDcjs.applyToneToDeepTile; exports.bestOffset = _chunkBB6TR422cjs.bestOffset; exports.blendRadius = _chunkPQ3H2AANcjs.blendRadius; exports.blenderDab = _chunkPQ3H2AANcjs.blenderDab; exports.boxBlurPixels = _chunk2ONK3ERDcjs.boxBlurPixels; exports.brushstrokeDataUrl = _chunkPQ3H2AANcjs.brushstrokeDataUrl; exports.brushstrokeKey = _chunkPQ3H2AANcjs.brushstrokeKey; exports.brushstrokeSamples = _chunkPQ3H2AANcjs.brushstrokeSamples; exports.brushstrokeScaleBucket = _chunkYQGCPL5Xcjs.brushstrokeScaleBucket; exports.brushstrokeStrokeOptions = _chunkPQ3H2AANcjs.brushstrokeStrokeOptions; exports.brushstrokeToCanvas = _chunkPQ3H2AANcjs.brushstrokeToCanvas; exports.canShareMemory = _chunkVMROIWLLcjs.canShareMemory; exports.cleanMixer = _chunkPQ3H2AANcjs.cleanMixer; exports.cloneSamplePoint = _chunk2ONK3ERDcjs.cloneSamplePoint; exports.contentAwareFill = _chunkBB6TR422cjs.contentAwareFill; exports.coverageTileCoord = _chunkPQ3H2AANcjs.coverageTileCoord; exports.createBlenderScratch = _chunkPQ3H2AANcjs.createBlenderScratch; exports.createPigment = _chunkOLNIPTB3cjs.createPigment; exports.createPigmentTools = _chunkVMROIWLLcjs.createPigmentTools; exports.createWetGpuEngine = _chunkVMROIWLLcjs.createWetGpuEngine; exports.dabCoverage = _chunkPQ3H2AANcjs.dabCoverage; exports.dabRect = _chunkPQ3H2AANcjs.dabRect; exports.dexp = _chunkVMROIWLLcjs.dexp; exports.dilateMask = _chunkBB6TR422cjs.dilateMask; exports.dlog = _chunkVMROIWLLcjs.dlog; exports.dodgeBurn = _chunk2ONK3ERDcjs.dodgeBurn; exports.dodgeBurnCurve = _chunk2ONK3ERDcjs.dodgeBurnCurve; exports.dpow = _chunkVMROIWLLcjs.dpow; exports.dsincos = _chunkVMROIWLLcjs.dsincos; exports.edgeBits = _chunkVMROIWLLcjs.edgeBits; exports.exchangeRates = _chunkPQ3H2AANcjs.exchangeRates; exports.expNeg = _chunkVMROIWLLcjs.expNeg; exports.filmPixel = _chunkVMROIWLLcjs.filmPixel; exports.filmReflectance = _chunkVMROIWLLcjs.filmReflectance; exports.findWebGpu = _chunkVMROIWLLcjs.findWebGpu; exports.flowField = _chunkVMROIWLLcjs.flowField; exports.gradientDabColor = _chunkPQ3H2AANcjs.gradientDabColor; exports.grainCatch = _chunkPQ3H2AANcjs.grainCatch; exports.grainHeights = _chunkPQ3H2AANcjs.grainHeights; exports.hash2 = _chunkPQ3H2AANcjs.hash2; exports.healPixels = _chunk2ONK3ERDcjs.healPixels; exports.hexToPaintRgb = _chunkPQ3H2AANcjs.hexToPaintRgb; exports.isBrushstrokeBrush = _chunkPQ3H2AANcjs.isBrushstrokeBrush; exports.isGradientPaint = _chunkPQ3H2AANcjs.isGradientPaint; exports.isIdentityCloneTransform = _chunk2ONK3ERDcjs.isIdentityCloneTransform; exports.latticeViscosity = _chunkVMROIWLLcjs.latticeViscosity; exports.lerpPigment = _chunkOLNIPTB3cjs.lerpPigment; exports.lerpPigmentInto = _chunkOLNIPTB3cjs.lerpPigmentInto; exports.linearToSrgb8 = _chunkVMROIWLLcjs.linearToSrgb8; exports.loadMixer = _chunkPQ3H2AANcjs.loadMixer; exports.loadWetKernel = _chunkVMROIWLLcjs.loadWetKernel; exports.luma = _chunk2ONK3ERDcjs.luma; exports.maskBounds = _chunkBB6TR422cjs.maskBounds; exports.membraneFill = _chunkBB6TR422cjs.membraneFill; exports.mix32 = _chunkPQ3H2AANcjs.mix32; exports.mixPigments = _chunkOLNIPTB3cjs.mixPigments; exports.mixerRates = _chunkPQ3H2AANcjs.mixerRates; exports.moveWetSnapshot = _chunkVMROIWLLcjs.moveWetSnapshot; exports.normalizeBlender = _chunkPQ3H2AANcjs.normalizeBlender; exports.normalizeBrush = _chunkPQ3H2AANcjs.normalizeBrush; exports.normalizeFlow = _chunkVMROIWLLcjs.normalizeFlow; exports.normalizeHexColor = _chunkPQ3H2AANcjs.normalizeHexColor; exports.normalizeMixer = _chunkPQ3H2AANcjs.normalizeMixer; exports.normalizeRetouch = _chunk2ONK3ERDcjs.normalizeRetouch; exports.normalizeSmudge = _chunkPQ3H2AANcjs.normalizeSmudge; exports.normalizeTilt = _chunkVMROIWLLcjs.normalizeTilt; exports.normalizeWetParams = _chunkVMROIWLLcjs.normalizeWetParams; exports.packWetParams = _chunkVMROIWLLcjs.packWetParams; exports.paintGradientMappingFor = _chunkPQ3H2AANcjs.paintGradientMappingFor; exports.paintPathStroke = _chunkPQ3H2AANcjs.paintPathStroke; exports.paintSourceColor = _chunkPQ3H2AANcjs.paintSourceColor; exports.paintSourceCss = _chunkPQ3H2AANcjs.paintSourceCss; exports.parsePaintSource = _chunkPQ3H2AANcjs.parsePaintSource; exports.pathStrokeCoverage = _chunkPQ3H2AANcjs.pathStrokeCoverage; exports.pathStrokeDabs = _chunkPQ3H2AANcjs.pathStrokeDabs; exports.perDabStrength = _chunk2ONK3ERDcjs.perDabStrength; exports.pigmentColor = _chunkVMROIWLLcjs.pigmentColor; exports.pigmentOf = _chunkVMROIWLLcjs.pigmentOf; exports.pixelPigment = _chunkVMROIWLLcjs.pixelPigment; exports.pointerPressure = _chunkVMROIWLLcjs.pointerPressure; exports.pointerStrokeSample = _chunkVMROIWLLcjs.pointerStrokeSample; exports.pointerStrokeSamples = _chunkVMROIWLLcjs.pointerStrokeSamples; exports.put255 = _chunkPQ3H2AANcjs.put255; exports.rand01 = _chunkPQ3H2AANcjs.rand01; exports.randSigned = _chunkPQ3H2AANcjs.randSigned; exports.rasterizeDab = _chunkPQ3H2AANcjs.rasterizeDab; exports.readPaintSource = _chunkPQ3H2AANcjs.readPaintSource; exports.readSourceRegion = _chunk2ONK3ERDcjs.readSourceRegion; exports.reflectanceToRgb = _chunkOLNIPTB3cjs.reflectanceToRgb; exports.removePaintGradientStop = _chunkPQ3H2AANcjs.removePaintGradientStop; exports.renderBrushstroke = _chunkPQ3H2AANcjs.renderBrushstroke; exports.resolvePaintGradient = _chunkPQ3H2AANcjs.resolvePaintGradient; exports.retouchFilter = _chunk2ONK3ERDcjs.retouchFilter; exports.reversePaintGradient = _chunkPQ3H2AANcjs.reversePaintGradient; exports.rgbToReflectance = _chunkOLNIPTB3cjs.rgbToReflectance; exports.rgbaViewOfGrey = _chunk2ONK3ERDcjs.rgbaViewOfGrey; exports.saturationOf = _chunk2ONK3ERDcjs.saturationOf; exports.scalePaintGradient = _chunkPQ3H2AANcjs.scalePaintGradient; exports.seamlessClone = _chunkBB6TR422cjs.seamlessClone; exports.seedFromString = _chunkPQ3H2AANcjs.seedFromString; exports.setPigmentColor = _chunkOLNIPTB3cjs.setPigmentColor; exports.shadeLightTile = _chunkVMROIWLLcjs.shadeLightTile; exports.shadeTile = _chunkVMROIWLLcjs.shadeTile; exports.smoothPoints = _chunkPQ3H2AANcjs.smoothPoints; exports.smudgeEffect = _chunk2ONK3ERDcjs.smudgeEffect; exports.solidPaint = _chunkPQ3H2AANcjs.solidPaint; exports.solveMembrane = _chunkBB6TR422cjs.solveMembrane; exports.sponge = _chunk2ONK3ERDcjs.sponge; exports.spongeEffect = _chunk2ONK3ERDcjs.spongeEffect; exports.spotHealPixels = _chunk2ONK3ERDcjs.spotHealPixels; exports.spotHealWindow = _chunk2ONK3ERDcjs.spotHealWindow; exports.srgbByteToLinear = _chunkVMROIWLLcjs.srgbByteToLinear; exports.stepSlotTs = _chunkVMROIWLLcjs.stepSlotTs; exports.strokeGrainCatch = _chunkPQ3H2AANcjs.strokeGrainCatch; exports.tipFalloff = _chunkPQ3H2AANcjs.tipFalloff; exports.tipReach = _chunkPQ3H2AANcjs.tipReach; exports.tipShape = _chunkPQ3H2AANcjs.tipShape; exports.toneOf = _chunk2ONK3ERDcjs.toneOf; exports.updatePaintGradientStop = _chunkPQ3H2AANcjs.updatePaintGradientStop; exports.walkDabs = _chunkPQ3H2AANcjs.walkDabs; exports.wetGpuSupport = _chunkVMROIWLLcjs.wetGpuSupport; exports.wetSimdSupported = _chunkVMROIWLLcjs.wetSimdSupported; exports.wetSupport = _chunkVMROIWLLcjs.wetSupport;
@@ -56,6 +56,7 @@ import {
56
56
  FLAT,
57
57
  FREE_INTERVAL,
58
58
  HIDE,
59
+ MASS_CHANNELS,
59
60
  MAX_BATCH,
60
61
  MAX_TILT_ACCEL,
61
62
  MAX_WET_LANES,
@@ -69,10 +70,12 @@ import {
69
70
  PLANE,
70
71
  PLANE_BYTES,
71
72
  P_D0,
73
+ P_DL,
72
74
  P_EDGE,
73
75
  P_FX,
74
76
  P_FY,
75
77
  P_H,
78
+ P_L,
76
79
  P_P0,
77
80
  P_RHO,
78
81
  P_SW,
@@ -124,13 +127,14 @@ import {
124
127
  pointerPressure,
125
128
  pointerStrokeSample,
126
129
  pointerStrokeSamples,
130
+ shadeLightTile,
127
131
  shadeTile,
128
132
  srgbByteToLinear,
129
133
  stepSlotTs,
130
134
  wetGpuSupport,
131
135
  wetSimdSupported,
132
136
  wetSupport
133
- } from "../chunk-HLBTRSQJ.js";
137
+ } from "../chunk-P3NIPIKS.js";
134
138
  import {
135
139
  BrushstrokeCache,
136
140
  CoverageMap,
@@ -281,6 +285,7 @@ export {
281
285
  GRAIN_TILE,
282
286
  HIDE,
283
287
  IDENTITY_CLONE_TRANSFORM,
288
+ MASS_CHANNELS,
284
289
  MAX_BATCH,
285
290
  MAX_BRUSH_SIZE,
286
291
  MAX_TILT_ACCEL,
@@ -315,10 +320,12 @@ export {
315
320
  PLANE,
316
321
  PLANE_BYTES,
317
322
  P_D0,
323
+ P_DL,
318
324
  P_EDGE,
319
325
  P_FX,
320
326
  P_FY,
321
327
  P_H,
328
+ P_L,
322
329
  P_P0,
323
330
  P_RHO,
324
331
  P_SW,
@@ -464,6 +471,7 @@ export {
464
471
  seamlessClone,
465
472
  seedFromString,
466
473
  setPigmentColor,
474
+ shadeLightTile,
467
475
  shadeTile,
468
476
  smoothPoints,
469
477
  smudgeEffect,
@@ -15,6 +15,9 @@
15
15
  * bits differ between JavaScript engines), so "dry on save" gives the same pixels everywhere.
16
16
  * The layer pixel is the film expressed as colour plus alpha over the paper colour (exact over the
17
17
  * paper, a normal-blend approximation over other layers), with alpha never below the pixel's own.
18
+ * Any alpha from the least the colour needs (`aMin`) up to 1 shows the same over the paper, so the
19
+ * film's hiding is kept in it: `alpha = aMin + hide·(1 − aMin)`. A transparent wash (hide 0) gets
20
+ * the least alpha; gouache and oil are more opaque, which backlit paper reads back (`backlight.ts`).
18
21
  */
19
22
  /** Pigment mass of a full-strength wash of a colour. */
20
23
  export declare const PIGMENT_UNIT = 0.25;
@@ -67,5 +70,20 @@ export declare function pixelPigment(px: ArrayLike<number>, i: number, paper: Ar
67
70
  * Cell (x, y) of the tile is at offset `(y + 1)·side + x + 1` of each plane. `src` is the base tile
68
71
  * (or `null` for transparent); writes `out` (a copy of `src` where nothing changes). Returns
69
72
  * whether any pixel was shaded.
73
+ *
74
+ * Light paint (settled light at `dl`, plus suspended at `pl`; −1 for none): glowing paint gives off
75
+ * its own hue whatever is under it, so where a cell holds light `l` its film moves towards the film
76
+ * over white by `min(1, l)`. On dark paper a glowing glaze then shows its colour, which its glow
77
+ * (`paint-editor/light.ts`) brightens.
78
+ */
79
+ export declare function shadeTile(f: Float32Array, plane: number, side: number, d: number, p: number, rho: number, sw: number, src: Uint8ClampedArray | null, out: Uint8ClampedArray, w: number, h: number, paper: Uint8Array, dl?: number, pl?: number): boolean;
80
+ /**
81
+ * Light paint in a wet layer as an 8-bit light tile (one channel, 0..255; see `paint-editor/light.ts`).
82
+ * Light mass `L` (settled at `dl`, plus suspended at `pl` unless it is −1) shows as `min(1, L)`;
83
+ * the light already in the layer (`src`, or `null`) shows through the film over it by the film's
84
+ * transmission, `(1 − hide)·mean(e^(−2K))`, using the same planes as `shadeTile` (`d` settled
85
+ * pigment, `p` suspended or −1), so plain wet paint over glowing paint dims it. Deterministic
86
+ * (table `exp`, + − × only). Writes `out` (a copy of `src` where nothing changes); returns whether
87
+ * any pixel changed.
70
88
  */
71
- export declare function shadeTile(f: Float32Array, plane: number, side: number, d: number, p: number, rho: number, sw: number, src: Uint8ClampedArray | null, out: Uint8ClampedArray, w: number, h: number, paper: Uint8Array): boolean;
89
+ export declare function shadeLightTile(f: Float32Array, plane: number, side: number, d: number, p: number, dl: number, pl: number, src: Uint8ClampedArray | null, out: Uint8ClampedArray, w: number, h: number): boolean;
@@ -15,6 +15,9 @@
15
15
  * bits differ between JavaScript engines), so "dry on save" gives the same pixels everywhere.
16
16
  * The layer pixel is the film expressed as colour plus alpha over the paper colour (exact over the
17
17
  * paper, a normal-blend approximation over other layers), with alpha never below the pixel's own.
18
+ * Any alpha from the least the colour needs (`aMin`) up to 1 shows the same over the paper, so the
19
+ * film's hiding is kept in it: `alpha = aMin + hide·(1 − aMin)`. A transparent wash (hide 0) gets
20
+ * the least alpha; gouache and oil are more opaque, which backlit paper reads back (`backlight.ts`).
18
21
  */
19
22
  /** Pigment mass of a full-strength wash of a colour. */
20
23
  export declare const PIGMENT_UNIT = 0.25;
@@ -67,5 +70,20 @@ export declare function pixelPigment(px: ArrayLike<number>, i: number, paper: Ar
67
70
  * Cell (x, y) of the tile is at offset `(y + 1)·side + x + 1` of each plane. `src` is the base tile
68
71
  * (or `null` for transparent); writes `out` (a copy of `src` where nothing changes). Returns
69
72
  * whether any pixel was shaded.
73
+ *
74
+ * Light paint (settled light at `dl`, plus suspended at `pl`; −1 for none): glowing paint gives off
75
+ * its own hue whatever is under it, so where a cell holds light `l` its film moves towards the film
76
+ * over white by `min(1, l)`. On dark paper a glowing glaze then shows its colour, which its glow
77
+ * (`paint-editor/light.ts`) brightens.
78
+ */
79
+ export declare function shadeTile(f: Float32Array, plane: number, side: number, d: number, p: number, rho: number, sw: number, src: Uint8ClampedArray | null, out: Uint8ClampedArray, w: number, h: number, paper: Uint8Array, dl?: number, pl?: number): boolean;
80
+ /**
81
+ * Light paint in a wet layer as an 8-bit light tile (one channel, 0..255; see `paint-editor/light.ts`).
82
+ * Light mass `L` (settled at `dl`, plus suspended at `pl` unless it is −1) shows as `min(1, L)`;
83
+ * the light already in the layer (`src`, or `null`) shows through the film over it by the film's
84
+ * transmission, `(1 − hide)·mean(e^(−2K))`, using the same planes as `shadeTile` (`d` settled
85
+ * pigment, `p` suspended or −1), so plain wet paint over glowing paint dims it. Deterministic
86
+ * (table `exp`, + − × only). Writes `out` (a copy of `src` where nothing changes); returns whether
87
+ * any pixel changed.
70
88
  */
71
- export declare function shadeTile(f: Float32Array, plane: number, side: number, d: number, p: number, rho: number, sw: number, src: Uint8ClampedArray | null, out: Uint8ClampedArray, w: number, h: number, paper: Uint8Array): boolean;
89
+ export declare function shadeLightTile(f: Float32Array, plane: number, side: number, d: number, p: number, dl: number, pl: number, src: Uint8ClampedArray | null, out: Uint8ClampedArray, w: number, h: number): boolean;
@@ -21,10 +21,10 @@ export declare const WGSL_STEP: string;
21
21
  * `WetWorld.haloTs` does: `dispatchWorkgroups(17, SET_PLANES, jobs)`. A missing neighbour leaves
22
22
  * the halo as it is.
23
23
  */
24
- export declare const WGSL_HALO = "\nconst S: u32 = 258u;\nconst PL: u32 = 66564u;\nconst SETP: u32 = 18u;\nconst NONE: u32 = 0xffffffffu;\nstruct Job {\n base: u32,\n lane: u32,\n nb: array<u32, 8>,\n w: u32,\n h: u32,\n src: u32,\n pad0: u32,\n pad1: u32,\n pad2: u32,\n};\nstruct Uni {\n parity: u32,\n mode: u32,\n paper: u32,\n pad: u32,\n};\n\n@group(0) @binding(0) var<storage, read_write> st: array<f32>;\n@group(0) @binding(2) var<storage, read> jobs: array<Job>;\n@group(0) @binding(4) var<uniform> u: Uni;\n\n@compute @workgroup_size(64, 1, 1)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let i = gid.x;\n if (i >= 4u * S) { return; }\n let job = jobs[gid.z];\n let side = i / S;\n let j = i % S;\n let off = u.parity * SETP * PL + gid.y * PL;\n var srcSlot = NONE;\n var fc = 0u;\n var tc = 0u;\n if (side == 0u) {\n tc = j;\n if (j == 0u) { srcSlot = job.nb[4]; fc = 256u * S + 256u; }\n else if (j == S - 1u) { srcSlot = job.nb[5]; fc = 256u * S + 1u; }\n else { srcSlot = job.nb[0]; fc = 256u * S + j; }\n } else if (side == 1u) {\n tc = (S - 1u) * S + j;\n if (j == 0u) { srcSlot = job.nb[6]; fc = S + 256u; }\n else if (j == S - 1u) { srcSlot = job.nb[7]; fc = S + 1u; }\n else { srcSlot = job.nb[1]; fc = S + j; }\n } else if (side == 2u) {\n if (j == 0u || j == S - 1u) { return; }\n tc = j * S;\n srcSlot = job.nb[2];\n fc = j * S + 256u;\n } else {\n if (j == 0u || j == S - 1u) { return; }\n tc = j * S + S - 1u;\n srcSlot = job.nb[3];\n fc = j * S + 1u;\n }\n if (srcSlot == NONE) { return; }\n st[job.base + off + tc] = st[srcSlot + off + fc];\n}\n";
24
+ export declare const WGSL_HALO = "\nconst S: u32 = 258u;\nconst PL: u32 = 66564u;\nconst SETP: u32 = 19u;\nconst NONE: u32 = 0xffffffffu;\nstruct Job {\n base: u32,\n lane: u32,\n nb: array<u32, 8>,\n w: u32,\n h: u32,\n src: u32,\n pad0: u32,\n pad1: u32,\n pad2: u32,\n};\nstruct Uni {\n parity: u32,\n mode: u32,\n paper: u32,\n pad: u32,\n};\n\n@group(0) @binding(0) var<storage, read_write> st: array<f32>;\n@group(0) @binding(2) var<storage, read> jobs: array<Job>;\n@group(0) @binding(4) var<uniform> u: Uni;\n\n@compute @workgroup_size(64, 1, 1)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let i = gid.x;\n if (i >= 4u * S) { return; }\n let job = jobs[gid.z];\n let side = i / S;\n let j = i % S;\n let off = u.parity * SETP * PL + gid.y * PL;\n var srcSlot = NONE;\n var fc = 0u;\n var tc = 0u;\n if (side == 0u) {\n tc = j;\n if (j == 0u) { srcSlot = job.nb[4]; fc = 256u * S + 256u; }\n else if (j == S - 1u) { srcSlot = job.nb[5]; fc = 256u * S + 1u; }\n else { srcSlot = job.nb[0]; fc = 256u * S + j; }\n } else if (side == 1u) {\n tc = (S - 1u) * S + j;\n if (j == 0u) { srcSlot = job.nb[6]; fc = S + 256u; }\n else if (j == S - 1u) { srcSlot = job.nb[7]; fc = S + 1u; }\n else { srcSlot = job.nb[1]; fc = S + j; }\n } else if (side == 2u) {\n if (j == 0u || j == S - 1u) { return; }\n tc = j * S;\n srcSlot = job.nb[2];\n fc = j * S + 256u;\n } else {\n if (j == 0u || j == S - 1u) { return; }\n tc = j * S + S - 1u;\n srcSlot = job.nb[3];\n fc = j * S + 1u;\n }\n if (srcSlot == NONE) { return; }\n st[job.base + off + tc] = st[srcSlot + off + fc];\n}\n";
25
25
  /**
26
26
  * Shades each job's tile for display over its base tile (or transparent), as `film.ts`'s
27
27
  * `shadeTile` does in 'display' mode (mode 0) or 'bake-all' (mode 1, a preview of drying):
28
28
  * `dispatchWorkgroups(16, 16, jobs)`. Writes RGBA8 (packed little-endian u32) per pixel.
29
29
  */
30
- export declare const WGSL_SHADE = "\nconst S: u32 = 258u;\nconst PL: u32 = 66564u;\nconst SETP: u32 = 18u;\nconst NONE: u32 = 0xffffffffu;\nstruct Job {\n base: u32,\n lane: u32,\n nb: array<u32, 8>,\n w: u32,\n h: u32,\n src: u32,\n pad0: u32,\n pad1: u32,\n pad2: u32,\n};\nstruct Uni {\n parity: u32,\n mode: u32,\n paper: u32,\n pad: u32,\n};\n\n@group(0) @binding(0) var<storage, read> st: array<f32>;\n@group(0) @binding(1) var<storage, read> srcTiles: array<u32>;\n@group(0) @binding(2) var<storage, read> jobs: array<Job>;\n@group(0) @binding(3) var<storage, read_write> outTiles: array<u32>;\n@group(0) @binding(4) var<uniform> u: Uni;\n\nconst HIDE: f32 = 1.5;\n\nfn toLinear(v: f32) -> f32 {\n let x = clamp(v / 255.0, 0.0, 1.0);\n return select(pow((x + 0.055) / 1.055, 2.4), x / 12.92, x <= 0.04045);\n}\nfn toByte(v: f32) -> f32 {\n let x = clamp(v, 0.0, 1.0);\n let e = select(1.055 * pow(x, 1.0 / 2.4) - 0.055, 12.92 * x, x <= 0.0031308);\n return clamp(round(e * 255.0), 0.0, 255.0);\n}\nfn rinf(ks: f32) -> f32 { return 1.0 + ks - sqrt(ks * ks + 2.0 * ks); }\nfn needAlpha(e: f32, p: f32, a: f32) -> f32 {\n if (e < p) { return max(a, 1.0 - e / p); }\n if (e > p) { return max(a, (e - p) / (255.0 - p)); }\n return a;\n}\n\n@compute @workgroup_size(16, 16, 1)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let job = jobs[gid.z];\n let x = gid.x;\n let y = gid.y;\n let o = gid.z * 65536u + y * 256u + x;\n var px = 0u;\n if (job.src != NONE) { px = srcTiles[job.src * 65536u + y * 256u + x]; }\n if (x >= job.w || y >= job.h) { outTiles[o] = px; return; }\n let c = (y + 1u) * S + x + 1u;\n let cur = job.base + u.parity * SETP * PL;\n let d = job.base + 36u * PL;\n let p = cur + 13u * PL;\n var k = vec4<f32>(st[d + c], st[d + PL + c], st[d + 2u * PL + c], st[d + 3u * PL + c]);\n k = k + vec4<f32>(st[p + c], st[p + PL + c], st[p + 2u * PL + c], st[p + 3u * PL + c]);\n var wet = 0.0;\n if (u.mode == 0u) { wet = min(1.0, st[cur + 9u * PL + c] * 4.0 + st[cur + 12u * PL + c]); }\n if (!(k.x > 1e-7 || k.y > 1e-7 || k.z > 1e-7 || k.w > 1e-7) && wet <= 0.0) { outTiles[o] = px; return; }\n let paper = vec3<f32>(f32(u.paper & 255u), f32((u.paper >> 8u) & 255u), f32((u.paper >> 16u) & 255u));\n let pr = vec4<f32>(f32(px & 255u), f32((px >> 8u) & 255u), f32((px >> 16u) & 255u), f32(px >> 24u));\n let a = pr.w / 255.0;\n let below = vec3<f32>(toLinear(a * pr.x + (1.0 - a) * paper.x), toLinear(a * pr.y + (1.0 - a) * paper.y), toLinear(a * pr.z + (1.0 - a) * paper.z));\n let s = k.w;\n var hide = 0.0;\n if (s > 0.0) { hide = 1.0 - exp(-HIDE * s); }\n let keep = 1.0 - hide;\n var inv = 0.0;\n if (s > 1e-9) { inv = 1.0 / s; }\n var film = keep * exp(-2.0 * k.xyz) * below;\n if (hide > 0.0) { film = film + hide * vec3<f32>(rinf(k.x * inv), rinf(k.y * inv), rinf(k.z * inv)); }\n let dark = 1.0 - 0.07 * wet;\n let e = vec3<f32>(toByte(film.x * dark), toByte(film.y * dark), toByte(film.z * dark));\n var alpha = a;\n alpha = needAlpha(e.x, paper.x, alpha);\n alpha = needAlpha(e.y, paper.y, alpha);\n alpha = needAlpha(e.z, paper.z, alpha);\n if (alpha <= 0.0) { outTiles[o] = px & 0x00ffffffu; return; }\n let a8 = max(round(min(1.0, alpha) * 255.0), pr.w);\n let al = a8 / 255.0;\n let kk = 1.0 - al;\n let rgb = clamp(round((e - kk * paper) / al), vec3<f32>(0.0), vec3<f32>(255.0));\n outTiles[o] = u32(rgb.x) | (u32(rgb.y) << 8u) | (u32(rgb.z) << 16u) | (u32(a8) << 24u);\n}\n";
30
+ export declare const WGSL_SHADE = "\nconst S: u32 = 258u;\nconst PL: u32 = 66564u;\nconst SETP: u32 = 19u;\nconst NONE: u32 = 0xffffffffu;\nstruct Job {\n base: u32,\n lane: u32,\n nb: array<u32, 8>,\n w: u32,\n h: u32,\n src: u32,\n pad0: u32,\n pad1: u32,\n pad2: u32,\n};\nstruct Uni {\n parity: u32,\n mode: u32,\n paper: u32,\n pad: u32,\n};\n\n@group(0) @binding(0) var<storage, read> st: array<f32>;\n@group(0) @binding(1) var<storage, read> srcTiles: array<u32>;\n@group(0) @binding(2) var<storage, read> jobs: array<Job>;\n@group(0) @binding(3) var<storage, read_write> outTiles: array<u32>;\n@group(0) @binding(4) var<uniform> u: Uni;\n\nconst HIDE: f32 = 1.5;\n\nfn toLinear(v: f32) -> f32 {\n let x = clamp(v / 255.0, 0.0, 1.0);\n return select(pow((x + 0.055) / 1.055, 2.4), x / 12.92, x <= 0.04045);\n}\nfn toByte(v: f32) -> f32 {\n let x = clamp(v, 0.0, 1.0);\n let e = select(1.055 * pow(x, 1.0 / 2.4) - 0.055, 12.92 * x, x <= 0.0031308);\n return clamp(round(e * 255.0), 0.0, 255.0);\n}\nfn rinf(ks: f32) -> f32 { return 1.0 + ks - sqrt(ks * ks + 2.0 * ks); }\nfn needAlpha(e: f32, p: f32, a: f32) -> f32 {\n if (e < p) { return max(a, 1.0 - e / p); }\n if (e > p) { return max(a, (e - p) / (255.0 - p)); }\n return a;\n}\n\n@compute @workgroup_size(16, 16, 1)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let job = jobs[gid.z];\n let x = gid.x;\n let y = gid.y;\n let o = gid.z * 65536u + y * 256u + x;\n var px = 0u;\n if (job.src != NONE) { px = srcTiles[job.src * 65536u + y * 256u + x]; }\n if (x >= job.w || y >= job.h) { outTiles[o] = px; return; }\n let c = (y + 1u) * S + x + 1u;\n let cur = job.base + u.parity * SETP * PL;\n let d = job.base + 38u * PL;\n let p = cur + 13u * PL;\n var k = vec4<f32>(st[d + c], st[d + PL + c], st[d + 2u * PL + c], st[d + 3u * PL + c]);\n k = k + vec4<f32>(st[p + c], st[p + PL + c], st[p + 2u * PL + c], st[p + 3u * PL + c]);\n var wet = 0.0;\n if (u.mode == 0u) { wet = min(1.0, st[cur + 9u * PL + c] * 4.0 + st[cur + 12u * PL + c]); }\n if (!(k.x > 1e-7 || k.y > 1e-7 || k.z > 1e-7 || k.w > 1e-7) && wet <= 0.0) { outTiles[o] = px; return; }\n let paper = vec3<f32>(f32(u.paper & 255u), f32((u.paper >> 8u) & 255u), f32((u.paper >> 16u) & 255u));\n let pr = vec4<f32>(f32(px & 255u), f32((px >> 8u) & 255u), f32((px >> 16u) & 255u), f32(px >> 24u));\n let a = pr.w / 255.0;\n let below = vec3<f32>(toLinear(a * pr.x + (1.0 - a) * paper.x), toLinear(a * pr.y + (1.0 - a) * paper.y), toLinear(a * pr.z + (1.0 - a) * paper.z));\n let s = k.w;\n var hide = 0.0;\n if (s > 0.0) { hide = 1.0 - exp(-HIDE * s); }\n let keep = 1.0 - hide;\n var inv = 0.0;\n if (s > 1e-9) { inv = 1.0 / s; }\n var film = keep * exp(-2.0 * k.xyz) * below;\n if (hide > 0.0) { film = film + hide * vec3<f32>(rinf(k.x * inv), rinf(k.y * inv), rinf(k.z * inv)); }\n // Light paint: glowing paint shows its own hue (the film over white), as shadeTile does.\n let l = min(1.0, st[d + 4u * PL + c] + st[p + 4u * PL + c]);\n if (l > 1e-7) {\n var w = keep * exp(-2.0 * k.xyz);\n if (hide > 0.0) { w = w + hide * vec3<f32>(rinf(k.x * inv), rinf(k.y * inv), rinf(k.z * inv)); }\n film = film + l * (w - film);\n }\n let dark = 1.0 - 0.07 * wet;\n let e = vec3<f32>(toByte(film.x * dark), toByte(film.y * dark), toByte(film.z * dark));\n var alpha = needAlpha(e.z, paper.z, needAlpha(e.y, paper.y, needAlpha(e.x, paper.x, 0.0)));\n if (hide > 0.0 && alpha < 1.0) { alpha = alpha + hide * (1.0 - alpha); }\n alpha = max(alpha, a);\n if (alpha <= 0.0) { outTiles[o] = px & 0x00ffffffu; return; }\n let a8 = max(round(min(1.0, alpha) * 255.0), pr.w);\n let al = a8 / 255.0;\n let kk = 1.0 - al;\n let rgb = clamp(round((e - kk * paper) / al), vec3<f32>(0.0), vec3<f32>(255.0));\n outTiles[o] = u32(rgb.x) | (u32(rgb.y) << 8u) | (u32(rgb.z) << 16u) | (u32(a8) << 24u);\n}\n";
@@ -21,10 +21,10 @@ export declare const WGSL_STEP: string;
21
21
  * `WetWorld.haloTs` does: `dispatchWorkgroups(17, SET_PLANES, jobs)`. A missing neighbour leaves
22
22
  * the halo as it is.
23
23
  */
24
- export declare const WGSL_HALO = "\nconst S: u32 = 258u;\nconst PL: u32 = 66564u;\nconst SETP: u32 = 18u;\nconst NONE: u32 = 0xffffffffu;\nstruct Job {\n base: u32,\n lane: u32,\n nb: array<u32, 8>,\n w: u32,\n h: u32,\n src: u32,\n pad0: u32,\n pad1: u32,\n pad2: u32,\n};\nstruct Uni {\n parity: u32,\n mode: u32,\n paper: u32,\n pad: u32,\n};\n\n@group(0) @binding(0) var<storage, read_write> st: array<f32>;\n@group(0) @binding(2) var<storage, read> jobs: array<Job>;\n@group(0) @binding(4) var<uniform> u: Uni;\n\n@compute @workgroup_size(64, 1, 1)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let i = gid.x;\n if (i >= 4u * S) { return; }\n let job = jobs[gid.z];\n let side = i / S;\n let j = i % S;\n let off = u.parity * SETP * PL + gid.y * PL;\n var srcSlot = NONE;\n var fc = 0u;\n var tc = 0u;\n if (side == 0u) {\n tc = j;\n if (j == 0u) { srcSlot = job.nb[4]; fc = 256u * S + 256u; }\n else if (j == S - 1u) { srcSlot = job.nb[5]; fc = 256u * S + 1u; }\n else { srcSlot = job.nb[0]; fc = 256u * S + j; }\n } else if (side == 1u) {\n tc = (S - 1u) * S + j;\n if (j == 0u) { srcSlot = job.nb[6]; fc = S + 256u; }\n else if (j == S - 1u) { srcSlot = job.nb[7]; fc = S + 1u; }\n else { srcSlot = job.nb[1]; fc = S + j; }\n } else if (side == 2u) {\n if (j == 0u || j == S - 1u) { return; }\n tc = j * S;\n srcSlot = job.nb[2];\n fc = j * S + 256u;\n } else {\n if (j == 0u || j == S - 1u) { return; }\n tc = j * S + S - 1u;\n srcSlot = job.nb[3];\n fc = j * S + 1u;\n }\n if (srcSlot == NONE) { return; }\n st[job.base + off + tc] = st[srcSlot + off + fc];\n}\n";
24
+ export declare const WGSL_HALO = "\nconst S: u32 = 258u;\nconst PL: u32 = 66564u;\nconst SETP: u32 = 19u;\nconst NONE: u32 = 0xffffffffu;\nstruct Job {\n base: u32,\n lane: u32,\n nb: array<u32, 8>,\n w: u32,\n h: u32,\n src: u32,\n pad0: u32,\n pad1: u32,\n pad2: u32,\n};\nstruct Uni {\n parity: u32,\n mode: u32,\n paper: u32,\n pad: u32,\n};\n\n@group(0) @binding(0) var<storage, read_write> st: array<f32>;\n@group(0) @binding(2) var<storage, read> jobs: array<Job>;\n@group(0) @binding(4) var<uniform> u: Uni;\n\n@compute @workgroup_size(64, 1, 1)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let i = gid.x;\n if (i >= 4u * S) { return; }\n let job = jobs[gid.z];\n let side = i / S;\n let j = i % S;\n let off = u.parity * SETP * PL + gid.y * PL;\n var srcSlot = NONE;\n var fc = 0u;\n var tc = 0u;\n if (side == 0u) {\n tc = j;\n if (j == 0u) { srcSlot = job.nb[4]; fc = 256u * S + 256u; }\n else if (j == S - 1u) { srcSlot = job.nb[5]; fc = 256u * S + 1u; }\n else { srcSlot = job.nb[0]; fc = 256u * S + j; }\n } else if (side == 1u) {\n tc = (S - 1u) * S + j;\n if (j == 0u) { srcSlot = job.nb[6]; fc = S + 256u; }\n else if (j == S - 1u) { srcSlot = job.nb[7]; fc = S + 1u; }\n else { srcSlot = job.nb[1]; fc = S + j; }\n } else if (side == 2u) {\n if (j == 0u || j == S - 1u) { return; }\n tc = j * S;\n srcSlot = job.nb[2];\n fc = j * S + 256u;\n } else {\n if (j == 0u || j == S - 1u) { return; }\n tc = j * S + S - 1u;\n srcSlot = job.nb[3];\n fc = j * S + 1u;\n }\n if (srcSlot == NONE) { return; }\n st[job.base + off + tc] = st[srcSlot + off + fc];\n}\n";
25
25
  /**
26
26
  * Shades each job's tile for display over its base tile (or transparent), as `film.ts`'s
27
27
  * `shadeTile` does in 'display' mode (mode 0) or 'bake-all' (mode 1, a preview of drying):
28
28
  * `dispatchWorkgroups(16, 16, jobs)`. Writes RGBA8 (packed little-endian u32) per pixel.
29
29
  */
30
- export declare const WGSL_SHADE = "\nconst S: u32 = 258u;\nconst PL: u32 = 66564u;\nconst SETP: u32 = 18u;\nconst NONE: u32 = 0xffffffffu;\nstruct Job {\n base: u32,\n lane: u32,\n nb: array<u32, 8>,\n w: u32,\n h: u32,\n src: u32,\n pad0: u32,\n pad1: u32,\n pad2: u32,\n};\nstruct Uni {\n parity: u32,\n mode: u32,\n paper: u32,\n pad: u32,\n};\n\n@group(0) @binding(0) var<storage, read> st: array<f32>;\n@group(0) @binding(1) var<storage, read> srcTiles: array<u32>;\n@group(0) @binding(2) var<storage, read> jobs: array<Job>;\n@group(0) @binding(3) var<storage, read_write> outTiles: array<u32>;\n@group(0) @binding(4) var<uniform> u: Uni;\n\nconst HIDE: f32 = 1.5;\n\nfn toLinear(v: f32) -> f32 {\n let x = clamp(v / 255.0, 0.0, 1.0);\n return select(pow((x + 0.055) / 1.055, 2.4), x / 12.92, x <= 0.04045);\n}\nfn toByte(v: f32) -> f32 {\n let x = clamp(v, 0.0, 1.0);\n let e = select(1.055 * pow(x, 1.0 / 2.4) - 0.055, 12.92 * x, x <= 0.0031308);\n return clamp(round(e * 255.0), 0.0, 255.0);\n}\nfn rinf(ks: f32) -> f32 { return 1.0 + ks - sqrt(ks * ks + 2.0 * ks); }\nfn needAlpha(e: f32, p: f32, a: f32) -> f32 {\n if (e < p) { return max(a, 1.0 - e / p); }\n if (e > p) { return max(a, (e - p) / (255.0 - p)); }\n return a;\n}\n\n@compute @workgroup_size(16, 16, 1)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let job = jobs[gid.z];\n let x = gid.x;\n let y = gid.y;\n let o = gid.z * 65536u + y * 256u + x;\n var px = 0u;\n if (job.src != NONE) { px = srcTiles[job.src * 65536u + y * 256u + x]; }\n if (x >= job.w || y >= job.h) { outTiles[o] = px; return; }\n let c = (y + 1u) * S + x + 1u;\n let cur = job.base + u.parity * SETP * PL;\n let d = job.base + 36u * PL;\n let p = cur + 13u * PL;\n var k = vec4<f32>(st[d + c], st[d + PL + c], st[d + 2u * PL + c], st[d + 3u * PL + c]);\n k = k + vec4<f32>(st[p + c], st[p + PL + c], st[p + 2u * PL + c], st[p + 3u * PL + c]);\n var wet = 0.0;\n if (u.mode == 0u) { wet = min(1.0, st[cur + 9u * PL + c] * 4.0 + st[cur + 12u * PL + c]); }\n if (!(k.x > 1e-7 || k.y > 1e-7 || k.z > 1e-7 || k.w > 1e-7) && wet <= 0.0) { outTiles[o] = px; return; }\n let paper = vec3<f32>(f32(u.paper & 255u), f32((u.paper >> 8u) & 255u), f32((u.paper >> 16u) & 255u));\n let pr = vec4<f32>(f32(px & 255u), f32((px >> 8u) & 255u), f32((px >> 16u) & 255u), f32(px >> 24u));\n let a = pr.w / 255.0;\n let below = vec3<f32>(toLinear(a * pr.x + (1.0 - a) * paper.x), toLinear(a * pr.y + (1.0 - a) * paper.y), toLinear(a * pr.z + (1.0 - a) * paper.z));\n let s = k.w;\n var hide = 0.0;\n if (s > 0.0) { hide = 1.0 - exp(-HIDE * s); }\n let keep = 1.0 - hide;\n var inv = 0.0;\n if (s > 1e-9) { inv = 1.0 / s; }\n var film = keep * exp(-2.0 * k.xyz) * below;\n if (hide > 0.0) { film = film + hide * vec3<f32>(rinf(k.x * inv), rinf(k.y * inv), rinf(k.z * inv)); }\n let dark = 1.0 - 0.07 * wet;\n let e = vec3<f32>(toByte(film.x * dark), toByte(film.y * dark), toByte(film.z * dark));\n var alpha = a;\n alpha = needAlpha(e.x, paper.x, alpha);\n alpha = needAlpha(e.y, paper.y, alpha);\n alpha = needAlpha(e.z, paper.z, alpha);\n if (alpha <= 0.0) { outTiles[o] = px & 0x00ffffffu; return; }\n let a8 = max(round(min(1.0, alpha) * 255.0), pr.w);\n let al = a8 / 255.0;\n let kk = 1.0 - al;\n let rgb = clamp(round((e - kk * paper) / al), vec3<f32>(0.0), vec3<f32>(255.0));\n outTiles[o] = u32(rgb.x) | (u32(rgb.y) << 8u) | (u32(rgb.z) << 16u) | (u32(a8) << 24u);\n}\n";
30
+ export declare const WGSL_SHADE = "\nconst S: u32 = 258u;\nconst PL: u32 = 66564u;\nconst SETP: u32 = 19u;\nconst NONE: u32 = 0xffffffffu;\nstruct Job {\n base: u32,\n lane: u32,\n nb: array<u32, 8>,\n w: u32,\n h: u32,\n src: u32,\n pad0: u32,\n pad1: u32,\n pad2: u32,\n};\nstruct Uni {\n parity: u32,\n mode: u32,\n paper: u32,\n pad: u32,\n};\n\n@group(0) @binding(0) var<storage, read> st: array<f32>;\n@group(0) @binding(1) var<storage, read> srcTiles: array<u32>;\n@group(0) @binding(2) var<storage, read> jobs: array<Job>;\n@group(0) @binding(3) var<storage, read_write> outTiles: array<u32>;\n@group(0) @binding(4) var<uniform> u: Uni;\n\nconst HIDE: f32 = 1.5;\n\nfn toLinear(v: f32) -> f32 {\n let x = clamp(v / 255.0, 0.0, 1.0);\n return select(pow((x + 0.055) / 1.055, 2.4), x / 12.92, x <= 0.04045);\n}\nfn toByte(v: f32) -> f32 {\n let x = clamp(v, 0.0, 1.0);\n let e = select(1.055 * pow(x, 1.0 / 2.4) - 0.055, 12.92 * x, x <= 0.0031308);\n return clamp(round(e * 255.0), 0.0, 255.0);\n}\nfn rinf(ks: f32) -> f32 { return 1.0 + ks - sqrt(ks * ks + 2.0 * ks); }\nfn needAlpha(e: f32, p: f32, a: f32) -> f32 {\n if (e < p) { return max(a, 1.0 - e / p); }\n if (e > p) { return max(a, (e - p) / (255.0 - p)); }\n return a;\n}\n\n@compute @workgroup_size(16, 16, 1)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let job = jobs[gid.z];\n let x = gid.x;\n let y = gid.y;\n let o = gid.z * 65536u + y * 256u + x;\n var px = 0u;\n if (job.src != NONE) { px = srcTiles[job.src * 65536u + y * 256u + x]; }\n if (x >= job.w || y >= job.h) { outTiles[o] = px; return; }\n let c = (y + 1u) * S + x + 1u;\n let cur = job.base + u.parity * SETP * PL;\n let d = job.base + 38u * PL;\n let p = cur + 13u * PL;\n var k = vec4<f32>(st[d + c], st[d + PL + c], st[d + 2u * PL + c], st[d + 3u * PL + c]);\n k = k + vec4<f32>(st[p + c], st[p + PL + c], st[p + 2u * PL + c], st[p + 3u * PL + c]);\n var wet = 0.0;\n if (u.mode == 0u) { wet = min(1.0, st[cur + 9u * PL + c] * 4.0 + st[cur + 12u * PL + c]); }\n if (!(k.x > 1e-7 || k.y > 1e-7 || k.z > 1e-7 || k.w > 1e-7) && wet <= 0.0) { outTiles[o] = px; return; }\n let paper = vec3<f32>(f32(u.paper & 255u), f32((u.paper >> 8u) & 255u), f32((u.paper >> 16u) & 255u));\n let pr = vec4<f32>(f32(px & 255u), f32((px >> 8u) & 255u), f32((px >> 16u) & 255u), f32(px >> 24u));\n let a = pr.w / 255.0;\n let below = vec3<f32>(toLinear(a * pr.x + (1.0 - a) * paper.x), toLinear(a * pr.y + (1.0 - a) * paper.y), toLinear(a * pr.z + (1.0 - a) * paper.z));\n let s = k.w;\n var hide = 0.0;\n if (s > 0.0) { hide = 1.0 - exp(-HIDE * s); }\n let keep = 1.0 - hide;\n var inv = 0.0;\n if (s > 1e-9) { inv = 1.0 / s; }\n var film = keep * exp(-2.0 * k.xyz) * below;\n if (hide > 0.0) { film = film + hide * vec3<f32>(rinf(k.x * inv), rinf(k.y * inv), rinf(k.z * inv)); }\n // Light paint: glowing paint shows its own hue (the film over white), as shadeTile does.\n let l = min(1.0, st[d + 4u * PL + c] + st[p + 4u * PL + c]);\n if (l > 1e-7) {\n var w = keep * exp(-2.0 * k.xyz);\n if (hide > 0.0) { w = w + hide * vec3<f32>(rinf(k.x * inv), rinf(k.y * inv), rinf(k.z * inv)); }\n film = film + l * (w - film);\n }\n let dark = 1.0 - 0.07 * wet;\n let e = vec3<f32>(toByte(film.x * dark), toByte(film.y * dark), toByte(film.z * dark));\n var alpha = needAlpha(e.z, paper.z, needAlpha(e.y, paper.y, needAlpha(e.x, paper.x, 0.0)));\n if (hide > 0.0 && alpha < 1.0) { alpha = alpha + hide * (1.0 - alpha); }\n alpha = max(alpha, a);\n if (alpha <= 0.0) { outTiles[o] = px & 0x00ffffffu; return; }\n let a8 = max(round(min(1.0, alpha) * 255.0), pr.w);\n let al = a8 / 255.0;\n let kk = 1.0 - al;\n let rgb = clamp(round((e - kk * paper) / al), vec3<f32>(0.0), vec3<f32>(255.0));\n outTiles[o] = u32(rgb.x) | (u32(rgb.y) << 8u) | (u32(rgb.z) << 16u) | (u32(a8) << 24u);\n}\n";