webgl2-sdf 0.0.6 → 0.0.8
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 +56 -45
- package/browser/index.min.js +1 -1
- package/node/debug-shaders.d.ts +9 -0
- package/node/debug-shaders.js +28 -0
- package/node/debug-shaders.js.map +1 -0
- package/node/generate-sdf.d.ts +80 -9
- package/node/generate-sdf.js +91 -20
- package/node/generate-sdf.js.map +1 -1
- package/node/main-program.d.ts +2 -1
- package/node/main-program.js +19 -15
- package/node/main-program.js.map +1 -1
- package/node/prepare-buffers.js +21 -18
- package/node/prepare-buffers.js.map +1 -1
- package/node/shaders/fragment.d.ts +4 -2
- package/node/shaders/fragment.js +89 -57
- package/node/shaders/fragment.js.map +1 -1
- package/node/svg/get-paths-from-str.d.ts +1 -0
- package/node/svg/get-paths-from-str.js +1 -0
- package/node/svg/get-paths-from-str.js.map +1 -1
- package/node/svg/path-data-polyfill/source.d.ts +0 -1
- package/node/svg/path-data-polyfill/source.js +0 -2
- package/node/svg/path-data-polyfill/source.js.map +1 -1
- package/node/svg/path-state.d.ts +0 -1
- package/node/webgl-utils/get-web-gl-context.js +3 -0
- package/node/webgl-utils/get-web-gl-context.js.map +1 -1
- package/package.json +1 -1
- package/src/debug-shaders.ts +2 -2
- package/src/generate-sdf.ts +116 -31
- package/src/main-program.ts +38 -21
- package/src/prepare-buffers.ts +24 -21
- package/src/shaders/fragment.ts +96 -59
- package/src/svg/get-paths-from-str.ts +1 -0
- package/src/svg/path-data-polyfill/source.ts +0 -2
- package/src/svg/path-state.ts +0 -1
- package/src/webgl-utils/get-web-gl-context.ts +5 -0
package/node/main-program.js
CHANGED
|
@@ -8,8 +8,9 @@ import { ROW_COUNT } from './row-count.js';
|
|
|
8
8
|
const SEG_TEX_INDEX = 0;
|
|
9
9
|
const CELL_TEX_INDEX = 1;
|
|
10
10
|
const CROSS_TEX_INDEX = 2;
|
|
11
|
-
function mainProgram(glContext, programMain, psss, viewbox, maxDistance,
|
|
11
|
+
function mainProgram(glContext, programMain, psss, viewbox, maxDistance, width, height, options, colCount, cellSize, padCount, stretch) {
|
|
12
12
|
const { gl } = glContext;
|
|
13
|
+
const { x = 0, y = 0, testInteriorExterior = true, calcSdfForInside = true, calcSdfForOutside = true, customData = [1, 0, 0, 0], glslRgbaCalcStr } = options;
|
|
13
14
|
const vertices = [];
|
|
14
15
|
const x0 = 0;
|
|
15
16
|
const y0 = 0;
|
|
@@ -33,18 +34,21 @@ function mainProgram(glContext, programMain, psss, viewbox, maxDistance, sdfExpo
|
|
|
33
34
|
// Init/update uniforms
|
|
34
35
|
setUniform_('2f', 'uWidthHeight', width, height);
|
|
35
36
|
setUniform_('1f', 'uMaxDistance', maxDistance);
|
|
36
|
-
setUniform_('
|
|
37
|
-
|
|
37
|
+
setUniform_('1i', 'uTestInOut', (calcSdfForInside ? 1 : 0) +
|
|
38
|
+
(calcSdfForOutside ? 2 : 0) +
|
|
39
|
+
(testInteriorExterior ? 4 : 0));
|
|
40
|
+
setUniform_('4f', 'uCustom', ...customData);
|
|
38
41
|
setUniformBlock(programMain)('SegIdxRangePerCellBlock', 0, segIdxs_PerCell_Range_Arr);
|
|
39
42
|
setUniformBlock(programMain)('SegIdxRangePerStripBlock', 1, segIdxs_PerStrip_Range_Arr);
|
|
40
43
|
///////////////////////////////////////
|
|
41
44
|
// Create buffer for line segment data
|
|
42
45
|
useTexture(glContext, SEG_TEX_INDEX, 'segs');
|
|
43
|
-
gl.texImage2D(//
|
|
44
|
-
gl.TEXTURE_2D, 0, // level - irrelevant
|
|
46
|
+
gl.texImage2D(gl.TEXTURE_2D, 0, // level - irrelevant
|
|
45
47
|
gl.RGBA32F, // internalFormat - we're using 4 floats for the 2 line segment endpoints
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
TEX_WIDTH, // fixed width
|
|
49
|
+
lineSegPtCoords_Arr.length / 4 / TEX_WIDTH, // height === number of point coordinates
|
|
50
|
+
// lineSegPtCoords_Arr.length/4,
|
|
51
|
+
// 1,
|
|
48
52
|
0, // border - whatever
|
|
49
53
|
gl.RGBA, // format
|
|
50
54
|
gl.FLOAT, // it holds floats
|
|
@@ -56,11 +60,11 @@ function mainProgram(glContext, programMain, psss, viewbox, maxDistance, sdfExpo
|
|
|
56
60
|
///////////////////////////////////////////////
|
|
57
61
|
// Create buffer for close cell indexes per cell
|
|
58
62
|
useTexture(glContext, CELL_TEX_INDEX, 'closeCellIdxsPerCell');
|
|
59
|
-
gl.texImage2D(//
|
|
60
|
-
gl.TEXTURE_2D, 0, // level - irrelevant
|
|
63
|
+
gl.texImage2D(gl.TEXTURE_2D, 0, // level - irrelevant
|
|
61
64
|
gl.R32I, // internalFormat - we're using 1 signed 32-bit int for indexes
|
|
62
|
-
TEX_WIDTH, // width
|
|
63
|
-
closeCellIdxs_PerCell_Arr.length / TEX_WIDTH,
|
|
65
|
+
TEX_WIDTH, // fixed width
|
|
66
|
+
closeCellIdxs_PerCell_Arr.length / TEX_WIDTH, // height === number of indexes
|
|
67
|
+
0, // border - whatever
|
|
64
68
|
gl.RED_INTEGER, // format
|
|
65
69
|
gl.INT, // it holds ints
|
|
66
70
|
closeCellIdxs_PerCell_Arr // texture data
|
|
@@ -71,11 +75,10 @@ function mainProgram(glContext, programMain, psss, viewbox, maxDistance, sdfExpo
|
|
|
71
75
|
///////////////////////////////////////////////
|
|
72
76
|
// Create buffer for crossing cell indexes per cell
|
|
73
77
|
useTexture(glContext, CROSS_TEX_INDEX, 'crossCellIdxsPerCell');
|
|
74
|
-
gl.texImage2D(//
|
|
75
|
-
gl.TEXTURE_2D, 0, // level - irrelevant
|
|
78
|
+
gl.texImage2D(gl.TEXTURE_2D, 0, // level - irrelevant
|
|
76
79
|
gl.R32I, // internalFormat - we're using 1 signed 32-bit int for indexes
|
|
77
|
-
TEX_WIDTH, // width
|
|
78
|
-
crossCellIdxs_PerCell_Arr.length / TEX_WIDTH, // height
|
|
80
|
+
TEX_WIDTH, // fixed width
|
|
81
|
+
crossCellIdxs_PerCell_Arr.length / TEX_WIDTH, // height === number of indexes
|
|
79
82
|
0, // border - whatever
|
|
80
83
|
gl.RED_INTEGER, // format
|
|
81
84
|
gl.INT, // it holds ints
|
|
@@ -89,6 +92,7 @@ function mainProgram(glContext, programMain, psss, viewbox, maxDistance, sdfExpo
|
|
|
89
92
|
gl.scissor(x, y, width, height / stretch);
|
|
90
93
|
}
|
|
91
94
|
gl.viewport(x, y, width, height);
|
|
95
|
+
gl.colorMask(true, true, true, true);
|
|
92
96
|
// draw a square colCount * ROW_COUNT times - 6 vertics
|
|
93
97
|
gl.drawArraysInstanced(gl.TRIANGLES, 0, 6, colCount * ROW_COUNT);
|
|
94
98
|
if (stretch > 1) {
|
package/node/main-program.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main-program.js","sourceRoot":"","sources":["../src/main-program.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAErE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"main-program.js","sourceRoot":"","sources":["../src/main-program.ts"],"names":[],"mappings":"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"}
|
package/node/prepare-buffers.js
CHANGED
|
@@ -43,30 +43,23 @@ function prepareBuffers(psss, width, height, colCount, cellSize, maxDistance, pa
|
|
|
43
43
|
j >= padCount && j < ROW_COUNT + padCount) {
|
|
44
44
|
const { closeCells, crossingCells } = cell;
|
|
45
45
|
const L1 = crossingCells.length;
|
|
46
|
-
crossCellIdxs_PerCell.push(...crossingCells);
|
|
47
|
-
crossCellIdxs_PerCell_Range.push([S1, L1]);
|
|
48
|
-
S1 += L1;
|
|
49
46
|
const L2 = closeCells.length;
|
|
47
|
+
crossCellIdxs_PerCell.push(...crossingCells);
|
|
50
48
|
closeCellIdxs_PerCell.push(...closeCells);
|
|
51
|
-
|
|
49
|
+
crossCellIdxs_PerCell_Range.push(S1, L1);
|
|
50
|
+
closeCellIdxs_PerCell_Range.push(S2, L2);
|
|
51
|
+
S1 += L1;
|
|
52
52
|
S2 += L2;
|
|
53
53
|
// closeCellIdxsPerCell_.push(closeCells); // testing
|
|
54
54
|
}
|
|
55
55
|
//////////
|
|
56
56
|
const { lineSegs } = cell;
|
|
57
57
|
const L3 = lineSegs.length;
|
|
58
|
-
segIdxs_PerCell_Range.push(
|
|
58
|
+
segIdxs_PerCell_Range.push(S3, L3);
|
|
59
59
|
S3 += L3;
|
|
60
|
-
allSegs.push(...lineSegs);
|
|
60
|
+
allSegs.push(...lineSegs.flat(2));
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
// It is a requirement to fill in multiples of `TEX_WIDTH`
|
|
64
|
-
while (closeCellIdxs_PerCell.length % TEX_WIDTH !== 0) {
|
|
65
|
-
closeCellIdxs_PerCell.push(0);
|
|
66
|
-
}
|
|
67
|
-
while (crossCellIdxs_PerCell.length % TEX_WIDTH !== 0) {
|
|
68
|
-
crossCellIdxs_PerCell.push(0);
|
|
69
|
-
}
|
|
70
63
|
// Add line segs from strips
|
|
71
64
|
const segIdxs_PerStrip_Range = [];
|
|
72
65
|
for (let i = 0; i < ROW_COUNT; i++) {
|
|
@@ -75,17 +68,27 @@ function prepareBuffers(psss, width, height, colCount, cellSize, maxDistance, pa
|
|
|
75
68
|
const L = lineSegs.length;
|
|
76
69
|
segIdxs_PerStrip_Range.push([S3, L]);
|
|
77
70
|
S3 += L;
|
|
78
|
-
allSegs.push(...lineSegs);
|
|
71
|
+
allSegs.push(...lineSegs.flat(2));
|
|
72
|
+
}
|
|
73
|
+
// It is a requirement to fill in multiples of `TEX_WIDTH`
|
|
74
|
+
while (closeCellIdxs_PerCell.length % TEX_WIDTH !== 0) {
|
|
75
|
+
closeCellIdxs_PerCell.push(0);
|
|
76
|
+
}
|
|
77
|
+
while (crossCellIdxs_PerCell.length % TEX_WIDTH !== 0) {
|
|
78
|
+
crossCellIdxs_PerCell.push(0);
|
|
79
|
+
}
|
|
80
|
+
while (allSegs.length % (4 * TEX_WIDTH) !== 0) {
|
|
81
|
+
allSegs.push(0);
|
|
79
82
|
}
|
|
80
83
|
// all line segments, with their ranges per cell and per strip
|
|
81
|
-
const lineSegPtCoords_Arr = new Float32Array(allSegs
|
|
82
|
-
const segIdxs_PerCell_Range_Arr = new Int32Array(segIdxs_PerCell_Range
|
|
84
|
+
const lineSegPtCoords_Arr = new Float32Array(allSegs);
|
|
85
|
+
const segIdxs_PerCell_Range_Arr = new Int32Array(segIdxs_PerCell_Range);
|
|
83
86
|
// close cell idxs and range
|
|
84
|
-
const closeCellIdxs_PerCell_Range_Arr = new Int32Array(closeCellIdxs_PerCell_Range
|
|
87
|
+
const closeCellIdxs_PerCell_Range_Arr = new Int32Array(closeCellIdxs_PerCell_Range);
|
|
85
88
|
const closeCellIdxs_PerCell_Arr = new Int32Array(closeCellIdxs_PerCell);
|
|
86
89
|
// cross cell idxs and range
|
|
87
90
|
const crossCellIdxs_PerCell_Arr = new Int32Array(crossCellIdxs_PerCell);
|
|
88
|
-
const crossCellIdxs_perCell_Range_Arr = new Int32Array(crossCellIdxs_PerCell_Range
|
|
91
|
+
const crossCellIdxs_perCell_Range_Arr = new Int32Array(crossCellIdxs_PerCell_Range);
|
|
89
92
|
// segment index ranges per strip
|
|
90
93
|
const segIdxs_PerStrip_Range_Arr = new Int32Array(segIdxs_PerStrip_Range.flat());
|
|
91
94
|
// testing
|
|
@@ -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,UAAyC,CAAC,CAAC,EAAC,CAAC,EAAC,KAAK,EAAC,MAAM,CAAC,EAC3D,OAAO,GAAG,CAAC;IAEf,4EAA4E;IAC5E,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,GAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"prepare-buffers.js","sourceRoot":"","sources":["../src/prepare-buffers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
declare
|
|
2
|
-
|
|
1
|
+
declare const GLSL_PATTERN1 = "\n float exponent = uCustom.x;\n res = pow(1.0 - res, exponent);\n float alpha = res <= 0.0 ? 0.0 : 0.5;\n float red = inside ? 0.2 : 0.8;\n float green = abs(sin(25.0 * res));\n float blue = 0.5;\n";
|
|
2
|
+
declare const GLSL_DEFAULT = "\n float exponent = uCustom.x;\n res = (pow(1.0 - res, exponent) * 0.5) * (inside ? -1.0 : 1.0);\n float red = res;\n float green = res;\n float blue = res;\n float alpha = res;\n";
|
|
3
|
+
declare function getFragment(colCount: number, padCount: number, calcFragColorStr: string, hash: number): string;
|
|
4
|
+
export { getFragment, GLSL_PATTERN1, GLSL_DEFAULT };
|
package/node/shaders/fragment.js
CHANGED
|
@@ -1,7 +1,26 @@
|
|
|
1
1
|
import { ROW_COUNT } from "../row-count.js";
|
|
2
2
|
const cache = {};
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
const GLSL_PATTERN1 = `
|
|
4
|
+
float exponent = uCustom.x;
|
|
5
|
+
res = pow(1.0 - res, exponent);
|
|
6
|
+
float alpha = res <= 0.0 ? 0.0 : 0.5;
|
|
7
|
+
float red = inside ? 0.2 : 0.8;
|
|
8
|
+
float green = abs(sin(25.0 * res));
|
|
9
|
+
float blue = 0.5;
|
|
10
|
+
`;
|
|
11
|
+
const GLSL_DEFAULT = `
|
|
12
|
+
float exponent = uCustom.x;
|
|
13
|
+
res = (pow(1.0 - res, exponent) * 0.5) * (inside ? -1.0 : 1.0);
|
|
14
|
+
float red = res;
|
|
15
|
+
float green = res;
|
|
16
|
+
float blue = res;
|
|
17
|
+
float alpha = res;
|
|
18
|
+
`;
|
|
19
|
+
function getFragment(colCount, padCount, calcFragColorStr, hash) {
|
|
20
|
+
// `colCount` and `padCount` can take at most 8 bits and `has` 32 bits and
|
|
21
|
+
// we have at least 53 bits to play with so we're fine
|
|
22
|
+
const key = (2 ** 32) * (256 * colCount + padCount) + hash;
|
|
23
|
+
const fragment = cache[key];
|
|
5
24
|
if (fragment !== undefined) {
|
|
6
25
|
return fragment;
|
|
7
26
|
}
|
|
@@ -11,11 +30,14 @@ function getFragment(colCount, padCount) {
|
|
|
11
30
|
precision highp float;
|
|
12
31
|
|
|
13
32
|
uniform float uMaxDistance;
|
|
14
|
-
uniform float uExponent;
|
|
15
33
|
uniform highp sampler2D uSegs;
|
|
16
34
|
uniform highp isampler2D uCloseCellIdxs;
|
|
17
35
|
uniform highp isampler2D uCrossCellIdxs;
|
|
18
|
-
|
|
36
|
+
// bit 0 -> calc distance inside
|
|
37
|
+
// bit 1 -> calc distance outside
|
|
38
|
+
// bit 2 -> calc whether fragment is inside or outside (else outside is assumed with winds == 0.0)
|
|
39
|
+
uniform int uTestInOut;
|
|
40
|
+
uniform vec4 uCustom;
|
|
19
41
|
|
|
20
42
|
uniform SegIdxRangePerCellBlock {
|
|
21
43
|
ivec4 uSegIdxRangePerCell[${(ROW_COUNT + 2 * padCount) * (colCount + 2 * padCount) / 2}];
|
|
@@ -30,12 +52,16 @@ flat in ivec2 closeCellIdxRange;
|
|
|
30
52
|
flat in ivec2 crossCellIdxRange;
|
|
31
53
|
out vec4 FragColor;
|
|
32
54
|
|
|
55
|
+
// testing!!
|
|
56
|
+
// float rand(vec2 co) {
|
|
57
|
+
// return mod(uCustom.w * fract(sin(dot(co.xy, vec2(12.9898,78.233))) * 43758.5453), 1.0);
|
|
58
|
+
// }
|
|
33
59
|
|
|
34
60
|
float absDistToSegment(vec2 point, vec2 lineA, vec2 lineB) {
|
|
35
61
|
vec2 lineDir = lineB - lineA;
|
|
36
62
|
float lenSq = dot(lineDir, lineDir);
|
|
37
63
|
float t = clamp(dot(point - lineA, lineDir) / lenSq, 0.0, 1.0);
|
|
38
|
-
vec2 linePt = lineA + t
|
|
64
|
+
vec2 linePt = lineA + t*lineDir;
|
|
39
65
|
|
|
40
66
|
return distance(point, linePt);
|
|
41
67
|
}
|
|
@@ -43,88 +69,96 @@ float absDistToSegment(vec2 point, vec2 lineA, vec2 lineB) {
|
|
|
43
69
|
|
|
44
70
|
void main() {
|
|
45
71
|
///////////////////////////////////////////////////////////////////////////
|
|
72
|
+
// Calculate \`winds\`:
|
|
73
|
+
//
|
|
46
74
|
// Project a ray to the left to check if it crosses the segment in order
|
|
47
75
|
// to find the fragment's winding number to determine whether fragment
|
|
48
76
|
// is inside or outside the shape.
|
|
77
|
+
///////////////////////////////////////////////////////////////////////////
|
|
49
78
|
|
|
50
|
-
int crossIdxS = crossCellIdxRange.x;
|
|
51
|
-
int crossLen = crossCellIdxRange.y;
|
|
52
79
|
float winds = 0.0;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
int
|
|
80
|
+
if ((uTestInOut & 4) == 0) {
|
|
81
|
+
int crossIdxS = crossCellIdxRange.x;
|
|
82
|
+
int crossLen = crossCellIdxRange.y;
|
|
83
|
+
// Iterate over all relevant cell indexes
|
|
84
|
+
for (int i = crossIdxS; i < crossIdxS + crossLen; i++) {
|
|
85
|
+
int crossIdx = texelFetch(uCrossCellIdxs, ivec2(i%256, i/256), 0).x;
|
|
56
86
|
|
|
57
|
-
|
|
87
|
+
ivec2 uSegIdxRange = crossIdx % 2 == 0
|
|
88
|
+
? uSegIdxRangePerCell[crossIdx / 2].xy
|
|
89
|
+
: uSegIdxRangePerCell[crossIdx / 2].zw;
|
|
58
90
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
int segLen = isEven ? uSegIdxRange.y : uSegIdxRange.w;
|
|
91
|
+
int segIdx = uSegIdxRange.x;
|
|
92
|
+
int segLen = uSegIdxRange.y;
|
|
62
93
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
94
|
+
for (int j = segIdx; j < segIdx + segLen; j++) {
|
|
95
|
+
// Fetch segment from texture
|
|
96
|
+
vec4 seg = texelFetch(uSegs, ivec2(j%256, j/256), 0);
|
|
66
97
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
98
|
+
// line segment's min-y is excluded
|
|
99
|
+
bool crossing =
|
|
100
|
+
(seg.y > vXY.y != seg.w > vXY.y) &&
|
|
101
|
+
(vXY.x > (seg.z - seg.x)*(vXY.y - seg.y) / (seg.w - seg.y) + seg.x);
|
|
71
102
|
|
|
72
|
-
|
|
103
|
+
bool crossingUp = seg.y < seg.w;
|
|
73
104
|
|
|
74
|
-
|
|
105
|
+
winds += crossing ? (crossingUp ? -1.0 : 1.0) : 0.0;
|
|
106
|
+
}
|
|
75
107
|
}
|
|
76
|
-
}
|
|
77
108
|
|
|
78
|
-
|
|
79
|
-
|
|
109
|
+
{
|
|
110
|
+
int cellIdx = (instanceId % ${ROW_COUNT});
|
|
80
111
|
|
|
81
|
-
|
|
82
|
-
int segIdx = isEven ? uSegIdxRange.x : uSegIdxRange.z;
|
|
83
|
-
int segLen = isEven ? uSegIdxRange.y : uSegIdxRange.w;
|
|
112
|
+
bool isEven = cellIdx % 2 == 0;
|
|
84
113
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
114
|
+
ivec4 uSegIdxRange = uSegIdxRangePerStrip[cellIdx / 2];
|
|
115
|
+
int segIdx = isEven ? uSegIdxRange.x : uSegIdxRange.z;
|
|
116
|
+
int segLen = isEven ? uSegIdxRange.y : uSegIdxRange.w;
|
|
117
|
+
|
|
88
118
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
119
|
+
for (int j = segIdx; j < segIdx + segLen; j++) {
|
|
120
|
+
// Fetch segment from texture
|
|
121
|
+
vec4 seg = texelFetch(uSegs, ivec2(j%256, j/256), 0);
|
|
122
|
+
|
|
123
|
+
// line segment's min-y is excluded
|
|
124
|
+
bool crossing =
|
|
125
|
+
(seg.y > vXY.y != seg.w > vXY.y) &&
|
|
126
|
+
(vXY.x > (seg.z - seg.x)*(vXY.y - seg.y) / (seg.w - seg.y) + seg.x);
|
|
93
127
|
|
|
94
|
-
|
|
128
|
+
bool crossingUp = seg.y < seg.w;
|
|
95
129
|
|
|
96
|
-
|
|
130
|
+
winds += crossing ? (crossingUp ? -1.0 : 1.0) : 0.0;
|
|
131
|
+
}
|
|
97
132
|
}
|
|
98
133
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
134
|
bool inside = winds != 0.0;
|
|
102
135
|
///////////////////////////////////////////////////////////////////////////
|
|
103
|
-
|
|
136
|
+
// Calculate \`res\`: the distance to the nearest curve
|
|
104
137
|
///////////////////////////////////////////////////////////////////////////
|
|
105
138
|
float res = 1.0; // sdf result
|
|
106
139
|
|
|
107
|
-
if ((inside && (
|
|
140
|
+
if ((inside && ((uTestInOut & 1) != 0)) || (!inside && ((uTestInOut & 2) != 0))) {
|
|
108
141
|
int cellIdxS = closeCellIdxRange.x;
|
|
109
142
|
int cellLen = closeCellIdxRange.y;
|
|
110
143
|
// Iterate over all relevant cell indexes
|
|
111
144
|
for (int i = cellIdxS; i < cellIdxS + cellLen; i++) {
|
|
112
145
|
int cellIdx = texelFetch(uCloseCellIdxs, ivec2(i%256, i/256), 0).x;
|
|
113
146
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
147
|
+
ivec2 uSegIdxRange = cellIdx % 2 == 0
|
|
148
|
+
? uSegIdxRangePerCell[cellIdx / 2].xy
|
|
149
|
+
: uSegIdxRangePerCell[cellIdx / 2].zw;
|
|
150
|
+
|
|
151
|
+
int segIdx = uSegIdxRange.x;
|
|
152
|
+
int segLen = uSegIdxRange.y;
|
|
118
153
|
|
|
119
154
|
for (int j = segIdx; j < segIdx + segLen; j++) {
|
|
120
155
|
// Fetch segment from texture
|
|
121
|
-
vec4 seg = texelFetch(uSegs, ivec2(j,
|
|
156
|
+
vec4 seg = texelFetch(uSegs, ivec2(j%256, j/256), 0);
|
|
122
157
|
|
|
123
|
-
// Find unsigned distance to the segment; only the nearest will be kept
|
|
158
|
+
// Find normalized unsigned distance to the segment; only the nearest will be kept
|
|
124
159
|
float d = absDistToSegment(vXY, seg.xy, seg.zw);
|
|
125
|
-
// Apply exponential transform TODO
|
|
126
|
-
// val = pow(1.0 - clamp(d / uMaxDistance, 0.0, 1.0), uExponent) * 0.5;
|
|
127
160
|
float val = clamp(d / uMaxDistance, 0.0, 1.0);
|
|
161
|
+
|
|
128
162
|
res = min(res, val);
|
|
129
163
|
}
|
|
130
164
|
}
|
|
@@ -133,18 +167,16 @@ void main() {
|
|
|
133
167
|
|
|
134
168
|
// DEBUG!
|
|
135
169
|
// float alpha = ((instanceId + instanceId/${ROW_COUNT}) % 2 == 0 ? 0.3 : 0.5);
|
|
136
|
-
float alpha = res == 1.0 ? 0.0 : 0.5;
|
|
137
170
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
float blue = 0.5;
|
|
141
|
-
// float alpha = inside ? 0.5 : 0.0;
|
|
171
|
+
|
|
172
|
+
${GLSL_PATTERN1}
|
|
142
173
|
|
|
143
174
|
FragColor = vec4(red, green, blue, alpha);
|
|
144
175
|
}
|
|
145
176
|
`;
|
|
146
|
-
cache[
|
|
177
|
+
cache[key] = main_Fragment;
|
|
147
178
|
return main_Fragment;
|
|
148
179
|
}
|
|
149
|
-
|
|
180
|
+
// ${calcFragColorStr}
|
|
181
|
+
export { getFragment, GLSL_PATTERN1, GLSL_DEFAULT };
|
|
150
182
|
//# sourceMappingURL=fragment.js.map
|
|
@@ -1 +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;
|
|
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,MAAM,aAAa,GAAG;;;;;;;CAOrB,CAAC;AAGF,MAAM,YAAY,GAAG;;;;;;;CAOpB,CAAC;AAGF,SAAS,WAAW,CACZ,QAAgB,EAChB,QAAgB,EAChB,gBAAwB,EACxB,IAAY;IAEhB,0EAA0E;IAC1E,sDAAsD;IACtD,MAAM,GAAG,GAAG,CAAC,CAAC,IAAE,EAAE,CAAC,GAAC,CAAC,GAAG,GAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;IACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAAC,OAAO,QAAQ,CAAC;IAAC,CAAC;IAEpD,MAAM,aAAa;IACnB,QAAQ,CAAA;;;;;;;;;;;;;;;gCAewB,CAAC,SAAS,GAAG,CAAC,GAAC,QAAQ,CAAC,GAAC,CAAC,QAAQ,GAAG,CAAC,GAAC,QAAQ,CAAC,GAAG,CAAC;;;iCAGnD,SAAS,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0CAgEJ,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDA2DF,SAAS;;;MAGpD,aAAa;;;;CAIlB,CAAA;IAEG,KAAK,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;IAC3B,OAAO,aAAa,CAAC;AACzB,CAAC;AAED,sBAAsB;AACtB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* and each bezier in turn consisting of an array of control points from the
|
|
4
4
|
* given SVG path string. An array of loops are returned (as opposed to a single
|
|
5
5
|
* loop) since an SVG path may have sub-paths.
|
|
6
|
+
*
|
|
6
7
|
* @param str The SVG path string, e.g. 'M1 1 C 5 1 5 2 4 2 C 3 3 1 3 1 1 z'
|
|
7
8
|
*/
|
|
8
9
|
declare function getPathsFromStr(str: string): number[][][][];
|
|
@@ -5,6 +5,7 @@ import { parsePathDataString } from './path-data-polyfill/parse-path-data-string
|
|
|
5
5
|
* and each bezier in turn consisting of an array of control points from the
|
|
6
6
|
* given SVG path string. An array of loops are returned (as opposed to a single
|
|
7
7
|
* loop) since an SVG path may have sub-paths.
|
|
8
|
+
*
|
|
8
9
|
* @param str The SVG path string, e.g. 'M1 1 C 5 1 5 2 4 2 C 3 3 1 3 1 1 z'
|
|
9
10
|
*/
|
|
10
11
|
function getPathsFromStr(str) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-paths-from-str.js","sourceRoot":"","sources":["../../src/svg/get-paths-from-str.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AAGrF
|
|
1
|
+
{"version":3,"file":"get-paths-from-str.js","sourceRoot":"","sources":["../../src/svg/get-paths-from-str.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AAGrF;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,GAAW;IAChC,OAAO,sBAAsB,CACzB,mBAAmB,CAAC,GAAG,CAAC,CAC3B,CAAC;AACN,CAAC;AAGD,OAAO,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { parseNumber } from './parse-number.js';
|
|
2
|
-
/** @hidden */
|
|
3
2
|
const COMMAND_MAP = {
|
|
4
3
|
Z: "Z", M: "M", L: "L", C: "C", Q: "Q", A: "A", H: "H", V: "V", S: "S", T: "T",
|
|
5
4
|
z: "Z", m: "m", l: "l", c: "c", q: "q", a: "a", h: "h", v: "v", s: "s", t: "t"
|
|
6
5
|
};
|
|
7
|
-
/** @hidden */
|
|
8
6
|
class Source {
|
|
9
7
|
_string;
|
|
10
8
|
_currentIndex;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/svg/path-data-polyfill/source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/svg/path-data-polyfill/source.ts"],"names":[],"mappings":"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"}
|
package/node/svg/path-state.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { debugShaders } from "../debug-shaders.js";
|
|
1
2
|
const cache = new WeakMap();
|
|
2
3
|
/**
|
|
3
4
|
* Returns a `GlContext` by reference via a cache of `WebGL2RenderingContext`s.
|
|
@@ -13,10 +14,12 @@ function getWebGlContext(gl) {
|
|
|
13
14
|
return glContext;
|
|
14
15
|
}
|
|
15
16
|
}
|
|
17
|
+
debugShaders(gl);
|
|
16
18
|
const programs = {};
|
|
17
19
|
const textures = {};
|
|
18
20
|
const glContext = { gl, textures, programs };
|
|
19
21
|
gl.canvas.addEventListener('webglcontextlost', event => {
|
|
22
|
+
// event.preventDefault(); // Prevent the default action (which is to not restore automatically)
|
|
20
23
|
deleteAllProps(programs);
|
|
21
24
|
deleteAllProps(textures);
|
|
22
25
|
cache.delete(gl);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-web-gl-context.js","sourceRoot":"","sources":["../../src/webgl-utils/get-web-gl-context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get-web-gl-context.js","sourceRoot":"","sources":["../../src/webgl-utils/get-web-gl-context.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,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,YAAY,CAAC,EAAE,CAAC,CAAC;IAEjB,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,iGAAiG;QAEjG,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
package/src/debug-shaders.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getFragment } from "./shaders/fragment.js";
|
|
1
|
+
import { getFragment, GLSL_DEFAULT } from "./shaders/fragment.js";
|
|
2
2
|
import { vertex } from "./shaders/vertex.js";
|
|
3
3
|
|
|
4
4
|
|
|
@@ -27,7 +27,7 @@ function debugShaders(
|
|
|
27
27
|
|
|
28
28
|
try {
|
|
29
29
|
debugGlsl(gl, gl.VERTEX_SHADER, vertex);
|
|
30
|
-
debugGlsl(gl, gl.FRAGMENT_SHADER, getFragment(32,
|
|
30
|
+
debugGlsl(gl, gl.FRAGMENT_SHADER, getFragment(32,2, GLSL_DEFAULT, 0));
|
|
31
31
|
} catch (e) {
|
|
32
32
|
console.log(e);
|
|
33
33
|
throw e;
|