@yurialvesbordin/graphium 0.0.0-stage → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +37 -2
  3. package/dist/Graphium.d.ts +156 -0
  4. package/dist/Graphium.d.ts.map +1 -0
  5. package/dist/Graphium.js +413 -0
  6. package/dist/Graphium.js.map +1 -0
  7. package/dist/core/FocusController.d.ts +16 -0
  8. package/dist/core/FocusController.d.ts.map +1 -0
  9. package/dist/core/FocusController.js +53 -0
  10. package/dist/core/FocusController.js.map +1 -0
  11. package/dist/core/GraphEditor.d.ts +61 -0
  12. package/dist/core/GraphEditor.d.ts.map +1 -0
  13. package/dist/core/GraphEditor.js +165 -0
  14. package/dist/core/GraphEditor.js.map +1 -0
  15. package/dist/core/GraphModel.d.ts +166 -0
  16. package/dist/core/GraphModel.d.ts.map +1 -0
  17. package/dist/core/GraphModel.js +730 -0
  18. package/dist/core/GraphModel.js.map +1 -0
  19. package/dist/core/SelectionController.d.ts +26 -0
  20. package/dist/core/SelectionController.d.ts.map +1 -0
  21. package/dist/core/SelectionController.js +78 -0
  22. package/dist/core/SelectionController.js.map +1 -0
  23. package/dist/core/colors.d.ts +27 -0
  24. package/dist/core/colors.d.ts.map +1 -0
  25. package/dist/core/colors.js +141 -0
  26. package/dist/core/colors.js.map +1 -0
  27. package/dist/core/events.d.ts +21 -0
  28. package/dist/core/events.d.ts.map +1 -0
  29. package/dist/core/events.js +64 -0
  30. package/dist/core/events.js.map +1 -0
  31. package/dist/core/handles.d.ts +60 -0
  32. package/dist/core/handles.d.ts.map +1 -0
  33. package/dist/core/handles.js +116 -0
  34. package/dist/core/handles.js.map +1 -0
  35. package/dist/core/theme.d.ts +9 -0
  36. package/dist/core/theme.d.ts.map +1 -0
  37. package/dist/core/theme.js +167 -0
  38. package/dist/core/theme.js.map +1 -0
  39. package/dist/core/themes.d.ts +9 -0
  40. package/dist/core/themes.d.ts.map +1 -0
  41. package/dist/core/themes.js +103 -0
  42. package/dist/core/themes.js.map +1 -0
  43. package/dist/core/types.d.ts +287 -0
  44. package/dist/core/types.d.ts.map +1 -0
  45. package/dist/core/types.js +7 -0
  46. package/dist/core/types.js.map +1 -0
  47. package/dist/index.d.ts +21 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +20 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/interaction/InteractionBinder.d.ts +43 -0
  52. package/dist/interaction/InteractionBinder.d.ts.map +1 -0
  53. package/dist/interaction/InteractionBinder.js +121 -0
  54. package/dist/interaction/InteractionBinder.js.map +1 -0
  55. package/dist/interaction/PointerController.d.ts +83 -0
  56. package/dist/interaction/PointerController.d.ts.map +1 -0
  57. package/dist/interaction/PointerController.js +294 -0
  58. package/dist/interaction/PointerController.js.map +1 -0
  59. package/dist/physics/PhysicsEngine.d.ts +82 -0
  60. package/dist/physics/PhysicsEngine.d.ts.map +1 -0
  61. package/dist/physics/PhysicsEngine.js +469 -0
  62. package/dist/physics/PhysicsEngine.js.map +1 -0
  63. package/dist/physics/SpatialHash.d.ts +36 -0
  64. package/dist/physics/SpatialHash.d.ts.map +1 -0
  65. package/dist/physics/SpatialHash.js +126 -0
  66. package/dist/physics/SpatialHash.js.map +1 -0
  67. package/dist/physics/presets.d.ts +14 -0
  68. package/dist/physics/presets.d.ts.map +1 -0
  69. package/dist/physics/presets.js +108 -0
  70. package/dist/physics/presets.js.map +1 -0
  71. package/dist/render/Camera.d.ts +55 -0
  72. package/dist/render/Camera.d.ts.map +1 -0
  73. package/dist/render/Camera.js +94 -0
  74. package/dist/render/Camera.js.map +1 -0
  75. package/dist/render/LabelLayer.d.ts +32 -0
  76. package/dist/render/LabelLayer.d.ts.map +1 -0
  77. package/dist/render/LabelLayer.js +142 -0
  78. package/dist/render/LabelLayer.js.map +1 -0
  79. package/dist/render/RenderLoop.d.ts +67 -0
  80. package/dist/render/RenderLoop.d.ts.map +1 -0
  81. package/dist/render/RenderLoop.js +126 -0
  82. package/dist/render/RenderLoop.js.map +1 -0
  83. package/dist/render/Renderer.d.ts +73 -0
  84. package/dist/render/Renderer.d.ts.map +1 -0
  85. package/dist/render/Renderer.js +512 -0
  86. package/dist/render/Renderer.js.map +1 -0
  87. package/dist/render/TextureAtlas.d.ts +51 -0
  88. package/dist/render/TextureAtlas.d.ts.map +1 -0
  89. package/dist/render/TextureAtlas.js +160 -0
  90. package/dist/render/TextureAtlas.js.map +1 -0
  91. package/dist/render/ViewportController.d.ts +34 -0
  92. package/dist/render/ViewportController.d.ts.map +1 -0
  93. package/dist/render/ViewportController.js +57 -0
  94. package/dist/render/ViewportController.js.map +1 -0
  95. package/dist/render/geometry.d.ts +19 -0
  96. package/dist/render/geometry.d.ts.map +1 -0
  97. package/dist/render/geometry.js +71 -0
  98. package/dist/render/geometry.js.map +1 -0
  99. package/dist/render/shaders.d.ts +13 -0
  100. package/dist/render/shaders.d.ts.map +1 -0
  101. package/dist/render/shaders.js +183 -0
  102. package/dist/render/shaders.js.map +1 -0
  103. package/package.json +73 -4
