Skip to content

dev → main: WebSocket Pong keepalive + setBlendMode in Fbo passes#175

Merged
tettou771 merged 6 commits into
mainfrom
dev
Jul 17, 2026
Merged

dev → main: WebSocket Pong keepalive + setBlendMode in Fbo passes#175
tettou771 merged 6 commits into
mainfrom
dev

Conversation

@tettou771

Copy link
Copy Markdown
Collaborator

Merge the current dev line into main so it ships to production builds.

Highlights

  • fix(tcxWebSocket): reply to Ping with a Pong. The WS client never answered Ping frames ("not implemented yet"), so proxies that keep connections alive via pings (e.g. Cloudflare) reaped the idle command channel — an app kept reporting "online" over its HTTP heartbeat while its WebSocket silently dropped, so the server-side live flag went false and remote controls disappeared. sendPong() now echoes the Ping payload (RFC 6455 §5.5.2/5.5.3) as a single masked frame, keeping long-lived idle connections alive. This is the change that needs to reach the production machine.
  • feat!: setBlendMode works inside Fbo passes (was silently ignored), with a pixel-provable fboBlendModeExample test scene.
  • docs: setBlendMode reference notes for Fbo passes; FOR_AI_ASSISTANT caught up with v0.7.0.

Commits

  • fix: reply to WebSocket Ping with a Pong (tcxWebSocket)
  • doc: setBlendMode reference notes (Fbo passes, persists across begin())
  • Merge feat/fbo-blend-mode into dev
  • add: fboBlendModeExample — pixel-provable blend-mode-in-Fbo test scene
  • feat!: setBlendMode works inside Fbo passes
  • doc: FOR_AI_ASSISTANT catches up with v0.7.0

Verification note

The Pong change is compile-verified (tcxWebSocket builds clean). Runtime verification against the Cloudflare-fronted server is still pending — an unrelated MSVC C2026 in a downstream consumer's dashboard string is blocking that build locally.

…ouse bubbling section, sokol_app_tc; refresh createWindow prose)
The FBO guard predates the RenderTarget refactor: active2D() now resolves
pipelines per render target, so the mode pipeline is always built for the
active target's color format / sample count.

- setBlendMode: drop the inFboPass early-return
- restoreCurrentPipeline: honor currentBlendMode inside Fbo passes too
  (font/texture draws no longer reset the mode to Alpha mid-pass)
- Fbo begin/clearColor: start the pass with the current mode's pipeline,
  so a mode set before begin() persists into the pass (oF-compatible),
  and clear() inside an FBO keeps the mode like tc::clear() on the
  swapchain does
- restoreBlendPipeline now delegates to restoreCurrentPipeline (identical)

BREAKING: a blend mode active when Fbo::begin() is called now applies
inside the pass; previously the pass always started with Alpha.
Same two overlapping half-gray rects drawn to the swapchain (left) and
into an Fbo (right), second rect with BlendMode::Add and a bitmap-string
draw in between (exercises the restore path). Overlap reads 1.0 on both
sides when blend modes work inside Fbo passes.
The client never answered Ping frames ("not implemented yet"), so proxies
that keep connections alive with pings (e.g. Cloudflare) reaped the idle
socket. sendPong() now echoes the Ping payload (RFC 6455 5.5.2/5.5.3) as a
single masked frame, keeping long-lived idle connections alive.
@tettou771
tettou771 merged commit 4fed04f into main Jul 17, 2026
9 checks passed
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.

1 participant