Skip to content

Fix significant FPS drop with mask usage. - #7345

Open
notKitory wants to merge 1 commit into
phaserjs:masterfrom
notKitory:master
Open

Fix significant FPS drop with mask usage.#7345
notKitory wants to merge 1 commit into
phaserjs:masterfrom
notKitory:master

Conversation

@notKitory

Copy link
Copy Markdown

Summary
Orphan dynamic WebGL buffer storage before uploading new batch data.
Prevent progressive GPU synchronization stalls during repeated dynamic buffer updates.
Keep STATIC_DRAW buffer behavior unchanged.

Description
WebGLBufferWrapper.update() reused the same GPU storage for every bufferSubData() call. When dynamic geometry was rendered repeatedly—especially across offscreen and onscreen passes—the browser could wait for queued GPU work that was still using that storage. This caused frame time to increase progressively, even though JavaScript memory and renderer pools remained stable.

Before uploading data for non-static buffers, this change calls bufferData() with the existing buffer size and usage. This orphans the previous storage, allowing queued GPU commands to finish using it while the next batch is uploaded into fresh storage.

The following bufferSubData() behavior remains unchanged, and STATIC_DRAW buffers are not affected.

Fixes #7306

Testing
Manually tested with a stress scene that updates Shape geometry inside a DynamicTexture every frame and uses it as a mask. Tested on MacBook Air M4 and Redmi Note 14.

Verified that:

  • Dynamic mask rendering remains stable over time.
  • Detached DynamicTexture rendering remains stable.
  • Framebuffer-only and static-mask control modes remain stable.
  • RexUI Scrollable objects no longer exhibit progressive FPS degradation.
  • JavaScript heap usage and renderer pool sizes remain stable.

node --check src/renderer/webgl/wrappers/WebGLBufferWrapper.js

@notKitory
notKitory marked this pull request as draft July 27, 2026 21:23
@notKitory
notKitory marked this pull request as ready for review July 27, 2026 22:19
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.

Significant FPS drop with simple Container addMask() usage in WebGL

1 participant