Der e2e-Check aus Modul 12 (gpu:"nearest", uploaded:true) prueft die Textur. Der Filter rendert das Sprite aber in eine Zwischentextur und kopiert sie zurueck; bei nicht-ganzzahligem Kamera-Zoom koennte diese Rueckkopie linear resampeln und Pixel-Art trotz nearest weichzeichnen. Das Wiki behauptet "pixel art stays sharp", gemessen ist es nicht.
Aufgabe
Pixel-Check: ein Pixel-Art-Sprite mit neutralem Adjust colors (alle Werte 1) bei Kamera-Zoom 1.37 gegen dasselbe Sprite ohne Shader. Gleiche Pixel = Behauptung stimmt; sonst Filter-Aufloesung/antialias pruefen.
Die Eintraege des Filter-Dropdowns umbenennen (Entscheidung des Users): statt Smooth / Pixel art heissen sie Bilinear / Nearest. Fundstellen: src/core/properties/PropertySchema.ts (Optionen linear/nearest, nur die Labels aendern, die Werte bleiben), Wiki Textures ("filter is the texture's only property"). Tests und e2e referenzieren die Labels nicht (gegrept).
## Befund
Der e2e-Check aus Modul 12 (`gpu:"nearest"`, `uploaded:true`) prueft die **Textur**. Der Filter rendert das Sprite aber in eine Zwischentextur und kopiert sie zurueck; bei nicht-ganzzahligem Kamera-Zoom koennte diese Rueckkopie linear resampeln und Pixel-Art trotz `nearest` weichzeichnen. Das Wiki behauptet "pixel art stays sharp", gemessen ist es nicht.
## Aufgabe
1. Pixel-Check: ein Pixel-Art-Sprite mit neutralem `Adjust colors` (alle Werte 1) bei Kamera-Zoom 1.37 gegen dasselbe Sprite ohne Shader. Gleiche Pixel = Behauptung stimmt; sonst Filter-Aufloesung/`antialias` pruefen.
2. **Die Eintraege des Filter-Dropdowns umbenennen** (Entscheidung des Users): statt *Smooth* / *Pixel art* heissen sie **Bilinear** / **Nearest**. Fundstellen: `src/core/properties/PropertySchema.ts` (Optionen `linear`/`nearest`, nur die Labels aendern, die Werte bleiben), Wiki *Textures* ("`filter` is the texture's only property"). Tests und e2e referenzieren die Labels nicht (gegrept).
meleki
added the shader label 2026-09-13 11:27:43 +02:00
Erledigt mit 06e1494 (Haupt-Repo) und Wiki-Commit 7debb23
2. Umbenennung
Die Dropdown-Labels heissen jetzt Linear (Default) und Nearest — nach der Korrektur des Users „Linear", nicht „Bilinear". Die gespeicherten Werte linear/nearest sind unveraendert, alte Projektdateien laden wie bisher. Gegenprobe im gebauten Bundle: genau je ein label:"Linear" und label:"Nearest", kein „Smooth", „Pixel art" oder „Bilinear" mehr. Fundstellen wie angekuendigt: PropertySchema.ts, Wiki Textures, dazu der Check-Text in e2e 12.
1. Messung: der Filter-Pass resampelt nicht
Neuer Block 12c-ii in tools/e2e/12-textures.mjs, gemessen im Play (dort ist die Kamera der Massstab), neuer Hook __gm.gameRect(id):
Check
Gemessen
Kamera-Zoom 1,37 → Bildschirm-Skala
1,434 (cameraView fittet 640x360 in den Game-Tab: Zoom x Fit) — nicht ganzzahlig, also genau der Fall aus dem Befund
Nearest-Kante ohne Shader, 7 Pixel quer
3x #e63c3c, 4x #3cc85a — hart
dieselben 7 Pixel mit neutralem Adjust colors
byte-gleich
Brightness 0,5 auf demselben Weg
#660000 / #004800 — der Pass laeuft dort wirklich, sonst waere „gleich" wertlos
Die Behauptung „pixel art stays sharp" im Wiki Shaders ist damit durch die Messung ersetzt.
Gegenproben (jede gegen ein neu gebautes Bundle, jede beisst nur an ihrer Stelle)
Filter-resolution: 0.5 (Zwischentextur halb so gross) → der Kanten-Check faellt, die Kante rutscht um einen Pixel (2 rot / 5 gruen) — die Messung erkennt echtes Resampling.
Filter nie angehaengt → nur „Brightness dunkelt" faellt; der Gleichheits-Check bliebe trivial gruen — genau deshalb gibt es ihn.
Beweis
./check.sh
=== CHECK EXIT 0 ===, 855 Tests
e2e GM_STEPS=10,12
ALL PASSED – 51 checks (+3), Exit 0
Gueltigkeit
Neubau nach den Gegenproben md5-gleich mit dem Bundle des gruenen Laufs (index-BJu1SaPo.js)
Zaehler 723 in README und Wiki Development ist gerechnet (720 + 3); CI misst ihn mit dem Push.
Fund am Werkzeug: Modul 12 braucht Modul 10 (otext entsteht dort) und seed-e2e.mjs davor — steht in der Projekt-Memory.
## Erledigt mit `06e1494` (Haupt-Repo) und Wiki-Commit `7debb23`
### 2. Umbenennung
Die Dropdown-Labels heissen jetzt **Linear** (Default) und **Nearest** — nach der Korrektur des Users „Linear", nicht „Bilinear". Die gespeicherten Werte `linear`/`nearest` sind unveraendert, alte Projektdateien laden wie bisher. Gegenprobe im gebauten Bundle: genau je ein `label:"Linear"` und `label:"Nearest"`, kein „Smooth", „Pixel art" oder „Bilinear" mehr. Fundstellen wie angekuendigt: `PropertySchema.ts`, Wiki *Textures*, dazu der Check-Text in e2e 12.
### 1. Messung: der Filter-Pass resampelt nicht
Neuer Block **12c-ii** in `tools/e2e/12-textures.mjs`, gemessen **im Play** (dort ist die Kamera der Massstab), neuer Hook `__gm.gameRect(id)`:
| Check | Gemessen |
|---|---|
| Kamera-Zoom 1,37 → Bildschirm-Skala | **1,434** (`cameraView` fittet 640x360 in den Game-Tab: Zoom x Fit) — nicht ganzzahlig, also genau der Fall aus dem Befund |
| `Nearest`-Kante ohne Shader, 7 Pixel quer | `3x #e63c3c, 4x #3cc85a` — hart |
| dieselben 7 Pixel mit neutralem *Adjust colors* | **byte-gleich** |
| Brightness 0,5 auf demselben Weg | `#660000` / `#004800` — der Pass laeuft dort wirklich, sonst waere „gleich" wertlos |
Die Behauptung „pixel art stays sharp" im Wiki *Shaders* ist damit durch die Messung ersetzt.
### Gegenproben (jede gegen ein neu gebautes Bundle, jede beisst nur an ihrer Stelle)
- Filter-`resolution: 0.5` (Zwischentextur halb so gross) → der Kanten-Check faellt, die Kante rutscht um einen Pixel (`2 rot / 5 gruen`) — die Messung erkennt echtes Resampling.
- Filter nie angehaengt → nur „Brightness dunkelt" faellt; der Gleichheits-Check bliebe trivial gruen — genau deshalb gibt es ihn.
### Beweis
| | |
|---|---|
| `./check.sh` | `=== CHECK EXIT 0 ===`, 855 Tests |
| e2e `GM_STEPS=10,12` | `ALL PASSED – 51 checks` (+3), Exit 0 |
| Gueltigkeit | Neubau nach den Gegenproben md5-gleich mit dem Bundle des gruenen Laufs (`index-BJu1SaPo.js`) |
Zaehler **723** in README und Wiki *Development* ist gerechnet (720 + 3); CI misst ihn mit dem Push.
Fund am Werkzeug: Modul 12 braucht Modul 10 (`otext` entsteht dort) und `seed-e2e.mjs` davor — steht in der Projekt-Memory.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Befund
Der e2e-Check aus Modul 12 (
gpu:"nearest",uploaded:true) prueft die Textur. Der Filter rendert das Sprite aber in eine Zwischentextur und kopiert sie zurueck; bei nicht-ganzzahligem Kamera-Zoom koennte diese Rueckkopie linear resampeln und Pixel-Art trotznearestweichzeichnen. Das Wiki behauptet "pixel art stays sharp", gemessen ist es nicht.Aufgabe
Adjust colors(alle Werte 1) bei Kamera-Zoom 1.37 gegen dasselbe Sprite ohne Shader. Gleiche Pixel = Behauptung stimmt; sonst Filter-Aufloesung/antialiaspruefen.src/core/properties/PropertySchema.ts(Optionenlinear/nearest, nur die Labels aendern, die Werte bleiben), Wiki Textures ("filteris the texture's only property"). Tests und e2e referenzieren die Labels nicht (gegrept).Erledigt mit
06e1494(Haupt-Repo) und Wiki-Commit7debb232. Umbenennung
Die Dropdown-Labels heissen jetzt Linear (Default) und Nearest — nach der Korrektur des Users „Linear", nicht „Bilinear". Die gespeicherten Werte
linear/nearestsind unveraendert, alte Projektdateien laden wie bisher. Gegenprobe im gebauten Bundle: genau je einlabel:"Linear"undlabel:"Nearest", kein „Smooth", „Pixel art" oder „Bilinear" mehr. Fundstellen wie angekuendigt:PropertySchema.ts, Wiki Textures, dazu der Check-Text in e2e 12.1. Messung: der Filter-Pass resampelt nicht
Neuer Block 12c-ii in
tools/e2e/12-textures.mjs, gemessen im Play (dort ist die Kamera der Massstab), neuer Hook__gm.gameRect(id):cameraViewfittet 640x360 in den Game-Tab: Zoom x Fit) — nicht ganzzahlig, also genau der Fall aus dem BefundNearest-Kante ohne Shader, 7 Pixel quer3x #e63c3c, 4x #3cc85a— hart#660000/#004800— der Pass laeuft dort wirklich, sonst waere „gleich" wertlosDie Behauptung „pixel art stays sharp" im Wiki Shaders ist damit durch die Messung ersetzt.
Gegenproben (jede gegen ein neu gebautes Bundle, jede beisst nur an ihrer Stelle)
resolution: 0.5(Zwischentextur halb so gross) → der Kanten-Check faellt, die Kante rutscht um einen Pixel (2 rot / 5 gruen) — die Messung erkennt echtes Resampling.Beweis
./check.sh=== CHECK EXIT 0 ===, 855 TestsGM_STEPS=10,12ALL PASSED – 51 checks(+3), Exit 0index-BJu1SaPo.js)Zaehler 723 in README und Wiki Development ist gerechnet (720 + 3); CI misst ihn mit dem Push.
Fund am Werkzeug: Modul 12 braucht Modul 10 (
otextentsteht dort) undseed-e2e.mjsdavor — steht in der Projekt-Memory.