webgl2-sdf 0.0.3 → 0.0.5

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 (96) hide show
  1. package/README.md +76 -65
  2. package/browser/index.min.js +1 -1
  3. package/node/bezier/bezier-curves-to-line-segs.d.ts +1 -1
  4. package/node/bezier/bezier-curves-to-line-segs.js +2 -2
  5. package/node/bezier/bezier-curves-to-line-segs.js.map +1 -1
  6. package/node/bezier/split-into-line-segments.d.ts +1 -1
  7. package/node/bezier/split-into-line-segments.js +5 -4
  8. package/node/bezier/split-into-line-segments.js.map +1 -1
  9. package/node/generate-sdf.d.ts +21 -15
  10. package/node/generate-sdf.js +30 -26
  11. package/node/generate-sdf.js.map +1 -1
  12. package/node/index.d.ts +3 -1
  13. package/node/index.js +3 -1
  14. package/node/index.js.map +1 -1
  15. package/node/main-program.d.ts +1 -1
  16. package/node/main-program.js +3 -3
  17. package/node/main-program.js.map +1 -1
  18. package/node/prepare-buffers.d.ts +1 -1
  19. package/node/prepare-buffers.js +6 -8
  20. package/node/prepare-buffers.js.map +1 -1
  21. package/node/shaders/fragment.d.ts +2 -0
  22. package/node/shaders/{main.fragment.js → fragment.js} +5 -4
  23. package/node/shaders/fragment.js.map +1 -0
  24. package/node/shaders/vertex.d.ts +2 -0
  25. package/node/shaders/{main.vertex.js → vertex.js} +9 -6
  26. package/node/shaders/vertex.js.map +1 -0
  27. package/node/types/gl-context.d.ts +0 -1
  28. package/node/types/program.d.ts +2 -0
  29. package/node/utils/calc-circs.js.map +1 -1
  30. package/node/utils/clip-line-segment-to-grid.d.ts +1 -1
  31. package/node/utils/clip-line-segment-to-grid.js +1 -4
  32. package/node/utils/clip-line-segment-to-grid.js.map +1 -1
  33. package/node/utils/clip-line-segment-to-strips.d.ts +2 -3
  34. package/node/utils/clip-line-segment-to-strips.js +5 -57
  35. package/node/utils/clip-line-segment-to-strips.js.map +1 -1
  36. package/node/utils/find-close-cells.js +14 -70
  37. package/node/utils/find-close-cells.js.map +1 -1
  38. package/node/utils/find-crossing-cells.js +0 -15
  39. package/node/utils/find-crossing-cells.js.map +1 -1
  40. package/node/utils/jump-idx.js +20 -18
  41. package/node/utils/jump-idx.js.map +1 -1
  42. package/node/utils/seg-box-x.js +27 -17
  43. package/node/utils/seg-box-x.js.map +1 -1
  44. package/node/webgl-utils/free-gl-context.d.ts +3 -0
  45. package/node/webgl-utils/free-gl-context.js +26 -0
  46. package/node/webgl-utils/free-gl-context.js.map +1 -0
  47. package/node/webgl-utils/{get-gl-context.d.ts → get-web-gl-context.d.ts} +2 -2
  48. package/node/webgl-utils/{get-gl-context.js → get-web-gl-context.js} +7 -10
  49. package/node/webgl-utils/get-web-gl-context.js.map +1 -0
  50. package/node/webgl-utils/set-attribute.js +1 -1
  51. package/node/webgl-utils/set-attribute.js.map +1 -1
  52. package/node/webgl-utils/set-uniform-block.js +1 -3
  53. package/node/webgl-utils/set-uniform-block.js.map +1 -1
  54. package/node/webgl-utils/use-program.js +13 -3
  55. package/node/webgl-utils/use-program.js.map +1 -1
  56. package/package.json +3 -3
  57. package/src/bezier/bezier-curves-to-line-segs.ts +2 -3
  58. package/src/bezier/split-into-line-segments.ts +7 -5
  59. package/src/generate-sdf.ts +36 -30
  60. package/src/index.ts +3 -1
  61. package/src/main-program.ts +4 -3
  62. package/src/prepare-buffers.ts +6 -8
  63. package/src/shaders/{main.fragment.ts → fragment.ts} +4 -3
  64. package/src/shaders/{main.vertex.ts → vertex.ts} +8 -5
  65. package/src/types/gl-context.ts +0 -1
  66. package/src/types/program.ts +2 -0
  67. package/src/utils/calc-circs.ts +0 -2
  68. package/src/utils/clip-line-segment-to-grid.ts +1 -5
  69. package/src/utils/clip-line-segment-to-strips.ts +6 -73
  70. package/src/utils/find-close-cells.ts +27 -87
  71. package/src/utils/find-crossing-cells.ts +1 -18
  72. package/src/utils/jump-idx.ts +25 -20
  73. package/src/utils/seg-box-x.ts +30 -17
  74. package/src/webgl-utils/free-gl-context.ts +35 -0
  75. package/src/webgl-utils/{get-gl-context.ts → get-web-gl-context.ts} +6 -9
  76. package/src/webgl-utils/set-attribute.ts +1 -1
  77. package/src/webgl-utils/set-uniform-block.ts +1 -3
  78. package/src/webgl-utils/use-program.ts +14 -3
  79. package/node/debug-shaders.d.ts +0 -9
  80. package/node/shaders/main.fragment.d.ts +0 -2
  81. package/node/shaders/main.fragment.js.map +0 -1
  82. package/node/shaders/main.vertex.d.ts +0 -2
  83. package/node/shaders/main.vertex.js.map +0 -1
  84. package/node/types/strip.d.ts +0 -8
  85. package/node/types/strip.js +0 -2
  86. package/node/types/strip.js.map +0 -1
  87. package/node/utils/create-empty-strips.d.ts +0 -7
  88. package/node/utils/create-empty-strips.js +0 -16
  89. package/node/utils/create-empty-strips.js.map +0 -1
  90. package/node/utils/distance-seg-to-p.d.ts +0 -5
  91. package/node/utils/distance-seg-to-p.js +0 -35
  92. package/node/utils/distance-seg-to-p.js.map +0 -1
  93. package/node/webgl-utils/get-gl-context.js.map +0 -1
  94. package/node/webgl2.d.ts +0 -2
  95. package/src/types/strip.ts +0 -11
  96. package/src/utils/create-empty-strips.ts +0 -21
