@luma.gl/effects 9.3.0-alpha.9 → 9.3.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 (59) hide show
  1. package/dist/dist.dev.js +328 -173
  2. package/dist/dist.min.js +5 -5
  3. package/dist/index.cjs +18 -18
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/passes/postprocessing/image-adjust-filters/brightnesscontrast.d.ts +1 -1
  6. package/dist/passes/postprocessing/image-adjust-filters/brightnesscontrast.js +1 -1
  7. package/dist/passes/postprocessing/image-adjust-filters/denoise.d.ts +1 -1
  8. package/dist/passes/postprocessing/image-adjust-filters/denoise.js +1 -1
  9. package/dist/passes/postprocessing/image-adjust-filters/huesaturation.d.ts +1 -1
  10. package/dist/passes/postprocessing/image-adjust-filters/huesaturation.js +1 -1
  11. package/dist/passes/postprocessing/image-adjust-filters/noise.d.ts +1 -1
  12. package/dist/passes/postprocessing/image-adjust-filters/noise.js +1 -1
  13. package/dist/passes/postprocessing/image-adjust-filters/sepia.d.ts +1 -1
  14. package/dist/passes/postprocessing/image-adjust-filters/sepia.js +1 -1
  15. package/dist/passes/postprocessing/image-adjust-filters/vibrance.d.ts +1 -1
  16. package/dist/passes/postprocessing/image-adjust-filters/vibrance.js +1 -1
  17. package/dist/passes/postprocessing/image-adjust-filters/vignette.d.ts +1 -1
  18. package/dist/passes/postprocessing/image-adjust-filters/vignette.js +1 -1
  19. package/dist/passes/postprocessing/image-blur-filters/tiltshift.d.ts +1 -1
  20. package/dist/passes/postprocessing/image-blur-filters/tiltshift.js +1 -1
  21. package/dist/passes/postprocessing/image-blur-filters/triangleblur.d.ts +1 -1
  22. package/dist/passes/postprocessing/image-blur-filters/triangleblur.js +1 -1
  23. package/dist/passes/postprocessing/image-blur-filters/zoomblur.d.ts +1 -1
  24. package/dist/passes/postprocessing/image-blur-filters/zoomblur.js +1 -1
  25. package/dist/passes/postprocessing/image-fun-filters/colorhalftone.d.ts +1 -1
  26. package/dist/passes/postprocessing/image-fun-filters/colorhalftone.js +1 -1
  27. package/dist/passes/postprocessing/image-fun-filters/dotscreen.d.ts +1 -1
  28. package/dist/passes/postprocessing/image-fun-filters/dotscreen.js +1 -1
  29. package/dist/passes/postprocessing/image-fun-filters/edgework.d.ts +1 -1
  30. package/dist/passes/postprocessing/image-fun-filters/edgework.js +1 -1
  31. package/dist/passes/postprocessing/image-fun-filters/hexagonalpixelate.d.ts +1 -1
  32. package/dist/passes/postprocessing/image-fun-filters/hexagonalpixelate.js +1 -1
  33. package/dist/passes/postprocessing/image-fun-filters/ink.d.ts +1 -1
  34. package/dist/passes/postprocessing/image-fun-filters/ink.js +1 -1
  35. package/dist/passes/postprocessing/image-fun-filters/magnify.d.ts +1 -1
  36. package/dist/passes/postprocessing/image-fun-filters/magnify.js +1 -1
  37. package/dist/passes/postprocessing/image-warp-filters/bulgepinch.d.ts +1 -1
  38. package/dist/passes/postprocessing/image-warp-filters/bulgepinch.js +1 -1
  39. package/dist/passes/postprocessing/image-warp-filters/swirl.d.ts +1 -1
  40. package/dist/passes/postprocessing/image-warp-filters/swirl.js +1 -1
  41. package/package.json +2 -2
  42. package/src/passes/postprocessing/image-adjust-filters/brightnesscontrast.ts +1 -1
  43. package/src/passes/postprocessing/image-adjust-filters/denoise.ts +1 -1
  44. package/src/passes/postprocessing/image-adjust-filters/huesaturation.ts +1 -1
  45. package/src/passes/postprocessing/image-adjust-filters/noise.ts +1 -1
  46. package/src/passes/postprocessing/image-adjust-filters/sepia.ts +1 -1
  47. package/src/passes/postprocessing/image-adjust-filters/vibrance.ts +1 -1
  48. package/src/passes/postprocessing/image-adjust-filters/vignette.ts +1 -1
  49. package/src/passes/postprocessing/image-blur-filters/tiltshift.ts +1 -1
  50. package/src/passes/postprocessing/image-blur-filters/triangleblur.ts +1 -1
  51. package/src/passes/postprocessing/image-blur-filters/zoomblur.ts +1 -1
  52. package/src/passes/postprocessing/image-fun-filters/colorhalftone.ts +1 -1
  53. package/src/passes/postprocessing/image-fun-filters/dotscreen.ts +1 -1
  54. package/src/passes/postprocessing/image-fun-filters/edgework.ts +1 -1
  55. package/src/passes/postprocessing/image-fun-filters/hexagonalpixelate.ts +1 -1
  56. package/src/passes/postprocessing/image-fun-filters/ink.ts +1 -1
  57. package/src/passes/postprocessing/image-fun-filters/magnify.ts +1 -1
  58. package/src/passes/postprocessing/image-warp-filters/bulgepinch.ts +1 -1
  59. package/src/passes/postprocessing/image-warp-filters/swirl.ts +1 -1
