@luma.gl/effects 9.2.6 → 9.3.0-alpha.11

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 (101) hide show
  1. package/dist/dist.dev.js +2734 -644
  2. package/dist/dist.min.js +10 -9
  3. package/dist/index.cjs +753 -302
  4. package/dist/index.cjs.map +3 -3
  5. package/dist/passes/postprocessing/fxaa/fxaa.d.ts +1 -0
  6. package/dist/passes/postprocessing/fxaa/fxaa.d.ts.map +1 -1
  7. package/dist/passes/postprocessing/fxaa/fxaa.js +287 -0
  8. package/dist/passes/postprocessing/fxaa/fxaa.js.map +1 -1
  9. package/dist/passes/postprocessing/image-adjust-filters/brightnesscontrast.d.ts +2 -2
  10. package/dist/passes/postprocessing/image-adjust-filters/brightnesscontrast.d.ts.map +1 -1
  11. package/dist/passes/postprocessing/image-adjust-filters/brightnesscontrast.js +6 -7
  12. package/dist/passes/postprocessing/image-adjust-filters/brightnesscontrast.js.map +1 -1
  13. package/dist/passes/postprocessing/image-adjust-filters/denoise.d.ts +2 -2
  14. package/dist/passes/postprocessing/image-adjust-filters/denoise.d.ts.map +1 -1
  15. package/dist/passes/postprocessing/image-adjust-filters/denoise.js +32 -24
  16. package/dist/passes/postprocessing/image-adjust-filters/denoise.js.map +1 -1
  17. package/dist/passes/postprocessing/image-adjust-filters/huesaturation.d.ts +2 -2
  18. package/dist/passes/postprocessing/image-adjust-filters/huesaturation.d.ts.map +1 -1
  19. package/dist/passes/postprocessing/image-adjust-filters/huesaturation.js +26 -33
  20. package/dist/passes/postprocessing/image-adjust-filters/huesaturation.js.map +1 -1
  21. package/dist/passes/postprocessing/image-adjust-filters/noise.d.ts +2 -2
  22. package/dist/passes/postprocessing/image-adjust-filters/noise.d.ts.map +1 -1
  23. package/dist/passes/postprocessing/image-adjust-filters/noise.js +10 -9
  24. package/dist/passes/postprocessing/image-adjust-filters/noise.js.map +1 -1
  25. package/dist/passes/postprocessing/image-adjust-filters/sepia.d.ts +2 -2
  26. package/dist/passes/postprocessing/image-adjust-filters/sepia.d.ts.map +1 -1
  27. package/dist/passes/postprocessing/image-adjust-filters/sepia.js +12 -11
  28. package/dist/passes/postprocessing/image-adjust-filters/sepia.js.map +1 -1
  29. package/dist/passes/postprocessing/image-adjust-filters/vibrance.d.ts +2 -2
  30. package/dist/passes/postprocessing/image-adjust-filters/vibrance.js +10 -10
  31. package/dist/passes/postprocessing/image-adjust-filters/vignette.d.ts +2 -2
  32. package/dist/passes/postprocessing/image-adjust-filters/vignette.d.ts.map +1 -1
  33. package/dist/passes/postprocessing/image-adjust-filters/vignette.js +11 -15
  34. package/dist/passes/postprocessing/image-adjust-filters/vignette.js.map +1 -1
  35. package/dist/passes/postprocessing/image-blur-filters/tiltshift.d.ts +3 -3
  36. package/dist/passes/postprocessing/image-blur-filters/tiltshift.d.ts.map +1 -1
  37. package/dist/passes/postprocessing/image-blur-filters/tiltshift.js +36 -18
  38. package/dist/passes/postprocessing/image-blur-filters/tiltshift.js.map +1 -1
  39. package/dist/passes/postprocessing/image-blur-filters/triangleblur.d.ts +3 -3
  40. package/dist/passes/postprocessing/image-blur-filters/triangleblur.d.ts.map +1 -1
  41. package/dist/passes/postprocessing/image-blur-filters/triangleblur.js +27 -18
  42. package/dist/passes/postprocessing/image-blur-filters/triangleblur.js.map +1 -1
  43. package/dist/passes/postprocessing/image-blur-filters/zoomblur.d.ts +3 -3
  44. package/dist/passes/postprocessing/image-blur-filters/zoomblur.d.ts.map +1 -1
  45. package/dist/passes/postprocessing/image-blur-filters/zoomblur.js +22 -13
  46. package/dist/passes/postprocessing/image-blur-filters/zoomblur.js.map +1 -1
  47. package/dist/passes/postprocessing/image-fun-filters/colorhalftone.d.ts +2 -2
  48. package/dist/passes/postprocessing/image-fun-filters/colorhalftone.d.ts.map +1 -1
  49. package/dist/passes/postprocessing/image-fun-filters/colorhalftone.js +20 -18
  50. package/dist/passes/postprocessing/image-fun-filters/colorhalftone.js.map +1 -1
  51. package/dist/passes/postprocessing/image-fun-filters/dotscreen.d.ts +2 -2
  52. package/dist/passes/postprocessing/image-fun-filters/dotscreen.js +12 -12
  53. package/dist/passes/postprocessing/image-fun-filters/edgework.d.ts +3 -3
  54. package/dist/passes/postprocessing/image-fun-filters/edgework.d.ts.map +1 -1
  55. package/dist/passes/postprocessing/image-fun-filters/edgework.js +85 -14
  56. package/dist/passes/postprocessing/image-fun-filters/edgework.js.map +1 -1
  57. package/dist/passes/postprocessing/image-fun-filters/hexagonalpixelate.d.ts +2 -2
  58. package/dist/passes/postprocessing/image-fun-filters/hexagonalpixelate.d.ts.map +1 -1
  59. package/dist/passes/postprocessing/image-fun-filters/hexagonalpixelate.js +35 -23
  60. package/dist/passes/postprocessing/image-fun-filters/hexagonalpixelate.js.map +1 -1
  61. package/dist/passes/postprocessing/image-fun-filters/ink.d.ts +2 -2
  62. package/dist/passes/postprocessing/image-fun-filters/ink.d.ts.map +1 -1
  63. package/dist/passes/postprocessing/image-fun-filters/ink.js +26 -17
  64. package/dist/passes/postprocessing/image-fun-filters/ink.js.map +1 -1
  65. package/dist/passes/postprocessing/image-fun-filters/magnify.d.ts +2 -2
  66. package/dist/passes/postprocessing/image-fun-filters/magnify.d.ts.map +1 -1
  67. package/dist/passes/postprocessing/image-fun-filters/magnify.js +23 -13
  68. package/dist/passes/postprocessing/image-fun-filters/magnify.js.map +1 -1
  69. package/dist/passes/postprocessing/image-warp-filters/bulgepinch.d.ts +3 -3
  70. package/dist/passes/postprocessing/image-warp-filters/bulgepinch.d.ts.map +1 -1
  71. package/dist/passes/postprocessing/image-warp-filters/bulgepinch.js +28 -14
  72. package/dist/passes/postprocessing/image-warp-filters/bulgepinch.js.map +1 -1
  73. package/dist/passes/postprocessing/image-warp-filters/swirl.d.ts +3 -3
  74. package/dist/passes/postprocessing/image-warp-filters/swirl.d.ts.map +1 -1
  75. package/dist/passes/postprocessing/image-warp-filters/swirl.js +21 -16
  76. package/dist/passes/postprocessing/image-warp-filters/swirl.js.map +1 -1
  77. package/dist/passes/postprocessing/image-warp-filters/warp.d.ts +1 -1
  78. package/dist/passes/postprocessing/image-warp-filters/warp.d.ts.map +1 -1
  79. package/dist/passes/postprocessing/image-warp-filters/warp.js +9 -4
  80. package/dist/passes/postprocessing/image-warp-filters/warp.js.map +1 -1
  81. package/package.json +4 -5
  82. package/src/passes/postprocessing/fxaa/fxaa.ts +288 -0
  83. package/src/passes/postprocessing/image-adjust-filters/brightnesscontrast.ts +6 -7
  84. package/src/passes/postprocessing/image-adjust-filters/denoise.ts +34 -26
  85. package/src/passes/postprocessing/image-adjust-filters/huesaturation.ts +28 -35
  86. package/src/passes/postprocessing/image-adjust-filters/noise.ts +10 -9
  87. package/src/passes/postprocessing/image-adjust-filters/sepia.ts +12 -11
  88. package/src/passes/postprocessing/image-adjust-filters/vibrance.ts +10 -10
  89. package/src/passes/postprocessing/image-adjust-filters/vignette.ts +11 -15
  90. package/src/passes/postprocessing/image-blur-filters/tiltshift.ts +38 -20
  91. package/src/passes/postprocessing/image-blur-filters/triangleblur.ts +27 -18
  92. package/src/passes/postprocessing/image-blur-filters/zoomblur.ts +23 -14
  93. package/src/passes/postprocessing/image-fun-filters/colorhalftone.ts +20 -18
  94. package/src/passes/postprocessing/image-fun-filters/dotscreen.ts +12 -12
  95. package/src/passes/postprocessing/image-fun-filters/edgework.ts +86 -15
  96. package/src/passes/postprocessing/image-fun-filters/hexagonalpixelate.ts +39 -27
  97. package/src/passes/postprocessing/image-fun-filters/ink.ts +26 -17
  98. package/src/passes/postprocessing/image-fun-filters/magnify.ts +23 -13
  99. package/src/passes/postprocessing/image-warp-filters/bulgepinch.ts +28 -14
  100. package/src/passes/postprocessing/image-warp-filters/swirl.ts +21 -16
  101. package/src/passes/postprocessing/image-warp-filters/warp.ts +9 -4
