webgl2-sdf 0.0.4 → 0.0.6

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 (50) 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 -16
  10. package/node/generate-sdf.js +35 -29
  11. package/node/generate-sdf.js.map +1 -1
  12. package/node/index.d.ts +2 -2
  13. package/node/index.js +2 -2
  14. package/node/index.js.map +1 -1
  15. package/node/main-program.d.ts +1 -1
  16. package/node/main-program.js +4 -4
  17. package/node/main-program.js.map +1 -1
  18. package/node/prepare-buffers.d.ts +1 -1
  19. package/node/prepare-buffers.js +2 -2
  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} +4 -4
  26. package/node/shaders/vertex.js.map +1 -0
  27. package/node/types/gl-context.d.ts +1 -1
  28. package/node/utils/seg-box-x.js +27 -17
  29. package/node/utils/seg-box-x.js.map +1 -1
  30. package/node/webgl-utils/{get-gl-context.js → get-web-gl-context.js} +7 -15
  31. package/node/webgl-utils/get-web-gl-context.js.map +1 -0
  32. package/package.json +3 -3
  33. package/src/bezier/bezier-curves-to-line-segs.ts +2 -3
  34. package/src/bezier/split-into-line-segments.ts +7 -5
  35. package/src/debug-shaders.ts +4 -4
  36. package/src/generate-sdf.ts +39 -36
  37. package/src/index.ts +2 -2
  38. package/src/main-program.ts +5 -4
  39. package/src/prepare-buffers.ts +1 -2
  40. package/src/shaders/{main.fragment.ts → fragment.ts} +4 -3
  41. package/src/shaders/{main.vertex.ts → vertex.ts} +3 -3
  42. package/src/types/gl-context.ts +1 -1
  43. package/src/utils/seg-box-x.ts +30 -17
  44. package/src/webgl-utils/{get-gl-context.ts → get-web-gl-context.ts} +8 -18
  45. package/node/shaders/main.fragment.d.ts +0 -2
  46. package/node/shaders/main.fragment.js.map +0 -1
  47. package/node/shaders/main.vertex.d.ts +0 -2
  48. package/node/shaders/main.vertex.js.map +0 -1
  49. package/node/webgl-utils/get-gl-context.js.map +0 -1
  50. /package/node/webgl-utils/{get-gl-context.d.ts → get-web-gl-context.d.ts} +0 -0
