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.
- package/README.md +76 -65
- package/browser/index.min.js +1 -1
- package/node/bezier/bezier-curves-to-line-segs.d.ts +1 -1
- package/node/bezier/bezier-curves-to-line-segs.js +2 -2
- package/node/bezier/bezier-curves-to-line-segs.js.map +1 -1
- package/node/bezier/split-into-line-segments.d.ts +1 -1
- package/node/bezier/split-into-line-segments.js +5 -4
- package/node/bezier/split-into-line-segments.js.map +1 -1
- package/node/generate-sdf.d.ts +21 -16
- package/node/generate-sdf.js +35 -29
- package/node/generate-sdf.js.map +1 -1
- package/node/index.d.ts +2 -2
- package/node/index.js +2 -2
- package/node/index.js.map +1 -1
- package/node/main-program.d.ts +1 -1
- package/node/main-program.js +4 -4
- package/node/main-program.js.map +1 -1
- package/node/prepare-buffers.d.ts +1 -1
- package/node/prepare-buffers.js +2 -2
- package/node/prepare-buffers.js.map +1 -1
- package/node/shaders/fragment.d.ts +2 -0
- package/node/shaders/{main.fragment.js → fragment.js} +5 -4
- package/node/shaders/fragment.js.map +1 -0
- package/node/shaders/vertex.d.ts +2 -0
- package/node/shaders/{main.vertex.js → vertex.js} +4 -4
- package/node/shaders/vertex.js.map +1 -0
- package/node/types/gl-context.d.ts +1 -1
- package/node/utils/seg-box-x.js +27 -17
- package/node/utils/seg-box-x.js.map +1 -1
- package/node/webgl-utils/{get-gl-context.js → get-web-gl-context.js} +7 -15
- package/node/webgl-utils/get-web-gl-context.js.map +1 -0
- package/package.json +3 -3
- package/src/bezier/bezier-curves-to-line-segs.ts +2 -3
- package/src/bezier/split-into-line-segments.ts +7 -5
- package/src/debug-shaders.ts +4 -4
- package/src/generate-sdf.ts +39 -36
- package/src/index.ts +2 -2
- package/src/main-program.ts +5 -4
- package/src/prepare-buffers.ts +1 -2
- package/src/shaders/{main.fragment.ts → fragment.ts} +4 -3
- package/src/shaders/{main.vertex.ts → vertex.ts} +3 -3
- package/src/types/gl-context.ts +1 -1
- package/src/utils/seg-box-x.ts +30 -17
- package/src/webgl-utils/{get-gl-context.ts → get-web-gl-context.ts} +8 -18
- package/node/shaders/main.fragment.d.ts +0 -2
- package/node/shaders/main.fragment.js.map +0 -1
- package/node/shaders/main.vertex.d.ts +0 -2
- package/node/shaders/main.vertex.js.map +0 -1
- package/node/webgl-utils/get-gl-context.js.map +0 -1
- /package/node/webgl-utils/{get-gl-context.d.ts → get-web-gl-context.d.ts} +0 -0
package/node/prepare-buffers.js
CHANGED
|
@@ -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,
|
|
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_
|
|
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":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,oDAAoD;AAGpD,SAAS,cAAc,CACf,IAAsB,EACtB,KAAa,EACb,MAAc,EACd,QAAgB,EAChB,QAAgB,EAChB,WAAmB,EACnB,QAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"prepare-buffers.js","sourceRoot":"","sources":["../src/prepare-buffers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ROW_COUNT } from "../row-count.js";
|
|
2
2
|
const cache = {};
|
|
3
|
-
function
|
|
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 {
|
|
149
|
-
//# sourceMappingURL=
|
|
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
|
|
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 {
|
|
52
|
-
//# sourceMappingURL=
|
|
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"}
|
package/node/utils/seg-box-x.js
CHANGED
|
@@ -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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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":"AACA;;;;;;;GAOG;AACH,SAAS,OAAO,CACR,GAAe,EACf,MAAkB;IAEtB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IACrB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;IAEpB,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;IAE5C,gEAAgE;IAChE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAEnB,qEAAqE;IAErE,
|
|
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
|
|
19
|
-
|
|
20
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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,
|
|
21
|
-
// : splitByDeviationFromStraighLine_Cubic_Precise(ps,
|
|
22
|
-
: splitByDeviationFromStraighLine_Cubic_Crude(ps,
|
|
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++) {
|
package/src/debug-shaders.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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,
|
|
30
|
-
debugGlsl(gl, gl.FRAGMENT_SHADER,
|
|
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;
|
package/src/generate-sdf.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// import { getWebGLContext } from './webgl-utils/get-gl-context.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
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
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* @param
|
|
20
|
-
* @param
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* @param
|
|
26
|
-
* @param
|
|
27
|
-
* @param
|
|
28
|
-
* @param
|
|
29
|
-
* @param
|
|
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
|
|
36
|
+
function generateSdf(
|
|
32
37
|
glContext: GlContext,
|
|
33
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
//
|
|
85
|
-
if (
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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 {
|
|
96
|
+
export { generateSdf }
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
export {
|
|
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';
|
package/src/main-program.ts
CHANGED
|
@@ -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,
|
|
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(
|
|
146
|
+
gl.scissor(x, y, width, height/stretch)
|
|
146
147
|
}
|
|
147
148
|
|
|
148
|
-
gl.viewport(
|
|
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);
|
package/src/prepare-buffers.ts
CHANGED
|
@@ -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_
|
|
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
|
|
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 {
|
|
158
|
+
export { getFragment }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ROW_COUNT } from "../row-count.js";
|
|
2
2
|
|
|
3
|
-
const
|
|
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 {
|
|
54
|
+
export { vertex }
|
package/src/types/gl-context.ts
CHANGED