plugins/lisa-phaser/skills/phaser-rendering/SKILL.md
This skill should be used when working on rendering in Phaser 4 — the render node architecture that replaced v3 pipelines, the unified Filter system that replaced FX and masks, tint modes, pixel-rounding options (roundPixels, smoothPixelArt, vertexRoundMode), DynamicTexture's buffered drawing, the Extern object for external WebGL, and lighting. Use it for any visual-effect, shader, mask, or custom-rendering task, and whenever v3 rendering idioms (setPipeline, preFX/postFX, BitmapMask, tintFill) appear. Pairs with phaser-gameobjects and phaser-v3-migration.
npx skillsauth add codyswanngt/lisa phaser-renderingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Phaser 4 replaced the entire v3 WebGL pipeline system with a render node
architecture: small single-purpose nodes (each with a run method, batchable
where it matters) that the renderer composes per object. WebGL state is fully
managed, context loss restores automatically, and rendering is just-in-time —
GPU work is deferred until actually needed. WebGL2 is fully supported; WebGL1
still works; there is no WebGPU backend; the Canvas renderer is deprecated.
Practical consequences, in order of how often they bite:
The v3 preFX/postFX controllers and BitmapMask are gone. Phaser 4 has one
unified Filter system that works on any GameObject and on cameras:
Mask filter.Phaser.Actions.AddEffectBloom(),
AddEffectShine(), AddMaskShape() helpers.Gradient GameObject.Container can itself be used as a mask source — new
capability, not possible in v3.tintFill and setTintFill() were removed. Use setTint(color) plus
setTintMode(mode) with Phaser.TintModes: MULTIPLY (default), FILL,
ADD, SCREEN, OVERLAY, HARD_LIGHT.
render.renderNodes map.Shader GameObject was rewritten: config-based constructor
(ShaderQuadConfig), explicit setUniform(), renderImmediate, GLSL
#pragma directives. Shadertoy-style automatic uniforms are gone.Extern
GameObject, which fences GL state around your code.roundPixels defaults to false in v4 (v3: true). The old default caused
flicker on rotated/scaled objects; leave the new default alone.pixelArt: true (crisp,
nearest-neighbor) or render.smoothPixelArt: true (WebGL-only, anti-aliased
scaling/rotation of pixel art).gameObject.vertexRoundMode —
"off" | "safe" | "safeAuto" | "full" | "fullAuto".Draw commands no longer execute immediately — they queue until you call
render(). Forgetting render() is the #1 "my RenderTexture is blank" bug
in v4. Related: preserve() keeps a command buffer for reuse, callback()
injects custom steps, and RenderTexture#renderMode selects
"render" | "redraw" | "all".
setPipeline('Light2D') is gone. Enable per object with
gameObject.setLighting(true); lights have an explicit z; self-shadowing is
supported; lighting now works on many more object types (including particles).
SpriteGPULayer / TilemapGPULayer
([[phaser-gameobjects]]) instead of thousands of individual sprites.Rendering changes are verified visually in a real browser: bun run dev, then a
Playwright screenshot assertion or manual confirmation that the effect renders
and the console shows no WebGL errors. For filter/shader work, verify on both a
WebGL2 and (if supported) WebGL1 context before calling it done.
development
Prepare a machine — a fresh laptop or a throwaway container — to run coding agents, before any repository exists. Detects which of Lisa's supported agents (Claude Code, Codex, Cursor, OpenCode, Antigravity, Copilot) are already installed, asks which credential manager the machine uses (Bitwarden, 1Password, Doppler, Vault, AWS, or none), and installs only what is missing, each by its vendor's own preferred method. Idempotent, headless by default, and emits a Dockerfile for a spin-up/spin-down environment. Run it on a new machine, in a container, or before cloning anything.
tools
Provision and verify a remote execution environment for a host project — Codex Cloud today, other remote surfaces as they are added. Generates a repository-owned setup script that installs the declared toolchain, materializes secrets through lisa-secrets-access, and runs the project's own hook. Provisions by API where one exists, by driving the vendor console where one does not, and by emitting exact config otherwise — then proves the result with the same read-back regardless of which tier did the work. Use before dispatching any work with executionEnv.
tools
Bring a developer's machine in line with the toolchain the project declares. Reports every tool in remoteEnv.tools that is missing, outdated, or unpinned for this platform, and installs the missing ones into ~/.local/bin from the same pinned, checksummed entries the remote surfaces use — but only when asked. Same manifest, same pins, same installers as lisa-setup-remote-env; what differs is consent and that the pin is a floor rather than an equality. Run it on a fresh checkout, after a manifest change, or when a tool fails at the moment of use.
tools
Route one unit of work to a remote execution surface. Reads the executionEnv parameter (local by default, codex-cloud or claude-web today), verifies the environment is provisioned and bound to this repository, submits a thin skill invocation, records the task identifier to .lisa/remote-dispatch.json, and exits without polling. Routing only — the remote runs the identical skill from the identical repository. Composable and inline: other skills invoke it via the Skill tool rather than users calling it directly.