diff --git a/Development.md b/Development.md index fe6bd9a..8a7fc23 100644 --- a/Development.md +++ b/Development.md @@ -12,7 +12,7 @@ npm run check # typecheck + lint + format:check + tests, the gate CI runs # code is lost (tail's is reported), so a red run reads as green npm run build # writes dist/ and regenerates index.html ./build.sh # the same under `set -o pipefail`, for callers that pipe the output -node tools/seed-e2e.mjs && node tools/e2e.mjs # 699 editor checks, screenshots in /tmp/gm-e2e-*.png +node tools/seed-e2e.mjs && node tools/e2e.mjs # 703 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 @@ -150,4 +150,4 @@ widths to find click points. The **render device is not in this repo** — `/dev and a 1 GB `/dev/shm` come from `container.options` in the runner's own `config.yaml`, which applies to every job on that runner. Without them chromium falls back to llvmpipe, which gets WebGL 1.0 only. Measured in the job container: `ANGLE (Intel, Vulkan 1.3.230, HD Graphics 630)`, -WebGL 2.0, and the same 699 checks as here. +WebGL 2.0, and the same 703 checks as here. diff --git a/Shaders.md b/Shaders.md index 6a4fe67..e82b406 100644 --- a/Shaders.md +++ b/Shaders.md @@ -24,14 +24,22 @@ fed to a colour port is broadcast to all three channels. A colour cannot be fed | Node | Ports | What it does | |---|---|---| | **Texture color** | out `color` | The sprite's own pixel before the shader: its texture tinted by its colour, straight (unpremultiplied). | -| **Output** | in `color` | The colour the sprite is drawn with, clamped to 0-1. Its alpha stays the texture's. Left unconnected, the pixel passes through. One per graph. | +| **Texture alpha** | out `value` | The opacity of the sprite's own pixel: 0 transparent, 1 opaque. | +| **Output** | in `color`, `alpha` (number) | What the sprite is drawn with: the colour, clamped to 0-1, and the opacity, clamped too. Each input left unconnected stays the texture's. One per graph. | | **Property** | out `value` | Declares a number the sprite sets: `Name` is the row below the sprite's Shader dropdown and the uniform in the fragment; `Default`, `Min`, `Max` are the row's range. A name is one word (letters, digits, `_`), unique in the graph. | | **Color** | out `color` | A constant colour, picked in the inspector. | | **Add**, **Subtract**, **Multiply**, **Divide** | in `a`, `b` (any) · out `result` | Arithmetic, per channel for colours. An unconnected input is the number typed on the node (0, or 1 for the second input of Multiply and Divide). | | **Mix** | in `a`, `b` (any), `t` (number) · out `result` | Blends from `a` to `b`: `t` = 0 is `a`, 1 is `b`, beyond that it extrapolates. | | **Luminance** | in `color` · out `value` | How bright a colour is (Rec. 709 weights), as one number. | -A colour input with no field (Output, Luminance) that is left unconnected reads the texel's colour. +An input with nothing to type on it (the Output's two, Luminance's colour) that is left unconnected +reads the texel: its colour for a colour port, its alpha for the Output's `alpha`. That is why the +Output's `alpha` has no inline number: a typed-in value would replace the texture's transparency. + +The colour has no alpha of its own — a `Color` node and the sprite's colour are RGB. To fade a +sprite: Property *opacity* (default 1, 0 to 1) and `Texture alpha` into a `Multiply`, its result into +the Output's `alpha`; the sprite then blends with whatever is behind it, and a behavior can write +`opacity` every frame. ## Adjust colors