Skip to content

Release 19.9.1 — video fullscreen frame-sync, 17-fix batch, #1231 resize loop - #1550

Merged
obiot merged 2 commits into
masterfrom
release-19.9.1
Jul 28, 2026
Merged

Release 19.9.1 — video fullscreen frame-sync, 17-fix batch, #1231 resize loop#1550
obiot merged 2 commits into
masterfrom
release-19.9.1

Conversation

@obiot

@obiot obiot commented Jul 28, 2026

Copy link
Copy Markdown
Member

19.9.1 (patch release)

Bug Fixes

  • Video sprites stalled (~4fps) in fullscreen — a pending requestVideoFrameCallback keeps the browser delivering frames at full rate for the engine's detached video elements; uploads are now version-gated (GPU upload only when a frame was actually presented). Also fixes the never-firing statePause pause listener.
  • Renderables/camera/particles bug-hunt batch (13 findings, all verified + regression-tested): onVisibilityChange fired leave/enter every frame; destroyed cameras leaked global listeners (one camera per state switch under cameraClass); camera clamp ignored non-zero world origins; particle pool release race; play-once animations could never be replayed; zero-delay frames froze the game; destroy(arguments) forwarding; DropTarget.setCheckMethod validation; getNextChild non-member aliasing; Text/BitmapText caller-array wipe; NineSliceSprite fractional-corner seams.
  • canvas is weirdly resized upon window resize #1231 — canvas slowly grew on window resize inside auto-sized wrappers: engine canvas now defaults to display: block and auto-scale measures the container's content box. Reproduced failing-first in tests/resize-feedback.spec.js.
  • Hardening: setTexture(video) rejects with a clear TypeError (would silently freeze on frame 0); BMFont padding order (padLeft/padRight were swapped, and the old spec codified the bug); dead texture-cache frame-dimension refinement removed (TextureCache.get(image, frame): framewidth/frameheight refinement is a no-op for every atlas format #1489) with the single-atlas contract now test-codified.

Tooling

Routine batch: playwright 1.62 (+ matching CI container), vite 8.1.5, biome 2.5.5, eslint 10.8 stack, shell-quote >=1.9 security override (CVE-2026-13311, dev-only). The new chromium headless shell provides WebGL locally — 14 previously-skipped WebGL tests now run.

Tests: 172 files, 5209 passed, 1 skipped (full turbo build + suite). 3 new spec files, ~40 new regression tests.

Closes #1231
Closes #1489

🤖 Generated with Claude Code

https://claude.ai/code/session_01JvxaXQRgQn5AoR8DNkv6Wg

obiot and others added 2 commits July 28, 2026 09:11
…amera/particles bug-hunt, #1231 resize loop

- video sprites: pending requestVideoFrameCallback keeps detached elements
  at full frame rate in fullscreen; version-gated GPU uploads; statePause fix
- bug-hunt batch (13 findings, all verified): onVisibilityChange churn,
  camera listener leaks + bounds-origin clamp, particle pool release race,
  play-once replay dead-end, zero-delay hang, destroy(arguments) forwarding,
  DropTarget validation, getNextChild, Text array aliasing, NineSlice seams
- #1231: canvas defaults to display:block + content-box measurement kills
  the auto-scale resize feedback loop
- hardening: setTexture(video) TypeError, BMFont padding order, dead
  texture-cache refinement removed (#1489)

Closes #1231
Closes #1489

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JvxaXQRgQn5AoR8DNkv6Wg
…ite 8.1.5, biome 2.5.5, eslint 10.8, shell-quote >=1.9 advisory)

- playwright 1.62.0 with matching v1.62.0-noble CI container
- vite 8.1.5 (override + specs move together), biome 2.5.5 (+ schema URL,
  2 spec files reformatted), eslint 10.8 / typescript-eslint 8.65 /
  eslint-plugin-jsdoc 63, tsx, turbo, vite-plugin-glsl, js-base64, react bits
- shell-quote override ^1.9.0 (CVE-2026-13311, dev-only transitive)
- texture.spec #1448 test made unit-pool-reset-aware (exposed by the new
  chromium headless shell providing WebGL — 14 previously-skipped WebGL
  tests now run locally)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JvxaXQRgQn5AoR8DNkv6Wg
Copilot AI review requested due to automatic review settings July 28, 2026 01:11

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@obiot
obiot merged commit ad2f2bd into master Jul 28, 2026
6 checks passed
@obiot
obiot deleted the release-19.9.1 branch July 28, 2026 01:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

TextureCache.get(image, frame): framewidth/frameheight refinement is a no-op for every atlas format canvas is weirdly resized upon window resize

2 participants