@@ -23,8 +23,12 @@ function segBoxX(
23
23
 
24
24
  // Parametric line equation: P(t) = P1 + t*(P2-P1), where 0 <= t <= 1
25
25
 
26
- const ts: number[] = [];
27
- const ps: number[][] = [];
26
+ // const ts: number[] = [];
27
+ // const ps: number[][] = [];
28
+ const xs: {
29
+ t: number,
30
+ p: number[]
31
+ }[] = [];
28
32
 
29
33
  if (dx !== 0) {
30
34
  // Check intersection with left edge (x = minX)
@@ -32,8 +36,9 @@ function segBoxX(
32
36
  if (tL >= 0 && tL <= 1) {
33
37
  const y = y0 + tL*dy;
34
38
  if (y >= minY && y <= maxY) {
35
- ts.push(tL);
36
- ps.push([minX, y]);
39
+ // ts.push(tL);
40
+ // ps.push([minX, y]);
41
+ xs.push({ t: tL, p: [minX, y] });
37
42
  }
38
43
  }
39
44
 
@@ -42,8 +47,9 @@ function segBoxX(
42
47
  if (tR >= 0 && tR <= 1) {
43
48
  const y = y0 + tR*dy;
44
49
  if (y >= minY && y <= maxY) {
45
- ts.push(tR);
46
- ps.push([maxX, y]);
50
+ // ts.push(tR);
51
+ // ps.push([maxX, y]);
52
+ xs.push({ t: tR, p: [maxX, y] });
47
53
  }
48
54
  }
49
55
  }
@@ -54,8 +60,9 @@ function segBoxX(
54
60
  if (tT >= 0 && tT <= 1) {
55
61
  const x = x0 + tT*dx;
56
62
  if (x >= minX && x <= maxX) {
57
- ts.push(tT);
58
- ps.push([x, minY]);
63
+ // ts.push(tT);
64
+ // ps.push([x, minY]);
65
+ xs.push({ t: tT, p: [x, minY] });
59
66
  }
60
67
  }
61
68
 
@@ -64,20 +71,26 @@ function segBoxX(
64
71
  if (tB >= 0 && tB <= 1) {
65
72
  const x = x0 + tB*dx;
66
73
  if (x >= minX && x <= maxX) {
67
- ts.push(tB);
68
- ps.push([x, maxY]);
74
+ // ts.push(tB);
75
+ // ps.push([x, maxY]);
76
+ xs.push({ t: tB, p: [x, maxY] });
69
77
  }
70
78
  }
71
79
  }
72
80
 
73
- // TODO might be more than 2!!
74
- if (ts.length === 2) {
75
- return ts[0] < ts[1]
76
- ? ps
77
- : [ps[1],ps[0]];
78
- }
79
81
 
80
- return ps;
82
+ const seen = new Set<number>(); // Store unique t values
83
+ const xs_ = xs.filter(x => {
84
+ const { t } = x;
85
+ if (seen.has(t)) {
86
+ return false;
87
+ } else {
88
+ seen.add(t);
89
+ return true;
90
+ }
91
+ });
92
+
93
+ return xs_.sort((a,b) => a.t - b.t).map(x => x.p);
81
94
  }
82
95
 
83
96
 
@@ -24,29 +24,19 @@ function getWebGlContext(
24
24
  const programs: { [index:string]: Program } = {};
25
25
  const textures: { [index:string]: Texture } = {};
26
26
 
27
- gl.canvas.addEventListener('webglcontextlost', e => {
28
- onContextLoss();
29
- e.preventDefault();
30
- }, false);
27
+ const glContext: GlContext = { gl, textures, programs };
28
+
29
+ gl.canvas.addEventListener('webglcontextlost', event => {
30
+ deleteAllProps(programs);
31
+ deleteAllProps(textures);
32
+ cache.delete(gl);
31
33
 
32
- const glContext: GlContext = {
33
- gl,
34
- onContextLoss,
35
- textures,
36
- programs
37
- };
34
+ glContext.onContextLoss?.(event);
35
+ }, false);
38
36
 
39
37
  cache.set(gl, glContext);
40
38
 
41
39
  return glContext;
42
-
43
-
44
- ////////////////////////
45
-
46
- function onContextLoss() {
47
- deleteAllProps(programs);
48
- deleteAllProps(textures);
49
- }
50
40
  }
51
41
 
52
42
 
@@ -1,2 +0,0 @@
1
- declare function getMainFragment(colCount: number, padCount: number): string;
2
- export { getMainFragment };
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.fragment.js","sourceRoot":"","sources":["../../src/shaders/main.fragment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,KAAK,GAAkD,EAAE,CAAC;AAGhE,SAAS,eAAe,CAChB,QAAgB,EAChB,QAAgB;IAEpB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,GAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;IACjD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAAC,OAAO,QAAQ,CAAC;IAAC,CAAC;IAEpD,MAAM,aAAa;IACnB,QAAQ,CAAA;;;;;;;;;;;;gCAYwB,CAAC,SAAS,GAAG,CAAC,GAAC,QAAQ,CAAC,GAAC,CAAC,QAAQ,GAAG,CAAC,GAAC,QAAQ,CAAC,GAAG,CAAC;;;iCAGnD,SAAS,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAuDR,SAAS;;kEAEmB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8CAsD7B,SAAS;;;;;;;;;CAStD,CAAA;IAEG,KAAK,CAAC,IAAI,GAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,aAAa,CAAC;IAChD,OAAO,aAAa,CAAC;AACzB,CAAC;AAGD,OAAO,EAAE,eAAe,EAAE,CAAA"}
@@ -1,2 +0,0 @@
1
- declare const main_Vertex = "#version 300 es\n\nprecision highp float;\n\nuniform vec2 uWidthHeight;\nin vec2 aUV;\nin ivec2 aCloseCellIdxRangePerCell;\nin ivec2 aCrossIdxRangePerCell;\nout vec2 vXY;\nflat out int instanceId;\nflat out ivec2 closeCellIdxRange;\nflat out ivec2 crossCellIdxRange;\n\n\nvoid main() {\n instanceId = gl_InstanceID;\n closeCellIdxRange = aCloseCellIdxRangePerCell;\n crossCellIdxRange = aCrossIdxRangePerCell;\n\n // drawn column-by-column\n float i = float(instanceId / 32); // column index\n float j = float(instanceId % 32); // row index\n\n vec2 trans = vec2(\n i / float(32),\n j / float(32)\n );\n\n vec2 uv = aUV + trans;\n\n float width = uWidthHeight.x;\n float height = uWidthHeight.y;\n\n vXY = vec2(\n height * uv.x,\n height * uv.y\n );\n\n float aspectRatio = width / height;\n\n gl_Position = vec4(\n vec2(\n (2.0*(uv.x / aspectRatio) - 1.0),\n 2.0*uv.y - 1.0\n ),\n 0.0, 1.0\n );\n}\n";
2
- export { main_Vertex };
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.vertex.js","sourceRoot":"","sources":["../../src/shaders/main.vertex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,WAAW,GAAG,QAAQ,CAAA;;;;;;;;;;;;;;;;;;;;mCAoBO,SAAS;mCACT,SAAS;;;oBAGxB,SAAS;oBACT,SAAS;;;;;;;;;;;;;;;;;;;;;;;CAuB5B,CAAC;AAGF,OAAO,EAAE,WAAW,EAAE,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-gl-context.js","sourceRoot":"","sources":["../../src/webgl-utils/get-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"}