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
@@ -8,10 +8,10 @@ import { ROW_COUNT } from './row-count.js';
8
8
  import { clipLineSegmentToStrips } from './utils/clip-line-segment-to-strips.js';
9
9
  import { mapToViewbox } from './utils/map-to-viewbox.js';
10
10
  // import { sum } from './utils/sum.js'; // testing
11
- function prepareBuffers(psss, width, height, colCount, cellSize, maxDistance, padCount, resolution = 0.5, viewbox = [0, 0, width, height], stretch = 1) {
11
+ function prepareBuffers(psss, width, height, colCount, cellSize, maxDistance, padCount, viewbox = [0, 0, width, height], stretch = 1) {
12
12
  ////////////////////////////////////////////////////////////////////////////
13
13
  const psss_ = mapToViewbox(viewbox, width, height / stretch, psss);
14
- const lineSegs = bezierCurvesToLineSegs(psss_, resolution);
14
+ const lineSegs = bezierCurvesToLineSegs(psss_);
15
15
  const grid = createEmptyGrid(colCount, padCount);
16
16
  const strips = new Array(ROW_COUNT).fill(undefined).map(v => []);
17
17
  for (let i = 0; i < lineSegs.length; i++) {
@@ -1 +1 @@
1
- {"version":3,"file":"prepare-buffers.js","sourceRoot":"","sources":["../src/prepare-buffers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prepare-buffers.js","sourceRoot":"","sources":["../src/prepare-buffers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ declare function getFragment(colCount: number, padCount: number): string;
2
+ export { getFragment };
@@ -1,6 +1,6 @@
1
1
  import { ROW_COUNT } from "../row-count.js";
2
2
  const cache = {};
3
- function getMainFragment(colCount, padCount) {
3
+ function getFragment(colCount, padCount) {
4
4
  const fragment = cache[1024 * colCount + padCount];
5
5
  if (fragment !== undefined) {
6
6
  return fragment;
@@ -132,7 +132,8 @@ void main() {
132
132
  ///////////////////////////////////////////////////////////////////////////
133
133
 
134
134
  // DEBUG!
135
- float alpha = ((instanceId + instanceId/${ROW_COUNT}) % 2 == 0 ? 0.3 : 0.5);
135
+ // float alpha = ((instanceId + instanceId/${ROW_COUNT}) % 2 == 0 ? 0.3 : 0.5);
136
+ float alpha = res == 1.0 ? 0.0 : 0.5;
136
137
 
137
138
  float red = inside ? 0.2 : 0.8;
138
139
  float green = abs(sin(50.0 * res));
@@ -145,5 +146,5 @@ void main() {
145
146
  cache[1024 * colCount + padCount] = main_Fragment;
146
147
  return main_Fragment;
147
148
  }
148
- export { getMainFragment };
149
- //# sourceMappingURL=main.fragment.js.map
149
+ export { getFragment };
150
+ //# sourceMappingURL=fragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fragment.js","sourceRoot":"","sources":["../../src/shaders/fragment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,KAAK,GAAkD,EAAE,CAAC;AAGhE,SAAS,WAAW,CACZ,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDAsD1B,SAAS;;;;;;;;;;CAUzD,CAAA;IAEG,KAAK,CAAC,IAAI,GAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,aAAa,CAAC;IAChD,OAAO,aAAa,CAAC;AACzB,CAAC;AAGD,OAAO,EAAE,WAAW,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ declare const 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 { vertex };
@@ -1,5 +1,5 @@
1
1
  import { ROW_COUNT } from "../row-count.js";
2
- const main_Vertex = /*glsl*/ `#version 300 es
2
+ const vertex = /*glsl*/ `#version 300 es
3
3
 
4
4
  precision highp float;
5
5
 
@@ -42,11 +42,11 @@ void main() {
42
42
  gl_Position = vec4(
43
43
  vec2(
44
44
  (2.0*(uv.x / aspectRatio) - 1.0),
45
- 2.0*uv.y - 1.0
45
+ (2.0*uv.y - 1.0)
46
46
  ),
47
47
  0.0, 1.0
48
48
  );
49
49
  }
50
50
  `;
51
- export { main_Vertex };
52
- //# sourceMappingURL=main.vertex.js.map
51
+ export { vertex };
52
+ //# sourceMappingURL=vertex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vertex.js","sourceRoot":"","sources":["../../src/shaders/vertex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,MAAM,GAAG,QAAQ,CAAA;;;;;;;;;;;;;;;;;;;;mCAoBY,SAAS;mCACT,SAAS;;;oBAGxB,SAAS;oBACT,SAAS;;;;;;;;;;;;;;;;;;;;;;;CAuB5B,CAAC;AAGF,OAAO,EAAE,MAAM,EAAE,CAAA"}
@@ -22,6 +22,6 @@ interface GlContext {
22
22
  readonly programs: {
23
23
  [index: string]: Program;
24
24
  };
25
- readonly onContextLoss: () => void;
25
+ onContextLoss?: (event: Event) => void;
26
26
  }
27
27
  export type { GlContext };
@@ -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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"}
@@ -15,26 +15,18 @@ function getWebGlContext(gl) {
15
15
  }
16
16
  const programs = {};
17
17
  const textures = {};
18
- gl.canvas.addEventListener('webglcontextlost', e => {
19
- onContextLoss();
20
- e.preventDefault();
18
+ const glContext = { gl, textures, programs };
19
+ gl.canvas.addEventListener('webglcontextlost', event => {
20
+ deleteAllProps(programs);
21
+ deleteAllProps(textures);
22
+ cache.delete(gl);
23
+ glContext.onContextLoss?.(event);
21
24
  }, false);
22
- const glContext = {
23
- gl,
24
- onContextLoss,
25
- textures,
26
- programs
27
- };
28
25
  cache.set(gl, glContext);
29
26
  return glContext;
30
- ////////////////////////
31
- function onContextLoss() {
32
- deleteAllProps(programs);
33
- deleteAllProps(textures);
34
- }
35
27
  }
36
28
  function deleteAllProps(o) {
37
29
  Object.keys(o).forEach(key => { delete o[key]; });
38
30
  }
39
31
  export { getWebGlContext };
40
- //# sourceMappingURL=get-gl-context.js.map
32
+ //# 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,MAAM,SAAS,GAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAExD,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,KAAK,CAAC,EAAE;QACnD,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzB,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEjB,SAAS,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAEzB,OAAO,SAAS,CAAC;AACrB,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"}
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.4",
5
+ "version": "0.0.6",
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,5 +1,5 @@
1
- import { getMainFragment } from "./shaders/main.fragment.js";
2
- import { main_Vertex } from "./shaders/main.vertex.js";
1
+ import { getFragment } from "./shaders/fragment.js";
2
+ import { vertex } from "./shaders/vertex.js";
3
3
 
4
4
 
5
5
  /**
@@ -26,8 +26,8 @@ function debugShaders(
26
26
  gl: WebGL2RenderingContext) {
27
27
 
28
28
  try {
29
- debugGlsl(gl, gl.VERTEX_SHADER, main_Vertex);
30
- debugGlsl(gl, gl.FRAGMENT_SHADER, getMainFragment(32,4));
29
+ debugGlsl(gl, gl.VERTEX_SHADER, vertex);
30
+ debugGlsl(gl, gl.FRAGMENT_SHADER, getFragment(32,4));
31
31
  } catch (e) {
32
32
  console.log(e);
33
33
  throw e;
@@ -1,6 +1,6 @@
1
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';
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';
@@ -13,24 +13,29 @@ const { ceil, min, max } = Math;
13
13
 
14
14
 
15
15
  /**
16
- * TODO
17
- * @param gl
18
- * @param psss
19
- * @param width
20
- * @param height
21
- * @param viewbox
22
- * @param maxDistance
23
- * @param sdfExponent
24
- * @param inclInside
25
- * @param inclOutside
26
- * @param x
27
- * @param y
28
- * @param channel
29
- * @param resolution
16
+ * Generates an sdf (signed distance field) from the given bezier curves,
17
+ * viewbox, etc. and renders the result
18
+ *
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
30
35
  */
31
- function generateIntoFramebuffer(
36
+ function generateSdf(
32
37
  glContext: GlContext,
33
- psss: (number[][])[][] | string,
38
+ bezierCurves_or_svgStr: (number[][])[][] | string,
34
39
  width: number,
35
40
  height: number,
36
41
  viewbox: [number,number,number,number],
@@ -39,19 +44,14 @@ function generateIntoFramebuffer(
39
44
  inclInside = true,
40
45
  inclOutside = true,
41
46
  x = 0, y = 0,
42
- channel = 0,
43
- resolution: 0.5|1 = 0.5) {
47
+ channel = 0) {
44
48
 
45
- // debugShaders(gl); // comment for production
46
-
47
- const psss_ = typeof psss === 'string'
48
- ? getPathsFromStr(psss)
49
- : psss;
49
+ const psss = typeof bezierCurves_or_svgStr === 'string'
50
+ ? getPathsFromStr(bezierCurves_or_svgStr)
51
+ : bezierCurves_or_svgStr;
50
52
 
51
53
  // const glContext = getWebGLContext(gl);
52
54
 
53
- const { onContextLoss } = glContext;
54
-
55
55
  let stretch = 1;
56
56
  const aspectRatio = width/height;
57
57
  if (aspectRatio > MAX_ASPECT_RATIO_BEFORE_STRETCH) {
@@ -69,25 +69,28 @@ function generateIntoFramebuffer(
69
69
 
70
70
  const programMain = initProgram(
71
71
  glContext, `main${colCount}-${padCount}`,
72
- main_Vertex, getMainFragment(colCount, padCount)
72
+ vertex, getFragment(colCount, padCount)
73
73
  );
74
74
 
75
75
  const { gl } = glContext;
76
76
 
77
+ // debugShaders(gl); // comment for production
78
+
77
79
  gl.useProgram(programMain.program);
78
80
  mainProgram(
79
- glContext, programMain, resolution, psss_,
80
- viewbox, maxDistance, sdfExponent, width, height, colCount,
81
+ glContext, programMain, psss,
82
+ viewbox, maxDistance, sdfExponent, x, y, width, height, colCount,
81
83
  cellSize, inclInside, inclOutside, padCount, stretch
82
84
  );
83
85
 
84
- // Handle context loss occurring during any of the above calls
85
- if (gl.isContextLost()) {
86
- onContextLoss();
87
-
88
- throw new Error('Webgl2 context lost.');
86
+ // testing!!
87
+ if (Math.random() > 0.995) {
88
+ const loseContextExt = gl.getExtension('WEBGL_lose_context');
89
+ if (loseContextExt) {
90
+ loseContextExt.loseContext();
91
+ }
89
92
  }
90
93
  }
91
94
 
92
95
 
93
- export { generateIntoFramebuffer }
96
+ export { generateSdf }
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
1
 
2
- export { generateIntoFramebuffer } from './generate-sdf.js';
2
+ export { generateSdf } from './generate-sdf.js';
3
3
  export { freeGlContext } from './webgl-utils/free-gl-context.js';
4
- export { getWebGlContext } from './webgl-utils/get-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
@@ -142,10 +143,10 @@ function mainProgram(
142
143
 
143
144
  if (stretch > 1) {
144
145
  gl.enable(gl.SCISSOR_TEST);
145
- gl.scissor(0, 0, width, height/stretch)
146
+ gl.scissor(x, y, width, height/stretch)
146
147
  }
147
148
 
148
- gl.viewport(0, 0, width, height);
149
+ gl.viewport(x, y, width, height);
149
150
 
150
151
  // draw a square colCount * ROW_COUNT times - 6 vertics
151
152
  gl.drawArraysInstanced(gl.TRIANGLES, 0, 6, colCount*ROW_COUNT);
@@ -18,14 +18,13 @@ function prepareBuffers(
18
18
  cellSize: number,
19
19
  maxDistance: number,
20
20
  padCount: number,
21
- resolution: 0.5|1 = 0.5,
22
21
  viewbox: [number,number,number,number] = [0,0,width,height],
23
22
  stretch = 1) {
24
23
 
25
24
  ////////////////////////////////////////////////////////////////////////////
26
25
  const psss_ = mapToViewbox(viewbox, width, height/stretch, psss);
27
26
 
28
- const lineSegs = bezierCurvesToLineSegs(psss_, resolution);
27
+ const lineSegs = bezierCurvesToLineSegs(psss_);
29
28
  const grid = createEmptyGrid(colCount, padCount);
30
29
  const strips = new Array(ROW_COUNT).fill(undefined).map(v => []);
31
30
 
@@ -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,6 +1,6 @@
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
 
@@ -43,7 +43,7 @@ void main() {
43
43
  gl_Position = vec4(
44
44
  vec2(
45
45
  (2.0*(uv.x / aspectRatio) - 1.0),
46
- 2.0*uv.y - 1.0
46
+ (2.0*uv.y - 1.0)
47
47
  ),
48
48
  0.0, 1.0
49
49
  );
@@ -51,4 +51,4 @@ void main() {
51
51
  `;
52
52
 
53
53
 
54
- export { main_Vertex }
54
+ export { vertex }
@@ -20,7 +20,7 @@ interface GlContext {
20
20
  readonly gl: WebGL2RenderingContext;
21
21
  readonly textures: { [index:string]: Texture };
22
22
  readonly programs: { [index:string]: Program };
23
- readonly onContextLoss: () => void;
23
+ onContextLoss?: (event: Event) => void;
24
24
  }
25
25
 
26
26