Describe the pixel perfect camera switch

- Concepts: new paragraph Pixel perfect after Game view scale. It
  covers the grid per device pixel, Fit and the Scene tab, odd sizes
  and camera shaders.
- Development: e2e total 1742.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
adminandClaude Opus 5.5 committed 2026-10-04 13:30:44 +02:00
1 parent 911c87fec7
commit 1d9e589d07
2 files changed
+12 -1

No files matched your search

+11
@@ -104,6 +104,17 @@ Fixed steps start on a whole screen pixel, so pixel art at 100% stays sharp. The
pixel, and Fit then names the factor in screen pixels (`Fit · 156%`). The choice is saved with
the project, like *Play starts*, but it is no undo step: Ctrl+Z undoes edits, not a look at the game.
**Pixel perfect**, a switch on the camera, off by default. On, the game view draws on its own pixel
grid: one step per screen pixel a world unit gets, so at 100% on whole units and at 500% on fifths.
The world's origin lands on a whole screen pixel, and every sprite, text and tilemap on a step of
the grid, however the camera moves. Positions keep their fractions: only where things are drawn
snaps, so a camera that follows smoothly still moves smoothly in the model. An unturned object
snaps its top left corner, so a 15 px wide sprite is as sharp as a 16 px one; a turned one snaps
its centre. Under a camera shader the grid is the shader picture's: with *Camera pixels* one step
per camera pixel. The switch does nothing at **Fit**, where a camera pixel is no whole number of
screen pixels anyway, and nothing in the Scene tab, where one works with the fractions. Particles
are drawn where they are. An overlay camera has a switch of its own.
**Fullscreen** (#267). The button at the right end of the Game tab's header puts the game view on
its own into fullscreen: no toolbar, no panels, no tab header, no console, at the scale the picker
holds. A run goes on as before and the keys still go to the game. A button in the top right corner
+1 -1
@@ -18,7 +18,7 @@ php tests/php/accounts.test.php # the API's accoun
# has and the web server's container has not (SKIP there)
php tests/php/snapshots.test.php # the snapshot store (#231), the same way
php tests/php/releases.test.php # the release store (#266), the same way
node tools/seed-e2e.mjs && node tools/e2e.mjs # 1741 editor checks, screenshots in /tmp/gm-e2e-*.png
node tools/seed-e2e.mjs && node tools/e2e.mjs # 1742 editor checks, screenshots in /tmp/gm-e2e-*.png
GM_STEPS=20 node tools/e2e.mjs # or 1-12, or 6,20 — a subset while working on one step
./e2e.sh start [GM_STEPS] # the same run detached, see below
./e2e.sh status # live progress, or the last run's result