@@ -2,48 +2,41 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
  const source = /* wgsl */ `\
5
-
6
5
  struct hueSaturationUniforms {
7
6
  hue: f32,
8
7
  saturation: f32,
9
8
  };
10
9
 
11
- @group(0), @binding(1) var<uniform> hueSaturation: hueSaturationUniforms;
10
+ @group(0) @binding(auto) var<uniform> hueSaturation: hueSaturationUniforms;
11
+
12
+ fn hueSaturation_filterColor(color: vec4f) -> vec4f {
13
+ let angle = hueSaturation.hue * 3.14159265;
14
+ let s = sin(angle);
15
+ let c = cos(angle);
16
+ let weights = (vec3f(2.0 * c, -sqrt(3.0) * s - c, sqrt(3.0) * s - c) + vec3f(1.0)) / 3.0;
17
+
18
+ var resultRgb = vec3f(
19
+ dot(color.rgb, weights.xyz),
20
+ dot(color.rgb, weights.zxy),
21
+ dot(color.rgb, weights.yzx)
22
+ );
23
+
24
+ let average = (resultRgb.r + resultRgb.g + resultRgb.b) / 3.0;
25
+ if (hueSaturation.saturation > 0.0) {
26
+ resultRgb += (vec3f(average) - resultRgb) * (1.0 - 1.0 / (1.001 - hueSaturation.saturation));
27
+ } else {
28
+ resultRgb += (vec3f(average) - resultRgb) * (-hueSaturation.saturation);
29
+ }
12
30
 
13
- fn hueSaturation_filterColor(color: vec4<f32>) -> vec4<f32> {
14
- let angle: f32 = hueSaturation.hue * 3.1415927;
15
- let s: f32 = sin(angle);
16
- let c: f32 = cos(angle);
17
- let weights: vec3<f32> = (vec3<f32>(2. * c, -sqrt(3.) * s - c, sqrt(3.) * s - c) + 1.) / 3.;
18
- let len: f32 = length(color.rgb);
19
- var colorrgb = color.rgb;
20
- colorrgb = vec3<f32>(dot(color.rgb, weights.xyz), dot(color.rgb, weights.zxy), dot(color.rgb, weights.yzx));
21
- color.r = colorrgb.x;
22
- color.g = colorrgb.y;
23
- color.b = colorrgb.z;
24
- let average: f32 = (color.r + color.g + color.b) / 3.;
25
- if (hueSaturation.saturation > 0.) {
26
- var colorrgb = color.rgb;
27
- colorrgb = color.rgb + ((average - color.rgb) * (1. - 1. / (1.001 - hueSaturation.saturation)));
28
- color.r = colorrgb.x;
29
- color.g = colorrgb.y;
30
- color.b = colorrgb.z;
31
- } else {
32
- var colorrgb = color.rgb;
33
- colorrgb = color.rgb + ((average - color.rgb) * -hueSaturation.saturation);
34
- color.r = colorrgb.x;
35
- color.g = colorrgb.y;
36
- color.b = colorrgb.z;
37
- }
38
- return color;
39
- }
31
+ return vec4f(resultRgb, color.a);
32
+ }
40
33
 
41
- fn hueSaturation_filterColor_ext(color: vec4<f32>, texSize: vec2<f32>, texCoord: vec2<f32>) -> vec4<f32> {
42
- return hueSaturation_filterColor(color);
43
- }
34
+ fn hueSaturation_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f {
35
+ return hueSaturation_filterColor(color);
36
+ }
44
37
  `;
45
38
  const fs = /* glsl */ `\
46
- uniform hueSaturationUniforms {
39
+ layout(std140) uniform hueSaturationUniforms {
47
40
  float hue;
48
41
  float saturation;
49
42
  } hueSaturation;
@@ -1 +1 @@
1
- {"version":3,"file":"huesaturation.js","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-adjust-filters/huesaturation.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,MAAM,MAAM,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCzB,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCrB,CAAC;AAeF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,EAAwB;IAE/B,IAAI,EAAE,eAAe;IACrB,MAAM;IACN,EAAE;IAEF,YAAY,EAAE;QACZ,GAAG,EAAE,KAAK;QACV,UAAU,EAAE,KAAK;KAClB;IACD,SAAS,EAAE;QACT,GAAG,EAAE,EAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAC;QAChC,UAAU,EAAE,EAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAC;KACxC;IACD,MAAM,EAAE,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;CACyB,CAAC"}
1
+ {"version":3,"file":"huesaturation.js","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-adjust-filters/huesaturation.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,MAAM,MAAM,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCzB,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCrB,CAAC;AAeF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,EAAwB;IAE/B,IAAI,EAAE,eAAe;IACrB,MAAM;IACN,EAAE;IAEF,YAAY,EAAE;QACZ,GAAG,EAAE,KAAK;QACV,UAAU,EAAE,KAAK;KAClB;IACD,SAAS,EAAE;QACT,GAAG,EAAE,EAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAC;QAChC,UAAU,EAAE,EAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAC;KACxC;IACD,MAAM,EAAE,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;CACyB,CAAC"}
@@ -12,8 +12,8 @@ export type NoiseUniforms = NoiseProps;
12
12
  */
13
13
  export declare const noise: {
14
14
  readonly name: "noise";
15
- readonly fs: "uniform noiseUniforms {\n float amount;\n} noise;\n\nfloat rand(vec2 co) {\n return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);\n}\n\nvec4 noise_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {\n float diff = (rand(texCoord) - 0.5) * noise.amount;\n color.r += diff;\n color.g += diff;\n color.b += diff;\n return color;\n}\n";
16
- readonly source: "struct noiseUniforms {\n amount: f32\n};\n\n@group(0) @binding(1) var<uniform> noise: noiseUniforms;\n\nfn rand(co: vec2f) -> f32 {\n\treturn fract(sin(dot(co.xy, vec2f(12.9898, 78.233))) * 43758.547);\n} \n\nfn noise_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f {\n\tlet diff: f32 = (rand(texCoord) - 0.5) * noise.amount;\n\tcolor.r = color.r + (diff);\n\tcolor.g = color.g + (diff);\n\tcolor.b = color.b + (diff);\n\treturn color;\n} \n";
15
+ readonly fs: "layout(std140) uniform noiseUniforms {\n float amount;\n} noise;\n\nfloat rand(vec2 co) {\n return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);\n}\n\nvec4 noise_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {\n float diff = (rand(texCoord) - 0.5) * noise.amount;\n color.r += diff;\n color.g += diff;\n color.b += diff;\n return color;\n}\n";
16
+ readonly source: "struct noiseUniforms {\n amount: f32,\n};\n\n@group(0) @binding(auto) var<uniform> noise: noiseUniforms;\n\nfn rand(co: vec2f) -> f32 {\n\treturn fract(sin(dot(co.xy, vec2f(12.9898, 78.233))) * 43758.547);\n} \n\nfn noise_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f {\n let diff = (rand(texCoord) - 0.5) * noise.amount;\n var result = color;\n result.r += diff;\n result.g += diff;\n result.b += diff;\n return result;\n}\n";
17
17
  readonly props: NoiseProps;
18
18
  readonly uniforms: NoiseUniforms;
19
19
  readonly uniformTypes: {
@@ -1 +1 @@
1
- {"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-adjust-filters/noise.ts"],"names":[],"mappings":"AA4CA;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC;AAEvC;;;GAGG;AACH,eAAO,MAAM,KAAK;;;;oBAKH,UAAU;uBACP,aAAa;;;;;;;;;;;;;;CASwB,CAAC"}
1
+ {"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-adjust-filters/noise.ts"],"names":[],"mappings":"AA6CA;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC;AAEvC;;;GAGG;AACH,eAAO,MAAM,KAAK;;;;oBAKH,UAAU;uBACP,aAAa;;;;;;;;;;;;;;CASwB,CAAC"}
@@ -3,25 +3,26 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
  const source = /* wgsl */ `\
