Bug: Shader Assets sind fälschlicherweise projektübergreifend #75

Closed
opened 2026-09-13 13:06:01 +02:00 by admin · 1 comment

Ein shader asset aus einem anderen projekt kann bei einem sprite im aktuellen projekt zugewiesen und auch im shader tab ausgewählt und bearbeitet werden

Ein shader asset aus einem anderen projekt kann bei einem sprite im aktuellen projekt zugewiesen und auch im shader tab ausgewählt und bearbeitet werden
admin added the high-priority label 2026-09-13 13:07:18 +02:00
admin added this to the Development project 2026-09-13 13:28:39 +02:00
admin moved this to Next in Development on 2026-09-13 13:28:41 +02:00
Owner

Kein Bug — die Shader-Assets sind vier getrennte Kopien, die gleich aussehen

Gemessen, nicht hergeleitet:

1. Im Code gibt es keinen projektübergreifenden Weg. Jede Stelle, die Shader-Assets anbietet oder
auflöst, liest ausschließlich state.project:

Stelle
Sprite-Dropdown Shader assetRefChoices(project, ['shader'])
Shader-Tab-Picker AssetTabEditor.candidates() → state.project.assets
Zeilen unter dem Dropdown shaderParamRows(project, id) → findAssetOf(project, ...)
Renderer ShaderLibrary.source(project) → findAssetOf(project, id, 'shader'), sonst kein Filter

Es gibt keinen localStorage, keine Asset-Zwischenablage und kein Modul, das mehr als ein Projekt
im Speicher hält; loadProject ersetzt Projekt, Kommandostapel und Auswahl vollständig.

2. Im Browser nachgestellt. Projektwechsel in laufender Sitzung (E2E fixture → frisches leeres
Projekt, über das Project-Menü, ohne Reload): danach assets: [], Shader-Tab leer, Tab-Picker bietet
"Adjust colors" nicht an, und das Shader-Dropdown eines neu angelegten Sprites ebenso wenig.

3. Die eigentliche Ursache. Die Seeder legen in vier Projekten ein eigenes Shader-Asset mit
derselben Id adjust-colors und demselben Namen "Adjust colors" an:

Projekt Shader-Asset
E2E fixture adjust-colors = Adjust colors
Jump and Run adjust-colors = Adjust colors (ein Sprite trägt ihn neutral)
Tetris adjust-colors = Adjust colors (ebenso)
Actor demo adjust-colors = Adjust colors
Demo project mjajnaq6vh = Adjust color — eigener, davon unabhängig

Vier Kopien, keine geteilte. Eine Änderung in einem Projekt bleibt dort. Dass derselbe Name und
dieselbe Id in jedem Demo-Projekt auftauchen, lässt es aber wie ein einziges projektübergreifendes
Asset aussehen — genau das war die Beobachtung.

Am Rand mitgemessen: gleiche Ids über Projektgrenzen sind hier der Normalfall, nicht die Ausnahme
(scene1, cam, crate, mover, spawner, player … kommen ebenfalls in mehreren Projekten vor,
weil die Seeder feste Ids vergeben). Harmlos, solange jede Auflösung im eigenen Projekt bleibt —
was sie tut. Berührt aber #65: ShaderLibrary schlüsselt seinen Compile-Cache auf die blanke
Asset-Id (der Fingerprint des Graphen rettet die Korrektheit).

## Kein Bug — die Shader-Assets sind vier getrennte Kopien, die gleich aussehen Gemessen, nicht hergeleitet: **1. Im Code gibt es keinen projektübergreifenden Weg.** Jede Stelle, die Shader-Assets anbietet oder auflöst, liest ausschließlich `state.project`: | Stelle | | |---|---| | Sprite-Dropdown `Shader` | `assetRefChoices(project, ['shader'])` | | Shader-Tab-Picker | `AssetTabEditor.candidates()` → `state.project.assets` | | Zeilen unter dem Dropdown | `shaderParamRows(project, id)` → `findAssetOf(project, ...)` | | Renderer | `ShaderLibrary.source(project)` → `findAssetOf(project, id, 'shader')`, sonst kein Filter | Es gibt keinen `localStorage`, keine Asset-Zwischenablage und kein Modul, das mehr als ein Projekt im Speicher hält; `loadProject` ersetzt Projekt, Kommandostapel und Auswahl vollständig. **2. Im Browser nachgestellt.** Projektwechsel in laufender Sitzung (E2E fixture → frisches leeres Projekt, über das Project-Menü, ohne Reload): danach `assets: []`, Shader-Tab leer, Tab-Picker bietet "Adjust colors" **nicht** an, und das Shader-Dropdown eines neu angelegten Sprites ebenso wenig. **3. Die eigentliche Ursache.** Die Seeder legen in **vier** Projekten ein eigenes Shader-Asset mit **derselben Id `adjust-colors` und demselben Namen "Adjust colors"** an: | Projekt | Shader-Asset | |---|---| | E2E fixture | `adjust-colors` = Adjust colors | | Jump and Run | `adjust-colors` = Adjust colors (ein Sprite trägt ihn neutral) | | Tetris | `adjust-colors` = Adjust colors (ebenso) | | Actor demo | `adjust-colors` = Adjust colors | | Demo project | `mjajnaq6vh` = Adjust color — eigener, davon unabhängig | Vier Kopien, keine geteilte. Eine Änderung in einem Projekt bleibt dort. Dass derselbe Name und dieselbe Id in jedem Demo-Projekt auftauchen, lässt es aber wie ein einziges projektübergreifendes Asset aussehen — genau das war die Beobachtung. Am Rand mitgemessen: gleiche Ids über Projektgrenzen sind hier der Normalfall, nicht die Ausnahme (`scene1`, `cam`, `crate`, `mover`, `spawner`, `player` … kommen ebenfalls in mehreren Projekten vor, weil die Seeder feste Ids vergeben). Harmlos, solange jede Auflösung im eigenen Projekt bleibt — was sie tut. Berührt aber #65: `ShaderLibrary` schlüsselt seinen Compile-Cache auf die blanke Asset-Id (der Fingerprint des Graphen rettet die Korrektheit).
admin moved this to Done in Development on 2026-09-13 14:05:16 +02:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#75