@@ -15,16 +15,18 @@ function segBoxX(seg, square) {
15
15
  const dx = x1 - x0;
16
16
  const dy = y1 - y0;
17
17
  // Parametric line equation: P(t) = P1 + t*(P2-P1), where 0 <= t <= 1
18
- const ts = [];
19
- const ps = [];
18
+ // const ts: number[] = [];
19
+ // const ps: number[][] = [];
20
+ const xs = [];
20
21
  if (dx !== 0) {
21
22
  // Check intersection with left edge (x = minX)
22
23
  const tL = (minX - x0) / dx;
23
24
  if (tL >= 0 && tL <= 1) {
24
25
  const y = y0 + tL * dy;
25
26
  if (y >= minY && y <= maxY) {
26
- ts.push(tL);
27
- ps.push([minX, y]);
27
+ // ts.push(tL);
28
+ // ps.push([minX, y]);
29
+ xs.push({ t: tL, p: [minX, y] });
28
30
  }
29
31
  }
30
32
  // Check intersection with right edge (x = maxX)
@@ -32,8 +34,9 @@ function segBoxX(seg, square) {
32
34
  if (tR >= 0 && tR <= 1) {
33
35
  const y = y0 + tR * dy;
34
36
  if (y >= minY && y <= maxY) {
35
- ts.push(tR);
36
- ps.push([maxX, y]);
37
+ // ts.push(tR);
38
+ // ps.push([maxX, y]);
39
+ xs.push({ t: tR, p: [maxX, y] });
37
40
  }
38
41
  }
39
42
  }
@@ -43,8 +46,9 @@ function segBoxX(seg, square) {
43
46
  if (tT >= 0 && tT <= 1) {
44
47
  const x = x0 + tT * dx;
45
48
  if (x >= minX && x <= maxX) {
46
- ts.push(tT);
47
- ps.push([x, minY]);
49
+ // ts.push(tT);
50
+ // ps.push([x, minY]);
51
+ xs.push({ t: tT, p: [x, minY] });
48
52
  }
49
53
  }
50
54
  // Check intersection with top edge (y = maxY)
@@ -52,18 +56,24 @@ function segBoxX(seg, square) {
52
56
  if (tB >= 0 && tB <= 1) {
53
57
  const x = x0 + tB * dx;
54
58
  if (x >= minX && x <= maxX) {
55
- ts.push(tB);
56
- ps.push([x, maxY]);
59
+ // ts.push(tB);
60
+ // ps.push([x, maxY]);
61
+ xs.push({ t: tB, p: [x, maxY] });
57
62
  }
58
63
  }
59
64
  }
60
- // TODO might be more than 2!!
61
- if (ts.length === 2) {
62
- return ts[0] < ts[1]
63
- ? ps
64
- : [ps[1], ps[0]];
65
- }
66
- return ps;
65
+ const seen = new Set(); // Store unique t values
66
+ const xs_ = xs.filter(x => {
67
+ const { t } = x;
68
+ if (seen.has(t)) {
69
+ return false;
70
+ }
71
+ else {
72
+ seen.add(t);
73
+ return true;
74
+ }
75
+ });
76
+ return xs_.sort((a, b) => a.t - b.t).map(x => x.p);
67
77
  }
68
78
  export { segBoxX };
69
79
  //# sourceMappingURL=seg-box-x.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"seg-box-x.js","sourceRoot":"","sources":["../../src/utils/seg-box-x.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seg-box-x.js","sourceRoot":"","sources":["../../src/utils/seg-box-x.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { GlContext } from '../types/gl-context.js';
2
+ declare function freeGlContext(glContext: GlContext | undefined): void;
3
+ export { freeGlContext };
@@ -0,0 +1,26 @@
1
+ function freeGlContext(glContext) {
2
+ if (glContext === undefined) {
3
+ return;
4
+ }
5
+ const { gl, programs, textures } = glContext;
6
+ for (let key in programs) {
7
+ const { attributes, fragmentShader, vertexShader, uniformBlocks, program } = programs[key];
8
+ for (let key in uniformBlocks) {
9
+ const { buf } = uniformBlocks[key];
10
+ gl.deleteBuffer(buf);
11
+ }
12
+ for (let key in attributes) {
13
+ const { buf } = attributes[key];
14
+ gl.deleteBuffer(buf);
15
+ }
16
+ gl.deleteShader(fragmentShader);
17
+ gl.deleteShader(vertexShader);
18
+ gl.deleteProgram(program);
19
+ }
20
+ for (let key in textures) {
21
+ const { tex } = textures[key];
22
+ gl.deleteTexture(tex);
23
+ }
24
+ }
25
+ export { freeGlContext };
26
+ //# sourceMappingURL=free-gl-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"free-gl-context.js","sourceRoot":"","sources":["../../src/webgl-utils/free-gl-context.ts"],"names":[],"mappings":"AAGA,SAAS,aAAa,CACd,SAAgC;IAEpC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAAC,OAAO;IAAC,CAAC;IAExC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IAE7C,KAAK,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QACvB,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAE3F,KAAK,IAAI,GAAG,IAAI,aAAa,EAAE,CAAC;YAC5B,MAAM,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YACnC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;YACzB,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAChC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QAChC,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAC9B,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9B,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAE1B,CAAC;AACL,CAAC;AAGD,OAAO,EAAE,aAAa,EAAE,CAAA"}
@@ -6,5 +6,5 @@ import type { GlContext } from "../types/gl-context.js";
6
6
  * @param gl the `WebGL2RenderingContext` context to wrap
7
7
  * @param callback
8
8
  */
9
- declare function getWebGLContext<T>(gl: WebGL2RenderingContext): GlContext;
10
- export { getWebGLContext };
9
+ declare function getWebGlContext(gl: WebGL2RenderingContext): GlContext;
10
+ export { getWebGlContext };
@@ -6,7 +6,7 @@ const cache = new WeakMap();
6
6
  * @param gl the `WebGL2RenderingContext` context to wrap
7
7
  * @param callback
8
8
  */
9
- function getWebGLContext(gl) {
9
+ function getWebGlContext(gl) {
10
10
  {
11
11
  const glContext = cache.get(gl);
12
12
  if (glContext) {
@@ -15,29 +15,26 @@ function getWebGLContext(gl) {
15
15
  }
16
16
  const programs = {};
17
17
  const textures = {};
18
- const framebufferStack = [];
19
18
  gl.canvas.addEventListener('webglcontextlost', e => {
20
- handleContextLoss();
19
+ onContextLoss();
21
20
  e.preventDefault();
22
21
  }, false);
23
22
  const glContext = {
24
23
  gl,
25
- onContextLoss: handleContextLoss,
24
+ onContextLoss,
26
25
  textures,
27
- programs,
28
- framebufferStack
26
+ programs
29
27
  };
30
28
  cache.set(gl, glContext);
31
29
  return glContext;
32
30
  ////////////////////////
33
- function handleContextLoss() {
31
+ function onContextLoss() {
34
32
  deleteAllProps(programs);
35
33
  deleteAllProps(textures);
36
- framebufferStack.length = 0;
37
34
  }
38
35
  }
39
36
  function deleteAllProps(o) {
40
37
  Object.keys(o).forEach(key => { delete o[key]; });
41
38
  }
42
- export { getWebGLContext };
43
- //# sourceMappingURL=get-gl-context.js.map
39
+ export { getWebGlContext };
40
+ //# sourceMappingURL=get-web-gl-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-web-gl-context.js","sourceRoot":"","sources":["../../src/webgl-utils/get-web-gl-context.ts"],"names":[],"mappings":"AAKA,MAAM,KAAK,GAAG,IAAI,OAAO,EAAqC,CAAC;AAG/D;;;;;;GAMG;AACH,SAAS,eAAe,CAChB,EAA0B;IAE9B,CAAC;QACG,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,SAAS,EAAE,CAAC;YAAC,OAAO,SAAS,CAAC;QAAC,CAAC;IACxC,CAAC;IAED,MAAM,QAAQ,GAAgC,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAgC,EAAE,CAAC;IAEjD,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE;QAC/C,aAAa,EAAE,CAAC;QAChB,CAAC,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,MAAM,SAAS,GAAc;QACzB,EAAE;QACF,aAAa;QACb,QAAQ;QACR,QAAQ;KACX,CAAC;IAEF,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAEzB,OAAO,SAAS,CAAC;IAGjB,wBAAwB;IAExB,SAAS,aAAa;QAClB,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzB,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;AACL,CAAC;AAGD,SAAS,cAAc,CAAC,CAA6B;IACjD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAGD,OAAO,EAAE,eAAe,EAAE,CAAA"}
@@ -26,7 +26,7 @@ function setAttribute(program) {
26
26
  return (name, size, type, usage, data, instancingDivisor = 0, stride = 0, offset = 0) => {
27
27
  const { gl, attributes } = program;
28
28
  const attr = attributes[name] = attributes[name] ?? {
29
- buf: gl.createBuffer(), // TODO should we destroy our buffers?
29
+ buf: gl.createBuffer(),
30
30
  loc: gl.getAttribLocation(program.program, name),
31
31
  data: null
32
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"set-attribute.js","sourceRoot":"","sources":["../../src/webgl-utils/set-attribute.ts"],"names":[],"mappings":"AAKA,MAAM;AACF,gBAAgB;AAChB,IAAI,EAAa,OAAO;AACxB,aAAa,EAAI,OAAO;AACxB,KAAK,EAAY,OAAO;AACxB,cAAc,EAAG,OAAO;AACxB,GAAG,EAAc,OAAO;AACxB,YAAY,EAAK,OAAO;AACxB,cAAc;AACd,KAAK,EAAY,OAAO;AACxB,UAAU,EAAO,OAAO;AAExB,kBAAkB,EAAY,QAAQ;AACtC,2BAA2B,CAAG,QAAQ;EACzC,GAAG,sBAAsB,CAAC;AAG3B;;;;;;;;;GASG;AACH,SAAS,YAAY,CACb,OAAgB;IAEpB,OAAO,CAAC,IAAY,EACZ,IAAY,EACZ,IAAgB,EAChB,KAAc,EACd,IAAoC,EACpC,iBAAiB,GAAG,CAAC,EACrB,MAAM,GAAG,CAAC,EACV,MAAM,GAAG,CAAC,EAAE,EAAE;QAElB,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAEnC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI;YAChD,GAAG,EAAE,EAAE,CAAC,YAAY,EAAE,EAAE,sCAAsC;YAC9D,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;YAChD,IAAI,EAAE,IAAI;SACb,CAAA;QAED,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAE1B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxC,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACJ,EAAE,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7D,CAAC;QACD,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,iBAAiB,KAAK,CAAC,EAAE,CAAC;YAC1B,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;IACL,CAAC,CAAA;AACL,CAAC;AAGD,OAAO,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"set-attribute.js","sourceRoot":"","sources":["../../src/webgl-utils/set-attribute.ts"],"names":[],"mappings":"AAKA,MAAM;AACF,gBAAgB;AAChB,IAAI,EAAa,OAAO;AACxB,aAAa,EAAI,OAAO;AACxB,KAAK,EAAY,OAAO;AACxB,cAAc,EAAG,OAAO;AACxB,GAAG,EAAc,OAAO;AACxB,YAAY,EAAK,OAAO;AACxB,cAAc;AACd,KAAK,EAAY,OAAO;AACxB,UAAU,EAAO,OAAO;AAExB,kBAAkB,EAAY,QAAQ;AACtC,2BAA2B,CAAG,QAAQ;EACzC,GAAG,sBAAsB,CAAC;AAG3B;;;;;;;;;GASG;AACH,SAAS,YAAY,CACb,OAAgB;IAEpB,OAAO,CAAC,IAAY,EACZ,IAAY,EACZ,IAAgB,EAChB,KAAc,EACd,IAAoC,EACpC,iBAAiB,GAAG,CAAC,EACrB,MAAM,GAAG,CAAC,EACV,MAAM,GAAG,CAAC,EAAE,EAAE;QAElB,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAEnC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI;YAChD,GAAG,EAAE,EAAE,CAAC,YAAY,EAAE;YACtB,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;YAChD,IAAI,EAAE,IAAI;SACb,CAAA;QAED,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAE1B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxC,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACJ,EAAE,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7D,CAAC;QACD,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,iBAAiB,KAAK,CAAC,EAAE,CAAC;YAC1B,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;IACL,CAAC,CAAA;AACL,CAAC;AAGD,OAAO,EAAE,YAAY,EAAE,CAAA"}
@@ -21,10 +21,8 @@ function setUniformBlock(program_) {
21
21
  gl.bindBuffer(gl.UNIFORM_BUFFER, uniformBlock.buf);
22
22
  }
23
23
  const { buf } = uniformBlock;
24
- gl.bufferData(gl.UNIFORM_BUFFER, buffer, gl.DYNAMIC_DRAW);
25
- // gl.bindBuffer(gl.UNIFORM_BUFFER, null);
24
+ gl.bufferData(gl.UNIFORM_BUFFER, buffer, gl.STATIC_DRAW);
26
25
  gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, buf);
27
- // gl.bindBufferRange(gl.UNIFORM_BUFFER, bindingPoint, ubo, 0, sizeInBytes);
28
26
  };
29
27
  }
30
28
  export { setUniformBlock };
@@ -1 +1 @@
1
- {"version":3,"file":"set-uniform-block.js","sourceRoot":"","sources":["../../src/webgl-utils/set-uniform-block.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,SAAS,eAAe,CAChB,QAAiB;IAErB,OAAO,CAAC,SAAiB,EACjB,YAAoB,EACpB,MAA+B,EAAE,EAAE;QAEvC,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;QAEhD,yCAAyC;QAEzC,IAAI,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,aAAa,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC/D,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;YAC1D,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC;YAE9B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;YAEtC,YAAY,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;YAC9C,aAAa,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC;QAC5C,CAAC;aAAM,CAAC;YACJ,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC;QAE7B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC;QAC1D,0CAA0C;QAC1C,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;QACxD,4EAA4E;IAChF,CAAC,CAAA;AACL,CAAC;AAGD,OAAO,EAAE,eAAe,EAAE,CAAA"}
1
+ {"version":3,"file":"set-uniform-block.js","sourceRoot":"","sources":["../../src/webgl-utils/set-uniform-block.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,SAAS,eAAe,CAChB,QAAiB;IAErB,OAAO,CAAC,SAAiB,EACjB,YAAoB,EACpB,MAA+B,EAAE,EAAE;QAEvC,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;QAEhD,yCAAyC;QAEzC,IAAI,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,aAAa,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC/D,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;YAC1D,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC;YAE9B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;YAEtC,YAAY,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;YAC9C,aAAa,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC;QAC5C,CAAC;aAAM,CAAC;YACJ,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC;QAE7B,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;QACzD,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;IAC5D,CAAC,CAAA;AACL,CAAC;AAGD,OAAO,EAAE,eAAe,EAAE,CAAA"}
@@ -21,10 +21,20 @@ function initProgram(glContext, name, vert, frag) {
21
21
  const uniforms = {};
22
22
  const uniformBlocks = {};
23
23
  const program = gl.createProgram();
24
- gl.attachShader(program, compileShader(gl, vert, gl.VERTEX_SHADER));
25
- gl.attachShader(program, compileShader(gl, frag, gl.FRAGMENT_SHADER));
24
+ const vertexShader = compileShader(gl, vert, gl.VERTEX_SHADER);
25
+ const fragmentShader = compileShader(gl, frag, gl.FRAGMENT_SHADER);
26
+ gl.attachShader(program, vertexShader);
27
+ gl.attachShader(program, fragmentShader);
26
28
  gl.linkProgram(program);
27
- programs[name] = { gl, program, attributes, uniforms, uniformBlocks };
29
+ programs[name] = {
30
+ gl,
31
+ program,
32
+ attributes,
33
+ uniforms,
34
+ uniformBlocks,
35
+ vertexShader,
36
+ fragmentShader
37
+ };
28
38
  return programs[name];
29
39
  }
30
40
  export { initProgram };
@@ -1 +1 @@
1
- {"version":3,"file":"use-program.js","sourceRoot":"","sources":["../../src/webgl-utils/use-program.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD;;;;;;;;;;;;GAYG;AACH,SAAS,WAAW,CACR,SAAoB,EACpB,IAAY,EACZ,IAAY,EACZ,IAAY;IAEpB,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IAEnC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,UAAU,GAAkC,EAAE,CAAC;IACrD,MAAM,QAAQ,GAAoD,EAAE,CAAC;IACrE,MAAM,aAAa,GAAqC,EAAE,CAAC;IAE3D,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;IACnC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IACpE,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IACtE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAExB,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;IAEtE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAGD,OAAO,EAAE,WAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"use-program.js","sourceRoot":"","sources":["../../src/webgl-utils/use-program.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD;;;;;;;;;;;;GAYG;AACH,SAAS,WAAW,CACR,SAAoB,EACpB,IAAY,EACZ,IAAY,EACZ,IAAY;IAEpB,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IAEnC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,UAAU,GAAkC,EAAE,CAAC;IACrD,MAAM,QAAQ,GAAoD,EAAE,CAAC;IACrE,MAAM,aAAa,GAAqC,EAAE,CAAC;IAE3D,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC;IAC/D,MAAM,cAAc,GAAG,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC;IAEnE,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACvC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACzC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAExB,QAAQ,CAAC,IAAI,CAAC,GAAG;QACb,EAAE;QACF,OAAO;QACP,UAAU;QACV,QAAQ;QACR,aAAa;QACb,YAAY;QACZ,cAAc;KACjB,CAAC;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAGD,OAAO,EAAE,WAAW,EAAE,CAAA"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "webgl2-sdf",
3
3
  "sideEffects": false,
4
4
  "description": "Fast sdf generator from bezier curves or svg string.",
5
- "version": "0.0.3",
5
+ "version": "0.0.5",
6
6
  "author": {
7
7
  "name": "Floris Steenkamp"
8
8
  },
@@ -31,14 +31,14 @@
31
31
  ],
32
32
  "dependencies": {},
33
33
  "devDependencies": {
34
- "@types/node": "^25.0.9",
34
+ "@types/node": "^25.0.10",
35
35
  "c8": "^10.1.3",
36
36
  "rimraf": "^6.1.2",
37
37
  "ts-loader": "^9.5.4",
38
38
  "ts-node": "^10.9.2",
39
39
  "typescript": "^5.9.3",
40
40
  "webpack": "^5.104.1",
41
- "webpack-bundle-analyzer": "^5.1.1",
41
+ "webpack-bundle-analyzer": "^5.2.0",
42
42
  "webpack-cli": "^6.0.1",
43
43
  "source-map-support": "^0.5.21"
44
44
  },
@@ -11,8 +11,7 @@ import { splitIntoLineSegments } from "./split-into-line-segments.js";
11
11
  * from the line connecting it's endpoints are less than this value
12
12
  */
13
13
  function bezierCurvesToLineSegs(
14
- bezierLoops: (number[][])[][],
15
- resolution: 0.5|1) {
14
+ bezierLoops: (number[][])[][]) {
16
15
 
17
16
  let lineSegs: number[][][] = [];
18
17
  for (let i=0; i<bezierLoops.length; i++) {
@@ -26,7 +25,7 @@ function bezierCurvesToLineSegs(
26
25
  continue;
27
26
  }
28
27
 
29
- const lineSegs_ = splitIntoLineSegments(ps, resolution);
28
+ const lineSegs_ = splitIntoLineSegments(ps);
30
29
 
31
30
  lineSegs.push(...lineSegs_.filter(ps => !isReallyPoint(ps)));
32
31
  }
@@ -4,6 +4,9 @@ import { splitByDeviationFromStraighLine_Cubic_Crude } from './split-by-deviatio
4
4
  import { splitByDeviationFromStraighLine_Quad } from './split-by-deviation-from-straight-line-quad.js';
5
5
 
6
6
 
7
+ const RESOLUTION = 0.5;
8
+
9
+
7
10
  /**
8
11
  * Returns the result of splitting the given bezier curve into straight line
9
12
  * segments up to `maxDeviation`
@@ -13,13 +16,12 @@ import { splitByDeviationFromStraighLine_Quad } from './split-by-deviation-from-
13
16
  * @param maxDeviation maximum deviation from straight line
14
17
  */
15
18
  function splitIntoLineSegments(
16
- ps: number[][],
17
- maxDeviation: number) {
19
+ ps: number[][]) {
18
20
 
19
21
  const ts = ps.length === 3
20
- ? splitByDeviationFromStraighLine_Quad(ps, maxDeviation)
21
- // : splitByDeviationFromStraighLine_Cubic_Precise(ps, maxDeviation)
22
- : splitByDeviationFromStraighLine_Cubic_Crude(ps, maxDeviation)
22
+ ? splitByDeviationFromStraighLine_Quad(ps, RESOLUTION)
23
+ // : splitByDeviationFromStraighLine_Cubic_Precise(ps, RESOLUTION)
24
+ : splitByDeviationFromStraighLine_Cubic_Crude(ps, RESOLUTION)
23
25
 
24
26
  const segs: number[][][] = [];
25
27
  for (let i=0; i<ts.length - 1; i++) {
@@ -1,35 +1,41 @@
1
- import { getWebGLContext } from './webgl-utils/get-gl-context.js';
2
- import { main_Vertex } from './shaders/main.vertex.js';
3
- import { getMainFragment } from './shaders/main.fragment.js';
1
+ // import { getWebGLContext } from './webgl-utils/get-gl-context.js';
2
+ import { vertex } from './shaders/vertex.js';
3
+ import { getFragment } from './shaders/fragment.js';
4
4
  import { initProgram } from './webgl-utils/use-program.js';
5
5
  import { mainProgram } from './main-program.js';
6
6
  import { ROW_COUNT } from './row-count.js';
7
7
  import { getPathsFromStr } from './svg/get-paths-from-str.js';
8
8
  import { MAX_ASPECT_RATIO_BEFORE_STRETCH } from './max-aspect-ratio-before-stretch.js';
9
+ import { GlContext } from './types/gl-context.js';
9
10
  // import { debugShaders } from './debug-shaders.js';
10
11
 
11
12
  const { ceil, min, max } = Math;
12
13
 
13
14
 
14
15
  /**
16
+ * Generates an sdf (signed distance field) from the given bezier curves,
17
+ * viewbox, etc. and renders the result
15
18
  *
16
- * @param gl
17
- * @param psss
18
- * @param width
19
- * @param height
20
- * @param viewbox
21
- * @param maxDistance
22
- * @param sdfExponent
23
- * @param inclInside
24
- * @param inclOutside
25
- * @param x
26
- * @param y
27
- * @param channel
28
- * @param resolution
19
+ * @param glContext a `GlConext` previously created by `getWebGlContext(gl: WebGL2RenderingContext)`
20
+ * @param bezierCurves_or_svgStr either of
21
+ * * an array of linear (lines), quadratic or cubic bezier curves (or a mix
22
+ * thereof) given by given by their ordered control points,
23
+ * e.g. `[ [[0,0],[1,1],[2,1],[2,0]], [[2,0],[7,2],[1,5],[8,6]], ... ]` **OR**
24
+ * * an SVG string, e.g. "M26.53 478.83 C028.89 481.61 031.33 484.32 ..."
25
+ * @param width the width of the drawing rectangle
26
+ * @param height the height of the drawing rectangle
27
+ * @param viewbox the viewbox
28
+ * @param maxDistance maximum sdf distance
29
+ * @param sdfExponent TODO
30
+ * @param inclInside if `true` the sdf will be calculate for the inside of the shape
31
+ * @param inclOutside if `true` the sdf will be calculate for the outside of the shape
32
+ * @param x the position where to draw, x-coordinate
33
+ * @param y the position where to draw, y-coordinate
34
+ * @param channel TODO
29
35
  */
30
- function generateIntoFramebuffer(
31
- gl: WebGL2RenderingContext,
32
- psss: (number[][])[][] | string,
36
+ function generateSdf(
37
+ glContext: GlContext,
38
+ bezierCurves_or_svgStr: (number[][])[][] | string,
33
39
  width: number,
34
40
  height: number,
35
41
  viewbox: [number,number,number,number],
@@ -37,18 +43,16 @@ function generateIntoFramebuffer(
37
43
  sdfExponent = 1,
38
44
  inclInside = true,
39
45
  inclOutside = true,
40
- // framebuffer: WebGLFramebuffer | null,
41
46
  x = 0, y = 0,
42
- channel = 0,
43
- resolution: 0.5|1 = 0.5) {
47
+ channel = 0) {
44
48
 
45
49
  // debugShaders(gl); // comment for production
46
50
 
47
- const psss_ = typeof psss === 'string'
48
- ? getPathsFromStr(psss)
49
- : psss;
51
+ const psss = typeof bezierCurves_or_svgStr === 'string'
52
+ ? getPathsFromStr(bezierCurves_or_svgStr)
53
+ : bezierCurves_or_svgStr;
50
54
 
51
- const glContext = getWebGLContext(gl);
55
+ // const glContext = getWebGLContext(gl);
52
56
 
53
57
  const { onContextLoss } = glContext;
54
58
 
@@ -69,13 +73,15 @@ function generateIntoFramebuffer(
69
73
 
70
74
  const programMain = initProgram(
71
75
  glContext, `main${colCount}-${padCount}`,
72
- main_Vertex, getMainFragment(colCount, padCount)
76
+ vertex, getFragment(colCount, padCount)
73
77
  );
74
78
 
79
+ const { gl } = glContext;
80
+
75
81
  gl.useProgram(programMain.program);
76
82
  mainProgram(
77
- glContext, programMain, resolution, psss_,
78
- viewbox, maxDistance, sdfExponent, width, height, colCount,
83
+ glContext, programMain, psss,
84
+ viewbox, maxDistance, sdfExponent, x, y, width, height, colCount,
79
85
  cellSize, inclInside, inclOutside, padCount, stretch
80
86
  );
81
87
 
@@ -88,4 +94,4 @@ function generateIntoFramebuffer(
88
94
  }
89
95
 
90
96
 
91
- export { generateIntoFramebuffer }
97
+ export { generateSdf }
package/src/index.ts CHANGED
@@ -1,2 +1,4 @@
1
1
 
2
- export { generateIntoFramebuffer } from './generate-sdf.js';
2
+ export { generateSdf } from './generate-sdf.js';
3
+ export { freeGlContext } from './webgl-utils/free-gl-context.js';
4
+ export { getWebGlContext } from './webgl-utils/get-web-gl-context.js';
@@ -17,11 +17,12 @@ const CROSS_TEX_INDEX = 2;
17
17
  function mainProgram(
18
18
  glContext: GlContext,
19
19
  programMain: Program,
20
- resolution: 0.5|1,
21
20
  psss: number[][][][],
22
21
  viewbox: [number,number,number,number],
23
22
  maxDistance: number,
24
23
  sdfExponent = 1,
24
+ x: number,
25
+ y: number,
25
26
  width: number,
26
27
  height: number,
27
28
  colCount: number,
@@ -53,7 +54,7 @@ function mainProgram(
53
54
  segIdxs_PerStrip_Range_Arr
54
55
  } = prepareBuffers(
55
56
  psss, width, height, colCount, cellSize, maxDistance,
56
- padCount, resolution, viewbox, stretch
57
+ padCount, viewbox, stretch
57
58
  );
58
59
 
59
60
  // Init/update attributes
@@ -77,11 +78,11 @@ function mainProgram(
77
78
  );
78
79
 
79
80
  // Init/update uniforms
81
+ setUniform_('2f', 'uOffset', x, y);
80
82
  setUniform_('2f', 'uWidthHeight', width, height);
81
83
  setUniform_('1f', 'uMaxDistance', maxDistance);
82
84
  setUniform_('1f', 'uExponent', sdfExponent); // TODO
83
85
  setUniform_('1i', 'uIncl', (inclInside ? 1 : 0) + (inclOutside ? 2 : 0));
84
- setUniform_('1f', 'uStretch', stretch); // TODO
85
86
 
86
87
  setUniformBlock(programMain)('SegIdxRangePerCellBlock', 0, segIdxs_PerCell_Range_Arr);
87
88
  setUniformBlock(programMain)('SegIdxRangePerStripBlock', 1, segIdxs_PerStrip_Range_Arr);
@@ -5,10 +5,9 @@ import { createEmptyGrid } from './utils/create-empty-grid.js';
5
5
  import { findCrossingCells } from './utils/find-crossing-cells.js';
6
6
  import { TEX_WIDTH } from './tex-width.js';
7
7
  import { ROW_COUNT } from './row-count.js';
8
- import { createEmptyStrips } from './utils/create-empty-strips.js';
9
8
  import { clipLineSegmentToStrips } from './utils/clip-line-segment-to-strips.js';
10
9
  import { mapToViewbox } from './utils/map-to-viewbox.js';
11
- // import { sum } from './utils/sum.js';
10
+ // import { sum } from './utils/sum.js'; // testing
12
11
 
13
12
 
14
13
  function prepareBuffers(
@@ -19,20 +18,20 @@ function prepareBuffers(
19
18
  cellSize: number,
20
19
  maxDistance: number,
21
20
  padCount: number,
22
- resolution: 0.5|1 = 0.5,
23
21
  viewbox: [number,number,number,number] = [0,0,width,height],
24
22
  stretch = 1) {
25
23
 
26
24
  ////////////////////////////////////////////////////////////////////////////
27
25
  const psss_ = mapToViewbox(viewbox, width, height/stretch, psss);
28
26
 
29
- const lineSegs = bezierCurvesToLineSegs(psss_, resolution);
27
+ const lineSegs = bezierCurvesToLineSegs(psss_);
30
28
  const grid = createEmptyGrid(colCount, padCount);
31
- const strips = createEmptyStrips();
29
+ const strips = new Array(ROW_COUNT).fill(undefined).map(v => []);
30
+
32
31
  for (let i=0; i<lineSegs.length; i++) {
33
32
  const seg = lineSegs[i];
34
33
  // Split the line segment into multiple segments that fit within grid cells
35
- clipLineSegmentToGrid(grid, width, height, colCount, cellSize, seg, padCount); // add segments to grid
34
+ clipLineSegmentToGrid(grid, width, height, cellSize, seg, padCount); // add segments to grid
36
35
  clipLineSegmentToStrips(strips, height, seg); // add segments to strips
37
36
  }
38
37
 
@@ -96,8 +95,7 @@ function prepareBuffers(
96
95
  // Add line segs from strips
97
96
  const segIdxs_PerStrip_Range: [number,number][] = [];
98
97
  for (let i=0; i<ROW_COUNT; i++) {
99
- const strip = strips[i];
100
- const { lineSegs } = strip;
98
+ const lineSegs = strips[i];
101
99
 
102
100
  //////////
103
101
  const L = lineSegs.length;
@@ -4,7 +4,7 @@ import { ROW_COUNT } from "../row-count.js";
4
4
  const cache: { [padCount_times_colCount: number]: string } = {};
5
5
 
6
6
 
7
- function getMainFragment(
7
+ function getFragment(
8
8
  colCount: number,
9
9
  padCount: number): string {
10
10
 
@@ -138,7 +138,8 @@ void main() {
138
138
  ///////////////////////////////////////////////////////////////////////////
139
139
 
140
140
  // DEBUG!
141
- float alpha = ((instanceId + instanceId/${ROW_COUNT}) % 2 == 0 ? 0.3 : 0.5);
141
+ // float alpha = ((instanceId + instanceId/${ROW_COUNT}) % 2 == 0 ? 0.3 : 0.5);
142
+ float alpha = res == 1.0 ? 0.0 : 0.5;
142
143
 
143
144
  float red = inside ? 0.2 : 0.8;
144
145
  float green = abs(sin(50.0 * res));
@@ -154,4 +155,4 @@ void main() {
154
155
  }
155
156
 
156
157
 
157
- export { getMainFragment }
158
+ export { getFragment }
@@ -1,11 +1,11 @@
1
1
  import { ROW_COUNT } from "../row-count.js";
2
2
 
3
- const main_Vertex = /*glsl*/`#version 300 es
3
+ const vertex = /*glsl*/`#version 300 es
4
4
 
5
5
  precision highp float;
6
6
 
7
7
  uniform vec2 uWidthHeight;
8
- uniform float uStretch;
8
+ uniform vec2 uOffset;
9
9
  in vec2 aUV;
10
10
  in ivec2 aCloseCellIdxRangePerCell;
11
11
  in ivec2 aCrossIdxRangePerCell;
@@ -41,15 +41,18 @@ void main() {
41
41
 
42
42
  float aspectRatio = width / height;
43
43
 
44
+ float x = (uOffset.x / 2.0*width) - 1.0;
45
+ float y = (uOffset.y / 2.0*height) - 1.0;
46
+
44
47
  gl_Position = vec4(
45
48
  vec2(
46
49
  (2.0*(uv.x / aspectRatio) - 1.0),
47
- 2.0*uv.y - 1.0
48
- ),
50
+ (2.0*uv.y - 1.0)
51
+ ) + vec2(x,y),
49
52
  0.0, 1.0
50
53
  );
51
54
  }
52
55
  `;
53
56
 
54
57
 
55
- export { main_Vertex }
58
+ export { vertex }
@@ -20,7 +20,6 @@ interface GlContext {
20
20
  readonly gl: WebGL2RenderingContext;
21
21
  readonly textures: { [index:string]: Texture };
22
22
  readonly programs: { [index:string]: Program };
23
- readonly framebufferStack: WebGLFramebuffer[];
24
23
  readonly onContextLoss: () => void;
25
24
  }
26
25
 
@@ -8,6 +8,8 @@ interface Program {
8
8
  readonly attributes: { [index:string]: Attribute };
9
9
  readonly uniforms: { [index:string]: WebGLUniformLocation | null };
10
10
  readonly uniformBlocks: { [index:string]: UniformBlock };
11
+ readonly vertexShader: WebGLShader;
12
+ readonly fragmentShader: WebGLShader;
11
13
  }
12
14
 
13
15
 
@@ -50,8 +50,6 @@ function calcCircs() {
50
50
  ranges.sort((a,b) => (a.from - b.from));
51
51
  }
52
52
 
53
-
54
-
55
53
  return ranges;
56
54
  }
57
55