@@ -22,7 +22,7 @@ export declare const hueSaturation: {
22
22
  readonly props: HueSaturationProps;
23
23
  readonly name: "hueSaturation";
24
24
  readonly source: "struct hueSaturationUniforms {\n hue: f32,\n saturation: f32,\n};\n\n@group(0) @binding(auto) var<uniform> hueSaturation: hueSaturationUniforms;\n\nfn hueSaturation_filterColor(color: vec4f) -> vec4f {\n let angle = hueSaturation.hue * 3.14159265;\n let s = sin(angle);\n let c = cos(angle);\n let weights = (vec3f(2.0 * c, -sqrt(3.0) * s - c, sqrt(3.0) * s - c) + vec3f(1.0)) / 3.0;\n\n var resultRgb = vec3f(\n dot(color.rgb, weights.xyz),\n dot(color.rgb, weights.zxy),\n dot(color.rgb, weights.yzx)\n );\n\n let average = (resultRgb.r + resultRgb.g + resultRgb.b) / 3.0;\n if (hueSaturation.saturation > 0.0) {\n resultRgb += (vec3f(average) - resultRgb) * (1.0 - 1.0 / (1.001 - hueSaturation.saturation));\n } else {\n resultRgb += (vec3f(average) - resultRgb) * (-hueSaturation.saturation);\n }\n\n return vec4f(resultRgb, color.a);\n}\n\nfn hueSaturation_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f {\n return hueSaturation_filterColor(color);\n}\n";
25
- readonly fs: "uniform hueSaturationUniforms {\n float hue;\n float saturation;\n} hueSaturation;\n\nvec4 hueSaturation_filterColor(vec4 color) {\n // hue adjustment, wolfram alpha: RotationTransform[angle, {1, 1, 1}][{x, y, z}]\n float angle = hueSaturation.hue * 3.14159265;\n float s = sin(angle), c = cos(angle);\n vec3 weights = (vec3(2.0 * c, -sqrt(3.0) * s - c, sqrt(3.0) * s - c) + 1.0) / 3.0;\n float len = length(color.rgb);\n color.rgb = vec3(\n dot(color.rgb, weights.xyz),\n dot(color.rgb, weights.zxy),\n dot(color.rgb, weights.yzx)\n );\n\n // saturation adjustment\n float average = (color.r + color.g + color.b) / 3.0;\n if (hueSaturation.saturation > 0.0) {\n color.rgb += (average - color.rgb) * (1.0 - 1.0 / (1.001 - hueSaturation.saturation));\n } else {\n color.rgb += (average - color.rgb) * (-hueSaturation.saturation);\n }\n\n return color;\n}\n\nvec4 hueSaturation_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {\n return hueSaturation_filterColor(color);\n}\n";
25
+ readonly fs: "layout(std140) uniform hueSaturationUniforms {\n float hue;\n float saturation;\n} hueSaturation;\n\nvec4 hueSaturation_filterColor(vec4 color) {\n // hue adjustment, wolfram alpha: RotationTransform[angle, {1, 1, 1}][{x, y, z}]\n float angle = hueSaturation.hue * 3.14159265;\n float s = sin(angle), c = cos(angle);\n vec3 weights = (vec3(2.0 * c, -sqrt(3.0) * s - c, sqrt(3.0) * s - c) + 1.0) / 3.0;\n float len = length(color.rgb);\n color.rgb = vec3(\n dot(color.rgb, weights.xyz),\n dot(color.rgb, weights.zxy),\n dot(color.rgb, weights.yzx)\n );\n\n // saturation adjustment\n float average = (color.r + color.g + color.b) / 3.0;\n if (hueSaturation.saturation > 0.0) {\n color.rgb += (average - color.rgb) * (1.0 - 1.0 / (1.001 - hueSaturation.saturation));\n } else {\n color.rgb += (average - color.rgb) * (-hueSaturation.saturation);\n }\n\n return color;\n}\n\nvec4 hueSaturation_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {\n return hueSaturation_filterColor(color);\n}\n";
26
26
  readonly uniformTypes: {
27
27
  readonly hue: "f32";
28
28
  readonly saturation: "f32";
@@ -36,7 +36,7 @@ fn hueSaturation_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f)
36
36
  }
37
37
  `;
38
38
  const fs = /* glsl */ `\
39
- uniform hueSaturationUniforms {
39
+ layout(std140) uniform hueSaturationUniforms {
40
40
  float hue;
41
41
  float saturation;
42
42
  } hueSaturation;
@@ -12,7 +12,7 @@ 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";
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
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;
@@ -22,7 +22,7 @@ fn noise_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f
22
22
  }
23
23
  `;
24
24
  const fs = /* glsl */ `\
25
- uniform noiseUniforms {
25
+ layout(std140) uniform noiseUniforms {
26
26
  float amount;
27
27
  } noise;
28
28
 
@@ -21,7 +21,7 @@ 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";
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
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;
@@ -27,7 +27,7 @@ fn sepia_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f
27
27
  }
28
28
  `;
29
29
  const fs = /* glsl */ `\
30
- uniform sepiaUniforms {
30
+ layout(std140) uniform sepiaUniforms {
31
31
  float amount;
32
32
  } sepia;
33
33
 
@@ -22,7 +22,7 @@ export declare const vibrance: {
22
22
  };
23
23
  };
24
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: "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";
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
  }];
@@ -21,7 +21,7 @@ fn vibrance_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> ve
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
 
@@ -17,7 +17,7 @@ export declare const vignette: {
17
17
  readonly uniforms: VignetteUniforms;
18
18
  readonly name: "vignette";
19
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: "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";
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";
@@ -20,7 +20,7 @@ fn vignette_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> ve
20
20
  }
21
21
  `;
22
22
  const fs = /* glsl */ `\
