Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
7ee986f
Workaround for packHalf2x16 precision issues on some Android devices …
mvaligursky Nov 12, 2025
38c05b9
Add frame:ready event to GSplatComponentSystem for video capture work…
mvaligursky Nov 14, 2025
f0dd1d6
CameraControls enablePan fix (#8126)
kpal81xd Nov 14, 2025
b8648d7
Updated main jsdocs block for GSplatComponent (#8130)
mvaligursky Nov 14, 2025
4ff85c6
Refactor gsplat shader chunks: move helpers and customize to common (…
mvaligursky Nov 14, 2025
b695c16
Fix typos in some files (#8131)
Edge-Seven Nov 15, 2025
9a5c2e7
Fix unified gsplat double transformation bug (#8135)
mvaligursky Nov 17, 2025
74c2b85
Optimize BoundingBox.containsPoint performance (#8137)
mvaligursky Nov 17, 2025
87cf3eb
AGENTS.md file automatically used by AI agents (such as Cursor) (#8140)
mvaligursky Nov 17, 2025
9a71ca8
Fix GSplat LOD calculation to use nearest point on bounding box (#8138)
mvaligursky Nov 18, 2025
56d2780
Update Renovate config to lock two dependencies
willeastcott Nov 19, 2025
f9c24ee
Lock monaco-editor instead of monaco
willeastcott Nov 19, 2025
cbbbaec
Update all npm dependencies (#8143)
renovate[bot] Nov 19, 2025
c7a7dde
Migrate config .github/renovate.json (#8144)
renovate[bot] Nov 19, 2025
993e37a
Fix PBO texture uploads by ensuring correct texture binding state (#8…
mvaligursky Nov 19, 2025
81bb3b1
Fix unified gsplat rendering when viewport is resized (#8147)
mvaligursky Nov 19, 2025
b7311ce
Gizmo snap state fix (#8151)
kpal81xd Nov 20, 2025
0af6f17
Camera controls fly shift fix (#8152)
kpal81xd Nov 20, 2025
0773aa7
Gizmo mouse button option (#8153)
kpal81xd Nov 20, 2025
6719a6c
Update actions/checkout action to v6 (#8157)
renovate[bot] Nov 20, 2025
c367ea7
Picker class can (optional) render depth and provide world space pick…
mvaligursky Nov 21, 2025
69c2bf5
[Fix] UploadStream functionality handles lost context (#8160)
mvaligursky Nov 21, 2025
3dcba66
[Fix] improve error messages for script attribute validation (#8172)
mvaligursky Nov 24, 2025
921fa38
[Fix] Correct transmission attenuation rendering (#8173)
mvaligursky Nov 24, 2025
25156f9
GSplat streaming lod - used memory optimization (#8171)
mvaligursky Nov 24, 2025
65fab7b
Add GSplat to ComponentSystemRegistry (#8174)
mvaligursky Nov 24, 2025
01e9350
Remove unnecessary GLSL transpiler config from examples (#8175)
mvaligursky Nov 24, 2025
6b6c934
Add loadingCount parameter to GSplat frame:ready event (#8178)
mvaligursky Nov 25, 2025
9416692
Fix Screen.priority signed integer overflow (#8180)
mvaligursky Nov 25, 2025
0649cd0
Use ministats to display number of splats in an streaming lod example…
mvaligursky Nov 26, 2025
9a9cede
Fix incorrect time calculation in first two frames (#8185)
mvaligursky Nov 26, 2025
5989f00
Add GSplat flipbook animation script + related functionality + exampl…
mvaligursky Nov 26, 2025
25effe0
Add WebGPU support to instancing-custom example - custom WGSL shader …
mvaligursky Nov 26, 2025
16c7883
[DOCS] clarify Asset.preload behaviour (#8189)
lucaheft Nov 27, 2025
c6e7b5c
Branch 2.14
Nov 28, 2025
6a3d5b1
WebGPU Compute shader edge detect example (#8192)
mvaligursky Nov 28, 2025
963054f
Update all npm dependencies (#8194)
renovate[bot] Nov 29, 2025
d8c745c
Update sinon to latest (#8195)
willeastcott Nov 29, 2025
717d825
Update @webgpu/types dependency to latest (#8196)
willeastcott Nov 29, 2025
0fccb56
Regenerate package-lock.json (#8197)
willeastcott Nov 29, 2025
f069ec4
[FIX] Address race condition when loading example code (#8198)
willeastcott Nov 29, 2025
9411b79
Update examples NPM dependencies (#8199)
willeastcott Nov 29, 2025
a1ef622
Update Examples Browser to React 19 (#8200)
willeastcott Nov 29, 2025
bcac005
Regenerate examples package-lock.json (#8201)
willeastcott Nov 29, 2025
d27a89a
Add ESM script for annotations and an example (#8202)
willeastcott Nov 29, 2025
ddbc964
feat: removed unused react-es6 (#8208)
kpal81xd Dec 1, 2025
51a9030
Added tracing support to log all assets in the registry (#8209)
mvaligursky Dec 2, 2025
37db127
Improvements and fixes to streaming lod gsplat being destroyed (#8210)
mvaligursky Dec 2, 2025
851696e
Fix examples browser compatibility with React 19 and React Router v7 …
mvaligursky Dec 3, 2025
d4c7f38
Fix spherical harmonics not rendering with streaming SOGS (#8215)
mvaligursky Dec 3, 2025
a973900
Remove deprecated bloom script from animation examples (#8213)
mvaligursky Dec 3, 2025
d3c25b7
Adds a soft limit on total splat count rendered for streaming lod (#8…
mvaligursky Dec 3, 2025
42823e1
Remove old private LOD example now that we have public examples (#8218)
mvaligursky Dec 3, 2025
46d577f
fix: Fix broken BlendTrees example (#8216)
abstrakt8 Dec 3, 2025
8c888a3
Add WGSL shader support for annotation hotspots (#8219)
mvaligursky Dec 3, 2025
09beb9b
Fix null values in asset cache for ESM scripts causing error (#8221)
snave333 Dec 4, 2025
1188f61
Updated Trees example to supply wgsl chunks (#8223)
mvaligursky Dec 4, 2025
27bb84d
Shader Hatch example has WGSL shader to avoid transpilation from GLSL…
mvaligursky Dec 4, 2025
7280517
Outline renderer WGSL chunk (#8225)
mvaligursky Dec 4, 2025
c131b5d
WGSL shader variant for Integer Textures example (#8226)
mvaligursky Dec 4, 2025
7ca7427
[BREAKING] Use linear space for vertex colors in gLTF (#8122)
LeXXik Dec 4, 2025
7f8e7a2
AreaPicker & internal shader properties test example fixes (#8227)
mvaligursky Dec 4, 2025
8593288
Unified GSplat support for rendering to shadow map (#8228)
mvaligursky Dec 5, 2025
de1e52d
Updated GsplstShaderEffect script to use simpler material API (#8229)
mvaligursky Dec 5, 2025
c7b82eb
Improved splatBudget behaviour to allow both increase and decrease LO…
mvaligursky Dec 5, 2025
0b017e7
Simple gsplat viewer engine example with HDR controls (#8232)
mvaligursky Dec 7, 2025
bfcf530
Added bloom and other tweeks to Gsplat viewer example (#8234)
mvaligursky Dec 8, 2025
3d90cff
Moved the splatBudget API to gsplat component (#8231)
mvaligursky Dec 8, 2025
f2ffa03
[Fix] Specify anonymous cross origin for gsplat assets to avoid secur…
mvaligursky Dec 8, 2025
dc37e4d
Fix uninitialized SplatCenter members in GLSL gsplat shader (#8237)
mvaligursky Dec 8, 2025
8677e2d
Add Gaussian Splat AABB Crop Example with Edge Clipping (#8236)
mvaligursky Dec 9, 2025
64cccd9
Examples that create custom ministats hide the default one (#8239)
mvaligursky Dec 10, 2025
d75ea62
Updated Ministats to display additional GPU timing on WebGPU
Dec 10, 2025
9f115eb
Merge branch 'main' of https://github.com/playcanvas/engine
Dec 10, 2025
e94e1a7
lint
Dec 10, 2025
f6d1b64
Updated Ministats with additional timings (#8241)
mvaligursky Dec 11, 2025
6b519ba
Internal cursor file is ignored by git (#8242)
mvaligursky Dec 11, 2025
8bd94ce
Workbuffer for gsplat uniform no longer stores covariance, but direct…
mvaligursky Dec 12, 2025
59fa736
Removed workaround related to workbuffer storing covariants on androi…
mvaligursky Dec 12, 2025
fd561dd
Add gsplatModifyVS shader customization chunk for gaussian splats (#8…
mvaligursky Dec 12, 2025
6c3c5a5
Update GitHub Artifact Actions (#8247)
renovate[bot] Dec 13, 2025
d410848
[FIX] Fix metalness and roughness handling in UsdzExporter (#8248)
willeastcott Dec 14, 2025
cdceba5
[Fix] Return correct typed array from texture.read() on WebGPU platfo…
mvaligursky Dec 15, 2025
dbf4e53
[FIX] Notify existing element descendants when a screen is added (#8252)
willeastcott Dec 15, 2025
6b7699d
Add simple render pipeline cache for mipmap renderer (WebGPU) (#8253)
mvaligursky Dec 16, 2025
9fc20f1
Add viewport / scissor support to RenderPassShaderQuad (#8254)
mvaligursky Dec 16, 2025
167faff
Adds a GPU-based radix sort implementation using fragment shaders wit…
mvaligursky Dec 17, 2025
ed4fa57
Adds support for specifying a custom entry point function name when c…
mvaligursky Dec 17, 2025
ec39d34
Increase quad buffer size for ministats to allow more stats to render…
mvaligursky Dec 17, 2025
3fe7463
NPM Publish (#8261)
kpal81xd Dec 18, 2025
cb7a63d
Update examples/src/examples/gaussian-splatting/crop.example.mjs
JaclynCodes Dec 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
30 changes: 27 additions & 3 deletions .github/renovate.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,37 @@
]
},
{
"matchDepTypes": ["devDependencies"],
"matchDepTypes": [
"devDependencies"
],
"rangeStrategy": "pin"
},
{
"matchDepTypes": ["dependencies"],
"matchDepTypes": [
"dependencies"
],
"rangeStrategy": "widen"
},
{
"matchPackageNames": [
"sinon"
],
"matchFileNames": [
"package.json"
],
"enabled": false
},
{
"matchPackageNames": [
"monaco-editor"
],
"matchFileNames": [
"examples/package.json"
],
"enabled": false
}
],
"ignorePaths": [".nvmrc"]
"ignorePaths": [
".nvmrc"
]
}
4 changes: 2 additions & 2 deletions .github/workflows/beta.yaml → .github/workflows/beta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on:
workflow_dispatch:
inputs:
force:
description: 'Force release even if no changes detected'
description: "Force release even if no changes detected"
type: boolean
default: false

Expand All @@ -24,7 +24,7 @@ jobs:
private-key: ${{ secrets.APP_KEY }}

- name: Check out code
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ steps.app-token.outputs.token }}
Expand Down
166 changes: 83 additions & 83 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ name: CI
on:
workflow_dispatch:
push:
branches: [ main ]
branches: [main]
pull_request:
branches: [ main ]
branches: [main]

concurrency:
group: ci-${{ github.event.pull_request.number || github.ref }}
Expand All @@ -20,132 +20,132 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Checkout code
uses: actions/checkout@v6

- name: Setup Node.js 22.x
uses: actions/setup-node@v6
with:
node-version: 24.x
cache: 'npm'
- name: Setup Node.js 22.x
uses: actions/setup-node@v6
with:
node-version: 24.x
cache: "npm"

- name: Install dependencies
run: npm clean-install --progress=false --no-fund
- name: Install dependencies
run: npm clean-install --progress=false --no-fund

- name: Build PlayCanvas
run: npm run build
- name: Build PlayCanvas
run: npm run build

- name: Run Publint
run: npm run publint
- name: Run Publint
run: npm run publint

docs:
name: Docs
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Checkout code
uses: actions/checkout@v6

- name: Setup Node.js 22.x
uses: actions/setup-node@v6
with:
node-version: 24.x
cache: 'npm'
- name: Setup Node.js 22.x
uses: actions/setup-node@v6
with:
node-version: 24.x
cache: "npm"

- name: Install dependencies
run: npm clean-install --progress=false --no-fund
- name: Install dependencies
run: npm clean-install --progress=false --no-fund

- name: Build API reference manual
run: npm run docs
- name: Build API reference manual
run: npm run docs

lint:
name: Lint
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Checkout code
uses: actions/checkout@v6

- name: Setup Node.js 22.x
uses: actions/setup-node@v6
with:
node-version: 24.x
cache: 'npm'
- name: Setup Node.js 22.x
uses: actions/setup-node@v6
with:
node-version: 24.x
cache: "npm"

- name: Install dependencies
run: npm clean-install --progress=false --no-fund
- name: Install dependencies
run: npm clean-install --progress=false --no-fund

- name: Run ESLint
run: npm run lint
- name: Run ESLint
run: npm run lint

- name: Run ESLint on examples
working-directory: ./examples
run: |
npm clean-install --progress=false --no-fund
npm run lint
- name: Run ESLint on examples
working-directory: ./examples
run: |
npm clean-install --progress=false --no-fund
npm run lint

typescript-declarations:
name: TypeScript Declarations
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Checkout code
uses: actions/checkout@v6

- name: Setup Node.js 22.x
uses: actions/setup-node@v6
with:
node-version: 24.x
cache: 'npm'
- name: Setup Node.js 22.x
uses: actions/setup-node@v6
with:
node-version: 24.x
cache: "npm"

- name: Install dependencies
run: npm clean-install --progress=false --no-fund
- name: Install dependencies
run: npm clean-install --progress=false --no-fund

- name: Build TypeScript declarations
run: npm run build:types
- name: Build TypeScript declarations
run: npm run build:types

- name: Compile TypeScript declarations
run: npm run test:types
- name: Compile TypeScript declarations
run: npm run test:types

unit-test:
name: Unit Test
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Checkout code
uses: actions/checkout@v6

- name: Setup Node.js 22.x
uses: actions/setup-node@v6
with:
node-version: 24.x
cache: 'npm'
- name: Setup Node.js 22.x
uses: actions/setup-node@v6
with:
node-version: 24.x
cache: "npm"

- name: Install dependencies
run: npm clean-install --progress=false --no-fund
- name: Install dependencies
run: npm clean-install --progress=false --no-fund

- name: Run unit tests
run: npm test
- name: Run unit tests
run: npm test

build-examples:
name: Build Examples Browser
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout code
uses: actions/checkout@v5

- name: Setup Node.js 22.x
uses: actions/setup-node@v6
with:
node-version: 24.x
cache: 'npm'

- name: Install dependencies
run: npm clean-install --progress=false --no-fund

- name: Build Examples Browser
working-directory: ./examples
run: |
npm clean-install --progress=false --no-fund
npm run build
- name: Checkout code
uses: actions/checkout@v6

- name: Setup Node.js 22.x
uses: actions/setup-node@v6
with:
node-version: 24.x
cache: "npm"

- name: Install dependencies
run: npm clean-install --progress=false --no-fund

- name: Build Examples Browser
working-directory: ./examples
run: |
npm clean-install --progress=false --no-fund
npm run build
28 changes: 15 additions & 13 deletions .github/workflows/publish.yaml → .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,28 @@ name: Publish
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+'
- 'v[0-9]+.[0-9]+.[0-9]+-preview.[0-9]+'
- 'v[0-9]+.[0-9]+.[0-9]+-beta.[0-9]+'
- "v[0-9]+.[0-9]+.[0-9]+"
- "v[0-9]+.[0-9]+.[0-9]+-preview.[0-9]+"
- "v[0-9]+.[0-9]+.[0-9]+-beta.[0-9]+"

jobs:
publish:
name: Publish
runs-on: ubuntu-latest
if: github.repository_owner == 'playcanvas'
if: ${{ github.repository_owner == 'playcanvas' }}
permissions:
contents: read
id-token: write
steps:
- name: Check out code
uses: actions/checkout@v5
uses: actions/checkout@v6

- name: Set up Node.js 22.x
- name: Set up Node.js 24.x
uses: actions/setup-node@v6
with:
node-version: 24.x
cache: 'npm'
registry-url: 'https://registry.npmjs.org/'
cache: "npm"
registry-url: "https://registry.npmjs.org/"

- name: Parse tag name
run: |
Expand All @@ -46,15 +50,13 @@ jobs:
else
tag=latest
fi
npm publish --tag $tag
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
npm publish --tag $tag --provenance

- name: Write version
run: echo "${{ env.VERSION }}" > version.txt

- name: Upload version
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: version
path: version.txt
path: version.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
steps:
- name: Download version
if: github.event_name == 'workflow_run'
uses: actions/download-artifact@v6
uses: actions/download-artifact@v7
with:
name: version
github-token: ${{ secrets.GITHUB_TOKEN }}
Expand All @@ -36,4 +36,4 @@ jobs:
-d '{ "engineVersion": "${{ env.VERSION }}" }' ${{ secrets.PUBLISH_ENDPOINT }}; then
echo "Failed to publish to code.playcanvas.com"
exit 1
fi
fi
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
*.DS_Store
.cursor
.idea/
.vscode/
build
Expand All @@ -14,3 +15,6 @@ stats.html
.npmrc
examples/.npmrc
.prettierrc
# Added by Snap Cursor Rules extension
.cursor/rules/cursor-rules-debug.log
.cursor/rules/remote
Loading