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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user