Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
209 commits
Select commit Hold shift + click to select a range
d3735c9
Complete a controller click pressed in open space
PetkoKuzmanov Oct 6, 2026
46db1db
Note the open-space click fix in the changelog
PetkoKuzmanov Oct 6, 2026
711d159
Place text lines from their descender, not their baseline
PetkoKuzmanov Oct 6, 2026
17d5e92
Note the text line placement fix in the changelog
PetkoKuzmanov Oct 6, 2026
0668a0d
Report the Quest menu button and palm pinch as MenuButton, not back
PetkoKuzmanov Oct 6, 2026
2bb6ef0
Note the Quest menu button change in the changelog
PetkoKuzmanov Oct 6, 2026
cca6b33
Ignore a system or menu pinch until the fingers part
PetkoKuzmanov Oct 6, 2026
4c876f3
Note the system pinch fix in the changelog
PetkoKuzmanov Oct 6, 2026
d756ba9
Start passthrough only while it is off
PetkoKuzmanov Oct 6, 2026
18474e6
Note the passthrough start fix in the changelog
PetkoKuzmanov Oct 6, 2026
e25d39f
Quest: Y goes back as B does
PetkoKuzmanov Oct 6, 2026
009460b
Quest: release and press hand input once
PetkoKuzmanov Oct 6, 2026
c84648f
Note the Quest Y and hand input fixes in the changelog
PetkoKuzmanov Oct 6, 2026
e09d62c
Quest: destroy the input action set before the OpenXR instance
PetkoKuzmanov Oct 6, 2026
6203c98
Note the action set teardown fix in the changelog
PetkoKuzmanov Oct 6, 2026
e72b08b
Quest: draw the aim laser after an app's panels
PetkoKuzmanov Oct 6, 2026
5926ef5
Quest: turn depth writes on before clearing an eye's depth
PetkoKuzmanov Oct 6, 2026
87bde46
Note the Quest laser order and depth clear fixes in the changelog
PetkoKuzmanov Oct 6, 2026
cd84bf4
Merge branch 'main' into develop
doranteseduardo Oct 7, 2026
a587d18
Merge branch 'develop' into fix/quest-studio-go
PetkoKuzmanov Oct 7, 2026
b41d4cf
Click the node drawn on top, not the nearest
PetkoKuzmanov Oct 7, 2026
98d23bf
Quest: make each eye's framebuffer once
PetkoKuzmanov Oct 7, 2026
a4ed4d7
Note the hit order and Quest framebuffer fixes in the changelog
PetkoKuzmanov Oct 7, 2026
fc213e5
Report where a source's ray last pointed
PetkoKuzmanov Oct 7, 2026
8356e2e
Quest: discard each eye's depth once it is drawn
PetkoKuzmanov Oct 7, 2026
945e8a1
Note the source ray and Quest depth discard in the changelog
PetkoKuzmanov Oct 7, 2026
f488a16
Quest: look up the video player's class through the app's class loader
PetkoKuzmanov Oct 7, 2026
e1e5068
Set the back cull face when switching from front to back culling
PetkoKuzmanov Oct 7, 2026
7cdfa57
Keep a controller's event delegate when it is installed again
PetkoKuzmanov Oct 7, 2026
6d2ff98
Look up the scene hit-test result class through the app's class loader
PetkoKuzmanov Oct 7, 2026
aec5d7b
Dispose only the event delegate a controller creates
PetkoKuzmanov Oct 7, 2026
2bcf4cc
Delete the video player's local references to its Java player and sur…
PetkoKuzmanov Oct 7, 2026
5c42fee
Delete the hit-test callbacks' local references on the renderer thread
PetkoKuzmanov Oct 7, 2026
ee63e4b
Pass a scene hit test's distance to HitTestResult
PetkoKuzmanov Oct 7, 2026
c5b6a54
Say where B, Y and the Menu button go in the OpenXR comments and sample
PetkoKuzmanov Oct 7, 2026
977106e
Say in hitTest's header that the node drawn on top wins
PetkoKuzmanov Oct 7, 2026
f1658ba
Document Controller.getControllerRayAsync and its callback
PetkoKuzmanov Oct 7, 2026
1ee0699
Quest: give Y no click pulse, as B has none
PetkoKuzmanov Oct 8, 2026
ed89a8c
Quest: query the room at once when a scene attaches with no planes
PetkoKuzmanov Oct 8, 2026
e57f9eb
Quest: take a room plane's alignment from the way it faces
PetkoKuzmanov Oct 8, 2026
12411f3
Quest: hand room planes over nearest the wearer first
PetkoKuzmanov Oct 8, 2026
e801f98
Android: keep a video playing when it is paused and played at once
PetkoKuzmanov Oct 8, 2026
14e6e8a
Quest: classify a desk as a table
PetkoKuzmanov Oct 8, 2026
79605a0
Draw the world mesh wireframe as a surface, not as specks
benmotanoti Oct 7, 2026
49fd9fb
Cache the camera image size on the ARCore frame
doranteseduardo Oct 8, 2026
adafc8c
Unproject Android depth with camera intrinsics
doranteseduardo Oct 8, 2026
934bc2c
Measure depth discontinuities from the camera, not world Z
benmotanoti Oct 8, 2026
486be4a
Emit a triangle from three of four cell corners
ErnestoMendozaHernandez Oct 8, 2026
91051a1
Read the depth and confidence images by their own stride
benmotanoti Oct 8, 2026
cd2e3aa
Report the mesh source in getWorldMeshStats
ErnestoMendozaHernandez Oct 8, 2026
59db787
Tag the ARCore mesh as depth, not lidar
doranteseduardo Oct 8, 2026
cce2126
Say in the log when the mesh falls back to plane anchors
benmotanoti Oct 8, 2026
b01cffe
Add GPS/heading field to iOS AR recording pose lines
benmotanoti Oct 8, 2026
1362dd2
Feed ReactVision GPS pose into iOS AR recording
doranteseduardo Oct 8, 2026
b4cd439
Pass GPS/heading fix through to Android AR recording frames
ErnestoMendozaHernandez Oct 8, 2026
9ed5401
Write GPS field on Android AR recording pose lines
benmotanoti Oct 8, 2026
e9247b5
Strip process references from GPS recording comments
doranteseduardo Oct 8, 2026
ce20d41
Add VPS map localisation methods to VROARSession
benmotanoti Oct 8, 2026
1751371
Implement VPS map localisation on the iOS AR session
ErnestoMendozaHernandez Oct 8, 2026
40d4479
Drive VPS map localisation from the Android frame listener
doranteseduardo Oct 8, 2026
100781c
Implement VPS map localisation on the Android AR session
benmotanoti Oct 8, 2026
a1911fb
Add JNI bridge for VPS map localisation
ErnestoMendozaHernandez Oct 8, 2026
c79e690
Expose VPS map localisation on ARScene
doranteseduardo Oct 8, 2026
e54d695
Add iOS image intrinsics for VPS localisation
benmotanoti Oct 9, 2026
6156159
Lock iOS VPS state and validate recorded GPS
ErnestoMendozaHernandez Oct 9, 2026
186c5f8
Fix Android VPS hook build and GPS recording
doranteseduardo Oct 9, 2026
007ba86
Weight ARCore samples by confidence instead of dropping them
benmotanoti Oct 9, 2026
5575aca
Changelog for the Android world mesh fixes
ErnestoMendozaHernandez Oct 9, 2026
a69a305
Add a sparse TSDF volume with surface-nets extraction
doranteseduardo Oct 8, 2026
d591f99
Fuse depth frames into a persistent world mesh
benmotanoti Oct 8, 2026
79d0c6e
Expose resetWorldMesh on Android
ErnestoMendozaHernandez Oct 8, 2026
c488768
Build VROTSDFVolume on Android and iOS
benmotanoti Oct 8, 2026
6ca8f52
Expose the fusion options on Android
doranteseduardo Oct 8, 2026
484a8c6
Keep the fused mesh while tracking is limited
benmotanoti Oct 8, 2026
fa94b85
Run the world mesh fusion test in CI
ErnestoMendozaHernandez Oct 8, 2026
aa0bd23
Re-mesh only the blocks that changed
doranteseduardo Oct 9, 2026
ff334d1
Pin the incremental re-meshing in the test
ErnestoMendozaHernandez Oct 9, 2026
4c060f9
Changelog for the world mesh fusion
doranteseduardo Oct 9, 2026
53e3b3d
Changelog for the wireframe fix
benmotanoti Oct 9, 2026
503fdcb
Clear the fused mesh on reset, not just the volume
benmotanoti Oct 9, 2026
5135094
Report mesh anchors as accumulated
ErnestoMendozaHernandez Oct 9, 2026
50ecf51
Cover the reset and the ARKit path in the fusion test
doranteseduardo Oct 9, 2026
046c024
Changelog for the reset and accumulated fixes
benmotanoti Oct 9, 2026
44131bf
Warn that forceUpdate bypasses the fusion
doranteseduardo Oct 9, 2026
c92d7c1
Spell out what a resolved mesh shares with the live one
benmotanoti Oct 9, 2026
5b071b3
Send accumulated across the Android bridge
ErnestoMendozaHernandez Oct 9, 2026
d39c0dc
Make maxMemoryMB a ceiling, not an estimate
doranteseduardo Oct 9, 2026
17a5cdd
Walk a synthetic room in the fusion test
benmotanoti Oct 9, 2026
2f24d24
Walk the room again with a noisy sensor
ErnestoMendozaHernandez Oct 9, 2026
4de0821
Android: pause a video at once, not only through the renderer queue
PetkoKuzmanov Oct 9, 2026
f53e55b
iOS: build ViroKit for iOS 15.1
PetkoKuzmanov Oct 9, 2026
3aadfcf
iOS: build CI and ViroSample at the 15.1 floor
PetkoKuzmanov Oct 9, 2026
24e6d69
Quest: keep room planes on the real surface after a recentre
PetkoKuzmanov Oct 9, 2026
f46ed6d
Quest: tell the app when Horizon OS takes input focus
PetkoKuzmanov Oct 9, 2026
943200b
Quest: tell the app how a recentre moved the scene against the room
PetkoKuzmanov Oct 9, 2026
1f9aefc
Keep the fused room through a depth drop-out
doranteseduardo Oct 9, 2026
1896d91
Record the camera-forward heading and feed keyframe GPS on Android
benmotanoti Oct 11, 2026
98e65ee
Record the camera-forward heading and feed keyframe GPS on iOS
ErnestoMendozaHernandez Oct 11, 2026
15853f3
Update ReactVisionCCA libraries
doranteseduardo Oct 11, 2026
324100b
Add the VPS map mesh to the AR scene
ErnestoMendozaHernandez Oct 11, 2026
b9abe6c
Expose the VPS map transform and mesh on iOS and Android
doranteseduardo Oct 11, 2026
a31e2db
Add VPS anchor nodes and query frame capture to the AR scene
benmotanoti Oct 12, 2026
c212b30
Bridge VPS anchor nodes and query frames to Android
ErnestoMendozaHernandez Oct 12, 2026
d1d9623
Merge remote-tracking branch 'origin/feature/vps-advanced' into featu…
PetkoKuzmanov Oct 13, 2026
a941857
iOS: localise VPS frames against the sensor pose
PetkoKuzmanov Oct 15, 2026
6be2848
Android: queue a VPS map unload behind a pending load
PetkoKuzmanov Oct 15, 2026
2f05192
Send a per-process device id on the co-location socket
PetkoKuzmanov Oct 15, 2026
80257c3
Feed the VPS fuser from server fixes, without a map
ErnestoMendozaHernandez Oct 18, 2026
d545b5b
Rebuild the ReactVisionCCA libraries
benmotanoti Oct 18, 2026
5820175
Rebuild ReactVisionCCA without device registration
PetkoKuzmanov Oct 19, 2026
129b930
Android: run AVPlayer's play and pause under one lock
PetkoKuzmanov Oct 20, 2026
654c147
iOS: keep a paused video paused and its late callbacks off a freed te…
PetkoKuzmanov Oct 20, 2026
cb701d8
Quest: apply recenterTracking() on the render thread
PetkoKuzmanov Oct 20, 2026
7de32e8
Android: end a scan recording's video stream with a flagged buffer
PetkoKuzmanov Oct 20, 2026
5d9f651
Merge pull request #411 from ReactVision/fix/quest-studio-go
doranteseduardo Oct 21, 2026
269cc5b
Merge develop
ErnestoMendozaHernandez Oct 21, 2026
583b2d7
Merge usage ping: ReactVisionCCA without device registration
doranteseduardo Oct 21, 2026
d39c102
Rebuild ReactVisionCCA with VPS and without device registration
benmotanoti Oct 21, 2026
eaa0001
CI: keep the raw xcodebuild log when the iOS build fails
ErnestoMendozaHernandez Oct 21, 2026
7d26c2e
iOS: make the VPS localizer in the constructor, where its type is com…
benmotanoti Oct 21, 2026
e3bac6a
Merge pull request #421 from ReactVision/feature/vps-advanced
doranteseduardo Oct 22, 2026
8d8e508
Join the co-location channel with an app user token
PetkoKuzmanov Oct 26, 2026
9402424
Merge develop
ErnestoMendozaHernandez Oct 27, 2026
c2926dc
Merge develop
ErnestoMendozaHernandez Oct 27, 2026
a38fcb4
Merge pull request #412 from ReactVision/fix/world-mesh-debug-draw
ErnestoMendozaHernandez Oct 27, 2026
5845cc7
Merge develop
ErnestoMendozaHernandez Oct 27, 2026
7051fcc
Remove conflict markers left by the develop merge
ErnestoMendozaHernandez Oct 27, 2026
578a50e
Merge pull request #413 from ReactVision/fix/android-depth-unprojection
ErnestoMendozaHernandez Oct 27, 2026
7d5126c
Merge develop
ErnestoMendozaHernandez Oct 27, 2026
0474f82
Merge pull request #414 from ReactVision/feat/world-mesh-fusion
ErnestoMendozaHernandez Oct 27, 2026
8b70070
World mesh: snapshot off the render thread, stale physics builds drop…
ErnestoMendozaHernandez Oct 28, 2026
54bd9ae
Monocular depth: publish each inference whole, with the pose it was i…
benmotanoti Oct 28, 2026
76c9025
ARCore: camera image size from the intrinsics, without acquiring the …
doranteseduardo Oct 28, 2026
f344fbc
CHANGELOG: world mesh review fixes
ErnestoMendozaHernandez Oct 28, 2026
187b8ae
Merge pull request #422 from ReactVision/fix/world-mesh-review
doranteseduardo Oct 28, 2026
01a919e
v3.1.0
doranteseduardo Oct 28, 2026
c3248fc
Rebuild ReactVisionCCA 1.4.0
benmotanoti Oct 28, 2026
1f95301
Merge remote-tracking branch 'origin/release/3.1.0' into feature/vps-…
PetkoKuzmanov Oct 28, 2026
a8847d4
Merge pull request #424 from ReactVision/feature/vps-advanced
doranteseduardo Oct 28, 2026
06c5151
Physics steps by the real elapsed time, in fixed 1/60 s substeps
benmotanoti Oct 29, 2026
528c4eb
ARCore: ambient light estimation, which is what the frame reads
benmotanoti Oct 29, 2026
0e6f52e
ARCore: ambient light colour is white without a valid estimate
benmotanoti Oct 29, 2026
296ca2a
VROARSession: image tracking is None, not uninitialised, on visionOS …
benmotanoti Oct 29, 2026
a0a643a
iOS: changing an AR option no longer resumes a paused session
benmotanoti Oct 29, 2026
f0566a6
ARCore: reconfiguring a paused session leaves it paused
benmotanoti Oct 29, 2026
6508482
Web shaders multiply the vertex colour, as the native ones do
benmotanoti Oct 29, 2026
29cf35a
Release workflow: AAR paths from the repository root
benmotanoti Oct 29, 2026
eed99e0
Dependabot targets develop
benmotanoti Oct 29, 2026
21d1b1f
Metal: spot cones from the cosines of the half angles, as in GL
benmotanoti Oct 29, 2026
879ecd1
visionOS: morph targets blend on the CPU
benmotanoti Oct 29, 2026
fb8f724
World mesh test: Bullet headers from the iOS libraries
benmotanoti Oct 30, 2026
b7c96da
Remove the macOS target: macOS is not a supported platform
benmotanoti Oct 30, 2026
9e9b6b9
Remove MetricsClient: nothing calls it, and it carried a Keen write key
benmotanoti Oct 30, 2026
fa77416
Remove the API key validator and metrics files no target compiles
benmotanoti Oct 30, 2026
9da4d14
Remove the OpenCV headers: no source includes them and nothing links …
benmotanoti Oct 30, 2026
460038b
Remove the unused OpenXR loader 1.1.38; the build takes 1.1.49 from o…
benmotanoti Oct 30, 2026
b77eca4
Remove the Jenkinsfile: its lanes build modules that no longer exist
benmotanoti Oct 30, 2026
601aa24
CHANGELOG: fixes and removals from the parity audit
benmotanoti Oct 30, 2026
4166a14
Add depth to recording config and a depth capture request on the session
ErnestoMendozaHernandez Oct 30, 2026
b780e7c
Decide iOS frameSemantics in one place from occlusion, world mesh and…
ErnestoMendozaHernandez Oct 30, 2026
31a0b15
Record LiDAR depth frames as PNGs in the iOS recorder
ErnestoMendozaHernandez Oct 30, 2026
2984585
Write depth line t in nanoseconds like pose
ErnestoMendozaHernandez Oct 30, 2026
04141c3
Add a grayscale PNG encoder with 16-bit support
ErnestoMendozaHernandez Oct 30, 2026
9efd838
Expose the timestamp of an ARCore image
ErnestoMendozaHernandez Oct 30, 2026
9c67b79
Record ARCore depth frames as PNGs in the Android recorder
ErnestoMendozaHernandez Oct 30, 2026
9fa50b6
Merge pull request #426 from ReactVision/fix/physics-real-time-step
doranteseduardo Oct 30, 2026
667387f
Merge pull request #427 from ReactVision/fix/arcore-ambient-light
doranteseduardo Oct 30, 2026
8d2c56c
Merge pull request #428 from ReactVision/fix/image-tracking-impl-default
doranteseduardo Oct 30, 2026
3c6a2d3
Merge pull request #430 from ReactVision/fix/web-shaders-vertex-color
doranteseduardo Oct 30, 2026
9817741
Merge pull request #432 from ReactVision/fix/metal-spot-cone
doranteseduardo Oct 30, 2026
3227edb
Merge pull request #433 from ReactVision/fix/metal-morph-on-cpu
doranteseduardo Oct 30, 2026
ea3ae14
iOS: image and object target changes keep a paused session paused
doranteseduardo Oct 30, 2026
8a2fd23
Release workflow: attach only the AARs it builds, fail on a missing one
ErnestoMendozaHernandez Oct 30, 2026
45c042c
Merge pull request #429 from ReactVision/fix/ios-options-keep-paused
doranteseduardo Oct 30, 2026
e180ec8
Merge pull request #431 from ReactVision/fix/release-workflow
doranteseduardo Oct 30, 2026
b6de64e
Quest: optional hand occlusion in passthrough (#425)
oliedis Oct 30, 2026
5767ce0
Merge pull request #434 from ReactVision/chore/remove-macos
doranteseduardo Oct 30, 2026
6ced7cd
Merge pull request #435 from ReactVision/chore/remove-dead-code
doranteseduardo Oct 30, 2026
76d804d
Merge develop: the audit fixes join the existing Unreleased
ErnestoMendozaHernandez Oct 30, 2026
a988a9f
Merge pull request #436 from ReactVision/chore/changelog-audit-fixes
doranteseduardo Oct 30, 2026
cb3edad
Merge develop; iOS depth capture reads isDepthCaptureEnabled() and re…
ErnestoMendozaHernandez Oct 30, 2026
de20b0e
Merge remote-tracking branch 'origin/feat/ios-depth-recording' into f…
benmotanoti Oct 30, 2026
9617cbe
Merge pull request #437 from ReactVision/feat/ios-depth-recording
doranteseduardo Oct 30, 2026
33a6387
Merge pull request #438 from ReactVision/feat/android-depth-recording
doranteseduardo Oct 30, 2026
6fbe0f4
visionOS test app: shader source regenerated with the spot cone fix
benmotanoti Oct 30, 2026
4264d3d
3.1.0: hand occlusion, depth recording and the parity fixes join the …
doranteseduardo Oct 30, 2026
37d4317
RELEASE_NOTES: Spatial, not ReactVisionCCA
doranteseduardo Oct 30, 2026
f0b7d99
RELEASE_NOTES: Spatial's VROVPSLocalizer
benmotanoti Oct 30, 2026
bd9ca51
Find Spatial in spatial/, falling back to the old reactvisioncca/ folder
benmotanoti Oct 30, 2026
9b2b7aa
Merge pull request #439 from ReactVision/fix/spatial-folder
doranteseduardo Oct 30, 2026
869fbc9
Build ViroKit for the iOS Simulator
PetkoKuzmanov Nov 3, 2026
cdeae0e
Stage ViroKit into viro as ViroKit.xcframework
PetkoKuzmanov Nov 3, 2026
c1a4f5f
Android hit tests: hold the result listener with a global ref
PetkoKuzmanov Nov 3, 2026
f540786
Return what a recording wrote from stopRecording, and whether depth c…
PetkoKuzmanov Nov 3, 2026
ddc299a
Recording: no start while a stop is saving (iOS), one stop per record…
ErnestoMendozaHernandez Nov 4, 2026
6c96a82
Merge pull request #443 from ReactVision/feat/recording-result
doranteseduardo Nov 4, 2026
19f83ca
Merge remote-tracking branch 'origin/develop' into feature/ios-simulator
doranteseduardo Nov 4, 2026
c297b95
Rebuild the simulator archives in the workspace
ErnestoMendozaHernandez Nov 4, 2026
8be3e1f
Spatial prebuilts from develop; Podfile.lock for the simulator podspec
benmotanoti Nov 4, 2026
50398ea
Merge pull request #442 from ReactVision/feature/ios-simulator
doranteseduardo Nov 4, 2026
cc0a095
iOS: save downloads from signed URLs, and fail a download whose write…
PetkoKuzmanov Nov 4, 2026
a8d2521
Merge pull request #444 from ReactVision/fix/ios-download-file-name
doranteseduardo Nov 4, 2026
bc29a11
Merge release/3.1.0 into develop
ErnestoMendozaHernandez Nov 4, 2026
aa131e3
Changelog: fold the unreleased entries into 3.1.0
doranteseduardo Nov 5, 2026
5af3aa2
Set the JavaVM in JNI_OnLoad; keep every property when a shared joint…
benmotanoti Nov 6, 2026
9a93fa0
Merge pull request #445 from ReactVision/fix/gltf-skins-and-jni-onload
doranteseduardo Nov 6, 2026
10663af
Build polyline and polygon indices on the heap, not the stack
ErnestoMendozaHernandez Nov 6, 2026
f0581dc
Merge pull request #446 from ReactVision/fix/polyline-stack-overflow
doranteseduardo Nov 6, 2026
40843a3
Changelog: 3.1.0 release date
benmotanoti Nov 8, 2026
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
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ version: 2
updates:
- package-ecosystem: "gradle"
directory: android
target-branch: "main"
target-branch: "develop"
schedule:
interval: "daily"

- package-ecosystem: "github-actions"
directory: "/" # Location of package manifests
target-branch: "main"
target-branch: "develop"
schedule:
interval: "weekly"
14 changes: 12 additions & 2 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@ jobs:
- uses: maxim-lobanov/setup-xcode@v1.6.0
with:
xcode-version: ${{ matrix.xcode }}
- name: World mesh fusion test
run: ./scripts/run-world-mesh-test.sh
shell: bash
- name: Install pod dependencies
run: |
cd ios
Expand All @@ -83,8 +86,15 @@ jobs:
-workspace ViroRenderer.xcworkspace \
-scheme ViroKit \
-sdk iphoneos \
-configuration Release \
IPHONEOS_DEPLOYMENT_TARGET=13.0 | xcpretty
-configuration Release | tee xcodebuild.log | xcpretty

# xcpretty hides what the compiler said when a step dies without a diagnostic it recognises
- name: Upload the raw xcodebuild log
if: failure()
uses: actions/upload-artifact@v4.6.0
with:
name: ios_xcodebuild.log
path: ./ios/xcodebuild.log

- name: Upload iOS Renderer artifact
uses: actions/upload-artifact@v4.6.0
Expand Down
9 changes: 5 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,11 @@ jobs:
generate_release_notes: true
prerelease: ${{ env.PRE_RELEASE }}
name: ${{steps.tagger.outputs.tag}}
# the build runs in ./android, but these paths are from the repository root; only what
# :viroreact:assembleRelease builds (it also assembles :viroar), and a missing one fails the release
fail_on_unmatched_files: true
files: |
./viroreact/build/outputs/aar/viroreact-release.aar
./viroar/build/outputs/aar/viroar-release.aar
./virocore/build/outputs/aar/virocore-release.aar
./sharedCode/build/outputs/aar/sharedCode-release.aar
./android/viroreact/build/outputs/aar/viroreact-release.aar
./android/viroar/build/outputs/aar/viroar-release.aar
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
.DS_Store

# Macos
/macos/ViroRenderer.xcodeproj/xcuserdata/*
/macos/ViroRenderer.xcodeproj/project.xcworkspace/xcuserdata/**

# WASM
/wasm/products/
Expand Down
107 changes: 107 additions & 0 deletions CHANGELOG.md

Large diffs are not rendered by default.

52 changes: 0 additions & 52 deletions Jenkinsfile

This file was deleted.

46 changes: 33 additions & 13 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,45 @@
# Release Notes

## v3.0.3
## v3.1.0

A patch release for Meta Quest, iOS and the physics and recording paths. The native build ships inside `@reactvision/react-viro` 3.0.3. It links ReactVisionCCA 1.3.1, which pins platform requests to the database's region.
**Advanced VPS, a world mesh that persists, device depth in AR recordings, and a Meta Quest pass with hand occlusion.** The native build ships inside `@reactvision/react-viro` 3.1.0. It links Spatial 1.4.0, which adds continuous localisation against a scanned place and the VPS fuser.

### Meta Quest
### Advanced VPS

- **A scene opened after another AR scene gets the room's planes.** The session published each plane only to the scene attached when it was first found, so a plane scene opened from an AR scene never fired `onAnchorFound`. A new scene now receives every plane found so far.
- **The boundary is hidden while passthrough is on**, through `XR_META_boundary_visibility`, and comes back for a fully virtual scene. The app has to declare `com.oculus.permission.BOUNDARY_VISIBILITY`; the viro Expo plugin does.
- **VPS map localisation in the AR session.** `VROARSession` gains map load, unload and localisation, implemented on ARKit and ARCore, and exposed on `ARScene` and through JNI. A loaded `.rvmap` is matched against camera frames while the session runs.
- **Server mode.** The engine hands frames out for the server to localise and feeds the answers into the same fuser, without loading a map (`rvStartVPSServerSession`, `rvReportVPSServerFix`, `rvStopVPSServerSession`, `VROARCamera::getImageTransform()`).
- **Every fix goes through Spatial's `VROVPSLocalizer`,** which keeps one smoothed map-to-world transform. `VROVPSAnchorNode` keeps content placed in map coordinates following it, and `VROARScene::setVPSMapMesh()` loads the place's mesh as occlusion and a kinematic physics body tagged `"world"`.
- **Recordings carry GPS and a camera-forward heading** on each pose, which ViroScan turns into the map's geo-registration.

### iOS
### World mesh

- **A session-only app no longer asks for location** when it opens an AR scene. Core Location starts only when `RVApiKey` and `RVProjectId` are set, as before 3.0.2. An anchor hosted on a session records no GPS fix.
- **Camera texture recordings carry audio.** The microphone is live only while recording.
- **Depth frames fuse into a persistent room (`VROTSDFVolume`, `VROARWorldMesh`)** on the depth-image and monocular paths, re-meshing only the blocks that changed, within a memory ceiling. Fusion pauses while tracking is limited, a depth drop-out keeps the room instead of falling back to plane polygons, and `resetAccumulation()` starts a new one.
- **The mesh reports its source** (`lidar`, `depth`, `monocular`, `plane`) and whether it is accumulated.
- **Android: the depth mesh is geometrically correct** and no longer depends on acquiring a CPU camera image.
- **Thread safety:** the Android snapshot no longer reads a mesh the render thread is replacing, a reset is not undone by a collision shape still being built, `voxelSize` and `maxMemoryMB` take effect mid-session, and iOS monocular depth is published whole with the pose it was inferred at.

### Android
### Meta Quest

- **`startRecording` without `RECORD_AUDIO` fails through its callback** instead of leaving the caller waiting forever, and camera-open and device errors reach it too.
- **Input:** the left Menu button and the palm pinch report `MenuButton`, Y goes back as B does, a menu or system pinch never ends as a select, released hands release, and a hand and a controller on one side press once. `getSourceRay` / `getControllerRayAsync` report where a ray points, and `setInputFocusListener` / `setRoomMoveListener` report focus changes and recentres.
- **Rendering:** the right eye clears its depth buffer, each eye's framebuffer is made once and its depth discarded after drawing, the aim laser stays on top of panels, and switching AR scenes or closing one logs no errors.
- **Room planes** stay on the real surface across a recentre, are asked for at once, face the right way, and a desk is a table.
- **Hand occlusion in passthrough (optional, off by default):** the tracked hands are drawn into each eye's depth buffer before the scene, so the real hands show through virtual content in front of them. It uses the runtime's hand mesh, or capsules between the joints, on Quest 2, 3, 3S and Pro.
- **Stability:** videos no longer abort the app or leak JNI references, hit tests deliver their results without leaking, and `recenterTracking()` no longer races the render thread.

### Everywhere

- **`onCollision` fires against the AR world mesh**, with the mesh's `collisionTag`. Ray and hit tests skip the mesh as before.
- **A session can carry a function region** (`setSession(..., functionRegion)` on Android, `+setStudioSessionBaseUrl:accessToken:clientTag:functionRegion:` on iOS), which the cloud-anchor providers send as `x-region`. The three-argument forms still work.
- **`VROGeospatial.h` is one header again**: both copies call the earth-tracking state `Enabled`. Nothing changes at runtime.
- **AR recordings can carry the device's depth:** LiDAR scene depth on iOS and the ARCore Depth API on Android, as 16-bit millimetre PNGs with confidence, about 10 a second, when the session is set to capture depth. ViroScan fuses them into the scanned place's mesh, which is what makes blank walls reconstruct.
- **Physics runs at real time on every display,** in fixed 1/60 s substeps, instead of 1.5× fast at 90 Hz and 2× at 120 Hz.
- **ARCore reports the ambient light again,** and a paused AR session stays paused when an option or an image or object target changes.
- **visionOS:** spot light cones match the GL backends, and morph targets blend on the CPU.
- **Web:** vertex colours show, as on the native backends.
- **Co-location:** `VROColocationSession::deviceId()`, sent as `x-rv-device`, so the relay bills a device once.
- **A click goes to the node drawn on top,** and a click in open space reaches the controller's own delegates again.
- **Text sits where its vertical alignment puts it,** and a back-culled draw after a front-culled one culls back faces again.
- **GLB characters with one skin per mesh animate every part,** not only the first skin's.
- **Android: a `ViroARCamera` no longer crashes the scene as it mounts.**
- **Video:** a paused iOS video stays paused and its late callbacks no longer reach a freed texture; Android play and pause keep their order.
- **iOS:** ViroKit targets iOS 15.1, and builds for the iOS Simulator (arm64 and x86_64) as well as the device. The copy into viro now makes `ViroKit.xcframework`, replacing only the slice just built. `ios/build_ios_simulator_libs.sh` adds the simulator builds of LinearMath, protobuf-lite and GVR Audio that ViroKit links.
- **Removed:** the macOS target, which no longer linked and nothing built, and dead code (an unused metrics client, the API key validator, the OpenCV headers, an old OpenXR loader).

See `CHANGELOG.md` for every change.
18 changes: 8 additions & 10 deletions ViroRenderer/Shaders.metal
Original file line number Diff line number Diff line change
Expand Up @@ -91,12 +91,12 @@ float compute_attenuation(constant VROLightUniforms &light,
attenuation = 1.0 - pow(d, 1.0 / light.attenuation_falloff_exp);

// Spot light
// spot_inner/outer_angle are the cosines of the half angles: full light inside the inner
// cone, none outside the outer one, as compute_angle_attenuation does in GL
if (light.type == 3) {
float light_surface_angle = acos(dot(*surface_to_light, normalize(light.direction)));
if (light_surface_angle > light.spot_inner_angle) {
float t = (light_surface_angle - light.spot_inner_angle) / light.spot_outer_angle;
attenuation = clamp(mix(attenuation, 0.0, t), 0.0, 1.0);
}
float theta = dot(*surface_to_light, normalize(light.direction));
float epsilon = max(0.0001, light.spot_inner_angle - light.spot_outer_angle);
attenuation *= clamp((theta - light.spot_outer_angle) / epsilon, 0.0, 1.0);
}
}

Expand Down Expand Up @@ -1418,11 +1418,9 @@ static float vro_attenuation_pbr(constant VROLightUniforms &light, float3 surfac

// Spot cone
if (light.type == 3) {
const float angle = acos(clamp(dot(-*L, normalize(light.direction)), -1.0, 1.0));
if (angle > light.spot_inner_angle) {
const float t = (angle - light.spot_inner_angle) / max(light.spot_outer_angle, 1e-3);
attenuation = mix(attenuation, 0.0, clamp(t, 0.0, 1.0));
}
const float theta = dot(-*L, normalize(light.direction));
const float epsilon = max(0.0001, light.spot_inner_angle - light.spot_outer_angle);
attenuation *= clamp((theta - light.spot_outer_angle) / epsilon, 0.0, 1.0);
}
return attenuation;
}
Expand Down
20 changes: 18 additions & 2 deletions ViroRenderer/VROARCamera.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@
#define VROARCamera_h

#include <stdio.h>
#include "VROMatrix4f.h"
#include "VROVector3f.h"

class VROViewport;
class VROMatrix4f;
class VROVector3f;
class VROFieldOfView;

enum class VROARTrackingState {
Expand Down Expand Up @@ -75,6 +75,22 @@ class VROARCamera {
*/
virtual VROMatrix4f getRotation() const = 0;
virtual VROVector3f getPosition() const = 0;

/*
The camera's pose in world space (GL camera axes) for the camera image as
the sensor delivers it, not rotated to the display: what a pose solved
from that image, such as a VPS server fix, must be paired with. On a
portrait phone getRotation() is rolled 90 degrees from it. The default is
getRotation() and getPosition(), for platforms where the two agree.
*/
virtual VROMatrix4f getImageTransform() const {
VROMatrix4f t = getRotation();
VROVector3f p = getPosition();
t[12] = p.x;
t[13] = p.y;
t[14] = p.z;
return t;
}

/*
Get the projection matrix needed to render a 3D scene to match the image
Expand Down
Loading
Loading