5
5
  struct noiseUniforms {
6
- amount: f32
6
+ amount: f32,
7
7
  };
8
8
 
9
- @group(0) @binding(1) var<uniform> noise: noiseUniforms;
9
+ @group(0) @binding(auto) var<uniform> noise: noiseUniforms;
10
10
 
11
11
  fn rand(co: vec2f) -> f32 {
12
12
  return fract(sin(dot(co.xy, vec2f(12.9898, 78.233))) * 43758.547);
13
13
  }
14
14
 
15
15
  fn noise_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f {
16
- let diff: f32 = (rand(texCoord) - 0.5) * noise.amount;
17
- color.r = color.r + (diff);
18
- color.g = color.g + (diff);
19
- color.b = color.b + (diff);
20
- return color;
21
- }
16
+ let diff = (rand(texCoord) - 0.5) * noise.amount;
17
+ var result = color;
18
+ result.r += diff;
19
+ result.g += diff;
20
+ result.b += diff;
21
+ return result;
22
+ }
22
23
  `;
23
24
  const fs = /* glsl */ `\
24
- uniform noiseUniforms {
25
+ layout(std140) uniform noiseUniforms {
25
26
  float amount;
26
27
  } noise;
27
28
 
@@ -1 +1 @@
1
- {"version":3,"file":"noise.js","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-adjust-filters/noise.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,MAAM,MAAM,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;CAkBzB,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;CAgBrB,CAAC;AAYF;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,OAAO;IACb,EAAE;IACF,MAAM;IAEN,KAAK,EAAE,EAAgB;IACvB,QAAQ,EAAE,EAAmB;IAC7B,YAAY,EAAE;QACZ,MAAM,EAAE,KAAK;KACd;IACD,SAAS,EAAE;QACT,MAAM,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAC;KACrC;IAED,MAAM,EAAE,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;CAC6B,CAAC"}
1
+ {"version":3,"file":"noise.js","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-adjust-filters/noise.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,MAAM,MAAM,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;CAmBzB,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;CAgBrB,CAAC;AAYF;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,OAAO;IACb,EAAE;IACF,MAAM;IAEN,KAAK,EAAE,EAAgB;IACvB,QAAQ,EAAE,EAAmB;IAC7B,YAAY,EAAE;QACZ,MAAM,EAAE,KAAK;KACd;IACD,SAAS,EAAE;QACT,MAAM,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAC;KACrC;IAED,MAAM,EAAE,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;CAC6B,CAAC"}
@@ -21,8 +21,8 @@ export declare const sepia: {
21
21
  readonly max: 1;
22
22
  };
23
23
  };
24
- readonly fs: "uniform sepiaUniforms {\n float amount;\n} sepia;\n\nvec4 sepia_filterColor(vec4 color) {\n float r = color.r;\n float g = color.g;\n float b = color.b;\n\n color.r =\n min(1.0, (r * (1.0 - (0.607 * sepia.amount))) + (g * (0.769 * sepia.amount)) + (b * (0.189 * sepia.amount)));\n color.g = min(1.0, (r * 0.349 * sepia.amount) + (g * (1.0 - (0.314 * sepia.amount))) + (b * 0.168 * sepia.amount));\n color.b = min(1.0, (r * 0.272 * sepia.amount) + (g * 0.534 * sepia.amount) + (b * (1.0 - (0.869 * sepia.amount))));\n\n return color;\n}\n\nvec4 sepia_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {\n return sepia_filterColor(color);\n}\n";
25
- readonly source: "struct sepiaUniforms {\n amount: f32\n};\n\n@group(0) @binding(1) var<uniform> sepia: sepiaUniforms;\n\nfn sepia_filterColor(color: vec4f) -> vec4f {\n let r: f32 = color.r;\n let g: f32 = color.g;\n let b: f32 = color.b;\n\n color.r =\n min(1.0, (r * (1.0 - (0.607 * sepia.amount))) + (g * (0.769 * sepia.amount)) + (b * (0.189 * sepia.amount)));\n color.g = min(1.0, (r * 0.349 * sepia.amount) + (g * (1.0 - (0.314 * sepia.amount))) + (b * 0.168 * sepia.amount));\n color.b = min(1.0, (r * 0.272 * sepia.amount) + (g * 0.534 * sepia.amount) + (b * (1.0 - (0.869 * sepia.amount))));\n\n return color;\n}\n\nvec4 sepia_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {\n return sepia_filterColor(color);\n}\n";
24
+ readonly fs: "layout(std140) uniform sepiaUniforms {\n float amount;\n} sepia;\n\nvec4 sepia_filterColor(vec4 color) {\n float r = color.r;\n float g = color.g;\n float b = color.b;\n\n color.r =\n min(1.0, (r * (1.0 - (0.607 * sepia.amount))) + (g * (0.769 * sepia.amount)) + (b * (0.189 * sepia.amount)));\n color.g = min(1.0, (r * 0.349 * sepia.amount) + (g * (1.0 - (0.314 * sepia.amount))) + (b * 0.168 * sepia.amount));\n color.b = min(1.0, (r * 0.272 * sepia.amount) + (g * 0.534 * sepia.amount) + (b * (1.0 - (0.869 * sepia.amount))));\n\n return color;\n}\n\nvec4 sepia_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {\n return sepia_filterColor(color);\n}\n";
25
+ readonly source: "struct sepiaUniforms {\n amount: f32,\n};\n\n@group(0) @binding(auto) var<uniform> sepia: sepiaUniforms;\n\nfn sepia_filterColor(color: vec4f) -> vec4f {\n let r = color.r;\n let g = color.g;\n let b = color.b;\n\n var result = color;\n result.r =\n min(1.0, (r * (1.0 - (0.607 * sepia.amount))) + (g * (0.769 * sepia.amount)) + (b * (0.189 * sepia.amount)));\n result.g = min(1.0, (r * 0.349 * sepia.amount) + (g * (1.0 - (0.314 * sepia.amount))) + (b * 0.168 * sepia.amount));\n result.b = min(1.0, (r * 0.272 * sepia.amount) + (g * 0.534 * sepia.amount) + (b * (1.0 - (0.869 * sepia.amount))));\n\n return result;\n}\n\nfn sepia_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f {\n return sepia_filterColor(color);\n}\n";
26
26
  readonly passes: [{
27
27
  readonly filter: true;
28
28
  }];
