@antv/layout 0.3.6 → 0.3.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/dist/layout.min.js +1 -1
- package/dist/layout.min.js.map +1 -1
- package/es/layout/base.d.ts +1 -0
- package/es/layout/base.js +3 -0
- package/es/layout/base.js.map +1 -1
- package/es/layout/circular.d.ts +1 -1
- package/es/layout/comboCombined.d.ts +1 -1
- package/es/layout/comboForce.d.ts +1 -1
- package/es/layout/concentric.d.ts +1 -1
- package/es/layout/dagre/graph.d.ts +2 -2
- package/es/layout/dagre/src/data/list.d.ts +1 -1
- package/es/layout/dagre/src/order/resolve-conflicts.d.ts +1 -1
- package/es/layout/dagre/src/position/bk.d.ts +1 -1
- package/es/layout/dagre.js +35 -14
- package/es/layout/dagre.js.map +1 -1
- package/es/layout/dagreCompound.d.ts +3 -3
- package/es/layout/force2/index.d.ts +1 -1
- package/es/layout/forceAtlas2/body.d.ts +1 -1
- package/es/layout/forceAtlas2/quad.d.ts +1 -1
- package/es/layout/fruchterman.d.ts +2 -2
- package/es/layout/gForce.d.ts +2 -2
- package/es/layout/gpu/fruchterman.d.ts +2 -2
- package/es/layout/gpu/fruchtermanShader.d.ts +2 -2
- package/es/layout/gpu/fruchtermanShader.js +2 -2
- package/es/layout/gpu/fruchtermanShader.js.map +1 -1
- package/es/layout/gpu/gForce.d.ts +1 -1
- package/es/layout/gpu/gForceShader.d.ts +2 -2
- package/es/layout/gpu/gForceShader.js +2 -2
- package/es/layout/gpu/gForceShader.js.map +1 -1
- package/es/layout/grid.d.ts +1 -1
- package/es/layout/radial/radial.d.ts +1 -1
- package/es/layout/radial/radialNonoverlapForce.d.ts +1 -1
- package/es/layout/types.d.ts +9 -7
- package/lib/layout/base.d.ts +1 -0
- package/lib/layout/base.js +3 -0
- package/lib/layout/base.js.map +1 -1
- package/lib/layout/circular.d.ts +1 -1
- package/lib/layout/comboCombined.d.ts +1 -1
- package/lib/layout/comboForce.d.ts +1 -1
- package/lib/layout/concentric.d.ts +1 -1
- package/lib/layout/dagre/graph.d.ts +2 -2
- package/lib/layout/dagre/src/data/list.d.ts +1 -1
- package/lib/layout/dagre/src/order/resolve-conflicts.d.ts +1 -1
- package/lib/layout/dagre/src/position/bk.d.ts +1 -1
- package/lib/layout/dagre.js +36 -15
- package/lib/layout/dagre.js.map +1 -1
- package/lib/layout/dagreCompound.d.ts +3 -3
- package/lib/layout/force2/index.d.ts +1 -1
- package/lib/layout/forceAtlas2/body.d.ts +1 -1
- package/lib/layout/forceAtlas2/quad.d.ts +1 -1
- package/lib/layout/fruchterman.d.ts +2 -2
- package/lib/layout/gForce.d.ts +2 -2
- package/lib/layout/gpu/fruchterman.d.ts +2 -2
- package/lib/layout/gpu/fruchterman.js +1 -1
- package/lib/layout/gpu/fruchtermanShader.d.ts +2 -2
- package/lib/layout/gpu/fruchtermanShader.js +2 -2
- package/lib/layout/gpu/fruchtermanShader.js.map +1 -1
- package/lib/layout/gpu/gForce.d.ts +1 -1
- package/lib/layout/gpu/gForce.js +1 -1
- package/lib/layout/gpu/gForceShader.d.ts +2 -2
- package/lib/layout/gpu/gForceShader.js +2 -2
- package/lib/layout/gpu/gForceShader.js.map +1 -1
- package/lib/layout/grid.d.ts +1 -1
- package/lib/layout/radial/radial.d.ts +1 -1
- package/lib/layout/radial/radialNonoverlapForce.d.ts +1 -1
- package/lib/layout/types.d.ts +9 -7
- package/package.json +3 -3
- package/src/layout/base.ts +3 -0
- package/src/layout/dagre.ts +28 -12
- package/src/layout/gpu/fruchtermanShader.ts +3 -4
- package/src/layout/gpu/gForceShader.ts +2 -3
- package/src/layout/types.ts +2 -0
|
@@ -38,7 +38,7 @@ export interface CustomConfig {
|
|
|
38
38
|
nodeOrder?: string[] | undefined;
|
|
39
39
|
prevGraph?: Graph | undefined;
|
|
40
40
|
}
|
|
41
|
-
export
|
|
41
|
+
export type layout = (graph: Graph, layout?: GraphLabel & NodeConfig & EdgeConfig & CustomConfig) => void;
|
|
42
42
|
export interface Edge {
|
|
43
43
|
v: string;
|
|
44
44
|
w: string;
|
|
@@ -53,7 +53,7 @@ export interface GraphEdge {
|
|
|
53
53
|
}[];
|
|
54
54
|
[key: string]: any;
|
|
55
55
|
}
|
|
56
|
-
export
|
|
56
|
+
export type Node<T = {}> = T & {
|
|
57
57
|
x?: number;
|
|
58
58
|
y?: number;
|
|
59
59
|
width?: number;
|
|
@@ -2,7 +2,7 @@ import { Graph as RawGraph } from "@antv/graphlib";
|
|
|
2
2
|
import { Graph } from "../../graph";
|
|
3
3
|
declare class BlockGraph extends RawGraph<string, string, number> {
|
|
4
4
|
}
|
|
5
|
-
|
|
5
|
+
type Conflicts = Record<string, Record<string, boolean>>;
|
|
6
6
|
export declare const findType1Conflicts: (g: Graph, layering?: string[][]) => {};
|
|
7
7
|
export declare const findType2Conflicts: (g: Graph, layering?: string[][]) => {};
|
|
8
8
|
export declare const findOtherInnerSegmentNode: (g: Graph, v: string) => string | undefined;
|
package/lib/layout/dagre.js
CHANGED
|
@@ -84,9 +84,9 @@ var DagreLayout = /** @class */ (function (_super) {
|
|
|
84
84
|
*/
|
|
85
85
|
DagreLayout.prototype.execute = function () {
|
|
86
86
|
var _this = this;
|
|
87
|
-
var _a, _b;
|
|
87
|
+
var _a, _b, _c;
|
|
88
88
|
var self = this;
|
|
89
|
-
var nodes = self.nodes, nodeSize = self.nodeSize, rankdir = self.rankdir, combos = self.combos, begin = self.begin, radial = self.radial,
|
|
89
|
+
var nodes = self.nodes, nodeSize = self.nodeSize, rankdir = self.rankdir, combos = self.combos, begin = self.begin, radial = self.radial, _d = self.comboEdges, comboEdges = _d === void 0 ? [] : _d, _e = self.vedges, vedges = _e === void 0 ? [] : _e;
|
|
90
90
|
if (!nodes)
|
|
91
91
|
return;
|
|
92
92
|
var edges = self.edges || [];
|
|
@@ -136,10 +136,19 @@ var DagreLayout = /** @class */ (function (_super) {
|
|
|
136
136
|
var comboMap = {};
|
|
137
137
|
if (this.sortByCombo && combos) {
|
|
138
138
|
combos.forEach(function (combo) {
|
|
139
|
+
comboMap[combo.id] = combo;
|
|
140
|
+
// regard the collapsed combo as a node
|
|
141
|
+
if (combo.collapsed) {
|
|
142
|
+
var size = nodeSizeFunc(combo);
|
|
143
|
+
var verti = vertisep(combo);
|
|
144
|
+
var hori = horisep(combo);
|
|
145
|
+
var width = size[0] + 2 * hori;
|
|
146
|
+
var height = size[1] + 2 * verti;
|
|
147
|
+
g.setNode(combo.id, { width: width, height: height });
|
|
148
|
+
}
|
|
139
149
|
if (!combo.parentId)
|
|
140
150
|
return;
|
|
141
151
|
if (!comboMap[combo.parentId]) {
|
|
142
|
-
comboMap[combo.parentId] = true;
|
|
143
152
|
g.setNode(combo.parentId, {});
|
|
144
153
|
}
|
|
145
154
|
g.setParent(combo.id, combo.parentId);
|
|
@@ -161,7 +170,7 @@ var DagreLayout = /** @class */ (function (_super) {
|
|
|
161
170
|
}
|
|
162
171
|
if (_this.sortByCombo && node.comboId) {
|
|
163
172
|
if (!comboMap[node.comboId]) {
|
|
164
|
-
comboMap[node.comboId] =
|
|
173
|
+
comboMap[node.comboId] = { id: node.comboId };
|
|
165
174
|
g.setNode(node.comboId, {});
|
|
166
175
|
}
|
|
167
176
|
g.setParent(node.id, node.comboId);
|
|
@@ -178,10 +187,11 @@ var DagreLayout = /** @class */ (function (_super) {
|
|
|
178
187
|
}
|
|
179
188
|
});
|
|
180
189
|
// create virtual edges from node to node for comboEdges
|
|
181
|
-
comboEdges === null || comboEdges === void 0 ? void 0 : comboEdges.forEach(function (comboEdge) {
|
|
190
|
+
(_a = (comboEdges === null || comboEdges === void 0 ? void 0 : comboEdges.concat(vedges || []))) === null || _a === void 0 ? void 0 : _a.forEach(function (comboEdge) {
|
|
191
|
+
var _a, _b;
|
|
182
192
|
var source = comboEdge.source, target = comboEdge.target;
|
|
183
|
-
var sources = nodeComboMap[source] || [source];
|
|
184
|
-
var targets = nodeComboMap[target] || [
|
|
193
|
+
var sources = ((_a = comboMap[source]) === null || _a === void 0 ? void 0 : _a.collapsed) ? [source] : nodeComboMap[source] || [source];
|
|
194
|
+
var targets = ((_b = comboMap[target]) === null || _b === void 0 ? void 0 : _b.collapsed) ? [target] : nodeComboMap[target] || [target];
|
|
185
195
|
sources.forEach(function (s) {
|
|
186
196
|
targets.forEach(function (t) {
|
|
187
197
|
g.setEdge(s, t, {
|
|
@@ -192,7 +202,7 @@ var DagreLayout = /** @class */ (function (_super) {
|
|
|
192
202
|
});
|
|
193
203
|
// 考虑增量图中的原始图
|
|
194
204
|
var prevGraph = undefined;
|
|
195
|
-
if ((
|
|
205
|
+
if ((_b = self.preset) === null || _b === void 0 ? void 0 : _b.nodes) {
|
|
196
206
|
prevGraph = new graph_1.Graph({
|
|
197
207
|
multigraph: true,
|
|
198
208
|
compound: true,
|
|
@@ -233,9 +243,9 @@ var DagreLayout = /** @class */ (function (_super) {
|
|
|
233
243
|
}
|
|
234
244
|
// 变形为辐射
|
|
235
245
|
if (radial) {
|
|
236
|
-
var
|
|
246
|
+
var _f = this, focusNode = _f.focusNode, ranksep = _f.ranksep, getRadialPos_1 = _f.getRadialPos;
|
|
237
247
|
var focusId = (0, util_1.isString)(focusNode) ? focusNode : focusNode === null || focusNode === void 0 ? void 0 : focusNode.id;
|
|
238
|
-
var focusLayer_1 = focusId ? (
|
|
248
|
+
var focusLayer_1 = focusId ? (_c = g.node(focusId)) === null || _c === void 0 ? void 0 : _c._rank : 0;
|
|
239
249
|
var layers_1 = [];
|
|
240
250
|
var isHorizontal = rankdir === 'LR' || rankdir === 'RL';
|
|
241
251
|
var dim_1 = isHorizontal ? 'y' : 'x';
|
|
@@ -331,6 +341,8 @@ var DagreLayout = /** @class */ (function (_super) {
|
|
|
331
341
|
if (isFirstLevel_1 && layerNodes.nodes.length === 1) {
|
|
332
342
|
// 将新坐标写入源数据
|
|
333
343
|
var i = nodes.findIndex(function (it) { return it.id === layerNodes.nodes[0]; });
|
|
344
|
+
if (i <= -1)
|
|
345
|
+
return;
|
|
334
346
|
nodes[i].x = dBegin[0];
|
|
335
347
|
nodes[i].y = dBegin[1];
|
|
336
348
|
radiusMap_1[layerNodes.nodes[0]] = 0;
|
|
@@ -361,6 +373,8 @@ var DagreLayout = /** @class */ (function (_super) {
|
|
|
361
373
|
var target = (0, util_1.getEdgeTerminal)(it, 'target');
|
|
362
374
|
return source === edge.v && target === edge.w;
|
|
363
375
|
});
|
|
376
|
+
if (i <= -1)
|
|
377
|
+
return;
|
|
364
378
|
if ((self.edgeLabelSpace) && self.controlPoints && edges[i].type !== "loop") {
|
|
365
379
|
var otherDim_1 = dim_1 === 'x' ? 'y' : 'x';
|
|
366
380
|
var controlPoints = (_a = coord === null || coord === void 0 ? void 0 : coord.points) === null || _a === void 0 ? void 0 : _a.slice(1, coord.points.length - 1);
|
|
@@ -386,13 +400,18 @@ var DagreLayout = /** @class */ (function (_super) {
|
|
|
386
400
|
else {
|
|
387
401
|
g.nodes().forEach(function (node) {
|
|
388
402
|
var coord = g.node(node);
|
|
389
|
-
|
|
390
|
-
|
|
403
|
+
if (!coord)
|
|
404
|
+
return;
|
|
405
|
+
var ndata = nodes.find(function (it) { return it.id === node; });
|
|
406
|
+
if (!ndata) {
|
|
407
|
+
ndata = combos === null || combos === void 0 ? void 0 : combos.find(function (it) { return it.id === node; });
|
|
408
|
+
}
|
|
409
|
+
if (!ndata)
|
|
391
410
|
return;
|
|
392
|
-
|
|
393
|
-
|
|
411
|
+
ndata.x = coord.x + dBegin[0];
|
|
412
|
+
ndata.y = coord.y + dBegin[1];
|
|
394
413
|
// @ts-ignore: pass layer order to data for increment layout use
|
|
395
|
-
|
|
414
|
+
ndata._order = coord._order;
|
|
396
415
|
});
|
|
397
416
|
g.edges().forEach(function (edge) {
|
|
398
417
|
var _a;
|
|
@@ -402,6 +421,8 @@ var DagreLayout = /** @class */ (function (_super) {
|
|
|
402
421
|
var target = (0, util_1.getEdgeTerminal)(it, 'target');
|
|
403
422
|
return source === edge.v && target === edge.w;
|
|
404
423
|
});
|
|
424
|
+
if (i <= -1)
|
|
425
|
+
return;
|
|
405
426
|
if ((self.edgeLabelSpace) && self.controlPoints && edges[i].type !== "loop") {
|
|
406
427
|
edges[i].controlPoints = (_a = coord === null || coord === void 0 ? void 0 : coord.points) === null || _a === void 0 ? void 0 : _a.slice(1, coord.points.length - 1); // 去掉头尾
|
|
407
428
|
edges[i].controlPoints.forEach(function (point) {
|
package/lib/layout/dagre.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dagre.js","sourceRoot":"","sources":["../../src/layout/dagre.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dagre.js","sourceRoot":"","sources":["../../src/layout/dagre.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ interface Edge {
|
|
|
19
19
|
layoutOrder?: number;
|
|
20
20
|
[key: string]: unknown;
|
|
21
21
|
}
|
|
22
|
-
|
|
22
|
+
type ComboType = Combo & {
|
|
23
23
|
x?: number;
|
|
24
24
|
y?: number;
|
|
25
25
|
label?: string;
|
|
@@ -35,7 +35,7 @@ declare type ComboType = Combo & {
|
|
|
35
35
|
offsetY?: number;
|
|
36
36
|
[key: string]: unknown;
|
|
37
37
|
};
|
|
38
|
-
|
|
38
|
+
type Node = OutNode & {
|
|
39
39
|
label?: string;
|
|
40
40
|
width?: number;
|
|
41
41
|
height?: number;
|
|
@@ -43,7 +43,7 @@ declare type Node = OutNode & {
|
|
|
43
43
|
anchorPoints?: [number, number][];
|
|
44
44
|
layoutOrder?: number;
|
|
45
45
|
};
|
|
46
|
-
|
|
46
|
+
type ModelType = {
|
|
47
47
|
nodes?: Node[];
|
|
48
48
|
edges?: Edge[];
|
|
49
49
|
comboEdges?: Edge[];
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { OutNode, Edge, PointTuple, IndexMap, FruchtermanLayoutOptions } from "./types";
|
|
6
6
|
import { Base } from "./base";
|
|
7
|
-
|
|
7
|
+
type NodeMap = {
|
|
8
8
|
[key: string]: INode;
|
|
9
9
|
};
|
|
10
|
-
|
|
10
|
+
type INode = OutNode & {
|
|
11
11
|
cluster: string;
|
|
12
12
|
};
|
|
13
13
|
/**
|
package/lib/layout/gForce.d.ts
CHANGED
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { OutNode, Edge, PointTuple, IndexMap, GForceLayoutOptions } from "./types";
|
|
6
6
|
import { Base } from "./base";
|
|
7
|
-
|
|
7
|
+
type INode = OutNode & {
|
|
8
8
|
size: number | PointTuple;
|
|
9
9
|
};
|
|
10
|
-
|
|
10
|
+
type NodeMap = {
|
|
11
11
|
[key: string]: INode;
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { OutNode, Edge, PointTuple, IndexMap, FruchtermanGPULayoutOptions } from "../types";
|
|
6
6
|
import { Base } from "../base";
|
|
7
|
-
|
|
7
|
+
type INode = OutNode & {
|
|
8
8
|
cluster: string | number;
|
|
9
9
|
};
|
|
10
|
-
|
|
10
|
+
type NodeMap = {
|
|
11
11
|
[key: string]: INode;
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
@@ -34,7 +34,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
34
34
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
35
35
|
function step(op) {
|
|
36
36
|
if (f) throw new TypeError("Generator is already executing.");
|
|
37
|
-
while (_) try {
|
|
37
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
38
38
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
39
39
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
40
40
|
switch (op[0]) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export declare const fruchtermanCode = "\nimport { globalInvocationID } from 'g-webgpu';\nconst MAX_EDGE_PER_VERTEX;\nconst VERTEX_COUNT;\n@numthreads(1, 1, 1)\nclass Fruchterman {\n @in @out\n u_Data: vec4[];\n @in\n u_K: float;\n @in\n u_K2: float;\n \n @in\n u_Center: vec2;\n @in\n u_Gravity: float;\n @in\n u_ClusterGravity: float;\n @in\n u_Speed: float;\n @in\n u_MaxDisplace: float;\n @in\n u_Clustering: float;\n @in\n u_AttributeArray: vec4[];\n @in\n u_ClusterCenters: vec4[];\n calcRepulsive(i: int, currentNode: vec4): vec2 {\n let dx = 0, dy = 0;\n for (let j = 0; j < VERTEX_COUNT; j++) {\n if (i != j) {\n const nextNode = this.u_Data[j];\n const xDist = currentNode[0] - nextNode[0];\n const yDist = currentNode[1] - nextNode[1];\n const dist = (xDist * xDist + yDist * yDist) + 0.01;\n let param = this.u_K2 / dist;\n \n if (dist > 0.0) {\n dx += param * xDist;\n dy += param * yDist;\n if (xDist == 0 && yDist == 0) {\n const sign = i < j ? 1 : -1;\n dx += param * sign;\n dy += param * sign;\n }\n }\n }\n }\n return [dx, dy];\n }\n calcGravity(currentNode: vec4, nodeAttributes: vec4): vec2 { // \n let dx = 0, dy = 0;\n const vx = currentNode[0] - this.u_Center[0];\n const vy = currentNode[1] - this.u_Center[1];\n const gf = 0.01 * this.u_K * this.u_Gravity;\n dx = gf * vx;\n dy = gf * vy;\n if (this.u_Clustering == 1) {\n const clusterIdx = int(nodeAttributes[0]);\n const center = this.u_ClusterCenters[clusterIdx];\n const cvx = currentNode[0] - center[0];\n const cvy = currentNode[1] - center[1];\n const dist = sqrt(cvx * cvx + cvy * cvy) + 0.01;\n const parma = this.u_K * this.u_ClusterGravity / dist;\n dx += parma * cvx;\n dy += parma * cvy;\n }\n return [dx, dy];\n }\n calcAttractive(i: int, currentNode: vec4): vec2 {\n let dx = 0, dy = 0;\n const arr_offset = int(floor(currentNode[2] + 0.5));\n const length = int(floor(currentNode[3] + 0.5));\n const node_buffer: vec4;\n for (let p = 0; p < MAX_EDGE_PER_VERTEX; p++) {\n if (p >= length) break;\n const arr_idx = arr_offset + p;\n // when arr_idx % 4 == 0 update currentNodedx_buffer\n const buf_offset = arr_idx - arr_idx / 4 * 4;\n if (p == 0 || buf_offset == 0) {\n node_buffer = this.u_Data[int(arr_idx / 4)];\n }\n const float_j = buf_offset == 0 ? node_buffer[0] :\n buf_offset == 1 ? node_buffer[1] :\n buf_offset == 2 ? node_buffer[2] :\n node_buffer[3];\n const nextNode = this.u_Data[int(float_j)];\n const xDist = currentNode[0] - nextNode[0];\n const yDist = currentNode[1] - nextNode[1];\n const dist = sqrt(xDist * xDist + yDist * yDist) + 0.01;\n let attractiveF = dist / this.u_K;\n \n if (dist > 0.0) {\n dx -= xDist * attractiveF;\n dy -= yDist * attractiveF;\n if (xDist == 0 && yDist == 0) {\n const sign = i < int(float_j) ? 1 : -1;\n dx -= sign * attractiveF;\n dy -= sign * attractiveF;\n }\n }\n }\n return [dx, dy];\n }\n @main\n compute() {\n const i = globalInvocationID.x;\n const currentNode = this.u_Data[i];\n let dx = 0, dy = 0;\n if (i >= VERTEX_COUNT) {\n this.u_Data[i] = currentNode;\n return;\n }\n\n // [gravity, fx, fy, 0]\n const nodeAttributes = this.u_AttributeArray[i];\n\n if (nodeAttributes[1] != 0 && nodeAttributes[2] != 0) {\n // the node is fixed\n this.u_Data[i] = [\n nodeAttributes[1],\n nodeAttributes[2],\n currentNode[2],\n currentNode[3]\n ];\n return;\n }\n\n // repulsive\n const repulsive = this.calcRepulsive(i, currentNode);\n dx += repulsive[0];\n dy += repulsive[1];\n // attractive\n const attractive = this.calcAttractive(i, currentNode);\n dx += attractive[0];\n dy += attractive[1];\n // gravity\n const gravity = this.calcGravity(currentNode, nodeAttributes);\n dx -= gravity[0];\n dy -= gravity[1];\n // speed\n dx *= this.u_Speed;\n dy *= this.u_Speed;\n\n // move\n const distLength = sqrt(dx * dx + dy * dy);\n if (distLength > 0.0) {\n const limitedDist = min(this.u_MaxDisplace * this.u_Speed, distLength);\n this.u_Data[i] = [\n currentNode[0] + dx / distLength * limitedDist,\n currentNode[1] + dy / distLength * limitedDist,\n currentNode[2],\n currentNode[3]\n ];\n }\n }\n}\n";
|
|
2
|
-
export declare const fruchtermanBundle = "{\"shaders\":{\"WGSL\":\"import \\\"GLSL.std.450\\\" as std;\\n\\n\\n# var gWebGPUDebug : bool = false;\\n# var gWebGPUDebugOutput : vec4<f32> = vec4<f32>(0.0);\\n\\n[[builtin global_invocation_id]] var<in> globalInvocationID : vec3<u32>;\\n# [[builtin work_group_size]] var<in> workGroupSize : vec3<u32>;\\n# [[builtin work_group_id]] var<in> workGroupID : vec3<u32>;\\n[[builtin local_invocation_id]] var<in> localInvocationID : vec3<u32>;\\n# [[builtin num_work_groups]] var<in> numWorkGroups : vec3<u32>;\\n[[builtin local_invocation_idx]] var<in> localInvocationIndex : u32;\\n\\ntype GWebGPUParams = [[block]] struct {\\n [[offset 0]] u_K : f32;\\n [[offset 4]] u_K2 : f32;\\n [[offset 8]] u_Center : vec2<f32>;\\n [[offset 16]] u_Gravity : f32;\\n [[offset 20]] u_ClusterGravity : f32;\\n [[offset 24]] u_Speed : f32;\\n [[offset 28]] u_MaxDisplace : f32;\\n [[offset 32]] u_Clustering : f32;\\n};\\n[[binding 0, set 0]] var<uniform> gWebGPUUniformParams : GWebGPUParams;\\ntype GWebGPUBuffer0 = [[block]] struct {\\n [[offset 0]] u_Data : [[stride 16]] array<vec4<f32>>;\\n};\\n[[binding 1, set 0]] var<storage_buffer> gWebGPUBuffer0 : GWebGPUBuffer0;\\ntype GWebGPUBuffer1 = [[block]] struct {\\n [[offset 0]] u_AttributeArray : [[stride 16]] array<vec4<f32>>;\\n};\\n[[binding 2, set 0]] var<storage_buffer> gWebGPUBuffer1 : GWebGPUBuffer1;\\ntype GWebGPUBuffer2 = [[block]] struct {\\n [[offset 0]] u_ClusterCenters : [[stride 16]] array<vec4<f32>>;\\n};\\n[[binding 3, set 0]] var<storage_buffer> gWebGPUBuffer2 : GWebGPUBuffer2;\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nfn calcRepulsive(i : i32, currentNode : vec4<f32>) -> vec2<f32> {var dx : f32 = 0.0;\\nvar dy : f32 = 0.0;\\nfor (var j : i32 = 0; j < __DefineValuePlaceholder__VERTEX_COUNT; j = j + 1) {if (i != j) {var nextNode : vec4<f32> = gWebGPUBuffer0.u_Data[j];\\nvar xDist : f32 = currentNode.x - nextNode.x;\\nvar yDist : f32 = currentNode.y - nextNode.y;\\nvar dist : f32 = ((xDist * xDist) + (yDist * yDist)) + 0.01;\\nvar param : f32 = gWebGPUUniformParams.u_K2 / dist;\\nif (dist > 0.0) {dx = dx + param * xDist;\\ndy = dy + param * yDist;\\nif ((xDist == 0.0) && (yDist == 0.0)) {var sign : f32 = select(1.0, -1.0, i < j);\\ndx = dx + param * std::sign;\\ndy = dy + param * std::sign;}}}}\\nreturn vec2<f32>(dx, dy);}\\nfn calcGravity(currentNode : vec4<f32>, nodeAttributes : vec4<f32>) -> vec2<f32> {var dx : f32 = 0.0;\\nvar dy : f32 = 0.0;\\nvar vx : f32 = currentNode.x - gWebGPUUniformParams.u_Center.x;\\nvar vy : f32 = currentNode.y - gWebGPUUniformParams.u_Center.y;\\nvar gf : f32 = (0.01 * gWebGPUUniformParams.u_K) * gWebGPUUniformParams.u_Gravity;\\ndx = gf * vx;\\ndy = gf * vy;\\nif (gWebGPUUniformParams.u_Clustering == 1.0) {var clusterIdx : i32 = i32(nodeAttributes.x);\\nvar center : vec4<f32> = gWebGPUBuffer2.u_ClusterCenters[clusterIdx];\\nvar cvx : f32 = currentNode.x - center.x;\\nvar cvy : f32 = currentNode.y - center.y;\\nvar dist : f32 = std::sqrt((cvx * cvx) + (cvy * cvy)) + 0.01;\\nvar parma : f32 = (gWebGPUUniformParams.u_K * gWebGPUUniformParams.u_ClusterGravity) / dist;\\ndx = dx + parma * cvx;\\ndy = dy + parma * cvy;}\\nreturn vec2<f32>(dx, dy);}\\nfn calcAttractive(i : i32, currentNode : vec4<f32>) -> vec2<f32> {var dx : f32 = 0.0;\\nvar dy : f32 = 0.0;\\nvar arr_offset : i32 = i32(std::floor(currentNode.z + 0.5));\\nvar length : i32 = i32(std::floor(currentNode.w + 0.5));\\nvar node_buffer : vec4<f32>;\\nfor (var p : i32 = 0; p < __DefineValuePlaceholder__MAX_EDGE_PER_VERTEX; p = p + 1) {if (p >= length) {break;}\\nvar arr_idx : i32 = arr_offset + i32(p);\\nvar buf_offset : i32 = arr_idx - ((arr_idx / 4) * 4);\\nif ((p == 0) || (buf_offset == 0)) {node_buffer = gWebGPUBuffer0.u_Data[i32(arr_idx / 4)];}\\nvar float_j : f32 = select(node_buffer.x, select(node_buffer.y, select(node_buffer.z, node_buffer.w, buf_offset == 2), buf_offset == 1), buf_offset == 0);\\nvar nextNode : vec4<f32> = gWebGPUBuffer0.u_Data[i32(float_j)];\\nvar xDist : f32 = currentNode.x - nextNode.x;\\nvar yDist : f32 = currentNode.y - nextNode.y;\\nvar dist : f32 = std::sqrt((xDist * xDist) + (yDist * yDist)) + 0.01;\\nvar attractiveF : f32 = dist / gWebGPUUniformParams.u_K;\\nif (dist > 0.0) {dx = dx - xDist * attractiveF;\\ndy = dy - yDist * attractiveF;\\nif ((xDist == 0.0) && (yDist == 0.0)) {var sign : f32 = select(1.0, -1.0, i < i32(float_j));\\ndx = dx - std::sign * attractiveF;\\ndy = dy - std::sign * attractiveF;}}}\\nreturn vec2<f32>(dx, dy);}\\nfn main() -> void {var i : i32 = globalInvocationID.x;\\nvar currentNode : vec4<f32> = gWebGPUBuffer0.u_Data[i];\\nvar dx : f32 = 0.0;\\nvar dy : f32 = 0.0;\\nif (i >= __DefineValuePlaceholder__VERTEX_COUNT) {gWebGPUBuffer0.u_Data[i] = currentNode;\\nreturn ;}\\nvar nodeAttributes : vec4<f32> = gWebGPUBuffer1.u_AttributeArray[i];\\nif ((nodeAttributes.y != 0.0) && (nodeAttributes.z != 0.0)) {gWebGPUBuffer0.u_Data[i] = vec4<f32>(nodeAttributes.y, nodeAttributes.z, currentNode.z, currentNode.w);\\nreturn ;}\\nvar repulsive : vec2<f32> = calcRepulsive(i, currentNode);\\ndx = dx + repulsive.x;\\ndy = dy + repulsive.y;\\nvar attractive : vec2<f32> = calcAttractive(i, currentNode);\\ndx = dx + attractive.x;\\ndy = dy + attractive.y;\\nvar gravity : vec2<f32> = calcGravity(currentNode, nodeAttributes);\\ndx = dx - gravity.x;\\ndy = dy - gravity.y;\\ndx = dx * gWebGPUUniformParams.u_Speed;\\ndy = dy * gWebGPUUniformParams.u_Speed;\\nvar distLength : f32 = std::sqrt((dx * dx) + (dy * dy));\\nif (distLength > 0.0) {var limitedDist : f32 = std::min(gWebGPUUniformParams.u_MaxDisplace * gWebGPUUniformParams.u_Speed, distLength);\\ngWebGPUBuffer0.u_Data[i] = vec4<f32>(currentNode.x + ((dx / distLength) * limitedDist), currentNode.y + ((dy / distLength) * limitedDist), currentNode.z, currentNode.w);}\\nreturn;}\\n\\nentry_point compute as \\\"main\\\" = main;\\n\",\"GLSL450\":\"\\n\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\nivec3 globalInvocationID = ivec3(gl_GlobalInvocationID);\\nivec3 workGroupSize = ivec3(1,1,1);\\nivec3 workGroupID = ivec3(gl_WorkGroupID);\\nivec3 localInvocationID = ivec3(gl_LocalInvocationID);\\nivec3 numWorkGroups = ivec3(gl_NumWorkGroups);\\nint localInvocationIndex = int(gl_LocalInvocationIndex);\\n\\nlayout(std140, set = 0, binding = 0) uniform GWebGPUParams {\\n float u_K;\\n float u_K2;\\n vec2 u_Center;\\n float u_Gravity;\\n float u_ClusterGravity;\\n float u_Speed;\\n float u_MaxDisplace;\\n float u_Clustering;\\n} gWebGPUUniformParams;\\nlayout(std430, set = 0, binding = 1) buffer GWebGPUBuffer0 {\\n vec4 u_Data[];\\n} gWebGPUBuffer0;\\n\\nlayout(std430, set = 0, binding = 2) buffer readonly GWebGPUBuffer1 {\\n vec4 u_AttributeArray[];\\n} gWebGPUBuffer1;\\n\\nlayout(std430, set = 0, binding = 3) buffer readonly GWebGPUBuffer2 {\\n vec4 u_ClusterCenters[];\\n} gWebGPUBuffer2;\\n\\n\\n\\n#define MAX_EDGE_PER_VERTEX __DefineValuePlaceholder__MAX_EDGE_PER_VERTEX\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\nlayout (\\n local_size_x = 1,\\n local_size_y = 1,\\n local_size_z = 1\\n) in;\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nvec2 calcRepulsive(int i, vec4 currentNode) {float dx = 0.0;\\nfloat dy = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {if (i != j) {vec4 nextNode = gWebGPUBuffer0.u_Data[j];\\nfloat xDist = currentNode.x - nextNode.x;\\nfloat yDist = currentNode.y - nextNode.y;\\nfloat dist = ((xDist * xDist) + (yDist * yDist)) + 0.01;\\nfloat param = gWebGPUUniformParams.u_K2 / dist;\\nif (dist > 0.0) {dx += param * xDist;\\ndy += param * yDist;\\nif ((xDist == 0.0) && (yDist == 0.0)) {float sign = (i < j) ? (1.0) : (-1.0);\\ndx += param * sign;\\ndy += param * sign;}}}}\\nreturn vec2(dx, dy);}\\nvec2 calcGravity(vec4 currentNode, vec4 nodeAttributes) {float dx = 0.0;\\nfloat dy = 0.0;\\nfloat vx = currentNode.x - gWebGPUUniformParams.u_Center.x;\\nfloat vy = currentNode.y - gWebGPUUniformParams.u_Center.y;\\nfloat gf = (0.01 * gWebGPUUniformParams.u_K) * gWebGPUUniformParams.u_Gravity;\\ndx = gf * vx;\\ndy = gf * vy;\\nif (gWebGPUUniformParams.u_Clustering == 1.0) {int clusterIdx = int(nodeAttributes.x);\\nvec4 center = gWebGPUBuffer2.u_ClusterCenters[clusterIdx];\\nfloat cvx = currentNode.x - center.x;\\nfloat cvy = currentNode.y - center.y;\\nfloat dist = sqrt((cvx * cvx) + (cvy * cvy)) + 0.01;\\nfloat parma = (gWebGPUUniformParams.u_K * gWebGPUUniformParams.u_ClusterGravity) / dist;\\ndx += parma * cvx;\\ndy += parma * cvy;}\\nreturn vec2(dx, dy);}\\nvec2 calcAttractive(int i, vec4 currentNode) {float dx = 0.0;\\nfloat dy = 0.0;\\nint arr_offset = int(floor(currentNode.z + 0.5));\\nint length = int(floor(currentNode.w + 0.5));\\nvec4 node_buffer;\\nfor (int p = 0; p < MAX_EDGE_PER_VERTEX; p++) {if (p >= length) {break;}\\nint arr_idx = arr_offset + int(p);\\nint buf_offset = arr_idx - ((arr_idx / 4) * 4);\\nif ((p == 0) || (buf_offset == 0)) {node_buffer = gWebGPUBuffer0.u_Data[int(arr_idx / 4)];}\\nfloat float_j = (buf_offset == 0) ? (node_buffer.x) : ((buf_offset == 1) ? (node_buffer.y) : ((buf_offset == 2) ? (node_buffer.z) : (node_buffer.w)));\\nvec4 nextNode = gWebGPUBuffer0.u_Data[int(float_j)];\\nfloat xDist = currentNode.x - nextNode.x;\\nfloat yDist = currentNode.y - nextNode.y;\\nfloat dist = sqrt((xDist * xDist) + (yDist * yDist)) + 0.01;\\nfloat attractiveF = dist / gWebGPUUniformParams.u_K;\\nif (dist > 0.0) {dx -= xDist * attractiveF;\\ndy -= yDist * attractiveF;\\nif ((xDist == 0.0) && (yDist == 0.0)) {float sign = (i < int(float_j)) ? (1.0) : (-1.0);\\ndx -= sign * attractiveF;\\ndy -= sign * attractiveF;}}}\\nreturn vec2(dx, dy);}\\nvoid main() {int i = globalInvocationID.x;\\nvec4 currentNode = gWebGPUBuffer0.u_Data[i];\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nif (i >= VERTEX_COUNT) {gWebGPUBuffer0.u_Data[i] = currentNode;\\nreturn ;}\\nvec4 nodeAttributes = gWebGPUBuffer1.u_AttributeArray[i];\\nif ((nodeAttributes.y != 0.0) && (nodeAttributes.z != 0.0)) {gWebGPUBuffer0.u_Data[i] = vec4(nodeAttributes.y, nodeAttributes.z, currentNode.z, currentNode.w);\\nreturn ;}\\nvec2 repulsive = calcRepulsive(i, currentNode);\\ndx += repulsive.x;\\ndy += repulsive.y;\\nvec2 attractive = calcAttractive(i, currentNode);\\ndx += attractive.x;\\ndy += attractive.y;\\nvec2 gravity = calcGravity(currentNode, nodeAttributes);\\ndx -= gravity.x;\\ndy -= gravity.y;\\ndx *= gWebGPUUniformParams.u_Speed;\\ndy *= gWebGPUUniformParams.u_Speed;\\nfloat distLength = sqrt((dx * dx) + (dy * dy));\\nif (distLength > 0.0) {float limitedDist = min(gWebGPUUniformParams.u_MaxDisplace * gWebGPUUniformParams.u_Speed, distLength);\\ngWebGPUBuffer0.u_Data[i] = vec4(currentNode.x + ((dx / distLength) * limitedDist), currentNode.y + ((dy / distLength) * limitedDist), currentNode.z, currentNode.w);}}\\n\",\"GLSL100\":\"\\n\\nfloat epsilon = 0.00001;\\nvec2 addrTranslation_1Dto2D(float address1D, vec2 texSize) {\\n vec2 conv_const = vec2(1.0 / texSize.x, 1.0 / (texSize.x * texSize.y));\\n vec2 normAddr2D = float(address1D) * conv_const;\\n return vec2(fract(normAddr2D.x + epsilon), normAddr2D.y);\\n}\\n\\nvoid barrier() {}\\n \\n\\nuniform vec2 u_OutputTextureSize;\\nuniform int u_OutputTexelCount;\\nvarying vec2 v_TexCoord;\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\n#define MAX_EDGE_PER_VERTEX __DefineValuePlaceholder__MAX_EDGE_PER_VERTEX\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\n\\nuniform sampler2D u_Data;\\nuniform vec2 u_DataSize;\\nvec4 getDatau_Data(vec2 address2D) {\\n return vec4(texture2D(u_Data, address2D).rgba);\\n}\\nvec4 getDatau_Data(float address1D) {\\n return getDatau_Data(addrTranslation_1Dto2D(address1D, u_DataSize));\\n}\\nvec4 getDatau_Data(int address1D) {\\n return getDatau_Data(float(address1D));\\n}\\nuniform float u_K;\\nuniform float u_K2;\\nuniform vec2 u_Center;\\nuniform float u_Gravity;\\nuniform float u_ClusterGravity;\\nuniform float u_Speed;\\nuniform float u_MaxDisplace;\\nuniform float u_Clustering;\\nuniform sampler2D u_AttributeArray;\\nuniform vec2 u_AttributeArraySize;\\nvec4 getDatau_AttributeArray(vec2 address2D) {\\n return vec4(texture2D(u_AttributeArray, address2D).rgba);\\n}\\nvec4 getDatau_AttributeArray(float address1D) {\\n return getDatau_AttributeArray(addrTranslation_1Dto2D(address1D, u_AttributeArraySize));\\n}\\nvec4 getDatau_AttributeArray(int address1D) {\\n return getDatau_AttributeArray(float(address1D));\\n}\\nuniform sampler2D u_ClusterCenters;\\nuniform vec2 u_ClusterCentersSize;\\nvec4 getDatau_ClusterCenters(vec2 address2D) {\\n return vec4(texture2D(u_ClusterCenters, address2D).rgba);\\n}\\nvec4 getDatau_ClusterCenters(float address1D) {\\n return getDatau_ClusterCenters(addrTranslation_1Dto2D(address1D, u_ClusterCentersSize));\\n}\\nvec4 getDatau_ClusterCenters(int address1D) {\\n return getDatau_ClusterCenters(float(address1D));\\n}\\nvec2 calcRepulsive(int i, vec4 currentNode) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {if (i != j) {vec4 nextNode = getDatau_Data(j);\\nfloat xDist = currentNode.x - nextNode.x;\\nfloat yDist = currentNode.y - nextNode.y;\\nfloat dist = ((xDist * xDist) + (yDist * yDist)) + 0.01;\\nfloat param = u_K2 / dist;\\nif (dist > 0.0) {dx += param * xDist;\\ndy += param * yDist;\\nif ((xDist == 0.0) && (yDist == 0.0)) {float sign = (i < j) ? (1.0) : (-1.0);\\ndx += param * sign;\\ndy += param * sign;}}}}\\nreturn vec2(dx, dy);}\\nvec2 calcGravity(vec4 currentNode, vec4 nodeAttributes) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nfloat vx = currentNode.x - u_Center.x;\\nfloat vy = currentNode.y - u_Center.y;\\nfloat gf = (0.01 * u_K) * u_Gravity;\\ndx = gf * vx;\\ndy = gf * vy;\\nif (u_Clustering == 1.0) {int clusterIdx = int(nodeAttributes.x);\\nvec4 center = getDatau_ClusterCenters(clusterIdx);\\nfloat cvx = currentNode.x - center.x;\\nfloat cvy = currentNode.y - center.y;\\nfloat dist = sqrt((cvx * cvx) + (cvy * cvy)) + 0.01;\\nfloat parma = (u_K * u_ClusterGravity) / dist;\\ndx += parma * cvx;\\ndy += parma * cvy;}\\nreturn vec2(dx, dy);}\\nvec2 calcAttractive(int i, vec4 currentNode) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nint arr_offset = int(floor(currentNode.z + 0.5));\\nint length = int(floor(currentNode.w + 0.5));\\nvec4 node_buffer;\\nfor (int p = 0; p < MAX_EDGE_PER_VERTEX; p++) {if (p >= length) {break;}\\nint arr_idx = arr_offset + int(p);\\nint buf_offset = arr_idx - ((arr_idx / 4) * 4);\\nif ((p == 0) || (buf_offset == 0)) {node_buffer = getDatau_Data(int(arr_idx / 4));}\\nfloat float_j = (buf_offset == 0) ? (node_buffer.x) : ((buf_offset == 1) ? (node_buffer.y) : ((buf_offset == 2) ? (node_buffer.z) : (node_buffer.w)));\\nvec4 nextNode = getDatau_Data(int(float_j));\\nfloat xDist = currentNode.x - nextNode.x;\\nfloat yDist = currentNode.y - nextNode.y;\\nfloat dist = sqrt((xDist * xDist) + (yDist * yDist)) + 0.01;\\nfloat attractiveF = dist / u_K;\\nif (dist > 0.0) {dx -= xDist * attractiveF;\\ndy -= yDist * attractiveF;\\nif ((xDist == 0.0) && (yDist == 0.0)) {float sign = (i < int(float_j)) ? (1.0) : (-1.0);\\ndx -= sign * attractiveF;\\ndy -= sign * attractiveF;}}}\\nreturn vec2(dx, dy);}\\nvoid main() {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nint i = globalInvocationID.x;\\nvec4 currentNode = getDatau_Data(i);\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nif (i >= VERTEX_COUNT) {gl_FragColor = vec4(currentNode);\\nreturn ;}\\nvec4 nodeAttributes = getDatau_AttributeArray(i);\\nif ((nodeAttributes.y != 0.0) && (nodeAttributes.z != 0.0)) {gl_FragColor = vec4(vec4(nodeAttributes.y, nodeAttributes.z, currentNode.z, currentNode.w));\\nreturn ;}\\nvec2 repulsive = calcRepulsive(i, currentNode);\\ndx += repulsive.x;\\ndy += repulsive.y;\\nvec2 attractive = calcAttractive(i, currentNode);\\ndx += attractive.x;\\ndy += attractive.y;\\nvec2 gravity = calcGravity(currentNode, nodeAttributes);\\ndx -= gravity.x;\\ndy -= gravity.y;\\ndx *= u_Speed;\\ndy *= u_Speed;\\nfloat distLength = sqrt((dx * dx) + (dy * dy));\\nif (distLength > 0.0) {float limitedDist = min(u_MaxDisplace * u_Speed, distLength);\\ngl_FragColor = vec4(vec4(currentNode.x + ((dx / distLength) * limitedDist), currentNode.y + ((dy / distLength) * limitedDist), currentNode.z, currentNode.w));}if (gWebGPUDebug) {\\n gl_FragColor = gWebGPUDebugOutput;\\n}}\\n\"},\"context\":{\"name\":\"\",\"dispatch\":[1,1,1],\"threadGroupSize\":[1,1,1],\"maxIteration\":1,\"defines\":[{\"name\":\"MAX_EDGE_PER_VERTEX\",\"type\":\"Float\",\"runtime\":true},{\"name\":\"VERTEX_COUNT\",\"type\":\"Float\",\"runtime\":true}],\"uniforms\":[{\"name\":\"u_Data\",\"type\":\"vec4<f32>[]\",\"storageClass\":\"StorageBuffer\",\"readonly\":false,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_K\",\"type\":\"Float\",\"storageClass\":\"Uniform\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_K2\",\"type\":\"Float\",\"storageClass\":\"Uniform\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_Center\",\"type\":\"vec2<f32>\",\"storageClass\":\"Uniform\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_Gravity\",\"type\":\"Float\",\"storageClass\":\"Uniform\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_ClusterGravity\",\"type\":\"Float\",\"storageClass\":\"Uniform\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_Speed\",\"type\":\"Float\",\"storageClass\":\"Uniform\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_MaxDisplace\",\"type\":\"Float\",\"storageClass\":\"Uniform\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_Clustering\",\"type\":\"Float\",\"storageClass\":\"Uniform\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_AttributeArray\",\"type\":\"vec4<f32>[]\",\"storageClass\":\"StorageBuffer\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_ClusterCenters\",\"type\":\"vec4<f32>[]\",\"storageClass\":\"StorageBuffer\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]}],\"globalDeclarations\":[],\"output\":{\"name\":\"u_Data\",\"size\":[1,1],\"length\":1},\"needPingpong\":true}}";
|
|
2
|
+
export declare const fruchtermanBundle = "{\"shaders\":{\"WGSL\":\"\",\"GLSL450\":\"\",\"GLSL100\":\"\\n\\nfloat epsilon = 0.00001;\\nvec2 addrTranslation_1Dto2D(float address1D, vec2 texSize) {\\n vec2 conv_const = vec2(1.0 / texSize.x, 1.0 / (texSize.x * texSize.y));\\n vec2 normAddr2D = float(address1D) * conv_const;\\n return vec2(fract(normAddr2D.x + epsilon), normAddr2D.y);\\n}\\n\\nvoid barrier() {}\\n \\n\\nuniform vec2 u_OutputTextureSize;\\nuniform int u_OutputTexelCount;\\nvarying vec2 v_TexCoord;\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\n#define MAX_EDGE_PER_VERTEX __DefineValuePlaceholder__MAX_EDGE_PER_VERTEX\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\n\\nuniform sampler2D u_Data;\\nuniform vec2 u_DataSize;\\nvec4 getDatau_Data(vec2 address2D) {\\n return vec4(texture2D(u_Data, address2D).rgba);\\n}\\nvec4 getDatau_Data(float address1D) {\\n return getDatau_Data(addrTranslation_1Dto2D(address1D, u_DataSize));\\n}\\nvec4 getDatau_Data(int address1D) {\\n return getDatau_Data(float(address1D));\\n}\\nuniform float u_K;\\nuniform float u_K2;\\nuniform vec2 u_Center;\\nuniform float u_Gravity;\\nuniform float u_ClusterGravity;\\nuniform float u_Speed;\\nuniform float u_MaxDisplace;\\nuniform float u_Clustering;\\nuniform sampler2D u_AttributeArray;\\nuniform vec2 u_AttributeArraySize;\\nvec4 getDatau_AttributeArray(vec2 address2D) {\\n return vec4(texture2D(u_AttributeArray, address2D).rgba);\\n}\\nvec4 getDatau_AttributeArray(float address1D) {\\n return getDatau_AttributeArray(addrTranslation_1Dto2D(address1D, u_AttributeArraySize));\\n}\\nvec4 getDatau_AttributeArray(int address1D) {\\n return getDatau_AttributeArray(float(address1D));\\n}\\nuniform sampler2D u_ClusterCenters;\\nuniform vec2 u_ClusterCentersSize;\\nvec4 getDatau_ClusterCenters(vec2 address2D) {\\n return vec4(texture2D(u_ClusterCenters, address2D).rgba);\\n}\\nvec4 getDatau_ClusterCenters(float address1D) {\\n return getDatau_ClusterCenters(addrTranslation_1Dto2D(address1D, u_ClusterCentersSize));\\n}\\nvec4 getDatau_ClusterCenters(int address1D) {\\n return getDatau_ClusterCenters(float(address1D));\\n}\\nvec2 calcRepulsive(int i, vec4 currentNode) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {if (i != j) {vec4 nextNode = getDatau_Data(j);\\nfloat xDist = currentNode.x - nextNode.x;\\nfloat yDist = currentNode.y - nextNode.y;\\nfloat dist = ((xDist * xDist) + (yDist * yDist)) + 0.01;\\nfloat param = u_K2 / dist;\\nif (dist > 0.0) {dx += param * xDist;\\ndy += param * yDist;\\nif ((xDist == 0.0) && (yDist == 0.0)) {float sign = (i < j) ? (1.0) : (-1.0);\\ndx += param * sign;\\ndy += param * sign;}}}}\\nreturn vec2(dx, dy);}\\nvec2 calcGravity(vec4 currentNode, vec4 nodeAttributes) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nfloat vx = currentNode.x - u_Center.x;\\nfloat vy = currentNode.y - u_Center.y;\\nfloat gf = (0.01 * u_K) * u_Gravity;\\ndx = gf * vx;\\ndy = gf * vy;\\nif (u_Clustering == 1.0) {int clusterIdx = int(nodeAttributes.x);\\nvec4 center = getDatau_ClusterCenters(clusterIdx);\\nfloat cvx = currentNode.x - center.x;\\nfloat cvy = currentNode.y - center.y;\\nfloat dist = sqrt((cvx * cvx) + (cvy * cvy)) + 0.01;\\nfloat parma = (u_K * u_ClusterGravity) / dist;\\ndx += parma * cvx;\\ndy += parma * cvy;}\\nreturn vec2(dx, dy);}\\nvec2 calcAttractive(int i, vec4 currentNode) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nint arr_offset = int(floor(currentNode.z + 0.5));\\nint length = int(floor(currentNode.w + 0.5));\\nvec4 node_buffer;\\nfor (int p = 0; p < MAX_EDGE_PER_VERTEX; p++) {if (p >= length) {break;}\\nint arr_idx = arr_offset + int(p);\\nint buf_offset = arr_idx - ((arr_idx / 4) * 4);\\nif ((p == 0) || (buf_offset == 0)) {node_buffer = getDatau_Data(int(arr_idx / 4));}\\nfloat float_j = (buf_offset == 0) ? (node_buffer.x) : ((buf_offset == 1) ? (node_buffer.y) : ((buf_offset == 2) ? (node_buffer.z) : (node_buffer.w)));\\nvec4 nextNode = getDatau_Data(int(float_j));\\nfloat xDist = currentNode.x - nextNode.x;\\nfloat yDist = currentNode.y - nextNode.y;\\nfloat dist = sqrt((xDist * xDist) + (yDist * yDist)) + 0.01;\\nfloat attractiveF = dist / u_K;\\nif (dist > 0.0) {dx -= xDist * attractiveF;\\ndy -= yDist * attractiveF;\\nif ((xDist == 0.0) && (yDist == 0.0)) {float sign = (i < int(float_j)) ? (1.0) : (-1.0);\\ndx -= sign * attractiveF;\\ndy -= sign * attractiveF;}}}\\nreturn vec2(dx, dy);}\\nvoid main() {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nint i = globalInvocationID.x;\\nvec4 currentNode = getDatau_Data(i);\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nif (i >= VERTEX_COUNT) {gl_FragColor = vec4(currentNode);\\nreturn ;}\\nvec4 nodeAttributes = getDatau_AttributeArray(i);\\nif ((nodeAttributes.y != 0.0) && (nodeAttributes.z != 0.0)) {gl_FragColor = vec4(vec4(nodeAttributes.y, nodeAttributes.z, currentNode.z, currentNode.w));\\nreturn ;}\\nvec2 repulsive = calcRepulsive(i, currentNode);\\ndx += repulsive.x;\\ndy += repulsive.y;\\nvec2 attractive = calcAttractive(i, currentNode);\\ndx += attractive.x;\\ndy += attractive.y;\\nvec2 gravity = calcGravity(currentNode, nodeAttributes);\\ndx -= gravity.x;\\ndy -= gravity.y;\\ndx *= u_Speed;\\ndy *= u_Speed;\\nfloat distLength = sqrt((dx * dx) + (dy * dy));\\nif (distLength > 0.0) {float limitedDist = min(u_MaxDisplace * u_Speed, distLength);\\ngl_FragColor = vec4(vec4(currentNode.x + ((dx / distLength) * limitedDist), currentNode.y + ((dy / distLength) * limitedDist), currentNode.z, currentNode.w));}if (gWebGPUDebug) {\\n gl_FragColor = gWebGPUDebugOutput;\\n}}\\n\"},\"context\":{\"name\":\"\",\"dispatch\":[1,1,1],\"threadGroupSize\":[1,1,1],\"maxIteration\":1,\"defines\":[{\"name\":\"MAX_EDGE_PER_VERTEX\",\"type\":\"Float\",\"runtime\":true},{\"name\":\"VERTEX_COUNT\",\"type\":\"Float\",\"runtime\":true}],\"uniforms\":[{\"name\":\"u_Data\",\"type\":\"vec4<f32>[]\",\"storageClass\":\"StorageBuffer\",\"readonly\":false,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_K\",\"type\":\"Float\",\"storageClass\":\"Uniform\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_K2\",\"type\":\"Float\",\"storageClass\":\"Uniform\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_Center\",\"type\":\"vec2<f32>\",\"storageClass\":\"Uniform\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_Gravity\",\"type\":\"Float\",\"storageClass\":\"Uniform\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_ClusterGravity\",\"type\":\"Float\",\"storageClass\":\"Uniform\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_Speed\",\"type\":\"Float\",\"storageClass\":\"Uniform\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_MaxDisplace\",\"type\":\"Float\",\"storageClass\":\"Uniform\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_Clustering\",\"type\":\"Float\",\"storageClass\":\"Uniform\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_AttributeArray\",\"type\":\"vec4<f32>[]\",\"storageClass\":\"StorageBuffer\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_ClusterCenters\",\"type\":\"vec4<f32>[]\",\"storageClass\":\"StorageBuffer\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]}],\"globalDeclarations\":[],\"output\":{\"name\":\"u_Data\",\"size\":[1,1],\"length\":1},\"needPingpong\":true}}";
|
|
3
3
|
export declare const clusterCode = "\nimport { globalInvocationID } from 'g-webgpu';\nconst VERTEX_COUNT;\nconst CLUSTER_COUNT;\n@numthreads(1, 1, 1)\nclass CalcCenter {\n @in\n u_Data: vec4[];\n @in\n u_NodeAttributes: vec4[]; // [[clusterIdx, 0, 0, 0], ...]\n @in @out\n u_ClusterCenters: vec4[]; // [[cx, cy, nodeCount, clusterIdx], ...]\n @main\n compute() {\n const i = globalInvocationID.x;\n const center = this.u_ClusterCenters[i];\n let sumx = 0;\n let sumy = 0;\n let count = 0;\n for (let j = 0; j < VERTEX_COUNT; j++) {\n const attributes = this.u_NodeAttributes[j];\n const clusterIdx = int(attributes[0]);\n const vertex = this.u_Data[j];\n if (clusterIdx == i) {\n sumx += vertex.x;\n sumy += vertex.y;\n count += 1;\n }\n }\n this.u_ClusterCenters[i] = [\n sumx / count,\n sumy / count,\n count,\n i\n ];\n }\n}\n";
|
|
4
|
-
export declare const clusterBundle = "{\"shaders\":{\"WGSL\":\"
|
|
4
|
+
export declare const clusterBundle = "{\"shaders\":{\"WGSL\":\"\",\"GLSL450\":\"\",\"GLSL100\":\"\\n\\nfloat epsilon = 0.00001;\\nvec2 addrTranslation_1Dto2D(float address1D, vec2 texSize) {\\n vec2 conv_const = vec2(1.0 / texSize.x, 1.0 / (texSize.x * texSize.y));\\n vec2 normAddr2D = float(address1D) * conv_const;\\n return vec2(fract(normAddr2D.x + epsilon), normAddr2D.y);\\n}\\n\\nvoid barrier() {}\\n \\n\\nuniform vec2 u_OutputTextureSize;\\nuniform int u_OutputTexelCount;\\nvarying vec2 v_TexCoord;\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\n#define CLUSTER_COUNT __DefineValuePlaceholder__CLUSTER_COUNT\\n\\nuniform sampler2D u_Data;\\nuniform vec2 u_DataSize;\\nvec4 getDatau_Data(vec2 address2D) {\\n return vec4(texture2D(u_Data, address2D).rgba);\\n}\\nvec4 getDatau_Data(float address1D) {\\n return getDatau_Data(addrTranslation_1Dto2D(address1D, u_DataSize));\\n}\\nvec4 getDatau_Data(int address1D) {\\n return getDatau_Data(float(address1D));\\n}\\nuniform sampler2D u_NodeAttributes;\\nuniform vec2 u_NodeAttributesSize;\\nvec4 getDatau_NodeAttributes(vec2 address2D) {\\n return vec4(texture2D(u_NodeAttributes, address2D).rgba);\\n}\\nvec4 getDatau_NodeAttributes(float address1D) {\\n return getDatau_NodeAttributes(addrTranslation_1Dto2D(address1D, u_NodeAttributesSize));\\n}\\nvec4 getDatau_NodeAttributes(int address1D) {\\n return getDatau_NodeAttributes(float(address1D));\\n}\\nuniform sampler2D u_ClusterCenters;\\nuniform vec2 u_ClusterCentersSize;\\nvec4 getDatau_ClusterCenters(vec2 address2D) {\\n return vec4(texture2D(u_ClusterCenters, address2D).rgba);\\n}\\nvec4 getDatau_ClusterCenters(float address1D) {\\n return getDatau_ClusterCenters(addrTranslation_1Dto2D(address1D, u_ClusterCentersSize));\\n}\\nvec4 getDatau_ClusterCenters(int address1D) {\\n return getDatau_ClusterCenters(float(address1D));\\n}\\nvoid main() {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nint i = globalInvocationID.x;\\nvec4 center = getDatau_ClusterCenters(i);\\nfloat sumx = 0.0;\\nfloat sumy = 0.0;\\nfloat count = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {vec4 attributes = getDatau_NodeAttributes(j);\\nint clusterIdx = int(attributes.x);\\nvec4 vertex = getDatau_Data(j);\\nif (clusterIdx == i) {sumx += vertex.x;\\nsumy += vertex.y;\\ncount += 1.0;}}\\ngl_FragColor = vec4(vec4(sumx / count, sumy / count, count, i));if (gWebGPUDebug) {\\n gl_FragColor = gWebGPUDebugOutput;\\n}}\\n\"},\"context\":{\"name\":\"\",\"dispatch\":[1,1,1],\"threadGroupSize\":[1,1,1],\"maxIteration\":1,\"defines\":[{\"name\":\"VERTEX_COUNT\",\"type\":\"Float\",\"runtime\":true},{\"name\":\"CLUSTER_COUNT\",\"type\":\"Float\",\"runtime\":true}],\"uniforms\":[{\"name\":\"u_Data\",\"type\":\"vec4<f32>[]\",\"storageClass\":\"StorageBuffer\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_NodeAttributes\",\"type\":\"vec4<f32>[]\",\"storageClass\":\"StorageBuffer\",\"readonly\":true,\"writeonly\":false,\"size\":[1,1]},{\"name\":\"u_ClusterCenters\",\"type\":\"vec4<f32>[]\",\"storageClass\":\"StorageBuffer\",\"readonly\":false,\"writeonly\":false,\"size\":[1,1]}],\"globalDeclarations\":[],\"output\":{\"name\":\"u_ClusterCenters\",\"size\":[1,1],\"length\":1},\"needPingpong\":true}}";
|