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/src/utils/seg-box-x.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
33
|
-
|
|
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 +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"}
|
|
File without changes
|