Flaky pixel art filtering #37

Closed
opened 2026-09-12 15:03:58 +02:00 by meleki · 1 comment
Owner

e2e-Check pixel-art filtering in 12-textures fällt gelegentlich, im Nachlauf grün.

Stand: fällt mit gpu:"none", uploaded:false. Ausgeschlossen: der Filterpfad selbst, 30 Wechsel in einer Sitzung, Kontextverlust. Verdacht: Timing/Umgebung.
Messgerät: __gm.textureFilter(datei) (Modellwert und Treiberzustand).


Übernommen aus todo-notes/flaky-pixel-art-filtering.md beim Umzug auf das Issue-System (2026-09-12).

  • Angelegt: 2026-09-11 · bf41919 — Add todo notes for the next round of features, gaps and upkeep
  • Gemeldet von: Claude (Assistent)
e2e-Check `pixel-art filtering` in `12-textures` fällt gelegentlich, im Nachlauf grün. Stand: fällt mit `gpu:"none", uploaded:false`. Ausgeschlossen: der Filterpfad selbst, 30 Wechsel in einer Sitzung, Kontextverlust. Verdacht: Timing/Umgebung. Messgerät: `__gm.textureFilter(datei)` (Modellwert und Treiberzustand). --- *Übernommen aus `todo-notes/flaky-pixel-art-filtering.md` beim Umzug auf das Issue-System (2026-09-12).* - **Angelegt:** 2026-09-11 · `bf41919` — Add todo notes for the next round of features, gaps and upkeep - **Gemeldet von:** Claude (Assistent)
meleki added the todo-note label 2026-09-12 15:03:58 +02:00
Author
Owner

Befund (2026-09-12) – nicht reproduzierbar, Umgebung ist weg

Alle drei aufbewahrten Fehlschläge stammen vom Remote-Windows-Browser (Testinger@192.168.100.150) am 09.09. (13:02, 13:43, 22:13). Signatur in allen drei identisch: beide Messungen (nearest und linear) liefern dieselben verwaschenen Pixel #c65641 #a67047 #868a4c #66a552 #3cc85a, Drift 0; der Lauf mit Treiber-Sonde meldet scaleMode:"nearest", gpu:"none", uploaded:false.

Der Remote-Browser war an dem Tag generell flatterhaft: in 11 von ~40 Remote-Läufen fielen auch unzusammenhängende Checks (Hierarchie-Falten, Node löschen, Doppelklick, Undo, Palette-Drop, Nesting) – jeweils im Nachlauf grün. Der Launcher lief headless mit --ignore-gpu-blocklist auf der Windows-Karte.

Lokal (chromium, erzwungene GPU, seit 11.09. desynchronized WebGL-Kontext): 0 Fehlschläge in allen ~50 vollen Läufen seit dem 10.09., jedes Mal gpu:"nearest", uploaded:true. Die Remote-Maschine steht auf absehbare Zeit nicht zur Verfügung.

Geprüft und ausgeschlossen (Pixi 8.20.1):

  • Listener-Verlust nach Textur-GC: GCManagedHash.remove setzt den Eintrag auf null, ein erneutes add hängt styleChange wieder an.
  • Ein Tausch oder destroy der Textur-Quelle im eigenen Code: gibt es nicht; Sprite-Views, Texture-Tab und Picker teilen sich die eine TextureLibrary-Map.
  • Bereits früher: Filterpfad selbst, 30 Wechsel in einer Sitzung, Kontextverlust.

Was die Signatur sagt und was nicht: uploaded:false heißt, die Bibliotheks-Textur lag zum Messzeitpunkt nicht auf der GPU, während der Schirm ein (linear gefiltertes) Bild zeigte. Für eine Textur, die jedes Frame gezeichnet wird, passt das nicht zusammen – ohne die Maschine nicht erklärbar.

Blinder Fleck der Sonde (unverändert gelassen): renderer.texture.bindSource(source, 0) kehrt sofort zurück, wenn Pixi die Quelle an Unit 0 schon gebunden glaubt, und aktiviert Unit 0 dann nicht; gl.getTexParameter liest danach die gerade aktive Unit. gpu:"none" kann also auch vom Messgerät kommen. Sollte der Check je wieder fallen: vor dem Lesen renderer.texture.unbind(texture) und dann bindSource, damit wirklich Unit 0 gelesen wird.

Geschlossen als nicht reproduzierbar / Umgebung stillgelegt (User-Entscheidung: kein Code).

## Befund (2026-09-12) – nicht reproduzierbar, Umgebung ist weg **Alle drei aufbewahrten Fehlschläge stammen vom Remote-Windows-Browser** (`Testinger@192.168.100.150`) am **09.09.** (13:02, 13:43, 22:13). Signatur in allen drei identisch: beide Messungen (nearest *und* linear) liefern dieselben verwaschenen Pixel `#c65641 #a67047 #868a4c #66a552 #3cc85a`, Drift 0; der Lauf mit Treiber-Sonde meldet `scaleMode:"nearest", gpu:"none", uploaded:false`. **Der Remote-Browser war an dem Tag generell flatterhaft:** in 11 von ~40 Remote-Läufen fielen auch unzusammenhängende Checks (Hierarchie-Falten, Node löschen, Doppelklick, Undo, Palette-Drop, Nesting) – jeweils im Nachlauf grün. Der Launcher lief headless mit `--ignore-gpu-blocklist` auf der Windows-Karte. **Lokal (chromium, erzwungene GPU, seit 11.09. desynchronized WebGL-Kontext): 0 Fehlschläge in allen ~50 vollen Läufen seit dem 10.09.**, jedes Mal `gpu:"nearest", uploaded:true`. Die Remote-Maschine steht auf absehbare Zeit nicht zur Verfügung. **Geprüft und ausgeschlossen (Pixi 8.20.1):** - Listener-Verlust nach Textur-GC: `GCManagedHash.remove` setzt den Eintrag auf `null`, ein erneutes `add` hängt `styleChange` wieder an. - Ein Tausch oder `destroy` der Textur-Quelle im eigenen Code: gibt es nicht; Sprite-Views, Texture-Tab und Picker teilen sich die eine `TextureLibrary`-Map. - Bereits früher: Filterpfad selbst, 30 Wechsel in einer Sitzung, Kontextverlust. **Was die Signatur sagt und was nicht:** `uploaded:false` heißt, die Bibliotheks-Textur lag zum Messzeitpunkt nicht auf der GPU, während der Schirm ein (linear gefiltertes) Bild zeigte. Für eine Textur, die jedes Frame gezeichnet wird, passt das nicht zusammen – ohne die Maschine nicht erklärbar. **Blinder Fleck der Sonde (unverändert gelassen):** `renderer.texture.bindSource(source, 0)` kehrt sofort zurück, wenn Pixi die Quelle an Unit 0 schon gebunden glaubt, und aktiviert Unit 0 dann *nicht*; `gl.getTexParameter` liest danach die gerade aktive Unit. `gpu:"none"` kann also auch vom Messgerät kommen. Sollte der Check je wieder fallen: vor dem Lesen `renderer.texture.unbind(texture)` und dann `bindSource`, damit wirklich Unit 0 gelesen wird. Geschlossen als **nicht reproduzierbar / Umgebung stillgelegt** (User-Entscheidung: kein Code).
admin added this to the Development project 2026-09-13 13:43:19 +02:00
admin moved this to Done in Development on 2026-09-13 13:43:48 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#37