@@ -0,0 +1,512 @@
1
+ /**
2
+ * Draws the graph with three instanced WebGL2 passes: bezier edges, arrow
3
+ * heads and circular nodes with atlas images. Instance buffers are filled
4
+ * from the model on demand and all state uniforms come from the theme.
5
+ */
6
+ import { LINK_HIDDEN, LINK_DIM, LINK_SELECTED, NODE_DISABLED, NODE_DRAGGED, NODE_DIM, NODE_FIXED, NODE_HIDDEN, NODE_SELECTED } from '../core/GraphModel.js';
7
+ import { packRGBA, unpackRGBA } from '../core/colors.js';
8
+ import { bezierLength, controlPoint } from './geometry.js';
9
+ import { ARROW_FRAGMENT, ARROW_VERTEX, EDGE_FRAGMENT, EDGE_VERTEX, NODE_FRAGMENT, NODE_VERTEX } from './shaders.js';
10
+ const NODE_FLOATS = 20;
11
+ const EDGE_FLOATS = 16;
12
+ const ARROW_FLOATS = 9;
13
+ const CURVE_SEGMENTS = 18;
14
+ function compile(gl, type, source) {
15
+ const shader = gl.createShader(type);
16
+ if (!shader) {
17
+ throw new Error('Graphium could not create a shader.');
18
+ }
19
+ gl.shaderSource(shader, source);
20
+ gl.compileShader(shader);
21
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
22
+ const log = gl.getShaderInfoLog(shader);
23
+ gl.deleteShader(shader);
24
+ throw new Error(`Graphium shader error: ${log}`);
25
+ }
26
+ return shader;
27
+ }
28
+ function link(gl, vertexSource, fragmentSource) {
29
+ const program = gl.createProgram();
30
+ if (!program) {
31
+ throw new Error('Graphium could not create a program.');
32
+ }
33
+ const vertex = compile(gl, gl.VERTEX_SHADER, vertexSource);
34
+ const fragment = compile(gl, gl.FRAGMENT_SHADER, fragmentSource);
35
+ gl.attachShader(program, vertex);
36
+ gl.attachShader(program, fragment);
37
+ gl.linkProgram(program);
38
+ gl.deleteShader(vertex);
39
+ gl.deleteShader(fragment);
40
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
41
+ const log = gl.getProgramInfoLog(program);
42
+ gl.deleteProgram(program);
43
+ throw new Error(`Graphium program error: ${log}`);
44
+ }
45
+ return program;
46
+ }
47
+ export class Renderer {
48
+ constructor(canvas, theme, options = {}) {
49
+ this.atlas = null;
50
+ this.lastRenderMs = 0;
51
+ this.camera = null;
52
+ this.nodeProgram = null;
53
+ this.edgeProgram = null;
54
+ this.arrowProgram = null;
55
+ this.cornerBuffer = null;
56
+ this.curveCornerBuffer = null;
57
+ this.nodeVAO = null;
58
+ this.nodeBuffer = null;
59
+ this.edgeVAO = null;
60
+ this.edgeBuffer = null;
61
+ this.edgeCurveVAO = null;
62
+ this.edgeCurveBuffer = null;
63
+ this.arrowVAO = null;
64
+ this.arrowBuffer = null;
65
+ this.nodeData = new Float32Array(256 * NODE_FLOATS);
66
+ this.edgeData = new Float32Array(512 * EDGE_FLOATS);
67
+ this.edgeCurveData = new Float32Array(256 * EDGE_FLOATS);
68
+ this.arrowData = new Float32Array(256 * ARROW_FLOATS);
69
+ this.nodeDrawCount = 0;
70
+ this.edgeDrawCount = 0;
71
+ this.edgeCurveDrawCount = 0;
72
+ this.arrowDrawCount = 0;
73
+ this.clearColor = [0.043, 0.047, 0.071, 1];
74
+ this.controlScratch = { x: 0, y: 0 };
75
+ this.canvas = canvas;
76
+ this.theme = theme;
77
+ this.fadeZoom = options.fadeZoom ?? 0.18;
78
+ this.maxPixelRatio = options.maxPixelRatio ?? 2;
79
+ const attributes = { antialias: options.antialias ?? true, alpha: true, premultipliedAlpha: true };
80
+ this.gl = canvas.getContext('webgl2', attributes);
81
+ if (this.gl) {
82
+ this.initGL();
83
+ }
84
+ }
85
+ /** Creates shader programs, vertex arrays and static corner buffers. */
86
+ initGL() {
87
+ const gl = this.gl;
88
+ this.nodeProgram = link(gl, NODE_VERTEX, NODE_FRAGMENT);
89
+ this.edgeProgram = link(gl, EDGE_VERTEX, EDGE_FRAGMENT);
90
+ this.arrowProgram = link(gl, ARROW_VERTEX, ARROW_FRAGMENT);
91
+ this.cornerBuffer = gl.createBuffer();
92
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.cornerBuffer);
93
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, 1, -1, 1, 1, -1, 1]), gl.STATIC_DRAW);
94
+ this.nodeVAO = gl.createVertexArray();
95
+ this.nodeBuffer = gl.createBuffer();
96
+ gl.bindVertexArray(this.nodeVAO);
97
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.cornerBuffer);
98
+ gl.enableVertexAttribArray(0);
99
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
100
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.nodeBuffer);
101
+ gl.bufferData(gl.ARRAY_BUFFER, NODE_FLOATS * 4, gl.DYNAMIC_DRAW);
102
+ for (let attribute = 1; attribute <= 5; attribute++) {
103
+ gl.enableVertexAttribArray(attribute);
104
+ gl.vertexAttribPointer(attribute, 4, gl.FLOAT, false, NODE_FLOATS * 4, (attribute - 1) * 16);
105
+ gl.vertexAttribDivisor(attribute, 1);
106
+ }
107
+ this.edgeVAO = gl.createVertexArray();
108
+ this.edgeBuffer = gl.createBuffer();
109
+ gl.bindVertexArray(this.edgeVAO);
110
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.cornerBuffer);
111
+ gl.enableVertexAttribArray(0);
112
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
113
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.edgeBuffer);
114
+ gl.bufferData(gl.ARRAY_BUFFER, EDGE_FLOATS * 4, gl.DYNAMIC_DRAW);
115
+ for (let attribute = 1; attribute <= 4; attribute++) {
116
+ gl.enableVertexAttribArray(attribute);
117
+ gl.vertexAttribPointer(attribute, 4, gl.FLOAT, false, EDGE_FLOATS * 4, (attribute - 1) * 16);
118
+ gl.vertexAttribDivisor(attribute, 1);
119
+ }
120
+ this.edgeCurveVAO = gl.createVertexArray();
121
+ this.edgeCurveBuffer = gl.createBuffer();
122
+ this.curveCornerBuffer = gl.createBuffer();
123
+ const stripCorners = new Float32Array((CURVE_SEGMENTS + 1) * 2 * 2);
124
+ for (let step = 0; step <= CURVE_SEGMENTS; step++) {
125
+ const t = (step / CURVE_SEGMENTS) * 2 - 1;
126
+ stripCorners[step * 4] = t;
127
+ stripCorners[step * 4 + 1] = -1;
128
+ stripCorners[step * 4 + 2] = t;
129
+ stripCorners[step * 4 + 3] = 1;
130
+ }
131
+ gl.bindVertexArray(this.edgeCurveVAO);
132
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.curveCornerBuffer);
133
+ gl.bufferData(gl.ARRAY_BUFFER, stripCorners, gl.STATIC_DRAW);
134
+ gl.enableVertexAttribArray(0);
135
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
136
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.edgeCurveBuffer);
137
+ gl.bufferData(gl.ARRAY_BUFFER, EDGE_FLOATS * 4, gl.DYNAMIC_DRAW);
138
+ for (let attribute = 1; attribute <= 4; attribute++) {
139
+ gl.enableVertexAttribArray(attribute);
140
+ gl.vertexAttribPointer(attribute, 4, gl.FLOAT, false, EDGE_FLOATS * 4, (attribute - 1) * 16);
141
+ gl.vertexAttribDivisor(attribute, 1);
142
+ }
143
+ this.arrowVAO = gl.createVertexArray();
144
+ this.arrowBuffer = gl.createBuffer();
145
+ gl.bindVertexArray(this.arrowVAO);
146
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.cornerBuffer);
147
+ gl.enableVertexAttribArray(0);
148
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
149
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.arrowBuffer);
150
+ gl.bufferData(gl.ARRAY_BUFFER, ARROW_FLOATS * 4, gl.DYNAMIC_DRAW);
151
+ gl.enableVertexAttribArray(1);
152
+ gl.vertexAttribPointer(1, 4, gl.FLOAT, false, ARROW_FLOATS * 4, 0);
153
+ gl.vertexAttribDivisor(1, 1);
154
+ gl.enableVertexAttribArray(2);
155
+ gl.vertexAttribPointer(2, 4, gl.FLOAT, false, ARROW_FLOATS * 4, 4 * 4);
156
+ gl.vertexAttribDivisor(2, 1);
157
+ gl.enableVertexAttribArray(3);
158
+ gl.vertexAttribPointer(3, 1, gl.FLOAT, false, ARROW_FLOATS * 4, 8 * 4);
159
+ gl.vertexAttribDivisor(3, 1);
160
+ gl.bindVertexArray(null);
161
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
162
+ gl.enable(gl.BLEND);
163
+ gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
164
+ }
165
+ /** Registers the camera used for matrices during rendering. */
166
+ setCamera(camera) {
167
+ this.camera = camera;
168
+ }
169
+ /** Attaches the texture atlas used for node image fills. */
170
+ setAtlas(atlas) {
171
+ this.atlas = atlas;
172
+ }
173
+ /** Applies a resolved theme and refreshes the clear color. */
174
+ setTheme(theme) {
175
+ this.theme = theme;
176
+ const packed = packRGBA(theme.background, 0x0b0e14ff);
177
+ this.clearColor = [((packed >>> 24) & 0xff) / 255, ((packed >>> 16) & 0xff) / 255, ((packed >>> 8) & 0xff) / 255, (packed & 0xff) / 255];
178
+ }
179
+ /** Resizes the drawing buffer with a capped device pixel ratio. */
180
+ resize(width, height, pixelRatio) {
181
+ const ratio = Math.max(0.5, Math.min(this.maxPixelRatio, pixelRatio || 1));
182
+ this.canvas.width = Math.max(1, Math.floor(width * ratio));
183
+ this.canvas.height = Math.max(1, Math.floor(height * ratio));
184
+ if (this.camera) {
185
+ this.camera.setViewport(this.canvas.width, this.canvas.height);
186
+ }
187
+ if (this.gl) {
188
+ this.gl.viewport(0, 0, this.canvas.width, this.canvas.height);
189
+ }
190
+ return this;
191
+ }
192
+ /** Grows an instance buffer when the graph requires more instances. */
193
+ ensure(data, floats, required) {
194
+ if (required <= data.length / floats) {
195
+ return data;
196
+ }
197
+ let capacity = data.length / floats;
198
+ while (capacity < required) {
199
+ capacity *= 2;
200
+ }
201
+ return new Float32Array(capacity * floats);
202
+ }
203
+ /** Writes one edge instance into the target bucket buffer. */
204
+ writeEdgeInstance(target, write, model, link, zoom) {
205
+ const source = model.source[link];
206
+ const target2 = model.target[link];
207
+ const ax = model.x[source];
208
+ const ay = model.y[source];
209
+ const bx = model.x[target2];
210
+ const by = model.y[target2];
211
+ const dx = bx - ax;
212
+ const dy = by - ay;
213
+ const chord = Math.hypot(dx, dy);
214
+ if (chord < 0.0001) {
215
+ return write;
216
+ }
217
+ const curvature = model.linkCurvature[link];
218
+ controlPoint(ax, ay, bx, by, curvature, this.controlScratch);
219
+ const selected = (model.linkFlags[link] & LINK_SELECTED) !== 0;
220
+ const packed = selected ? this.theme.selectedEdgeColor : model.linkColor[link];
221
+ const dimmed = (model.linkFlags[link] & LINK_DIM) !== 0 ? 0.12 : 1;
222
+ const opacity = model.linkOpacity[link] * (selected ? this.theme.selectedEdgeOpacity : 1) * dimmed;
223
+ const dashed = model.linkStyle[link] === 1 ? 1 : 0;
224
+ const arcLength = dashed && curvature !== 0 ? bezierLength(ax, ay, this.controlScratch.x, this.controlScratch.y, bx, by) : chord;
225
+ const offset = write * EDGE_FLOATS;
226
+ target[offset] = ax;
227
+ target[offset + 1] = ay;
228
+ target[offset + 2] = bx;
229
+ target[offset + 3] = by;
230
+ unpackRGBA(packed, target, offset + 4);
231
+ target[offset + 7] *= opacity;
232
+ target[offset + 8] = model.linkWidth[link] * (selected ? this.theme.selectedEdgeWidthMultiplier : 1);
233
+ target[offset + 9] = model.dashLength[link];
234
+ target[offset + 10] = model.dashGap[link];
235
+ target[offset + 11] = model.dashOffset[link];
236
+ target[offset + 12] = curvature;
237
+ target[offset + 13] = dashed;
238
+ target[offset + 14] = model.dashWorldScale[link];
239
+ target[offset + 15] = arcLength;
240
+ return write + 1;
241
+ }
242
+ /** Fills straight and curved edge buckets with their instance data. */
243
+ fillEdgeData(model, zoom) {
244
+ let visible = 0;
245
+ let curvedCount = 0;
246
+ for (let link = 0; link < model.linkCount; link++) {
247
+ if (model.linkFlags[link] & LINK_HIDDEN) {
248
+ continue;
249
+ }
250
+ visible++;
251
+ if (model.linkCurvature[link] !== 0) {
252
+ curvedCount++;
253
+ }
254
+ }
255
+ const straightCount = visible - curvedCount;
256
+ let edgeData = this.ensure(this.edgeData, EDGE_FLOATS, straightCount);
257
+ let edgeCurveData = this.ensure(this.edgeCurveData, EDGE_FLOATS, curvedCount);
258
+ let straightWrite = 0;
259
+ let curvedWrite = 0;
260
+ for (let link = 0; link < model.linkCount; link++) {
261
+ if (model.linkFlags[link] & LINK_HIDDEN) {
262
+ continue;
263
+ }
264
+ if (model.linkCurvature[link] !== 0) {
265
+ curvedWrite = this.writeEdgeInstance(edgeCurveData, curvedWrite, model, link, zoom);
266
+ }
267
+ else {
268
+ straightWrite = this.writeEdgeInstance(edgeData, straightWrite, model, link, zoom);
269
+ }
270
+ }
271
+ this.edgeData = edgeData;
272
+ this.edgeCurveData = edgeCurveData;
273
+ this.edgeDrawCount = straightWrite;
274
+ this.edgeCurveDrawCount = curvedWrite;
275
+ }
276
+ /** Fills the instanced arrow buffer using curve tangent directions. */
277
+ fillArrowData(model, zoom) {
278
+ const globalEnabled = this.theme.edgeArrowEnabled;
279
+ let capacity = 0;
280
+ for (let link = 0; link < model.linkCount; link++) {
281
+ if (model.linkFlags[link] & LINK_HIDDEN) {
282
+ continue;
283
+ }
284
+ const mode = model.arrowMode[link];
285
+ if (mode === 1 || (mode === 0 && globalEnabled)) {
286
+ capacity++;
287
+ }
288
+ }
289
+ let arrowData = this.ensure(this.arrowData, ARROW_FLOATS, capacity);
290
+ let write = 0;
291
+ for (let link = 0; link < model.linkCount; link++) {
292
+ if (model.linkFlags[link] & LINK_HIDDEN) {
293
+ continue;
294
+ }
295
+ const mode = model.arrowMode[link];
296
+ if (!(mode === 1 || (mode === 0 && globalEnabled))) {
297
+ continue;
298
+ }
299
+ const source = model.source[link];
300
+ const target = model.target[link];
301
+ const ax = model.x[source];
302
+ const ay = model.y[source];
303
+ const bx = model.x[target];
304
+ const by = model.y[target];
305
+ const curvature = model.linkCurvature[link];
306
+ controlPoint(ax, ay, bx, by, curvature, this.controlScratch);
307
+ let dx = bx - this.controlScratch.x;
308
+ let dy = by - this.controlScratch.y;
309
+ const length = Math.hypot(dx, dy);
310
+ const arrowSize = model.arrowSize[link] / zoom;
311
+ if (length < 0.0001 || arrowSize <= 0) {
312
+ continue;
313
+ }
314
+ dx /= length;
315
+ dy /= length;
316
+ const radius = model.visualRadius[target];
317
+ const tipOffset = radius + arrowSize * 0.15;
318
+ const tipX = bx - dx * tipOffset;
319
+ const tipY = by - dy * tipOffset;
320
+ const baseX = tipX - dx * arrowSize;
321
+ const baseY = tipY - dy * arrowSize;
322
+ const selected = (model.linkFlags[link] & LINK_SELECTED) !== 0;
323
+ const packed = selected ? this.theme.selectedEdgeColor : model.linkColor[link];
324
+ const opacity = selected ? this.theme.selectedEdgeOpacity : 1;
325
+ const offset = write * ARROW_FLOATS;
326
+ arrowData[offset] = baseX;
327
+ arrowData[offset + 1] = baseY;
328
+ arrowData[offset + 2] = tipX;
329
+ arrowData[offset + 3] = tipY;
330
+ unpackRGBA(packed, arrowData, offset + 4);
331
+ arrowData[offset + 7] *= opacity;
332
+ arrowData[offset + 8] = Math.max(0.5, (model.arrowWidth[link] / 2 / zoom));
333
+ write++;
334
+ }
335
+ this.arrowData = arrowData;
336
+ this.arrowDrawCount = write;
337
+ }
338
+ /** Fills the instanced node buffer with colors, states and image slots. */
339
+ fillNodeData(model, zoom) {
340
+ let nodeData = this.ensure(this.nodeData, NODE_FLOATS, model.nodeCount);
341
+ const theme = this.theme;
342
+ const maxRing = Math.max(theme.hoverRingWidth, theme.selectedRingWidth, theme.fixedRingWidth);
343
+ const ringFade = zoom < this.fadeZoom ? Math.max(0, zoom / Math.max(0.0001, this.fadeZoom)) : 1;
344
+ const ringExtent = maxRing / Math.max(zoom, 0.0001) + 2 / Math.max(zoom, 0.0001);
345
+ let write = 0;
346
+ for (let index = 0; index < model.nodeCount; index++) {
347
+ if (model.flags[index] & NODE_HIDDEN) {
348
+ continue;
349
+ }
350
+ const state = model.flags[index] & NODE_DISABLED
351
+ ? 5
352
+ : model.flags[index] & NODE_DRAGGED
353
+ ? 3
354
+ : model.flags[index] & NODE_SELECTED
355
+ ? 2
356
+ : model.flags[index] & NODE_FIXED
357
+ ? 4
358
+ : model.state[index];
359
+ const radius = model.visualRadius[index];
360
+ const extent = radius + ringExtent;
361
+ const offset = write * NODE_FLOATS;
362
+ nodeData[offset] = model.x[index];
363
+ nodeData[offset + 1] = model.y[index];
364
+ nodeData[offset + 2] = radius;
365
+ nodeData[offset + 3] = extent;
366
+ unpackRGBA(model.color[index], nodeData, offset + 4);
367
+ nodeData[offset + 7] *= model.nodeOpacity[index] * ((model.flags[index] & NODE_DIM) !== 0 ? 0.15 : 1);
368
+ unpackRGBA(model.borderColor[index], nodeData, offset + 8);
369
+ nodeData[offset + 11] *= theme.nodeBorderOpacity;
370
+ nodeData[offset + 12] = radius;
371
+ nodeData[offset + 13] = model.borderWidth[index];
372
+ nodeData[offset + 14] = state;
373
+ nodeData[offset + 15] = extent;
374
+ const url = model.nodeImage[index];
375
+ let slot = -1;
376
+ let ready = 0;
377
+ if (url && this.atlas) {
378
+ slot = this.atlas.request(url, model.nodeImageMode[index] === 1 ? 'contain' : 'cover');
379
+ ready = this.atlas.isReady(url) ? 1 : 0;
380
+ }
381
+ nodeData[offset + 16] = slot < 0 ? 0 : slot;
382
+ nodeData[offset + 17] = ready;
383
+ nodeData[offset + 18] = 0;
384
+ nodeData[offset + 19] = 0;
385
+ write++;
386
+ }
387
+ this.nodeData = nodeData;
388
+ this.nodeDrawCount = write;
389
+ }
390
+ /** Renders one complete frame of edges, arrows and nodes. */
391
+ render(model) {
392
+ const gl = this.gl;
393
+ const camera = this.camera;
394
+ if (!gl || !camera || !this.edgeProgram || !this.nodeProgram || !this.arrowProgram) {
395
+ return this;
396
+ }
397
+ const started = performance.now();
398
+ const zoom = camera.zoom;
399
+ if (this.atlas) {
400
+ this.atlas.update();
401
+ }
402
+ this.fillEdgeData(model, zoom);
403
+ this.fillArrowData(model, zoom);
404
+ this.fillNodeData(model, zoom);
405
+ gl.clearColor(this.clearColor[0], this.clearColor[1], this.clearColor[2], this.clearColor[3]);
406
+ gl.clear(gl.COLOR_BUFFER_BIT);
407
+ gl.useProgram(this.edgeProgram);
408
+ gl.uniformMatrix3fv(gl.getUniformLocation(this.edgeProgram, 'uCamera'), false, camera.matrix);
409
+ gl.uniform1f(gl.getUniformLocation(this.edgeProgram, 'uZoom'), zoom);
410
+ if (this.edgeDrawCount > 0) {
411
+ gl.bindVertexArray(this.edgeVAO);
412
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.edgeBuffer);
413
+ gl.bufferData(gl.ARRAY_BUFFER, this.edgeData.subarray(0, this.edgeDrawCount * EDGE_FLOATS), gl.DYNAMIC_DRAW);
414
+ gl.drawArraysInstanced(gl.TRIANGLE_FAN, 0, 4, this.edgeDrawCount);
415
+ }
416
+ if (this.edgeCurveDrawCount > 0) {
417
+ gl.bindVertexArray(this.edgeCurveVAO);
418
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.edgeCurveBuffer);
419
+ gl.bufferData(gl.ARRAY_BUFFER, this.edgeCurveData.subarray(0, this.edgeCurveDrawCount * EDGE_FLOATS), gl.DYNAMIC_DRAW);
420
+ gl.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, (CURVE_SEGMENTS + 1) * 2, this.edgeCurveDrawCount);
421
+ }
422
+ if (this.arrowDrawCount > 0) {
423
+ gl.useProgram(this.arrowProgram);
424
+ gl.uniformMatrix3fv(gl.getUniformLocation(this.arrowProgram, 'uCamera'), false, camera.matrix);
425
+ gl.bindVertexArray(this.arrowVAO);
426
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.arrowBuffer);
427
+ gl.bufferData(gl.ARRAY_BUFFER, this.arrowData.subarray(0, this.arrowDrawCount * ARROW_FLOATS), gl.DYNAMIC_DRAW);
428
+ gl.drawArraysInstanced(gl.TRIANGLE_FAN, 0, 4, this.arrowDrawCount);
429
+ }
430
+ gl.useProgram(this.nodeProgram);
431
+ const theme = this.theme;
432
+ const ringFade = zoom < this.fadeZoom ? Math.max(0, zoom / Math.max(0.0001, this.fadeZoom)) : 1;
433
+ gl.uniformMatrix3fv(gl.getUniformLocation(this.nodeProgram, 'uCamera'), false, camera.matrix);
434
+ gl.uniform1f(gl.getUniformLocation(this.nodeProgram, 'uZoom'), zoom);
435
+ gl.uniform4fv(gl.getUniformLocation(this.nodeProgram, 'uHoverRing'), unpackedColor(theme.hoverRingColor));
436
+ gl.uniform4fv(gl.getUniformLocation(this.nodeProgram, 'uSelectedRing'), unpackedColor(theme.selectedRingColor));
437
+ gl.uniform4fv(gl.getUniformLocation(this.nodeProgram, 'uFixedRing'), unpackedColor(theme.fixedRingColor));
438
+ gl.uniform1f(gl.getUniformLocation(this.nodeProgram, 'uHoverRingWidth'), theme.hoverRingWidth * ringFade);
439
+ gl.uniform1f(gl.getUniformLocation(this.nodeProgram, 'uSelectedRingWidth'), theme.selectedRingWidth * ringFade);
440
+ gl.uniform1f(gl.getUniformLocation(this.nodeProgram, 'uFixedRingWidth'), theme.fixedRingWidth * ringFade);
441
+ gl.uniform1f(gl.getUniformLocation(this.nodeProgram, 'uDisabledOpacity'), theme.disabledOpacity);
442
+ if (this.atlas) {
443
+ gl.activeTexture(gl.TEXTURE0);
444
+ gl.bindTexture(gl.TEXTURE_2D, this.atlas.getTexture());
445
+ gl.uniform1i(gl.getUniformLocation(this.nodeProgram, 'uAtlas'), 0);
446
+ }
447
+ gl.bindVertexArray(this.nodeVAO);
448
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.nodeBuffer);
449
+ gl.bufferData(gl.ARRAY_BUFFER, this.nodeData.subarray(0, this.nodeDrawCount * NODE_FLOATS), gl.DYNAMIC_DRAW);
450
+ gl.drawArraysInstanced(gl.TRIANGLE_FAN, 0, 4, this.nodeDrawCount);
451
+ gl.bindVertexArray(null);
452
+ if (this.atlas) {
453
+ this.atlas.sweep();
454
+ }
455
+ this.lastRenderMs = performance.now() - started;
456
+ return this;
457
+ }
458
+ /** Releases every GL resource owned by the renderer. */
459
+ destroy() {
460
+ const gl = this.gl;
461
+ if (!gl) {
462
+ return;
463
+ }
464
+ if (this.nodeProgram) {
465
+ gl.deleteProgram(this.nodeProgram);
466
+ }
467
+ if (this.edgeProgram) {
468
+ gl.deleteProgram(this.edgeProgram);
469
+ }
470
+ if (this.arrowProgram) {
471
+ gl.deleteProgram(this.arrowProgram);
472
+ }
473
+ if (this.nodeBuffer) {
474
+ gl.deleteBuffer(this.nodeBuffer);
475
+ }
476
+ if (this.edgeBuffer) {
477
+ gl.deleteBuffer(this.edgeBuffer);
478
+ }
479
+ if (this.arrowBuffer) {
480
+ gl.deleteBuffer(this.arrowBuffer);
481
+ }
482
+ if (this.cornerBuffer) {
483
+ gl.deleteBuffer(this.cornerBuffer);
484
+ }
485
+ if (this.nodeVAO) {
486
+ gl.deleteVertexArray(this.nodeVAO);
487
+ }
488
+ if (this.edgeVAO) {
489
+ gl.deleteVertexArray(this.edgeVAO);
490
+ }
491
+ if (this.edgeCurveVAO) {
492
+ gl.deleteVertexArray(this.edgeCurveVAO);
493
+ }
494
+ if (this.edgeCurveBuffer) {
495
+ gl.deleteBuffer(this.edgeCurveBuffer);
496
+ }
497
+ if (this.curveCornerBuffer) {
498
+ gl.deleteBuffer(this.curveCornerBuffer);
499
+ }
500
+ if (this.arrowVAO) {
501
+ gl.deleteVertexArray(this.arrowVAO);
502
+ }
503
+ this.gl = null;
504
+ }
505
+ }
506
+ /** Converts a packed color into a 4 component float tuple. */
507
+ function unpackedColor(packed) {
508
+ const out = new Float32Array(4);
509
+ unpackRGBA(packed, out, 0);
510
+ return out;
511
+ }
512
+ //# sourceMappingURL=Renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Renderer.js","sourceRoot":"","sources":["../../src/render/Renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Manages a GPU texture atlas that packs node images into a fixed grid.
3
+ * Images load asynchronously, are drawn into an offscreen canvas using cover
4
+ * or contain framing, and are uploaded in a single texture update per frame.
5
+ */
6
+ export interface AtlasEntry {
7
+ slot: number;
8
+ ready: boolean;
9
+ failed: boolean;
10
+ used: boolean;
11
+ mode: 'cover' | 'contain';
12
+ image: HTMLImageElement | null;
13
+ }
14
+ export interface AtlasEvent {
15
+ type: 'imageload' | 'imageerror';
16
+ url: string;
17
+ slot: number;
18
+ }
19
+ export declare class TextureAtlas {
20
+ readonly size: number;
21
+ readonly grid: number;
22
+ readonly cellSize: number;
23
+ readonly maxSlots: number;
24
+ revision: number;
25
+ loadedCount: number;
26
+ private gl;
27
+ private texture;
28
+ private canvas;
29
+ private context;
30
+ private entries;
31
+ private pending;
32
+ private nextSlot;
33
+ onEvent: ((event: AtlasEvent) => void) | null;
34
+ constructor(gl: WebGL2RenderingContext, size?: number, grid?: number);
35
+ /** Returns the GPU texture handle for binding during node rendering. */
36
+ getTexture(): WebGLTexture;
37
+ /** Returns the slot for a URL, requesting the image if it is new. */
38
+ request(url: string, mode?: 'cover' | 'contain'): number;
39
+ /** Paints one entry into its atlas cell respecting the framing mode. */
40
+ private drawEntry;
41
+ /** Uploads the atlas canvas to the GPU when new images arrived. */
42
+ update(): boolean;
43
+ /** Marks all entries unused and drops the ones ignored for a full frame. */
44
+ sweep(): void;
45
+ /** Resolves once every pending image finished loading or failed. */
46
+ loadAll(): Promise<void>;
47
+ /** Reports whether a URL finished loading successfully. */
48
+ isReady(url: string): boolean;
49
+ private uploadedRevision;
50
+ }
51
+ //# sourceMappingURL=TextureAtlas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextureAtlas.d.ts","sourceRoot":"","sources":["../../src/render/TextureAtlas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,WAAW,GAAG,YAAY,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,SAAK;IACb,WAAW,SAAK;IAEhB,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAA6C;IAC3D,OAAO,CAAC,OAAO,CAAsE;IACrF,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;gBAEzC,EAAE,EAAE,sBAAsB,EAAE,IAAI,SAAO,EAAE,IAAI,SAAI;IAyB7D,wEAAwE;IACxE,UAAU,IAAI,YAAY;IAI1B,qEAAqE;IACrE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,GAAG,SAAmB,GAAG,MAAM;IA8CjE,wEAAwE;IACxE,OAAO,CAAC,SAAS;IAmBjB,mEAAmE;IACnE,MAAM,IAAI,OAAO;IAcjB,4EAA4E;IAC5E,KAAK,IAAI,IAAI;IAUb,oEAAoE;IACpE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBxB,2DAA2D;IAC3D,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI7B,OAAO,CAAC,gBAAgB,CAAM;CAC/B"}