Clickable previews: exact app deep-links everywhere

Every rendered still links to the app frame that produced it (song + seed + frame + venue/viz pins + probe warm-up, new window), via shared src/ui/preview.js. Supporting work, each measured: app honors ?frame/?venueSel/?viz/?warm= with pre-build pins (Show.applyPins) and primes deep-link loads; shared pinViz/pinVenueShell paths for gallery, filmstrip and app; probes prime and carry their warm-up; bank probes analyse the bank PCM and file decode is fixed-rate with bit-exact WAV parsing so app and probes see identical samples; materials built mid-update compile synchronously (needsCompile). Round trip verified bit-identical gallery-versus-app.
This commit is contained in:
Dejvino
2026-09-20 18:42:53 +02:00
parent cc8888077f
commit 4d05250294
18 changed files with 377 additions and 96 deletions
+13
View File
@@ -473,6 +473,19 @@ export class ModelLayer extends Layer {
venueArrangement: this.venueArrangement ?? null,
THREE,
});
// Materials built mid-update (first update, satellite/passer rebuilds
// on discrete-count cuts, venue re-hangs) draw wrong until their
// programs link — up to ten frames on the heaviest scene, carried by
// feedback long after. Compiling synchronously here converts the
// rebuild frame from garbage to correct. Modules set
// instance.needsCompile = true wherever they (re)build geometry in
// update(); build()-time geometry is covered by prewarm instead.
if (this.instance && this.instance.needsCompile) {
this.instance.needsCompile = false;
try {
renderer.compileScene(this.scene, cam);
} catch { /* non-fatal: next warm-up frame converges anyway */ }
}
renderer.renderScene(this.scene, cam, target, true);
}