Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: playcanvas/engine
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v2.20.0
Choose a base ref
...
head repository: playcanvas/engine
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v2.20.1
Choose a head ref
  • 7 commits
  • 28 files changed
  • 5 contributors

Commits on Jun 26, 2026

  1. fix(gsplat): apply lodRangeMin/lodRangeMax from component init data (#…

    …8968)
    
    lodRangeMin and lodRangeMax were added to GSplatComponent in #8908 but
    never added to the component system's _properties list. As a result they
    were silently ignored when passed to addComponent() and dropped when a
    gsplat component was cloned (reset to their defaults of 0 / 99). Add them
    alongside the sibling lodBaseDistance/lodMultiplier properties.
    
    Also adds a GSplatComponent test covering init-from-data and clone, and
    simplifies the splat-portal and world examples to pass their static LOD
    values directly to addComponent.
    
    Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
    willeastcott and claude committed Jun 26, 2026
    Configuration menu
    Copy the full SHA
    a72ed1d View commit details
    Browse the repository at this point in the history
  2. fix: mark live API getters readonly (#8959)

    * fix: mark live API getters readonly
    
    * test: remove type ergonomics check
    kpal81xd authored and Martin Valigursky committed Jun 26, 2026
    Configuration menu
    Copy the full SHA
    cb379b4 View commit details
    Browse the repository at this point in the history
  3. Free font textures when a font asset is unloaded (#8969)

    Add Font.destroy() so unloading a font asset releases its texture VRAM and
    clears the textures from the resource loader cache. FontHandler passes the
    loader to the Font so it can clear the cache entries.
    
    Fixes #7033.
    
    Co-authored-by: Martin Valigursky <mvaligursky@snapchat.com>
    mvaligursky and Martin Valigursky committed Jun 26, 2026
    Configuration menu
    Copy the full SHA
    b47f2a1 View commit details
    Browse the repository at this point in the history
  4. docs: recommend EventHandle.off() for event removal (#8974)

    The string-based EventHandler.off(name, callback, scope) is the universal
    EventEmitter idiom and dominates usage, but the handle returned by on()/once()
    removes exactly one subscription and is faster (no scan of the callback list) -
    a benefit previously documented only on the internal offByHandle().
    
    Surface that guidance on the public on()/once()/off() JSDoc so the preferred
    removal path is discoverable.
    
    Co-authored-by: Martin Valigursky <mvaligursky@snapchat.com>
    Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
    3 people committed Jun 26, 2026
    Configuration menu
    Copy the full SHA
    77b33d9 View commit details
    Browse the repository at this point in the history
  5. fix(gsplat): re-render work buffer for non-streaming splats on device…

    … restore (#8973)
    
    After a graphics context restore the unified-gsplat work buffer render target
    comes back blank: its contents are GPU-rendered, not re-uploaded from CPU like
    source textures, and nothing re-triggered the rebuild. A non-streaming SOG/PLY
    splat therefore disappeared after a context loss/restore.
    
    Add a `devicerestored` handler on GSplatManager that forces a full work-buffer
    rebuild and re-sort. It is skipped when the world has streaming octree instances:
    those destroy and asynchronously reload their source resources from URL via their
    own device-lost handling, so rebuilding here would render from textures that have
    been destroyed (and not yet reloaded).
    
    Co-authored-by: Martin Valigursky <mvaligursky@snapchat.com>
    Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
    3 people committed Jun 26, 2026
    Configuration menu
    Copy the full SHA
    bbc1919 View commit details
    Browse the repository at this point in the history
  6. fix(gsplat): free SOG bundle archive memory after texture upload (#8972)

    The embedded texture assets created by SogBundleParser retain `file.contents`,
    which are views into the downloaded zip archive ArrayBuffer. Null them once the
    textures are decoded and uploaded, so the whole archive can be garbage collected.
    The decoded ImageBitmap kept by each texture (for re-upload on device context
    loss) is a separate copy and is unaffected.
    
    Relates to #8080.
    
    Co-authored-by: Martin Valigursky <mvaligursky@snapchat.com>
    Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
    3 people committed Jun 26, 2026
    Configuration menu
    Copy the full SHA
    848deae View commit details
    Browse the repository at this point in the history

Commits on Jun 29, 2026

  1. 2.20.1

    Martin Valigursky committed Jun 29, 2026
    Configuration menu
    Copy the full SHA
    2fccee8 View commit details
    Browse the repository at this point in the history
Loading