@@ -1 +1 @@
1
- {"version":3,"file":"sepia.d.ts","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-adjust-filters/sepia.ts"],"names":[],"mappings":"AAsDA,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC;AAEvC;;;;GAIG;AACH,eAAO,MAAM,KAAK;oBACH,UAAU;uBACP,aAAa;;;;;;;;;;;;;;;;;CAYwB,CAAC"}
1
+ {"version":3,"file":"sepia.d.ts","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-adjust-filters/sepia.ts"],"names":[],"mappings":"AAuDA,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC;AAEvC;;;;GAIG;AACH,eAAO,MAAM,KAAK;oBACH,UAAU;uBACP,aAAa;;;;;;;;;;;;;;;;;CAYwB,CAAC"}
@@ -3,30 +3,31 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
  const source = /* wgsl */ `\
5
5
  struct sepiaUniforms {
6
- amount: f32
6
+ amount: f32,
7
7
  };
8
8
 
9
- @group(0) @binding(1) var<uniform> sepia: sepiaUniforms;
9
+ @group(0) @binding(auto) var<uniform> sepia: sepiaUniforms;
10
10
 
11
11
  fn sepia_filterColor(color: vec4f) -> vec4f {
12
- let r: f32 = color.r;
13
- let g: f32 = color.g;
14
- let b: f32 = color.b;
12
+ let r = color.r;
13
+ let g = color.g;
14
+ let b = color.b;
15
15
 
16
- color.r =
16
+ var result = color;
17
+ result.r =
17
18
  min(1.0, (r * (1.0 - (0.607 * sepia.amount))) + (g * (0.769 * sepia.amount)) + (b * (0.189 * sepia.amount)));
18
- color.g = min(1.0, (r * 0.349 * sepia.amount) + (g * (1.0 - (0.314 * sepia.amount))) + (b * 0.168 * sepia.amount));
19
- color.b = min(1.0, (r * 0.272 * sepia.amount) + (g * 0.534 * sepia.amount) + (b * (1.0 - (0.869 * sepia.amount))));
19
+ result.g = min(1.0, (r * 0.349 * sepia.amount) + (g * (1.0 - (0.314 * sepia.amount))) + (b * 0.168 * sepia.amount));
20
+ result.b = min(1.0, (r * 0.272 * sepia.amount) + (g * 0.534 * sepia.amount) + (b * (1.0 - (0.869 * sepia.amount))));
20
21
 
21
- return color;
22
+ return result;
22
23
  }
23
24
 
24
- vec4 sepia_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {
25
+ fn sepia_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f {
25
26
  return sepia_filterColor(color);
26
27
  }
27
28
  `;
28
29
  const fs = /* glsl */ `\
29
- uniform sepiaUniforms {
30
+ layout(std140) uniform sepiaUniforms {
30
31
  float amount;
31
32
  } sepia;
32
33
 
@@ -1 +1 @@
1
- {"version":3,"file":"sepia.js","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-adjust-filters/sepia.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,MAAM,MAAM,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAuBzB,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBrB,CAAC;AAQF;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,KAAK,EAAE,EAAgB;IACvB,QAAQ,EAAE,EAAmB;IAE7B,IAAI,EAAE,OAAO;IACb,YAAY,EAAE;QACZ,MAAM,EAAE,KAAK;KACd;IACD,SAAS,EAAE;QACT,MAAM,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAC;KACrC;IACD,EAAE;IACF,MAAM;IACN,MAAM,EAAE,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;CAC6B,CAAC"}
1
+ {"version":3,"file":"sepia.js","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-adjust-filters/sepia.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,MAAM,MAAM,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAwBzB,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBrB,CAAC;AAQF;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,KAAK,EAAE,EAAgB;IACvB,QAAQ,EAAE,EAAmB;IAE7B,IAAI,EAAE,OAAO;IACb,YAAY,EAAE;QACZ,MAAM,EAAE,KAAK;KACd;IACD,SAAS,EAAE;QACT,MAAM,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAC;KACrC;IACD,EAAE;IACF,MAAM;IACN,MAAM,EAAE,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;CAC6B,CAAC"}
@@ -21,8 +21,8 @@ export declare const vibrance: {
21
21
  readonly max: 1;
22
22
  };
23
23
  };
24
- readonly source: "struct vibranceUniforms {\n amount: f32\n};\n\n@group(0) @binding(1) var<uniform> vibrance: vibranceUniforms;\n\nfn vibrance_filterColor(vec4f color) -> vec4f {\n let average: f32 = (color.r + color.g + color.b) / 3.0;\n let mx: f32 = max(color.r, max(color.g, color.b));\n let amt: f32 = (mx - average) * (-vibrance.amount * 3.0);\n color.rgb = mix(color.rgb, vec3(mx), amt);\n return color;\n}\n\nvec4 vibrance_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {\n return vibrance_filterColor(color);\n}\n";
25
- readonly fs: "uniform vibranceUniforms {\n float amount;\n} vibrance;\n\nvec4 vibrance_filterColor(vec4 color) {\n float average = (color.r + color.g + color.b) / 3.0;\n float mx = max(color.r, max(color.g, color.b));\n float amt = (mx - average) * (-vibrance.amount * 3.0);\n color.rgb = mix(color.rgb, vec3(mx), amt);\n return color;\n}\n\nvec4 vibrance_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {\n return vibrance_filterColor(color);\n}\n";
24
+ readonly source: "struct vibranceUniforms {\n amount: f32,\n};\n\n@group(0) @binding(auto) var<uniform> vibrance: vibranceUniforms;\n\nfn vibrance_filterColor(color: vec4f) -> vec4f {\n let average = (color.r + color.g + color.b) / 3.0;\n let mx = max(color.r, max(color.g, color.b));\n let amt = (mx - average) * (-vibrance.amount * 3.0);\n let resultRgb = mix(color.rgb, vec3f(mx), amt);\n return vec4f(resultRgb, color.a);\n}\n\nfn vibrance_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f {\n return vibrance_filterColor(color);\n}\n";
25
+ readonly fs: "layout(std140) uniform vibranceUniforms {\n float amount;\n} vibrance;\n\nvec4 vibrance_filterColor(vec4 color) {\n float average = (color.r + color.g + color.b) / 3.0;\n float mx = max(color.r, max(color.g, color.b));\n float amt = (mx - average) * (-vibrance.amount * 3.0);\n color.rgb = mix(color.rgb, vec3(mx), amt);\n return color;\n}\n\nvec4 vibrance_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {\n return vibrance_filterColor(color);\n}\n";
26
26
  readonly passes: [{
27
27
  readonly filter: true;
28
28
  }];
@@ -3,25 +3,25 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
  const source = /* wgsl */ `\
5
5
  struct vibranceUniforms {
6
- amount: f32
6
+ amount: f32,
7
7
  };
8
8
 
9
- @group(0) @binding(1) var<uniform> vibrance: vibranceUniforms;
9
+ @group(0) @binding(auto) var<uniform> vibrance: vibranceUniforms;
10
10
 