23
- uniform vignetteUniforms {
23
+ layout(std140) uniform vignetteUniforms {
24
24
  float radius;
25
25
  float amount;
26
26
  } vignette;
@@ -34,7 +34,7 @@ export declare const tiltShift: {
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
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: "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";
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: {
@@ -61,7 +61,7 @@ fn tiltShift_sampleColor(
61
61
  }
62
62
  `;
63
63
  const fs = /* glsl */ `\
64
- uniform tiltShiftUniforms {
64
+ layout(std140) uniform tiltShiftUniforms {
65
65
  float blurRadius;
66
66
  float gradientRadius;
67
67
  vec2 start;
@@ -25,7 +25,7 @@ export declare const triangleBlur: {
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
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: "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";
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: {
@@ -49,7 +49,7 @@ fn triangleBlur_sampleColor(
49
49
  }
50
50
  `;
51
51
  const fs = /* glsl */ `\
52
- uniform triangleBlurUniforms {
52
+ layout(std140) uniform triangleBlurUniforms {
53
53
  float radius;
54
54
  vec2 delta;
55
55
  } triangleBlur;
@@ -20,7 +20,7 @@ export declare const zoomBlur: {
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
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: "\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";
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: {
@@ -41,7 +41,7 @@ fn zoomBlur_sampleColor(
41
41
  }
42
42
  `;
43
43
  const fs = /* glsl */ `
44
- uniform zoomBlurUniforms {
44
+ layout(std140) uniform zoomBlurUniforms {
45
45
  vec2 center;
46
46
  float strength;
47
47
  } zoomBlur;
@@ -22,7 +22,7 @@ export type ColorHalftoneUniforms = ColorHalftoneProps;
22
22
  export declare const colorHalftone: {
23
23
  readonly name: "colorHalftone";
24
24
  readonly source: "struct colorHalftoneUniforms {\n center: vec2f,\n angle: f32,\n size: f32,\n};\n\n@group(0) @binding(auto) var<uniform> colorHalftone: colorHalftoneUniforms;\n\nfn pattern(angle: f32, scale: f32, texSize: vec2f, texCoord: vec2f) -> f32 {\n let s = sin(angle);\n let c = cos(angle);\n let tex = texCoord * texSize - colorHalftone.center * texSize;\n let point = vec2f(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nfn colorHalftone_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f {\n let scale = 3.1514 / colorHalftone.size;\n var cmy = vec3f(1.0) - color.rgb;\n var k = min(cmy.x, min(cmy.y, cmy.z));\n let safeDenominator = max(1.0 - k, 0.00001);\n\n cmy = (cmy - vec3f(k)) / safeDenominator;\n cmy = clamp(\n cmy * 10.0 - vec3f(3.0) + vec3f(\n pattern(colorHalftone.angle + 0.26179, scale, texSize, texCoord),\n pattern(colorHalftone.angle + 1.30899, scale, texSize, texCoord),\n pattern(colorHalftone.angle, scale, texSize, texCoord)\n ),\n vec3f(0.0),\n vec3f(1.0)\n );\n k = clamp(k * 10.0 - 5.0 + pattern(colorHalftone.angle + 0.78539, scale, texSize, texCoord), 0.0, 1.0);\n return vec4f(vec3f(1.0) - cmy - vec3f(k), color.a);\n}\n";
25
- readonly fs: "uniform colorHalftoneUniforms {\n vec2 center;\n float angle;\n float size;\n} colorHalftone;\n\nfloat pattern(float angle, float scale, vec2 texSize, vec2 texCoord) {\n float s = sin(angle), c = cos(angle);\n vec2 tex = texCoord * texSize - colorHalftone.center * texSize;\n vec2 point = vec2(\n\tc * tex.x - s * tex.y,\n\ts * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvec4 colorHalftone_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {\n float scale = 3.1514 / colorHalftone.size;\n vec3 cmy = 1.0 - color.rgb;\n float k = min(cmy.x, min(cmy.y, cmy.z));\n\n cmy = (cmy - k) / (1.0 - k);\n cmy = clamp(\n\t cmy * 10.0 - 3.0 + vec3(\n pattern(colorHalftone.angle + 0.26179, scale, texSize, texCoord),\n\t pattern(colorHalftone.angle + 1.30899, scale, texSize, texCoord),\n pattern(colorHalftone.angle, scale, texSize, texCoord)\n ),\n\t 0.0,\n\t 1.0\n );\n k = clamp(k * 10.0 - 5.0 + pattern(colorHalftone.angle + 0.78539, scale, texSize, texCoord), 0.0, 1.0);\n return vec4(1.0 - cmy - k, color.a);\n}\n";
25
+ readonly fs: "layout(std140) uniform colorHalftoneUniforms {\n vec2 center;\n float angle;\n float size;\n} colorHalftone;\n\nfloat pattern(float angle, float scale, vec2 texSize, vec2 texCoord) {\n float s = sin(angle), c = cos(angle);\n vec2 tex = texCoord * texSize - colorHalftone.center * texSize;\n vec2 point = vec2(\n\tc * tex.x - s * tex.y,\n\ts * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvec4 colorHalftone_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {\n float scale = 3.1514 / colorHalftone.size;\n vec3 cmy = 1.0 - color.rgb;\n float k = min(cmy.x, min(cmy.y, cmy.z));\n\n cmy = (cmy - k) / (1.0 - k);\n cmy = clamp(\n\t cmy * 10.0 - 3.0 + vec3(\n pattern(colorHalftone.angle + 0.26179, scale, texSize, texCoord),\n\t pattern(colorHalftone.angle + 1.30899, scale, texSize, texCoord),\n pattern(colorHalftone.angle, scale, texSize, texCoord)\n ),\n\t 0.0,\n\t 1.0\n );\n k = clamp(k * 10.0 - 5.0 + pattern(colorHalftone.angle + 0.78539, scale, texSize, texCoord), 0.0, 1.0);\n return vec4(1.0 - cmy - k, color.a);\n}\n";
26
26
  readonly props: ColorHalftoneProps;
27
27
  readonly uniforms: ColorHalftoneUniforms;
28
28
  readonly uniformTypes: {
@@ -43,7 +43,7 @@ fn colorHalftone_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f)
43
43
  `;
44
44
  // TODO pass texCoord to angle
45
45
  const fs = /* glsl */ `\
46
- uniform colorHalftoneUniforms {
46
+ layout(std140) uniform colorHalftoneUniforms {
47
47
  vec2 center;
48
48
  float angle;
49
49
  float size;
@@ -20,7 +20,7 @@ export type DotScreenUniforms = DotScreenProps;
20
20
  export declare const dotScreen: {
21
21
  readonly name: "dotScreen";
22
22
  readonly source: "struct dotScreenUniforms {\n center: vec2f,\n angle: f32,\n size: f32,\n};\n\n@group(0) @binding(auto) var<uniform> dotScreen: dotScreenUniforms;\n\nfn pattern(texSize: vec2f, texCoord: vec2f) -> f32 {\n let scale = 3.1415 / dotScreen.size;\n let s = sin(dotScreen.angle);\n let c = cos(dotScreen.angle);\n let tex = texCoord * texSize - dotScreen.center * texSize;\n let point = vec2f(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nfn dotScreen_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f {\n let average = (color.r + color.g + color.b) / 3.0;\n return vec4f(vec3f(average * 10.0 - 5.0 + pattern(texSize, texCoord)), color.a);\n}\n";
23
- readonly fs: "uniform dotScreenUniforms {\n vec2 center;\n float angle;\n float size;\n} dotScreen;\n\nfloat pattern(vec2 texSize, vec2 texCoord) {\n float scale = 3.1415 / dotScreen.size;\n\n float s = sin(dotScreen.angle), c = cos(dotScreen.angle);\n vec2 tex = texCoord * texSize - dotScreen.center * texSize;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvec4 dotScreen_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {\n float average = (color.r + color.g + color.b) / 3.0;\n return vec4(vec3(average * 10.0 - 5.0 + pattern(texSize, texCoord)), color.a);\n}\n";
23
+ readonly fs: "layout(std140) uniform dotScreenUniforms {\n vec2 center;\n float angle;\n float size;\n} dotScreen;\n\nfloat pattern(vec2 texSize, vec2 texCoord) {\n float scale = 3.1415 / dotScreen.size;\n\n float s = sin(dotScreen.angle), c = cos(dotScreen.angle);\n vec2 tex = texCoord * texSize - dotScreen.center * texSize;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvec4 dotScreen_filterColor_ext(vec4 color, vec2 texSize, vec2 texCoord) {\n float average = (color.r + color.g + color.b) / 3.0;\n return vec4(vec3(average * 10.0 - 5.0 + pattern(texSize, texCoord)), color.a);\n}\n";
24
24
  readonly props: DotScreenProps;
25
25
  readonly uniforms: DotScreenUniforms;
26
26
  readonly uniformTypes: {
@@ -28,7 +28,7 @@ fn dotScreen_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> v
28
28
  }
29
29
  `;
30
30
  const fs = /* glsl */ `\
31
- uniform dotScreenUniforms {
31
+ layout(std140) uniform dotScreenUniforms {
32
32
  vec2 center;
33
33
  float angle;
34
34
  float size;
@@ -23,7 +23,7 @@ export declare const edgeWork: {
23
23
  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";
24
24
  }];
25
25
  readonly source: "struct edgeWorkUniforms {\n radius: f32,\n mode: u32,\n};\n\n@group(0) @binding(auto) var<uniform> edgeWork: edgeWorkUniforms;\n\nfn edgeWork_sampleColorRGB(\n sourceTexture: texture_2d<f32>,\n sourceTextureSampler: sampler,\n texSize: vec2f,\n texCoord: vec2f,\n delta: vec2f\n) -> vec4f {\n let relativeDelta = edgeWork.radius * delta / texSize;\n\n var color = vec2f(0.0);\n var total = vec2f(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 var weight = 1.0 - abs(percent);\n let sampleColor = textureSample(\n sourceTexture,\n sourceTextureSampler,\n texCoord + relativeDelta * percent\n ).rgb;\n let average = (sampleColor.r + sampleColor.g + sampleColor.b) / 3.0;\n color.x += average * weight;\n total.x += weight;\n if (abs(t) < 15.0) {\n weight = weight * 2.0 - 1.0;\n color.y += average * weight;\n total.y += weight;\n }\n }\n return vec4f(color / total, 0.0, 1.0);\n}\n\nfn edgeWork_sampleColorXY(\n sourceTexture: texture_2d<f32>,\n sourceTextureSampler: sampler,\n texSize: vec2f,\n texCoord: vec2f,\n delta: vec2f\n) -> vec4f {\n let relativeDelta = edgeWork.radius * delta / texSize;\n\n var color = vec2f(0.0);\n var total = vec2f(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 var weight = 1.0 - abs(percent);\n let sampleColor = textureSample(\n sourceTexture,\n sourceTextureSampler,\n texCoord + relativeDelta * percent\n ).xy;\n color.x += sampleColor.x * weight;\n total.x += weight;\n if (abs(t) < 15.0) {\n weight = weight * 2.0 - 1.0;\n color.y += sampleColor.y * weight;\n total.y += weight;\n }\n }\n\n let c = clamp(10000.0 * (color.y / total.y - color.x / total.x) + 0.5, 0.0, 1.0);\n return vec4f(c, c, c, 1.0);\n}\n\nfn edgeWork_sampleColor(\n sourceTexture: texture_2d<f32>,\n sourceTextureSampler: sampler,\n texSize: vec2f,\n texCoord: vec2f\n) -> vec4f {\n if (edgeWork.mode == 0u) {\n return edgeWork_sampleColorRGB(\n sourceTexture,\n sourceTextureSampler,\n texSize,\n texCoord,\n vec2f(1.0, 0.0)\n );\n }\n\n return edgeWork_sampleColorXY(\n sourceTexture,\n sourceTextureSampler,\n texSize,\n texCoord,\n vec2f(0.0, 1.0)\n );\n}\n";
26
- readonly fs: "uniform edgeWorkUniforms {\n float radius;\n int mode;\n} edgeWork;\n\nvec4 edgeWork_sampleColorRGB(sampler2D source, vec2 texSize, vec2 texCoord, vec2 delta) {\n vec2 relativeDelta = edgeWork.radius * delta / texSize;\n\n vec2 color = vec2(0.0);\n vec2 total = vec2(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 vec3 sampleColor = texture(source, texCoord + relativeDelta * percent).rgb;\n float average = (sampleColor.r + sampleColor.g + sampleColor.b) / 3.0;\n color.x += average * weight;\n total.x += weight;\n if (abs(t) < 15.0) {\n weight = weight * 2.0 - 1.0;\n color.y += average * weight;\n total.y += weight;\n }\n }\n return vec4(color / total, 0.0, 1.0);\n}\n\nvec4 edgeWork_sampleColorXY(sampler2D source, vec2 texSize, vec2 texCoord, vec2 delta) {\n vec2 relativeDelta = edgeWork.radius * delta / texSize;\n\n vec2 color = vec2(0.0);\n vec2 total = vec2(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 vec2 sampleColor = texture(source, texCoord + relativeDelta * percent).xy;\n color.x += sampleColor.x * weight;\n total.x += weight;\n if (abs(t) < 15.0) {\n weight = weight * 2.0 - 1.0;\n color.y += sampleColor.y * weight;\n total.y += weight;\n }\n }\n float c = clamp(10000.0 * (color.y / total.y - color.x / total.x) + 0.5, 0.0, 1.0);\n return vec4(c, c, c, 1.0);\n}\n\nvec4 edgeWork_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n switch (edgeWork.mode) {\n case 0: \n return edgeWork_sampleColorRGB(source, texSize, texCoord, vec2(1., 0.));\n case 1: \n default:\n return edgeWork_sampleColorXY(source, texSize, texCoord, vec2(0., 1.));\n }\n}\n";
26
+ readonly fs: "layout(std140) uniform edgeWorkUniforms {\n float radius;\n int mode;\n} edgeWork;\n\nvec4 edgeWork_sampleColorRGB(sampler2D source, vec2 texSize, vec2 texCoord, vec2 delta) {\n vec2 relativeDelta = edgeWork.radius * delta / texSize;\n\n vec2 color = vec2(0.0);\n vec2 total = vec2(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 vec3 sampleColor = texture(source, texCoord + relativeDelta * percent).rgb;\n float average = (sampleColor.r + sampleColor.g + sampleColor.b) / 3.0;\n color.x += average * weight;\n total.x += weight;\n if (abs(t) < 15.0) {\n weight = weight * 2.0 - 1.0;\n color.y += average * weight;\n total.y += weight;\n }\n }\n return vec4(color / total, 0.0, 1.0);\n}\n\nvec4 edgeWork_sampleColorXY(sampler2D source, vec2 texSize, vec2 texCoord, vec2 delta) {\n vec2 relativeDelta = edgeWork.radius * delta / texSize;\n\n vec2 color = vec2(0.0);\n vec2 total = vec2(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 vec2 sampleColor = texture(source, texCoord + relativeDelta * percent).xy;\n color.x += sampleColor.x * weight;\n total.x += weight;\n if (abs(t) < 15.0) {\n weight = weight * 2.0 - 1.0;\n color.y += sampleColor.y * weight;\n total.y += weight;\n }\n }\n float c = clamp(10000.0 * (color.y / total.y - color.x / total.x) + 0.5, 0.0, 1.0);\n return vec4(c, c, c, 1.0);\n}\n\nvec4 edgeWork_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n switch (edgeWork.mode) {\n case 0: \n return edgeWork_sampleColorRGB(source, texSize, texCoord, vec2(1., 0.));\n case 1: \n default:\n return edgeWork_sampleColorXY(source, texSize, texCoord, vec2(0., 1.));\n }\n}\n";
27
27
  readonly props: EdgeWorkProps;
28
28
  readonly uniforms: EdgeWorkProps;
29
29
  readonly uniformTypes: {
@@ -107,7 +107,7 @@ fn edgeWork_sampleColor(
107
107
  }
108
108
  `;
109
109
  const fs = /* glsl */ `\
110
- uniform edgeWorkUniforms {
110
+ layout(std140) uniform edgeWorkUniforms {
111
111
  float radius;
112
112
  int mode;
113
113
  } edgeWork;
@@ -18,7 +18,7 @@ export type HexagonalPixelateUniforms = HexagonalPixelateProps;
18
18
  export declare const hexagonalPixelate: {
19
19
  readonly name: "hexagonalPixelate";
20
20
  readonly source: "struct hexagonalPixelateUniforms {\n center: vec2f,\n scale: f32,\n};\n\n@group(0) @binding(auto) var<uniform> hexagonalPixelate: hexagonalPixelateUniforms;\n\nfn hexagonalPixelate_sampleColor(\n sourceTexture: texture_2d<f32>,\n sourceTextureSampler: sampler,\n texSize: vec2f,\n texCoord: vec2f\n) -> vec4f {\n var tex = (texCoord * texSize - hexagonalPixelate.center * texSize) / hexagonalPixelate.scale;\n tex.y /= 0.866025404;\n tex.x -= tex.y * 0.5;\n\n var a = vec2f(0.0);\n if (tex.x + tex.y - floor(tex.x) - floor(tex.y) < 1.0) {\n a = vec2f(floor(tex.x), floor(tex.y));\n } else {\n a = vec2f(ceil(tex.x), ceil(tex.y));\n }\n let b = vec2f(ceil(tex.x), floor(tex.y));\n let c = vec2f(floor(tex.x), ceil(tex.y));\n\n let texBarycentric = vec3f(tex.x, tex.y, 1.0 - tex.x - tex.y);\n let aBarycentric = vec3f(a.x, a.y, 1.0 - a.x - a.y);\n let bBarycentric = vec3f(b.x, b.y, 1.0 - b.x - b.y);\n let cBarycentric = vec3f(c.x, c.y, 1.0 - c.x - c.y);\n\n let aLength = length(texBarycentric - aBarycentric);\n let bLength = length(texBarycentric - bBarycentric);\n let cLength = length(texBarycentric - cBarycentric);\n\n var choice = vec2f(0.0);\n if (aLength < bLength) {\n if (aLength < cLength) {\n choice = a;\n } else {\n choice = c;\n }\n } else {\n if (bLength < cLength) {\n choice = b;\n } else {\n choice = c;\n }\n }\n\n choice.x += choice.y * 0.5;\n choice.y *= 0.866025404;\n choice *= hexagonalPixelate.scale / texSize;\n\n return textureSample(sourceTexture, sourceTextureSampler, choice + hexagonalPixelate.center);\n}\n";
21
- readonly fs: "uniform hexagonalPixelateUniforms {\n vec2 center;\n float scale;\n} hexagonalPixelate;\n\nvec4 hexagonalPixelate_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec2 tex = (texCoord * texSize - hexagonalPixelate.center * texSize) / hexagonalPixelate.scale;\n tex.y /= 0.866025404;\n tex.x -= tex.y * 0.5;\n\n vec2 a;\n if (tex.x + tex.y - floor(tex.x) - floor(tex.y) < 1.0) {\n a = vec2(floor(tex.x), floor(tex.y));\n }\n else a = vec2(ceil(tex.x), ceil(tex.y));\n vec2 b = vec2(ceil(tex.x), floor(tex.y));\n vec2 c = vec2(floor(tex.x), ceil(tex.y));\n\n vec3 TEX = vec3(tex.x, tex.y, 1.0 - tex.x - tex.y);\n vec3 A = vec3(a.x, a.y, 1.0 - a.x - a.y);\n vec3 B = vec3(b.x, b.y, 1.0 - b.x - b.y);\n vec3 C = vec3(c.x, c.y, 1.0 - c.x - c.y);\n\n float alen = length(TEX - A);\n float blen = length(TEX - B);\n float clen = length(TEX - C);\n\n vec2 choice;\n if (alen < blen) {\n if (alen < clen) choice = a;\n else choice = c;\n } else {\n if (blen < clen) choice = b;\n else choice = c;\n }\n\n choice.x += choice.y * 0.5;\n choice.y *= 0.866025404;\n choice *= hexagonalPixelate.scale / texSize;\n\n return texture(source, choice + hexagonalPixelate.center);\n}\n";
21
+ readonly fs: "layout(std140) uniform hexagonalPixelateUniforms {\n vec2 center;\n float scale;\n} hexagonalPixelate;\n\nvec4 hexagonalPixelate_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec2 tex = (texCoord * texSize - hexagonalPixelate.center * texSize) / hexagonalPixelate.scale;\n tex.y /= 0.866025404;\n tex.x -= tex.y * 0.5;\n\n vec2 a;\n if (tex.x + tex.y - floor(tex.x) - floor(tex.y) < 1.0) {\n a = vec2(floor(tex.x), floor(tex.y));\n }\n else a = vec2(ceil(tex.x), ceil(tex.y));\n vec2 b = vec2(ceil(tex.x), floor(tex.y));\n vec2 c = vec2(floor(tex.x), ceil(tex.y));\n\n vec3 TEX = vec3(tex.x, tex.y, 1.0 - tex.x - tex.y);\n vec3 A = vec3(a.x, a.y, 1.0 - a.x - a.y);\n vec3 B = vec3(b.x, b.y, 1.0 - b.x - b.y);\n vec3 C = vec3(c.x, c.y, 1.0 - c.x - c.y);\n\n float alen = length(TEX - A);\n float blen = length(TEX - B);\n float clen = length(TEX - C);\n\n vec2 choice;\n if (alen < blen) {\n if (alen < clen) choice = a;\n else choice = c;\n } else {\n if (blen < clen) choice = b;\n else choice = c;\n }\n\n choice.x += choice.y * 0.5;\n choice.y *= 0.866025404;\n choice *= hexagonalPixelate.scale / texSize;\n\n return texture(source, choice + hexagonalPixelate.center);\n}\n";
22
22
  readonly props: HexagonalPixelateProps;
23
23
  readonly uniforms: HexagonalPixelateUniforms;
24
24
  readonly uniformTypes: {
@@ -60,7 +60,7 @@ fn hexagonalPixelate_sampleColor(
60
60
  }
61
61
  `;
62
62
  const fs = /* glsl */ `\
63
- uniform hexagonalPixelateUniforms {
63
+ layout(std140) uniform hexagonalPixelateUniforms {
64
64
  vec2 center;
65
65
  float scale;
66
66
  } hexagonalPixelate;
@@ -21,7 +21,7 @@ export type InkUniforms = InkProps;
21
21
  export declare const ink: {
22
22
  readonly name: "ink";
23
23
  readonly source: "struct inkUniforms {\n strength: f32,\n};\n\n@group(0) @binding(auto) var<uniform> ink: inkUniforms;\n\nfn ink_sampleColor(\n sourceTexture: texture_2d<f32>,\n sourceTextureSampler: sampler,\n texSize: vec2f,\n texCoord: vec2f\n) -> vec4f {\n let dx = vec2f(1.0 / texSize.x, 0.0);\n let dy = vec2f(0.0, 1.0 / texSize.y);\n let color = textureSample(sourceTexture, sourceTextureSampler, texCoord);\n var bigTotal = 0.0;\n var smallTotal = 0.0;\n var bigAverage = vec3f(0.0);\n var smallAverage = vec3f(0.0);\n for (var x = -2.0; x <= 2.0; x += 1.0) {\n for (var y = -2.0; y <= 2.0; y += 1.0) {\n let offsetColor = textureSample(\n sourceTexture,\n sourceTextureSampler,\n texCoord + dx * x + dy * y\n ).rgb;\n bigAverage += offsetColor;\n bigTotal += 1.0;\n if (abs(x) + abs(y) < 2.0) {\n smallAverage += offsetColor;\n smallTotal += 1.0;\n }\n }\n }\n let edge = max(vec3f(0.0), bigAverage / bigTotal - smallAverage / smallTotal);\n let power = ink.strength * ink.strength * ink.strength * ink.strength * ink.strength;\n return vec4f(color.rgb - vec3f(dot(edge, edge) * power * 100000.0), color.a);\n}\n";
24
- readonly fs: "uniform inkUniforms {\n float strength;\n} ink;\n\nvec4 ink_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec2 dx = vec2(1.0 / texSize.x, 0.0);\n vec2 dy = vec2(0.0, 1.0 / texSize.y);\n vec4 color = texture(source, texCoord);\n float bigTotal = 0.0;\n float smallTotal = 0.0;\n vec3 bigAverage = vec3(0.0);\n vec3 smallAverage = vec3(0.0);\n for (float x = -2.0; x <= 2.0; x += 1.0) {\n for (float y = -2.0; y <= 2.0; y += 1.0) {\n vec3 offsetColor = texture(source, texCoord + dx * x + dy * y).rgb;\n bigAverage += offsetColor;\n bigTotal += 1.0;\n if (abs(x) + abs(y) < 2.0) {\n smallAverage += offsetColor;\n smallTotal += 1.0;\n }\n }\n }\n vec3 edge = max(vec3(0.0), bigAverage / bigTotal - smallAverage / smallTotal);\n float power = ink.strength * ink.strength * ink.strength * ink.strength * ink.strength;\n return vec4(color.rgb - dot(edge, edge) * power * 100000.0, color.a);\n}\n";
24
+ readonly fs: "layout(std140) uniform inkUniforms {\n float strength;\n} ink;\n\nvec4 ink_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec2 dx = vec2(1.0 / texSize.x, 0.0);\n vec2 dy = vec2(0.0, 1.0 / texSize.y);\n vec4 color = texture(source, texCoord);\n float bigTotal = 0.0;\n float smallTotal = 0.0;\n vec3 bigAverage = vec3(0.0);\n vec3 smallAverage = vec3(0.0);\n for (float x = -2.0; x <= 2.0; x += 1.0) {\n for (float y = -2.0; y <= 2.0; y += 1.0) {\n vec3 offsetColor = texture(source, texCoord + dx * x + dy * y).rgb;\n bigAverage += offsetColor;\n bigTotal += 1.0;\n if (abs(x) + abs(y) < 2.0) {\n smallAverage += offsetColor;\n smallTotal += 1.0;\n }\n }\n }\n vec3 edge = max(vec3(0.0), bigAverage / bigTotal - smallAverage / smallTotal);\n float power = ink.strength * ink.strength * ink.strength * ink.strength * ink.strength;\n return vec4(color.rgb - dot(edge, edge) * power * 100000.0, color.a);\n}\n";
25
25
  readonly props: InkProps;
26
26
  readonly uniforms: InkUniforms;
27
27
  readonly uniformTypes: {
@@ -42,7 +42,7 @@ fn ink_sampleColor(
42
42
  }
43
43
  `;
44
44
  const fs = /* glsl */ `\
45
- uniform inkUniforms {
45
+ layout(std140) uniform inkUniforms {
46
46
  float strength;
47
47
  } ink;
48
48
 
@@ -20,7 +20,7 @@ export type MagnifyUniforms = MagnifyProps;
20
20
  export declare const magnify: {
21
21
  readonly name: "magnify";
22
22
  readonly source: "struct magnifyUniforms {\n screenXY: vec2f,\n radiusPixels: f32,\n zoom: f32,\n borderWidthPixels: f32,\n borderColor: vec4f,\n};\n\n@group(0) @binding(auto) var<uniform> magnify: magnifyUniforms;\n\nfn magnify_sampleColor(\n sourceTexture: texture_2d<f32>,\n sourceTextureSampler: sampler,\n texSize: vec2f,\n texCoord: vec2f\n) -> vec4f {\n let pos = vec2f(magnify.screenXY.x, 1.0 - magnify.screenXY.y);\n let dist = distance(texCoord * texSize, pos * texSize);\n if (dist < magnify.radiusPixels) {\n return textureSampleLevel(\n sourceTexture,\n sourceTextureSampler,\n (texCoord - pos) / magnify.zoom + pos,\n 0.0\n );\n }\n\n if (dist <= magnify.radiusPixels + magnify.borderWidthPixels) {\n return magnify.borderColor;\n }\n return textureSampleLevel(sourceTexture, sourceTextureSampler, texCoord, 0.0);\n}\n";
23
- readonly fs: "uniform magnifyUniforms {\n vec2 screenXY;\n float radiusPixels;\n float zoom;\n float borderWidthPixels;\n vec4 borderColor;\n} magnify;\n\nvec4 magnify_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec2 pos = vec2(magnify.screenXY.x, 1.0 - magnify.screenXY.y);\n float dist = distance(texCoord * texSize, pos * texSize);\n if (dist < magnify.radiusPixels) {\n return texture(source, (texCoord - pos) / magnify.zoom + pos);\n }\n\n if (dist <= magnify.radiusPixels + magnify.borderWidthPixels) {\n return magnify.borderColor;\n }\n return texture(source, texCoord);\n}\n";
23
+ readonly fs: "layout(std140) uniform magnifyUniforms {\n vec2 screenXY;\n float radiusPixels;\n float zoom;\n float borderWidthPixels;\n vec4 borderColor;\n} magnify;\n\nvec4 magnify_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec2 pos = vec2(magnify.screenXY.x, 1.0 - magnify.screenXY.y);\n float dist = distance(texCoord * texSize, pos * texSize);\n if (dist < magnify.radiusPixels) {\n return texture(source, (texCoord - pos) / magnify.zoom + pos);\n }\n\n if (dist <= magnify.radiusPixels + magnify.borderWidthPixels) {\n return magnify.borderColor;\n }\n return texture(source, texCoord);\n}\n";
24
24
  readonly uniformTypes: {
25
25
  readonly screenXY: "vec2<f32>";
26
26
  readonly radiusPixels: "f32";
@@ -36,7 +36,7 @@ fn magnify_sampleColor(
36
36
  }
37
37
  `;
38
38
  const fs = /* glsl */ `\
39
- uniform magnifyUniforms {
39
+ layout(std140) uniform magnifyUniforms {
40
40
  vec2 screenXY;
41
41
  float radiusPixels;
42
42
  float zoom;
@@ -21,7 +21,7 @@ export declare const bulgePinch: {
21
21
  readonly passes: [];
22
22
  }];
23
23
  readonly source: "struct bulgePinchUniforms {\n center: vec2f,\n radius: f32,\n strength: f32,\n};\n\n@group(0) @binding(auto) var<uniform> bulgePinch: bulgePinchUniforms;\n\nfn bulgePinch_warp(coordIn: vec2f, texCenter: vec2f) -> vec2f {\n var coord = coordIn - texCenter;\n let distance = length(coord);\n if (distance < bulgePinch.radius) {\n let percent = distance / bulgePinch.radius;\n let safeDistance = max(distance, 0.00001);\n if (bulgePinch.strength > 0.0) {\n coord *= mix(\n 1.0,\n smoothstep(0.0, bulgePinch.radius / safeDistance, percent),\n bulgePinch.strength * 0.75\n );\n } else {\n coord *= mix(\n 1.0,\n pow(percent, 1.0 + bulgePinch.strength * 0.75) * bulgePinch.radius / safeDistance,\n 1.0 - percent\n );\n }\n }\n coord += texCenter;\n return coord;\n}\n\nfn bulgePinch_sampleColor(\n sourceTexture: texture_2d<f32>,\n sourceTextureSampler: sampler,\n texSize: vec2f,\n texCoord: vec2f\n) -> vec4f {\n var coord = texCoord * texSize;\n coord = bulgePinch_warp(coord, bulgePinch.center * texSize);\n return warp_sampleColor(sourceTexture, sourceTextureSampler, texSize, coord);\n}\n";
24
- readonly fs: "uniform bulgePinchUniforms {\n vec2 center;\n float radius;\n float strength;\n} bulgePinch;\n\nvec2 bulgePinch_warp(vec2 coord, vec2 texCenter) {\n coord -= texCenter;\n float distance = length(coord);\n if (distance < bulgePinch.radius) {\n float percent = distance / bulgePinch.radius;\n if (bulgePinch.strength > 0.0) {\n coord *= mix(1.0, smoothstep(0.0, bulgePinch.radius / distance, percent), bulgePinch.strength * 0.75);\n } else {\n coord *= mix(1.0, pow(percent, 1.0 + bulgePinch.strength * 0.75) * bulgePinch.radius / distance, 1.0 - percent);\n }\n }\n coord += texCenter;\n return coord;\n}\n\nvec4 bulgePinch_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec2 coord = texCoord * texSize;\n coord = bulgePinch_warp(coord, bulgePinch.center * texSize);\n\n return warp_sampleColor(source, texSize, coord);\n}\n";
24
+ readonly fs: "layout(std140) uniform bulgePinchUniforms {\n vec2 center;\n float radius;\n float strength;\n} bulgePinch;\n\nvec2 bulgePinch_warp(vec2 coord, vec2 texCenter) {\n coord -= texCenter;\n float distance = length(coord);\n if (distance < bulgePinch.radius) {\n float percent = distance / bulgePinch.radius;\n if (bulgePinch.strength > 0.0) {\n coord *= mix(1.0, smoothstep(0.0, bulgePinch.radius / distance, percent), bulgePinch.strength * 0.75);\n } else {\n coord *= mix(1.0, pow(percent, 1.0 + bulgePinch.strength * 0.75) * bulgePinch.radius / distance, 1.0 - percent);\n }\n }\n coord += texCenter;\n return coord;\n}\n\nvec4 bulgePinch_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec2 coord = texCoord * texSize;\n coord = bulgePinch_warp(coord, bulgePinch.center * texSize);\n\n return warp_sampleColor(source, texSize, coord);\n}\n";
25
25
  readonly props: BulgePinchProps;
26
26
  readonly uniforms: BulgePinchUniforms;
27
27
  readonly uniformTypes: {
@@ -47,7 +47,7 @@ fn bulgePinch_sampleColor(
47
47
  }
48
48
  `;
49
49
  const fs = /* glsl */ `\
50
- uniform bulgePinchUniforms {
50
+ layout(std140) uniform bulgePinchUniforms {
51
51
  vec2 center;
52
52
  float radius;
53
53
  float strength;
@@ -22,7 +22,7 @@ export declare const swirl: {
22
22
  readonly passes: [];
23
23
  }];
24
24
  readonly source: "struct swirlUniforms {\n center: vec2f,\n radius: f32,\n angle: f32,\n};\n\n@group(0) @binding(auto) var<uniform> swirl: swirlUniforms;\n\nfn swirl_warp(coordIn: vec2f, texCenter: vec2f) -> vec2f {\n var coord = coordIn - texCenter;\n let distance = length(coord);\n if (distance < swirl.radius) {\n let percent = (swirl.radius - distance) / swirl.radius;\n let theta = percent * percent * swirl.angle;\n let s = sin(theta);\n let c = cos(theta);\n coord = vec2f(\n coord.x * c - coord.y * s,\n coord.x * s + coord.y * c\n );\n }\n coord += texCenter;\n return coord;\n}\n\nfn swirl_sampleColor(\n sourceTexture: texture_2d<f32>,\n sourceTextureSampler: sampler,\n texSize: vec2f,\n texCoord: vec2f\n) -> vec4f {\n var coord = texCoord * texSize;\n coord = swirl_warp(coord, swirl.center * texSize);\n return warp_sampleColor(sourceTexture, sourceTextureSampler, texSize, coord);\n}\n";
25
- readonly fs: "uniform swirlUniforms {\n vec2 center;\n float radius;\n float angle;\n} swirl;\n\nvec2 swirl_warp(vec2 coord, vec2 texCenter) {\n coord -= texCenter;\n float distance = length(coord);\n if (distance < swirl.radius) {\n float percent = (swirl.radius - distance) / swirl.radius;\n float theta = percent * percent * swirl.angle;\n float s = sin(theta);\n float c = cos(theta);\n coord = vec2(\n coord.x * c - coord.y * s,\n coord.x * s + coord.y * c\n );\n }\n coord += texCenter;\n return coord;\n}\n\nvec4 swirl_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec2 coord = texCoord * texSize;\n coord = swirl_warp(coord, swirl.center * texSize);\n\n return warp_sampleColor(source, texSize, coord);\n}\n";
25
+ readonly fs: "layout(std140) uniform swirlUniforms {\n vec2 center;\n float radius;\n float angle;\n} swirl;\n\nvec2 swirl_warp(vec2 coord, vec2 texCenter) {\n coord -= texCenter;\n float distance = length(coord);\n if (distance < swirl.radius) {\n float percent = (swirl.radius - distance) / swirl.radius;\n float theta = percent * percent * swirl.angle;\n float s = sin(theta);\n float c = cos(theta);\n coord = vec2(\n coord.x * c - coord.y * s,\n coord.x * s + coord.y * c\n );\n }\n coord += texCenter;\n return coord;\n}\n\nvec4 swirl_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\n vec2 coord = texCoord * texSize;\n coord = swirl_warp(coord, swirl.center * texSize);\n\n return warp_sampleColor(source, texSize, coord);\n}\n";
26
26
  readonly props: SwirlProps;
27
27
  readonly uniforms: SwirlProps;
28
28
  readonly uniformTypes: {
@@ -40,7 +40,7 @@ fn swirl_sampleColor(
40
40
  }
41
41
  `;
42
42
  const fs = /* glsl */ `\
43
- uniform swirlUniforms {
43
+ layout(std140) uniform swirlUniforms {
44
44
  vec2 center;
45
45
  float radius;
46
46
  float angle;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luma.gl/effects",
3
- "version": "9.3.0-alpha.9",
3
+ "version": "9.3.0",
4
4
  "description": "Post-processing effects for luma.gl",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -52,5 +52,5 @@
52
52
  "@math.gl/core": "^4.1.0",
53
53
  "@math.gl/types": "^4.1.0"
54
54
  },
55
- "gitHead": "737b0f752b3f8a6ae920b394d5ca028427275b37"
55
+ "gitHead": "c5e44faacd07b315a8622b5927e724f15a3d40ae"
56
56
  }
@@ -24,7 +24,7 @@ fn brightnessContrast_filterColor_ext(color: vec4f, texSize: vec2<f32>, texCoord
24
24
  `;
25
25
 
26
26
  const fs = /* glsl */ `\
27
- uniform brightnessContrastUniforms {
27
+ layout(std140) uniform brightnessContrastUniforms {
28
28
  float brightness;
29
29
  float contrast;
30
30
  } brightnessContrast;
@@ -44,7 +44,7 @@ fn denoise_sampleColor(
44
44
  `;
45
45
 
46
46
  const fs = /* glsl */ `\
47
- uniform denoiseUniforms {
47
+ layout(std140) uniform denoiseUniforms {
48
48
  float strength;
49
49
  } denoise;
50
50
 
@@ -40,7 +40,7 @@ fn hueSaturation_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f)
40
40
  `;
41
41
 
42
42
  const fs = /* glsl */ `\
43
- uniform hueSaturationUniforms {
43
+ layout(std140) uniform hueSaturationUniforms {
44
44
  float hue;
45
45
  float saturation;
46
46
  } hueSaturation;
@@ -26,7 +26,7 @@ fn noise_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f
26
26
  `;
27
27
 
28
28
  const fs = /* glsl */ `\
29
- uniform noiseUniforms {
29
+ layout(std140) uniform noiseUniforms {
30
30
  float amount;
31
31
  } noise;
32
32
 
@@ -31,7 +31,7 @@ fn sepia_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> vec4f
31
31
  `;
32
32
 
33
33
  const fs = /* glsl */ `\
34
- uniform sepiaUniforms {
34
+ layout(std140) uniform sepiaUniforms {
35
35
  float amount;
36
36
  } sepia;
37
37
 
@@ -25,7 +25,7 @@ fn vibrance_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> ve
25
25
  `;
26
26
 
27
27
  const fs = /* glsl */ `\
28
- uniform vibranceUniforms {
28
+ layout(std140) uniform vibranceUniforms {
29
29
  float amount;
30
30
  } vibrance;
31
31
 
@@ -24,7 +24,7 @@ fn vignette_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> ve
24
24
  `;
25
25
 
26
26
  const fs = /* glsl */ `\
27
- uniform vignetteUniforms {
27
+ layout(std140) uniform vignetteUniforms {
28
28
  float radius;
29
29
  float amount;
30
30
  } vignette;
@@ -65,7 +65,7 @@ fn tiltShift_sampleColor(
65
65
  `;
66
66
 
67
67
  const fs = /* glsl */ `\
68
- uniform tiltShiftUniforms {
68
+ layout(std140) uniform tiltShiftUniforms {
69
69
  float blurRadius;
70
70
  float gradientRadius;
71
71
  vec2 start;
@@ -53,7 +53,7 @@ fn triangleBlur_sampleColor(
53
53
  `;
54
54
 
55
55
  const fs = /* glsl */ `\
56
- uniform triangleBlurUniforms {
56
+ layout(std140) uniform triangleBlurUniforms {
57
57
  float radius;
58
58
  vec2 delta;
59
59
  } triangleBlur;
@@ -45,7 +45,7 @@ fn zoomBlur_sampleColor(
45
45
  `;
46
46
 
47
47
  const fs = /* glsl */ `
48
- uniform zoomBlurUniforms {
48
+ layout(std140) uniform zoomBlurUniforms {
49
49
  vec2 center;
50
50
  float strength;
51
51
  } zoomBlur;
@@ -47,7 +47,7 @@ fn colorHalftone_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f)
47
47
 
48
48
  // TODO pass texCoord to angle
49
49
  const fs = /* glsl */ `\
50
- uniform colorHalftoneUniforms {
50
+ layout(std140) uniform colorHalftoneUniforms {
51
51
  vec2 center;
52
52
  float angle;
53
53
  float size;
@@ -32,7 +32,7 @@ fn dotScreen_filterColor_ext(color: vec4f, texSize: vec2f, texCoord: vec2f) -> v
32
32
  `;
33
33
 
34
34
  const fs = /* glsl */ `\
35
- uniform dotScreenUniforms {
35
+ layout(std140) uniform dotScreenUniforms {
36
36
  vec2 center;
37
37
  float angle;
38
38
  float size;
@@ -111,7 +111,7 @@ fn edgeWork_sampleColor(
111
111
  `;
112
112
 
113
113
  const fs = /* glsl */ `\
114
- uniform edgeWorkUniforms {
114
+ layout(std140) uniform edgeWorkUniforms {
115
115
  float radius;
116
116
  int mode;
117
117
  } edgeWork;
@@ -64,7 +64,7 @@ fn hexagonalPixelate_sampleColor(
64
64
  `;
65
65
 
66
66
  const fs = /* glsl */ `\
67
- uniform hexagonalPixelateUniforms {
67
+ layout(std140) uniform hexagonalPixelateUniforms {
68
68
  vec2 center;
69
69
  float scale;
70
70
  } hexagonalPixelate;
@@ -46,7 +46,7 @@ fn ink_sampleColor(
46
46
  `;
47
47
 
48
48
  const fs = /* glsl */ `\
49
- uniform inkUniforms {
49
+ layout(std140) uniform inkUniforms {
50
50
  float strength;
51
51
  } ink;
52
52
 
@@ -40,7 +40,7 @@ fn magnify_sampleColor(
40
40
  `;
41
41
 
42
42
  const fs = /* glsl */ `\
43
- uniform magnifyUniforms {
43
+ layout(std140) uniform magnifyUniforms {
44
44
  vec2 screenXY;
45
45
  float radiusPixels;
46
46
  float zoom;
@@ -51,7 +51,7 @@ fn bulgePinch_sampleColor(
51
51
  `;
52
52
 
53
53
  const fs = /* glsl */ `\
54
- uniform bulgePinchUniforms {
54
+ layout(std140) uniform bulgePinchUniforms {
55
55
  vec2 center;
56
56
  float radius;
57
57
  float strength;
@@ -44,7 +44,7 @@ fn swirl_sampleColor(
44
44
  `;
45
45
 
46
46
  const fs = /* glsl */ `\
47
- uniform swirlUniforms {
47
+ layout(std140) uniform swirlUniforms {
48
48
  vec2 center;
49
49
  float radius;
50
50
  float angle;