Skip to content

Commit 216e98b

Browse files
committed
Tidy graphviz diagrams
Match the shared diagram style: spacing between node title and subtitle, edge labels as rounded chips clear of their lines, and spline routing with separation. Sources and rendered PNGs regenerated.
1 parent ab6ec47 commit 216e98b

4 files changed

Lines changed: 44 additions & 44 deletions

File tree

docs/diagrams/simulation-tick.dot

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ digraph SimulationTick {
4646
];
4747

4848
// ---- Entry ----
49-
T0 [label=<<B>update()</B><BR/><FONT POINT-SIZE="15">step += 1, once per frame</FONT>>, fillcolor="#edf7ff:#ffffff", color="#2f80ed"];
49+
T0 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>update()</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">step += 1, once per frame</FONT></TD></TR></TABLE>>, fillcolor="#edf7ff:#ffffff", color="#2f80ed"];
5050

5151
// ---- Read / prepare ----
5252
subgraph cluster_read {
@@ -60,8 +60,8 @@ digraph SimulationTick {
6060
labelloc=t, labeljust=l,
6161
color="#f2cf78", fillcolor="#fffaf0", style="rounded,filled", penwidth=1.8, margin=22
6262
];
63-
R1 [label=<<B>store_previous_positions</B><BR/><FONT POINT-SIZE="15">snapshot for interpolation</FONT>>, fillcolor="#fff4d1:#fffaf0", color="#d39a00"];
64-
R2 [label=<<B>rebuild grid + neighbour cache</B><BR/><FONT POINT-SIZE="15">one serial pass: cell&#8594;entities + hot-field snapshot</FONT>>, fillcolor="#fff4d1:#fffaf0", color="#d39a00"];
63+
R1 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>store_previous_positions</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">snapshot for interpolation</FONT></TD></TR></TABLE>>, fillcolor="#fff4d1:#fffaf0", color="#d39a00"];
64+
R2 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>rebuild grid + neighbour cache</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">one serial pass: cell&#8594;entities + hot-field snapshot</FONT></TD></TR></TABLE>>, fillcolor="#fff4d1:#fffaf0", color="#d39a00"];
6565
R1 -> R2;
6666
}
6767

@@ -77,10 +77,10 @@ digraph SimulationTick {
7777
labelloc=t, labeljust=l,
7878
color="#b8e5c8", fillcolor="#f4fbf6", style="rounded,filled", penwidth=1.8, margin=22
7979
];
80-
P1 [label=<<B>process_entities_parallel</B><BR/><FONT POINT-SIZE="15">par_bridge over the ECS query</FONT>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
81-
P2 [label=<<B>EntityContext</B><BR/><FONT POINT-SIZE="15">per-entity working state</FONT>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
82-
P3 [label=<<B>System pipeline</B><BR/><FONT POINT-SIZE="15">movement → interaction → energy → reproduction</FONT>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
83-
P4 [label=<<B>EntityUpdate</B><BR/><FONT POINT-SIZE="15">pos · vel · energy · size · reproduce? · eaten?</FONT>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
80+
P1 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>process_entities_parallel</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">par_bridge over the ECS query</FONT></TD></TR></TABLE>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
81+
P2 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>EntityContext</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">per-entity working state</FONT></TD></TR></TABLE>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
82+
P3 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>System pipeline</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">movement → interaction → energy → reproduction</FONT></TD></TR></TABLE>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
83+
P4 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>EntityUpdate</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">pos · vel · energy · size · reproduce? · eaten?</FONT></TD></TR></TABLE>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
8484
P1 -> P2 -> P3 -> P4;
8585
}
8686

@@ -98,24 +98,24 @@ digraph SimulationTick {
9898
];
9999

100100
DQ1 [label=<<B>energy &#8804; 0?</B>>, shape=diamond, style=filled, width=2.4, height=1.05, fillcolor="#ffffff", color="#1f2f46", penwidth=2.4];
101-
ALIVE [label=<<B>update in place</B><BR/><FONT POINT-SIZE="15">query_mut: pos · vel · energy · size</FONT>>, fillcolor="#e6fffb:#ffffff", color="#0f766e"];
101+
ALIVE [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>update in place</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">query_mut: pos · vel · energy · size</FONT></TD></TR></TABLE>>, fillcolor="#e6fffb:#ffffff", color="#0f766e"];
102102
DEAD [label=<<B>despawn (starved)</B>>, fillcolor="#e0e7ef:#ffffff", color="#5b6b80"];
103-
EATEN [label=<<B>despawn eaten prey</B><BR/><FONT POINT-SIZE="15">collected from EntityUpdate.eaten</FONT>>, fillcolor="#e0e7ef:#ffffff", color="#5b6b80"];
104-
OFF [label=<<B>spawn offspring</B><BR/><FONT POINT-SIZE="15">if reproduce, not eaten, under cap</FONT>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
103+
EATEN [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>despawn eaten prey</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">collected from EntityUpdate.eaten</FONT></TD></TR></TABLE>>, fillcolor="#e0e7ef:#ffffff", color="#5b6b80"];
104+
OFF [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>spawn offspring</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">if reproduce, not eaten, under cap</FONT></TD></TR></TABLE>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
105105
}
106106

107107
// ---- Outcome ----
108-
WORLD [label=<<B>World updated</B><BR/><FONT POINT-SIZE="15">renderer interpolates prev&#8594;cur for the frame</FONT>>, fillcolor="#d8f5de:#effcf2", color="#15803d", penwidth=3.0];
108+
WORLD [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>World updated</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">renderer interpolates prev&#8594;cur for the frame</FONT></TD></TR></TABLE>>, fillcolor="#d8f5de:#effcf2", color="#15803d", penwidth=3.0];
109109

110110
// ---- Edges ----
111-
T0 -> R1 [lhead=cluster_read, label="tick"];
112-
R2 -> P1 [ltail=cluster_read, lhead=cluster_compute, label="for each living entity"];
113-
P4 -> DQ1 [ltail=cluster_compute, lhead=cluster_apply, label="apply each update"];
111+
T0 -> R1 [lhead=cluster_read, label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#d7dee8" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#3d4a5c">tick</FONT></TD></TR></TABLE>>];
112+
R2 -> P1 [ltail=cluster_read, lhead=cluster_compute, label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#d7dee8" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#3d4a5c">for each living entity</FONT></TD></TR></TABLE>>];
113+
P4 -> DQ1 [ltail=cluster_compute, lhead=cluster_apply, label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#d7dee8" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#3d4a5c">apply each update</FONT></TD></TR></TABLE>>];
114114

115-
DQ1 -> DEAD [label="yes"];
116-
DQ1 -> ALIVE [label="no: survivor"];
117-
DQ1 -> OFF [label="reproduced", color="#6b7280", fontcolor="#6b7280", style=dashed, constraint=false];
118-
P4 -> EATEN [label="prey eaten this tick", color="#6b7280", fontcolor="#6b7280", style=dashed];
115+
DQ1 -> DEAD [label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#d7dee8" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#3d4a5c">yes</FONT></TD></TR></TABLE>>];
116+
DQ1 -> ALIVE [label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#d7dee8" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#3d4a5c">no: survivor</FONT></TD></TR></TABLE>>];
117+
DQ1 -> OFF [label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#dfe3e9" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#6b7280">reproduced</FONT></TD></TR></TABLE>>, color="#6b7280", fontcolor="#6b7280", style=dashed, constraint=false];
118+
P4 -> EATEN [label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#dfe3e9" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#6b7280">prey eaten this tick</FONT></TD></TR></TABLE>>, color="#6b7280", fontcolor="#6b7280", style=dashed];
119119

120120
ALIVE -> WORLD [ltail=cluster_apply];
121121
DEAD -> WORLD [color="#6b7280", fontcolor="#6b7280", style=dashed];

docs/diagrams/simulation-tick.png

33.9 KB
Loading

docs/diagrams/system-overview.dot

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ digraph SystemOverview {
5757
labelloc=t, labeljust=l,
5858
color="#99d5cf", fillcolor="#f0fdfa", style="rounded,filled", penwidth=1.8, margin=22
5959
];
60-
H1 [label=<<B>Cloudflare Pages</B><BR/><FONT POINT-SIZE="15">static web/ + _headers (COOP/COEP)</FONT>>, fillcolor="#e6fffb:#ffffff", color="#0f766e"];
60+
H1 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>Cloudflare Pages</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">static web/ + _headers (COOP/COEP)</FONT></TD></TR></TABLE>>, fillcolor="#e6fffb:#ffffff", color="#0f766e"];
6161
}
6262

6363
// ---- Browser ----
@@ -72,8 +72,8 @@ digraph SystemOverview {
7272
labelloc=t, labeljust=l,
7373
color="#b9d8ff", fillcolor="#f5faff", style="rounded,filled", penwidth=1.8, margin=22
7474
];
75-
B1 [label=<<B>app.js render loop</B><BR/><FONT POINT-SIZE="15">step sim at 60Hz, render every frame</FONT>>, fillcolor="#edf7ff:#ffffff", color="#2f80ed"];
76-
B2 [label=<<B>UI controls</B><BR/><FONT POINT-SIZE="15">sliders → update_param(SimParam)</FONT>>, fillcolor="#edf7ff:#ffffff", color="#2f80ed"];
75+
B1 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>app.js render loop</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">step sim at 60Hz, render every frame</FONT></TD></TR></TABLE>>, fillcolor="#edf7ff:#ffffff", color="#2f80ed"];
76+
B2 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>UI controls</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">sliders → update_param(SimParam)</FONT></TD></TR></TABLE>>, fillcolor="#edf7ff:#ffffff", color="#2f80ed"];
7777
B1 -> B2 [style=invis];
7878
}
7979

@@ -89,15 +89,15 @@ digraph SystemOverview {
8989
labelloc=t, labeljust=l,
9090
color="#b8e5c8", fillcolor="#f4fbf6", style="rounded,filled", penwidth=1.8, margin=22
9191
];
92-
C1 [label=<<B>WebSimulation</B><BR/><FONT POINT-SIZE="15">#[wasm_bindgen] facade</FONT>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
93-
C2 [label=<<B>Simulation</B><BR/><FONT POINT-SIZE="15">per-tick orchestrator</FONT>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
94-
C3 [label=<<B>hecs World</B><BR/><FONT POINT-SIZE="15">entities + plain-data components</FONT>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
95-
C4 [label=<<B>Systems</B><BR/><FONT POINT-SIZE="15">movement · interaction · energy · reproduction</FONT>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
96-
C5 [label=<<B>SpatialGrid + cache</B><BR/><FONT POINT-SIZE="15">HashMap cells · per-tick neighbour snapshot</FONT>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
92+
C1 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>WebSimulation</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">#[wasm_bindgen] facade</FONT></TD></TR></TABLE>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
93+
C2 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>Simulation</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">per-tick orchestrator</FONT></TD></TR></TABLE>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
94+
C3 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>hecs World</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">entities + plain-data components</FONT></TD></TR></TABLE>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
95+
C4 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>Systems</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">movement · interaction · energy · reproduction</FONT></TD></TR></TABLE>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
96+
C5 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>SpatialGrid + cache</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">HashMap cells · per-tick neighbour snapshot</FONT></TD></TR></TABLE>>, fillcolor="#eaf8ef:#ffffff", color="#22865a"];
9797
}
9898

9999
// ---- Threads ----
100-
TP [label=<<B>rayon thread pool</B><BR/><FONT POINT-SIZE="15">wasm-bindgen-rayon over SharedArrayBuffer</FONT>>, fillcolor="#fff4d1:#fffaf0", color="#d39a00"];
100+
TP [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>rayon thread pool</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">wasm-bindgen-rayon over SharedArrayBuffer</FONT></TD></TR></TABLE>>, fillcolor="#fff4d1:#fffaf0", color="#d39a00"];
101101

102102
// ---- GPU rendering ----
103103
subgraph cluster_gpu {
@@ -111,29 +111,29 @@ digraph SystemOverview {
111111
labelloc=t, labeljust=l,
112112
color="#d6c6ee", fillcolor="#fbf8ff", style="rounded,filled", penwidth=1.8, margin=22
113113
];
114-
G1 [label=<<B>WebGpuRenderer</B><BR/><FONT POINT-SIZE="15">instanced draw → HDR scene target (additive)</FONT>>, fillcolor="#f5f3ff:#ffffff", color="#7c3aed"];
115-
G2 [label=<<B>shader.wgsl</B><BR/><FONT POINT-SIZE="15">interpolate prev→cur · camera · additive core+halo</FONT>>, fillcolor="#f5f3ff:#ffffff", color="#7c3aed"];
116-
G3 [label=<<B>postprocess.rs · post.wgsl</B><BR/><FONT POINT-SIZE="15">bright-pass → Gaussian blur → tonemap composite</FONT>>, fillcolor="#f5f3ff:#ffffff", color="#7c3aed"];
117-
G1 -> G2 [label="pipeline"];
118-
G2 -> G3 [label="HDR scene"];
114+
G1 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>WebGpuRenderer</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">instanced draw → HDR scene target (additive)</FONT></TD></TR></TABLE>>, fillcolor="#f5f3ff:#ffffff", color="#7c3aed"];
115+
G2 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>shader.wgsl</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">interpolate prev→cur · camera · additive core+halo</FONT></TD></TR></TABLE>>, fillcolor="#f5f3ff:#ffffff", color="#7c3aed"];
116+
G3 [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>postprocess.rs · post.wgsl</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">bright-pass → Gaussian blur → tonemap composite</FONT></TD></TR></TABLE>>, fillcolor="#f5f3ff:#ffffff", color="#7c3aed"];
117+
G1 -> G2 [label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#d7dee8" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#3d4a5c">pipeline</FONT></TD></TR></TABLE>>];
118+
G2 -> G3 [label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#d7dee8" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#3d4a5c">HDR scene</FONT></TD></TR></TABLE>>];
119119
}
120120

121121
// ---- Output ----
122-
CANVAS [label=<<B>&lt;canvas&gt;</B><BR/><FONT POINT-SIZE="15">on-screen frame</FONT>>, fillcolor="#d8f5de:#effcf2", color="#15803d", penwidth=3.0];
122+
CANVAS [label=<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"><TR><TD><B>&lt;canvas&gt;</B></TD></TR><TR><TD CELLPADDING="4"><FONT POINT-SIZE="15">on-screen frame</FONT></TD></TR></TABLE>>, fillcolor="#d8f5de:#effcf2", color="#15803d", penwidth=3.0];
123123

124124
// ---- Edges ----
125-
H1 -> B1 [lhead=cluster_browser, label="serves SPA + WASM"];
125+
H1 -> B1 [lhead=cluster_browser, label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#d7dee8" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#3d4a5c">serves SPA + WASM</FONT></TD></TR></TABLE>>];
126126

127-
B1 -> C1 [lhead=cluster_core, label="update() each tick"];
128-
B2 -> C1 [label="update_param(SimParam)", color="#6b7280", fontcolor="#6b7280", style=dashed];
127+
B1 -> C1 [lhead=cluster_core, label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#d7dee8" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#3d4a5c">update() each tick</FONT></TD></TR></TABLE>>];
128+
B2 -> C1 [label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#dfe3e9" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#6b7280">update_param(SimParam)</FONT></TD></TR></TABLE>>, color="#6b7280", fontcolor="#6b7280", style=dashed];
129129

130-
C1 -> C2 [label="delegates"];
131-
C2 -> C4 [label="compute (read-only)"];
132-
C2 -> C5 [label="neighbour query"];
133-
C2 -> C3 [label="apply: in-place · spawn · despawn"];
134-
C4 -> TP [label="par_bridge", color="#6b7280", fontcolor="#6b7280", style=dashed, constraint=false];
130+
C1 -> C2 [label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#d7dee8" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#3d4a5c">delegates</FONT></TD></TR></TABLE>>];
131+
C2 -> C4 [label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#d7dee8" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#3d4a5c">compute (read-only)</FONT></TD></TR></TABLE>>];
132+
C2 -> C5 [label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#d7dee8" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#3d4a5c">neighbour query</FONT></TD></TR></TABLE>>];
133+
C2 -> C3 [label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#d7dee8" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#3d4a5c">apply: in-place · spawn · despawn</FONT></TD></TR></TABLE>>];
134+
C4 -> TP [label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#dfe3e9" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#6b7280">par_bridge</FONT></TD></TR></TABLE>>, color="#6b7280", fontcolor="#6b7280", style=dashed, constraint=false];
135135

136-
B1 -> G1 [lhead=cluster_gpu, label="render(ptr, count, camera)"];
137-
C1 -> G1 [label="update_entity_buffer() → *const f32", color="#6b7280", fontcolor="#6b7280", style=dashed];
138-
G3 -> CANVAS [ltail=cluster_gpu, label="composite"];
136+
B1 -> G1 [lhead=cluster_gpu, label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#d7dee8" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#3d4a5c">render(ptr, count, camera)</FONT></TD></TR></TABLE>>];
137+
C1 -> G1 [label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#dfe3e9" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#6b7280">update_entity_buffer() → *const f32</FONT></TD></TR></TABLE>>, color="#6b7280", fontcolor="#6b7280", style=dashed];
138+
G3 -> CANVAS [ltail=cluster_gpu, label=<<TABLE BORDER="1" CELLBORDER="0" STYLE="ROUNDED" COLOR="#d7dee8" BGCOLOR="#ffffff" CELLSPACING="0" CELLPADDING="4"><TR><TD><FONT POINT-SIZE="13" COLOR="#3d4a5c">composite</FONT></TD></TR></TABLE>>];
139139
}

docs/diagrams/system-overview.png

122 KB
Loading

0 commit comments

Comments
 (0)