11
- fn vibrance_filterColor(vec4f color) -> vec4f {
12
- let average: f32 = (color.r + color.g + color.b) / 3.0;
13
- let mx: f32 = max(color.r, max(color.g, color.b));
14
- let amt: f32 = (mx - average) * (-vibrance.amount * 3.0);
15
- color.rgb = mix(color.rgb, vec3(mx), amt);
16
- return color;
11
+ fn vibrance_filterColor(color: vec4f) -> vec4f {
12
+ let average = (color.r + color.g + color.b) / 3.0;
13
+ let mx = max(color.r, max(color.g, color.b));
14
+ let amt = (mx - average) * (-vibrance.amount * 3.0);
15
+ let resultRgb = mix(color.rgb, vec3f(mx), amt);
16
+ return vec4f(resultRgb, color.a);
17
17
  }
18
18
 
19
- vec4 vibrance_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {
19
+ fn vibrance_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f {
20
20
  return vibrance_filterColor(color);
21
21
  }
22
22
  `;
23
23
  const fs = /* glsl */ `\
24
- uniform vibranceUniforms {
24
+ layout(std140) uniform vibranceUniforms {
25
25
  float amount;
26
26
  } vibrance;
27
27
 
@@ -16,8 +16,8 @@ export declare const vignette: {
16
16
  readonly props: VignetteProps;
17
17
  readonly uniforms: VignetteUniforms;
18
18
  readonly name: "vignette";
19
- readonly source: "struct vignetteUniforms {\n radius: f32,\n amount: f32\n};\n\n@group(0) @binding(1) var<uniform> vignette: vignetteUniforms;\n\nfn vibrance_filterColor(color: vec4f) -> vec4f {\n let average: f32 = (color.r + color.g + color.b) / 3.0;\n let mx: f32 = max(color.r, max(color.g, color.b));\n let amt: f32 = (mx - average) * (-vibrance.amount * 3.0);\n color.rgb = mix(color.rgb, vec3f(mx), amt);\n return color;\n}\n\nfn vignette_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) ->vec4f {\n let dist: f32 = distance(texCoord, vec2f(0.5, 0.5));\n let ratio: f32 = smoothstep(0.8, vignette.radius * 0.799, dist * (vignette.amount + vignette.radius));\n return color.rgba * ratio + (1.0 - ratio)*vec4f(0.0, 0.0, 0.0, 1.0);\n}\n";
20
- readonly fs: "uniform vignetteUniforms {\n float radius;\n float amount;\n} vignette;\n\nvec4 vignette_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {\n float dist = distance(texCoord, vec2(0.5, 0.5));\n float ratio = smoothstep(0.8, vignette.radius * 0.799, dist * (vignette.amount + vignette.radius));\n return color.rgba * ratio + (1.0 - ratio)*vec4(0.0, 0.0, 0.0, 1.0);\n}\n";
19
+ readonly source: "struct vignetteUniforms {\n radius: f32,\n amount: f32,\n};\n\n@group(0) @binding(auto) var<uniform> vignette: vignetteUniforms;\n\nfn vignette_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f {\n let dist = distance(texCoord, vec2f(0.5, 0.5));\n let ratio = smoothstep(\n 0.8,\n vignette.radius * 0.799,\n dist * (vignette.amount + vignette.radius)\n );\n return color * ratio + vec4f(0.0, 0.0, 0.0, 1.0) * (1.0 - ratio);\n}\n";
20
+ readonly fs: "layout(std140) uniform vignetteUniforms {\n float radius;\n float amount;\n} vignette;\n\nvec4 vignette_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {\n float dist = distance(texCoord, vec2(0.5, 0.5));\n float ratio = smoothstep(0.8, vignette.radius * 0.799, dist * (vignette.amount + vignette.radius));\n return color.rgba * ratio + (1.0 - ratio)*vec4(0.0, 0.0, 0.0, 1.0);\n}\n";
21
21
  readonly uniformTypes: {
22
22
  readonly radius: "f32";
23
23
  readonly amount: "f32";
@@ -1 +1 @@
1
- {"version":3,"file":"vignette.d.ts","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-adjust-filters/vignette.ts"],"names":[],"mappings":"AA0CA;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,QAAQ;oBACN,aAAa;uBACV,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoB2B,CAAC"}
1
+ {"version":3,"file":"vignette.d.ts","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-adjust-filters/vignette.ts"],"names":[],"mappings":"AAsCA;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,QAAQ;oBACN,aAAa;uBACV,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoB2B,CAAC"}
@@ -4,27 +4,23 @@
4
4
  const source = /* wgsl */ `\
5
5
  struct vignetteUniforms {
6
6
  radius: f32,
7
- amount: f32
7
+ amount: f32,
8
8
  };
9
9
 
10
- @group(0) @binding(1) var<uniform> vignette: vignetteUniforms;
10
+ @group(0) @binding(auto) var<uniform> vignette: vignetteUniforms;
11
11
 
12
- fn vibrance_filterColor(color: vec4f) -> vec4f {
13
- let average: f32 = (color.r + color.g + color.b) / 3.0;
14
- let mx: f32 = max(color.r, max(color.g, color.b));
15
- let amt: f32 = (mx - average) * (-vibrance.amount * 3.0);
16
- color.rgb = mix(color.rgb, vec3f(mx), amt);
17
- return color;
18
- }
19
-
20
- fn vignette_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) ->vec4f {
21
- let dist: f32 = distance(texCoord, vec2f(0.5, 0.5));
22
- let ratio: f32 = smoothstep(0.8, vignette.radius * 0.799, dist * (vignette.amount + vignette.radius));
23
- return color.rgba * ratio + (1.0 - ratio)*vec4f(0.0, 0.0, 0.0, 1.0);
12
+ fn vignette_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f {
13
+ let dist = distance(texCoord, vec2f(0.5, 0.5));
14
+ let ratio = smoothstep(
15
+ 0.8,
16
+ vignette.radius * 0.799,
17
+ dist * (vignette.amount + vignette.radius)
18
+ );
19
+ return color * ratio + vec4f(0.0, 0.0, 0.0, 1.0) * (1.0 - ratio);
24
20
  }
25
21
  `;
26
22
  const fs = /* glsl */ `\
27
- uniform vignetteUniforms {
23
+ layout(std140) uniform vignetteUniforms {
28
24
  float radius;
29
25
  float amount;
30
26
  } vignette;
@@ -1 +1 @@
1
- {"version":3,"file":"vignette.js","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-adjust-filters/vignette.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,MAAM,MAAM,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBzB,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;;;;;;;CAWrB,CAAC;AAcF;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,KAAK,EAAE,EAAmB;IAC1B,QAAQ,EAAE,EAAsB;IAEhC,IAAI,EAAE,UAAU;IAChB,MAAM;IACN,EAAE;IAEF,YAAY,EAAE;QACZ,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,KAAK;KACd;IACD,eAAe,EAAE;QACf,MAAM,EAAE,GAAG;QACX,MAAM,EAAE,GAAG;KACZ;IACD,SAAS,EAAE;QACT,MAAM,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAC;QACpC,MAAM,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAC;KACrC;IAED,MAAM,EAAE,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;CACmC,CAAC"}
1
+ {"version":3,"file":"vignette.js","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-adjust-filters/vignette.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,MAAM,MAAM,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;CAiBzB,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;;;;;;;CAWrB,CAAC;AAcF;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,KAAK,EAAE,EAAmB;IAC1B,QAAQ,EAAE,EAAsB;IAEhC,IAAI,EAAE,UAAU;IAChB,MAAM;IACN,EAAE;IAEF,YAAY,EAAE;QACZ,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,KAAK;KACd;IACD,eAAe,EAAE;QACf,MAAM,EAAE,GAAG;QACX,MAAM,EAAE,GAAG;KACZ;IACD,SAAS,EAAE;QACT,MAAM,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAC;QACpC,MAAM,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAC;KACrC;IAED,MAAM,EAAE,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC;CACmC,CAAC"}
@@ -30,11 +30,11 @@ export declare const tiltShift: {
30
30
  readonly name: "tiltShift";
31
31
  readonly dependencies: [{
32
32
  readonly name: "random";
33
- readonly source: "fn random(scale: vec3f, seed: float) -> f32 {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n";
33
+ readonly source: "fn random(scale: vec3f, seed: f32) -> f32 {\n return fract(sin(dot(scale + vec3f(seed), vec3f(12.9898, 78.233, 151.7182))) * 43758.5453 + seed);\n}\n";
34
34
  readonly fs: "float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n";
35
35
  }];
36
- readonly source: "uniform tiltShiftUniforms {\n blurRadius: f32,\n gradientRadius: f32,\n start: vec2f,\n end: vec2f,\n invert: u32,\n};\n\n@group(0) @binding(1) var<uniform> tiltShift: tiltShiftUniforms;\n\nfn tiltShift_getDelta(vec2 texSize) -> vec2f {\n vec2 vector = normalize((tiltShift.end - tiltShift.start) * texSize);\n return tiltShift.invert ? vec2(-vector.y, vector.x) : vector;\n}\n\nfn tiltShift_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) -> vec4f {\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n vec2 normal = normalize(vec2((tiltShift.start.y - tiltShift.end.y) * texSize.y, (tiltShift.end.x - tiltShift.start.x) * texSize.x));\n float radius = smoothstep(0.0, 1.0,\n abs(dot(texCoord * texSize - tiltShift.start * texSize, normal)) / tiltShift.gradientRadius) * tiltShift.blurRadius;\n\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 offsetColor = texture(source, texCoord + tiltShift_getDelta(texSize) / texSize * percent * radius);\n\n color += offsetColor * weight;\n total += weight;\n }\n\n color = color / total;\n return color;\n}\n";
37
- readonly fs: "uniform tiltShiftUniforms {\n float blurRadius;\n float gradientRadius;\n vec2 start;\n vec2 end;\n bool invert;\n} tiltShift;\n\nvec2 tiltShift_getDelta(vec2 texSize) {\n vec2 vector = normalize((tiltShift.end - tiltShift.start) * texSize);\n return tiltShift.invert ? vec2(-vector.y, vector.x) : vector;\n}\n\nvec4 tiltShift_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n vec2 normal = normalize(vec2((tiltShift.start.y - tiltShift.end.y) * texSize.y, (tiltShift.end.x - tiltShift.start.x) * texSize.x));\n float radius = smoothstep(0.0, 1.0,\n abs(dot(texCoord * texSize - tiltShift.start * texSize, normal)) / tiltShift.gradientRadius) * tiltShift.blurRadius;\n\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 offsetColor = texture(source, texCoord + tiltShift_getDelta(texSize) / texSize * percent * radius);\n color += offsetColor * weight;\n total += weight;\n }\n\n color = color / total;\n return color;\n}\n";
36
+ readonly source: "struct tiltShiftUniforms {\n blurRadius: f32,\n gradientRadius: f32,\n start: vec2f,\n end: vec2f,\n invert: u32,\n};\n\n@group(0) @binding(auto) var<uniform> tiltShift: tiltShiftUniforms;\n\nfn tiltShift_getDelta(texSize: vec2f) -> vec2f {\n let vector = normalize((tiltShift.end - tiltShift.start) * texSize);\n return select(vector, vec2f(-vector.y, vector.x), tiltShift.invert != 0u);\n}\n\nfn tiltShift_sampleColor(\n sourceTexture: texture_2d<f32>,\n sourceTextureSampler: sampler,\n texSize: vec2f,\n texCoord: vec2f\n) -> vec4f {\n var color = vec4f(0.0);\n var total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n let offset = random(vec3f(12.9898, 78.233, 151.7182), 0.0);\n\n let normal = normalize(\n vec2f(\n (tiltShift.start.y - tiltShift.end.y) * texSize.y,\n (tiltShift.end.x - tiltShift.start.x) * texSize.x\n )\n );\n let radius =\n smoothstep(\n 0.0,\n 1.0,\n abs(dot(texCoord * texSize - tiltShift.start * texSize, normal)) / tiltShift.gradientRadius\n ) * tiltShift.blurRadius;\n\n for (var t = -30.0; t <= 30.0; t += 1.0) {\n let percent = (t + offset - 0.5) / 30.0;\n let weight = 1.0 - abs(percent);\n let offsetColor = textureSample(\n sourceTexture,\n sourceTextureSampler,\n texCoord + tiltShift_getDelta(texSize) / texSize * percent * radius\n );\n\n color += offsetColor * weight;\n total += weight;\n }\n\n color /= total;\n return color;\n}\n";
37
+ readonly fs: "layout(std140) uniform tiltShiftUniforms {\n float blurRadius;\n float gradientRadius;\n vec2 start;\n vec2 end;\n bool invert;\n} tiltShift;\n\nvec2 tiltShift_getDelta(vec2 texSize) {\n vec2 vector = normalize((tiltShift.end - tiltShift.start) * texSize);\n return tiltShift.invert ? vec2(-vector.y, vector.x) : vector;\n}\n\nvec4 tiltShift_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n vec2 normal = normalize(vec2((tiltShift.start.y - tiltShift.end.y) * texSize.y, (tiltShift.end.x - tiltShift.start.x) * texSize.x));\n float radius = smoothstep(0.0, 1.0,\n abs(dot(texCoord * texSize - tiltShift.start * texSize, normal)) / tiltShift.gradientRadius) * tiltShift.blurRadius;\n\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 offsetColor = texture(source, texCoord + tiltShift_getDelta(texSize) / texSize * percent * radius);\n color += offsetColor * weight;\n total += weight;\n }\n\n color = color / total;\n return color;\n}\n";
38
38
  readonly props: TiltShiftProps;
39
39
  readonly uniforms: TiltShiftUniforms;
40
40
  readonly uniformTypes: {
@@ -1 +1 @@
1
- {"version":3,"file":"tiltshift.d.ts","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-blur-filters/tiltshift.ts"],"names":[],"mappings":"AAsFA;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,2DAA2D;IAC3D,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS;;;;;;;;;oBAMP,cAAc;uBACX,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoB4B,CAAC"}
1
+ {"version":3,"file":"tiltshift.d.ts","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-blur-filters/tiltshift.ts"],"names":[],"mappings":"AAwGA;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,2DAA2D;IAC3D,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS;;;;;;;;;oBAMP,cAAc;uBACX,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoB4B,CAAC"}
@@ -3,7 +3,7 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
  import { random } from '@luma.gl/shadertools';
5
5
  const source = /* wgsl */ `\
6
- uniform tiltShiftUniforms {
6
+ struct tiltShiftUniforms {
7
7
  blurRadius: f32,
8
8
  gradientRadius: f32,
9
9
  start: vec2f,
@@ -11,39 +11,57 @@ uniform tiltShiftUniforms {
11
11
  invert: u32,
12
12
  };
13
13
 
14
- @group(0) @binding(1) var<uniform> tiltShift: tiltShiftUniforms;
14
+ @group(0) @binding(auto) var<uniform> tiltShift: tiltShiftUniforms;
15
15
 
16
- fn tiltShift_getDelta(vec2 texSize) -> vec2f {
17
- vec2 vector = normalize((tiltShift.end - tiltShift.start) * texSize);
18
- return tiltShift.invert ? vec2(-vector.y, vector.x) : vector;
16
+ fn tiltShift_getDelta(texSize: vec2f) -> vec2f {
17
+ let vector = normalize((tiltShift.end - tiltShift.start) * texSize);
18
+ return select(vector, vec2f(-vector.y, vector.x), tiltShift.invert != 0u);
19
19
  }
20
20
 
21
- fn tiltShift_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) -> vec4f {
22
- vec4 color = vec4(0.0);
23
- float total = 0.0;
21
+ fn tiltShift_sampleColor(
22
+ sourceTexture: texture_2d<f32>,
23
+ sourceTextureSampler: sampler,
24
+ texSize: vec2f,
25
+ texCoord: vec2f
26
+ ) -> vec4f {
27
+ var color = vec4f(0.0);
28
+ var total = 0.0;
24
29
 
25
30
  /* randomize the lookup values to hide the fixed number of samples */
26
- float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);
31
+ let offset = random(vec3f(12.9898, 78.233, 151.7182), 0.0);
27
32
 
28
- vec2 normal = normalize(vec2((tiltShift.start.y - tiltShift.end.y) * texSize.y, (tiltShift.end.x - tiltShift.start.x) * texSize.x));
29
- float radius = smoothstep(0.0, 1.0,
30
- abs(dot(texCoord * texSize - tiltShift.start * texSize, normal)) / tiltShift.gradientRadius) * tiltShift.blurRadius;
33
+ let normal = normalize(
34
+ vec2f(
35
+ (tiltShift.start.y - tiltShift.end.y) * texSize.y,
36
+ (tiltShift.end.x - tiltShift.start.x) * texSize.x
37
+ )
38
+ );
39
+ let radius =
40
+ smoothstep(
41
+ 0.0,
42
+ 1.0,
43
+ abs(dot(texCoord * texSize - tiltShift.start * texSize, normal)) / tiltShift.gradientRadius
44
+ ) * tiltShift.blurRadius;
31
45
 
32
- for (float t = -30.0; t <= 30.0; t++) {
33
- float percent = (t + offset - 0.5) / 30.0;
34
- float weight = 1.0 - abs(percent);
35
- vec4 offsetColor = texture(source, texCoord + tiltShift_getDelta(texSize) / texSize * percent * radius);
46
+ for (var t = -30.0; t <= 30.0; t += 1.0) {
47
+ let percent = (t + offset - 0.5) / 30.0;
48
+ let weight = 1.0 - abs(percent);
49
+ let offsetColor = textureSample(
50
+ sourceTexture,
51
+ sourceTextureSampler,
52
+ texCoord + tiltShift_getDelta(texSize) / texSize * percent * radius
53
+ );
36
54
 
37
55
  color += offsetColor * weight;
38
56
  total += weight;
39
57
  }
40
58
 
41
- color = color / total;
59
+ color /= total;
42
60
  return color;
43
61
  }
44
62
  `;
45
63
  const fs = /* glsl */ `\
46
- uniform tiltShiftUniforms {
64
+ layout(std140) uniform tiltShiftUniforms {
47
65
  float blurRadius;
48
66
  float gradientRadius;
49
67
  vec2 start;
@@ -1 +1 @@
1
- {"version":3,"file":"tiltshift.js","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-blur-filters/tiltshift.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAE5C,MAAM,MAAM,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCzB,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCrB,CAAC;AAqBF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,WAAW;IACjB,YAAY,EAAE,CAAC,MAAM,CAAC;IACtB,MAAM;IACN,EAAE;IAEF,KAAK,EAAE,EAAoB;IAC3B,QAAQ,EAAE,EAAuB;IACjC,YAAY,EAAE;QACZ,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,KAAK;QACrB,KAAK,EAAE,WAAW;QAClB,GAAG,EAAE,WAAW;QAChB,MAAM,EAAE,KAAK;KACd;IACD,SAAS,EAAE;QACT,UAAU,EAAE,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAC;QACxC,cAAc,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAC;QAC9C,KAAK,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC;QACtB,GAAG,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC;QACpB,MAAM,EAAE,EAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAC;KAClC;IAED,MAAM,EAAE;QACN,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAC,MAAM,EAAE,CAAC,EAAC,EAAC;QACtC,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAC,MAAM,EAAE,CAAC,EAAC,EAAC;KACvC;CAC4D,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;EAwBE"}
1
+ {"version":3,"file":"tiltshift.js","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-blur-filters/tiltshift.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAE5C,MAAM,MAAM,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDzB,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCrB,CAAC;AAqBF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,WAAW;IACjB,YAAY,EAAE,CAAC,MAAM,CAAC;IACtB,MAAM;IACN,EAAE;IAEF,KAAK,EAAE,EAAoB;IAC3B,QAAQ,EAAE,EAAuB;IACjC,YAAY,EAAE;QACZ,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,KAAK;QACrB,KAAK,EAAE,WAAW;QAClB,GAAG,EAAE,WAAW;QAChB,MAAM,EAAE,KAAK;KACd;IACD,SAAS,EAAE;QACT,UAAU,EAAE,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAC;QACxC,cAAc,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAC;QAC9C,KAAK,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC;QACtB,GAAG,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC;QACpB,MAAM,EAAE,EAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAC;KAClC;IAED,MAAM,EAAE;QACN,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAC,MAAM,EAAE,CAAC,EAAC,EAAC;QACtC,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAC,MAAM,EAAE,CAAC,EAAC,EAAC;KACvC;CAC4D,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;EAwBE"}
@@ -21,11 +21,11 @@ export declare const triangleBlur: {
21
21
  readonly name: "triangleBlur";
22
22
  readonly dependencies: [{
23
23
  readonly name: "random";
24
- readonly source: "fn random(scale: vec3f, seed: float) -> f32 {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n";
24
+ readonly source: "fn random(scale: vec3f, seed: f32) -> f32 {\n return fract(sin(dot(scale + vec3f(seed), vec3f(12.9898, 78.233, 151.7182))) * 43758.5453 + seed);\n}\n";
25
25
  readonly fs: "float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n";
26
26
  }];
27
- readonly source: "uniform triangleBlurUniforms {\n radius: f32,\n delta: vec2f,\n}\n\n@group(0) @binding(1) var<uniform> triangleBlur: triangleBlurUniforms;\n\nvec4 triangleBlur_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec2 adjustedDelta = triangleBlur.delta * triangleBlur.radius / texSize;\n\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 offsetColor = texture(source, texCoord + adjustedDelta * percent);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n offsetColor.rgb *= offsetColor.a;\n\n color += offsetColor * weight;\n total += weight;\n }\n\n color = color / total;\n\n /* switch back from pre-multiplied alpha */\n color.rgb /= color.a + 0.00001;\n\n return color;\n}\n";
28
- readonly fs: "uniform triangleBlurUniforms {\n float radius;\n vec2 delta;\n} triangleBlur;\n\nvec4 triangleBlur_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec2 adjustedDelta = triangleBlur.delta * triangleBlur.radius / texSize;\n\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 offsetColor = texture(source, texCoord + adjustedDelta * percent);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n offsetColor.rgb *= offsetColor.a;\n\n color += offsetColor * weight;\n total += weight;\n }\n\n color = color / total;\n\n /* switch back from pre-multiplied alpha */\n color.rgb /= color.a + 0.00001;\n\n return color;\n}\n";
27
+ readonly source: "struct triangleBlurUniforms {\n radius: f32,\n delta: vec2f,\n};\n\n@group(0) @binding(auto) var<uniform> triangleBlur: triangleBlurUniforms;\n\nfn triangleBlur_sampleColor(\n sourceTexture: texture_2d<f32>,\n sourceTextureSampler: sampler,\n texSize: vec2f,\n texCoord: vec2f\n) -> vec4f {\n let adjustedDelta = triangleBlur.delta * triangleBlur.radius / texSize;\n\n var color = vec4f(0.0);\n var total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n let offset = random(vec3f(12.9898, 78.233, 151.7182), 0.0);\n\n for (var t = -30.0; t <= 30.0; t += 1.0) {\n let percent = (t + offset - 0.5) / 30.0;\n let weight = 1.0 - abs(percent);\n let offsetColor = textureSample(\n sourceTexture,\n sourceTextureSampler,\n texCoord + adjustedDelta * percent\n );\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n let premultipliedOffsetColor = vec4f(offsetColor.rgb * vec3f(offsetColor.a), offsetColor.a);\n\n color += premultipliedOffsetColor * weight;\n total += weight;\n }\n\n color /= total;\n\n /* switch back from pre-multiplied alpha */\n let unpremultipliedRgb = color.rgb / vec3f(color.a + 0.00001);\n\n return vec4f(unpremultipliedRgb, color.a);\n}\n";
28
+ readonly fs: "layout(std140) uniform triangleBlurUniforms {\n float radius;\n vec2 delta;\n} triangleBlur;\n\nvec4 triangleBlur_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec2 adjustedDelta = triangleBlur.delta * triangleBlur.radius / texSize;\n\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 offsetColor = texture(source, texCoord + adjustedDelta * percent);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n offsetColor.rgb *= offsetColor.a;\n\n color += offsetColor * weight;\n total += weight;\n }\n\n color = color / total;\n\n /* switch back from pre-multiplied alpha */\n color.rgb /= color.a + 0.00001;\n\n return color;\n}\n";
29
29
  readonly props: TriangleBlurProps;
30
30
  readonly uniforms: TriangleBlurUniforms;
31
31
  readonly uniformTypes: {
@@ -1 +1 @@
1
- {"version":3,"file":"triangleblur.d.ts","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-blur-filters/triangleblur.ts"],"names":[],"mappings":"AAiFA;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAErD;;;;;GAKG;AACH,eAAO,MAAM,YAAY;;;;;;;;;oBAMV,iBAAiB;uBACd,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAc+B,CAAC"}
1
+ {"version":3,"file":"triangleblur.d.ts","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-blur-filters/triangleblur.ts"],"names":[],"mappings":"AA0FA;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAErD;;;;;GAKG;AACH,eAAO,MAAM,YAAY;;;;;;;;;oBAMV,iBAAiB;uBACd,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAc+B,CAAC"}
@@ -3,44 +3,53 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
  import { random } from '@luma.gl/shadertools';
5
5
  const source = /* wgsl */ `\
6
- uniform triangleBlurUniforms {
6
+ struct triangleBlurUniforms {
7
7
  radius: f32,
8
8
  delta: vec2f,
9
- }
9
+ };
10
10
 
11
- @group(0) @binding(1) var<uniform> triangleBlur: triangleBlurUniforms;
11
+ @group(0) @binding(auto) var<uniform> triangleBlur: triangleBlurUniforms;
12
12
 
13
- vec4 triangleBlur_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {
14
- vec2 adjustedDelta = triangleBlur.delta * triangleBlur.radius / texSize;
13
+ fn triangleBlur_sampleColor(
14
+ sourceTexture: texture_2d<f32>,
15
+ sourceTextureSampler: sampler,
16
+ texSize: vec2f,
17
+ texCoord: vec2f
18
+ ) -> vec4f {
19
+ let adjustedDelta = triangleBlur.delta * triangleBlur.radius / texSize;
15
20
 
16
- vec4 color = vec4(0.0);
17
- float total = 0.0;
21
+ var color = vec4f(0.0);
22
+ var total = 0.0;
18
23
 
19
24
  /* randomize the lookup values to hide the fixed number of samples */
20
- float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);
25
+ let offset = random(vec3f(12.9898, 78.233, 151.7182), 0.0);
21
26
 
22
- for (float t = -30.0; t <= 30.0; t++) {
23
- float percent = (t + offset - 0.5) / 30.0;
24
- float weight = 1.0 - abs(percent);
25
- vec4 offsetColor = texture(source, texCoord + adjustedDelta * percent);
27
+ for (var t = -30.0; t <= 30.0; t += 1.0) {
28
+ let percent = (t + offset - 0.5) / 30.0;
29
+ let weight = 1.0 - abs(percent);
30
+ let offsetColor = textureSample(
31
+ sourceTexture,
32
+ sourceTextureSampler,
33
+ texCoord + adjustedDelta * percent
34
+ );
26
35
 
27
36
  /* switch to pre-multiplied alpha to correctly blur transparent images */
28
- offsetColor.rgb *= offsetColor.a;
37
+ let premultipliedOffsetColor = vec4f(offsetColor.rgb * vec3f(offsetColor.a), offsetColor.a);
29
38
 
30
- color += offsetColor * weight;
39
+ color += premultipliedOffsetColor * weight;
31
40
  total += weight;
32
41
  }
33
42
 
34
- color = color / total;
43
+ color /= total;
35
44
 
36
45
  /* switch back from pre-multiplied alpha */
37
- color.rgb /= color.a + 0.00001;
46
+ let unpremultipliedRgb = color.rgb / vec3f(color.a + 0.00001);
38
47
 
39
- return color;
48
+ return vec4f(unpremultipliedRgb, color.a);
40
49
  }
41
50
  `;
42
51
  const fs = /* glsl */ `\
43
- uniform triangleBlurUniforms {
52
+ layout(std140) uniform triangleBlurUniforms {
44
53
  float radius;
45
54
  vec2 delta;
46
55
  } triangleBlur;
@@ -1 +1 @@
1
- {"version":3,"file":"triangleblur.js","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-blur-filters/triangleblur.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAE5C,MAAM,MAAM,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCzB,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCrB,CAAC;AAiBF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,cAAc;IACpB,YAAY,EAAE,CAAC,MAAM,CAAC;IACtB,MAAM;IACN,EAAE;IAEF,KAAK,EAAE,EAAuB;IAC9B,QAAQ,EAAE,EAA0B;IACpC,YAAY,EAAE;QACZ,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,WAAW;KACnB;IACD,SAAS,EAAE;QACT,MAAM,EAAE,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAC;QACzC,KAAK,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAC;KACtC;IAED,MAAM,EAAE;QACN,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,EAAC;QAC1C,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,EAAC;KAC3C;CACkE,CAAC"}
1
+ {"version":3,"file":"triangleblur.js","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-blur-filters/triangleblur.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAE5C,MAAM,MAAM,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6CzB,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCrB,CAAC;AAiBF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,cAAc;IACpB,YAAY,EAAE,CAAC,MAAM,CAAC;IACtB,MAAM;IACN,EAAE;IAEF,KAAK,EAAE,EAAuB;IAC9B,QAAQ,EAAE,EAA0B;IACpC,YAAY,EAAE;QACZ,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,WAAW;KACnB;IACD,SAAS,EAAE;QACT,MAAM,EAAE,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAC;QACzC,KAAK,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAC;KACtC;IAED,MAAM,EAAE;QACN,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,EAAC;QAC1C,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,EAAC;KAC3C;CACkE,CAAC"}
@@ -16,11 +16,11 @@ export declare const zoomBlur: {
16
16
  readonly name: "zoomBlur";
17
17
  readonly dependencies: [{
18
18
  readonly name: "random";
19
- readonly source: "fn random(scale: vec3f, seed: float) -> f32 {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n";
19
+ readonly source: "fn random(scale: vec3f, seed: f32) -> f32 {\n return fract(sin(dot(scale + vec3f(seed), vec3f(12.9898, 78.233, 151.7182))) * 43758.5453 + seed);\n}\n";
20
20
  readonly fs: "float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n";
21
21
  }];
22
- readonly source: "\nuniform zoomBlurUniforms {\n center: vec2f,\n strength: f32,\n};\n\n@group(0) @binding(1) var<uniform> zoomBlur : zoomBlurUniforms;\n\n\nfn zoomBlur_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) -> vec4f {\n vec4 color = vec4(0.0);\n float total = 0.0;\n vec2 toCenter = zoomBlur.center * texSize - texCoord * texSize;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n for (float t = 0.0; t <= 40.0; t++) {\n float percent = (t + offset) / 40.0;\n float weight = 4.0 * (percent - percent * percent);\n vec4 offsetColor = texture(source, texCoord + toCenter * percent * zoomBlur.strength / texSize);\n color += offsetColor * weight;\n total += weight;\n }\n\n color = color / total;\n return color;\n}\n";
23
- readonly fs: "\nuniform zoomBlurUniforms {\n vec2 center;\n float strength;\n} zoomBlur;\n\nvec4 zoomBlur_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec4 color = vec4(0.0);\n float total = 0.0;\n vec2 toCenter = zoomBlur.center * texSize - texCoord * texSize;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n for (float t = 0.0; t <= 40.0; t++) {\n float percent = (t + offset) / 40.0;\n float weight = 4.0 * (percent - percent * percent);\n vec4 offsetColor = texture(source, texCoord + toCenter * percent * zoomBlur.strength / texSize);\n color += offsetColor * weight;\n total += weight;\n }\n\n color = color / total;\n return color;\n}\n";
22
+ readonly source: "\nstruct zoomBlurUniforms {\n center: vec2f,\n strength: f32,\n};\n\n@group(0) @binding(auto) var<uniform> zoomBlur : zoomBlurUniforms;\n\n\nfn zoomBlur_sampleColor(\n sourceTexture: texture_2d<f32>,\n sourceTextureSampler: sampler,\n texSize: vec2f,\n texCoord: vec2f\n) -> vec4f {\n var color = vec4f(0.0);\n var total = 0.0;\n let toCenter = zoomBlur.center * texSize - texCoord * texSize;\n\n /* randomize the lookup values to hide the fixed number of samples */\n let offset = random(vec3f(12.9898, 78.233, 151.7182), 0.0);\n\n for (var t = 0.0; t <= 40.0; t += 1.0) {\n let percent = (t + offset) / 40.0;\n let weight = 4.0 * (percent - percent * percent);\n let offsetColor = textureSample(\n sourceTexture,\n sourceTextureSampler,\n texCoord + toCenter * percent * zoomBlur.strength / texSize\n );\n color += offsetColor * weight;\n total += weight;\n }\n\n color /= total;\n return color;\n}\n";
23
+ readonly fs: "\nlayout(std140) uniform zoomBlurUniforms {\n vec2 center;\n float strength;\n} zoomBlur;\n\nvec4 zoomBlur_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec4 color = vec4(0.0);\n float total = 0.0;\n vec2 toCenter = zoomBlur.center * texSize - texCoord * texSize;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n for (float t = 0.0; t <= 40.0; t++) {\n float percent = (t + offset) / 40.0;\n float weight = 4.0 * (percent - percent * percent);\n vec4 offsetColor = texture(source, texCoord + toCenter * percent * zoomBlur.strength / texSize);\n color += offsetColor * weight;\n total += weight;\n }\n\n color = color / total;\n return color;\n}\n";
24
24
  readonly props: ZoomBlurProps;
25
25
  readonly uniforms: ZoomBlurUniforms;
26
26
  readonly uniformTypes: {
@@ -1 +1 @@
1
- {"version":3,"file":"zoomblur.d.ts","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-blur-filters/zoomblur.ts"],"names":[],"mappings":"AAgEA;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,gDAAgD;IAChD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,4JAA4J;IAC5J,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;oBAMN,aAAa;uBACV,gBAAgB;;;;;;;;;;;;;;;;;;CAW2B,CAAC"}
1
+ {"version":3,"file":"zoomblur.d.ts","sourceRoot":"","sources":["../../../../src/passes/postprocessing/image-blur-filters/zoomblur.ts"],"names":[],"mappings":"AAyEA;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,gDAAgD;IAChD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,4JAA4J;IAC5J,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;oBAMN,aAAa;uBACV,gBAAgB;;;;;;;;;;;;;;;;;;CAW2B,CAAC"}