From 964717002ae97a116d47224b581d24261155389d Mon Sep 17 00:00:00 2001 From: David Date: Sun, 12 Jul 2026 00:10:18 -0700 Subject: [PATCH] =?UTF-8?q?feat!:=20rename=20DisplayXR=20extensions=20XR?= =?UTF-8?q?=5FEXT=5F*=20=E2=86=92=20XR=5FDXR=5F*=20(DisplayXR/displayxr-ru?= =?UTF-8?q?ntime#734)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Applied the shared exact-symbol map to sample C# + docs. The com.displayxr.unity UPM pins (upm/v2.4.0) stay until the renamed plugin releases — bump them in this PR before merge. Co-Authored-By: Claude Fable 5 --- CLAUDE.md | 4 ++-- README.md | 4 ++-- .../Assets/XR/Settings/OpenXR Package Settings.asset | 4 ++-- samples/desktop-avatar/Assets/TigerHudMouseRouter.cs | 2 +- samples/desktop-avatar/Assets/TigerSpeechBubble.cs | 4 ++-- samples/desktop-avatar/Assets/TransparentAutoSetup.cs | 4 ++-- .../Assets/XR/Settings/OpenXR Package Settings.asset | 4 ++-- samples/desktop-avatar/CLAUDE.md | 2 +- samples/desktop-avatar/README.md | 2 +- samples/desktop-avatar/URP_FOREGROUND_CLIP.md | 2 +- samples/desktop-avatar/docs~/issue-82-hud.md | 6 +++--- samples/desktop-avatar/installer/DesktopAvatarInstaller.nsi | 2 +- .../Assets/Scripts/DisplayXRWsuiMouseRouter.cs | 2 +- .../Assets/XR/Settings/OpenXR Package Settings.asset | 4 ++-- samples/hdrp-singlepass-ui/CLAUDE.md | 2 +- samples/hdrp-singlepass-ui/README.md | 2 +- .../Assets/Scripts/DisplayXRWsuiMouseRouter.cs | 2 +- .../Assets/XR/Settings/OpenXR Package Settings.asset | 4 ++-- samples/urp-singlepass-ui/CLAUDE.md | 4 ++-- samples/urp-singlepass-ui/README.md | 2 +- .../installer/URPSinglePassUIInstaller.nsi | 2 +- 21 files changed, 32 insertions(+), 32 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index ac55e6b..fb9f7da 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -11,9 +11,9 @@ former `displayxr-unity-test*` repos (history preserved via `git subtree`). Samples: - `samples/birp-multipass` — Built-in RP, multi-pass stereo. Key `BiRPMultiPass`. -- `samples/urp-singlepass-ui` — URP single-pass + `XrCompositionLayerWindowSpaceEXT` 2D UI. Key `URPSinglePassUI`. +- `samples/urp-singlepass-ui` — URP single-pass + `XrCompositionLayerWindowSpaceDXR` 2D UI. Key `URPSinglePassUI`. - `samples/hdrp-singlepass-ui` — HDRP single-pass + 2D UI. Key `HDRPSinglePassUI`. -- `samples/desktop-avatar` — URP Desktop Avatar showcase (transparency, click-through, per-eye foreground clip, `XR_EXT_display_zones`). Key `DesktopAvatar`. +- `samples/desktop-avatar` — URP Desktop Avatar showcase (transparency, click-through, per-eye foreground clip, `XR_DXR_display_zones`). Key `DesktopAvatar`. ## The installer is shared — never fork it diff --git a/README.md b/README.md index fe37c28..ea46f4d 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@ Avatar** feature showcase. | Sample | Folder | Render pipeline / mode | Highlights | |---|---|---|---| | **BiRP Multi-Pass** | `samples/birp-multipass` | Built-in RP, multi-pass stereo | Baseline cube + rig-switching demo | -| **URP Single-Pass + 2D UI** | `samples/urp-singlepass-ui` | URP, single-pass instanced | `XrCompositionLayerWindowSpaceEXT` 2D UI overlay | +| **URP Single-Pass + 2D UI** | `samples/urp-singlepass-ui` | URP, single-pass instanced | `XrCompositionLayerWindowSpaceDXR` 2D UI overlay | | **HDRP Single-Pass + 2D UI** | `samples/hdrp-singlepass-ui` | HDRP, single-pass instanced | Same UI overlay as URP, on HDRP | -| **Desktop Avatar** | `samples/desktop-avatar` | URP | Alpha-native transparency, click-through, per-eye foreground clip, `XR_EXT_display_zones` (3D zone + Local2D) | +| **Desktop Avatar** | `samples/desktop-avatar` | URP | Alpha-native transparency, click-through, per-eye foreground clip, `XR_DXR_display_zones` (3D zone + Local2D) | ## Prerequisites diff --git a/samples/birp-multipass/Assets/XR/Settings/OpenXR Package Settings.asset b/samples/birp-multipass/Assets/XR/Settings/OpenXR Package Settings.asset index 52cb2f3..4675b38 100644 --- a/samples/birp-multipass/Assets/XR/Settings/OpenXR Package Settings.asset +++ b/samples/birp-multipass/Assets/XR/Settings/OpenXR Package Settings.asset @@ -295,8 +295,8 @@ MonoBehaviour: nameUi: DisplayXR version: 0.1.0 featureIdInternal: com.displayxr.unity.feature - openxrExtensionStrings: XR_EXT_display_info XR_EXT_win32_window_binding XR_EXT_cocoa_window_binding - XR_EXT_atlas_capture + openxrExtensionStrings: XR_DXR_display_info XR_DXR_win32_window_binding XR_DXR_cocoa_window_binding + XR_DXR_atlas_capture company: DisplayXR priority: 0 targetOpenXRApiVersion: diff --git a/samples/desktop-avatar/Assets/TigerHudMouseRouter.cs b/samples/desktop-avatar/Assets/TigerHudMouseRouter.cs index c7ea86f..15edd64 100644 --- a/samples/desktop-avatar/Assets/TigerHudMouseRouter.cs +++ b/samples/desktop-avatar/Assets/TigerHudMouseRouter.cs @@ -3,7 +3,7 @@ // // Input router for TigerTuningHUD's window-space-layer canvas. // -// XrCompositionLayerWindowSpaceEXT submits pixels; it doesn't carry input. +// XrCompositionLayerWindowSpaceDXR submits pixels; it doesn't carry input. // The wsui canvas is a private WorldSpace canvas on a hidden layer at // (0, 100000, 0), so Unity's EventSystem can't naturally see clicks on it. // diff --git a/samples/desktop-avatar/Assets/TigerSpeechBubble.cs b/samples/desktop-avatar/Assets/TigerSpeechBubble.cs index 7fa4755..d50f2b8 100644 --- a/samples/desktop-avatar/Assets/TigerSpeechBubble.cs +++ b/samples/desktop-avatar/Assets/TigerSpeechBubble.cs @@ -16,7 +16,7 @@ /// simple-window mode), split into two horizontal bands by /// (default 0.25 = avatar's top-25% bubble / /// bottom-75% tiger): -/// - 3D tiger zone = the bottom band → pushed as the XR_EXT_display_zones +/// - 3D tiger zone = the bottom band → pushed as the XR_DXR_display_zones /// 3D-zone rect (and the legacy canvas sub-rect, for older runtimes / /// the silhouette mapping). The runtime Kooima-frames the tiger into it. /// - 2D bubble band = the top band → a DisplayXRLocal2D layer composited @@ -376,7 +376,7 @@ void ApplyLayout() private void PushCanvasRect(int x, int y, int w, int h) { if (w <= 0 || h <= 0) return; - // XR_EXT_display_zones: push the 3D-zone rect so the runtime Kooima-frames + // XR_DXR_display_zones: push the 3D-zone rect so the runtime Kooima-frames // the tiger INTO this rect (the rect IS the canvas). The provider drives the // zone; the silhouette/click-through separately reads the canvas rect, so // push both. diff --git a/samples/desktop-avatar/Assets/TransparentAutoSetup.cs b/samples/desktop-avatar/Assets/TransparentAutoSetup.cs index 11c496d..1bf409d 100644 --- a/samples/desktop-avatar/Assets/TransparentAutoSetup.cs +++ b/samples/desktop-avatar/Assets/TransparentAutoSetup.cs @@ -14,8 +14,8 @@ public static class TransparentAutoSetup { // Must run BEFORE the OpenXR session is created — that's when the runtime - // reads transparentBackgroundEnabled off XrWin32WindowBindingCreateInfoEXT - // (Windows) / XrCocoaWindowBindingCreateInfoEXT (macOS) and decides + // reads transparentBackgroundEnabled off XrWin32WindowBindingCreateInfoDXR + // (Windows) / XrCocoaWindowBindingCreateInfoDXR (macOS) and decides // whether to use the transparent-capable swapchain path. AfterSceneLoad // is too late; SubsystemRegistration fires earlier than the XR loader init. // diff --git a/samples/desktop-avatar/Assets/XR/Settings/OpenXR Package Settings.asset b/samples/desktop-avatar/Assets/XR/Settings/OpenXR Package Settings.asset index d439f42..4abc278 100644 --- a/samples/desktop-avatar/Assets/XR/Settings/OpenXR Package Settings.asset +++ b/samples/desktop-avatar/Assets/XR/Settings/OpenXR Package Settings.asset @@ -296,8 +296,8 @@ MonoBehaviour: nameUi: DisplayXR version: 0.1.0 featureIdInternal: com.displayxr.unity.feature - openxrExtensionStrings: XR_EXT_display_info XR_EXT_win32_window_binding XR_EXT_cocoa_window_binding - XR_EXT_atlas_capture XR_EXT_view_rig XR_EXT_local_3d_zone XR_EXT_display_zones + openxrExtensionStrings: XR_DXR_display_info XR_DXR_win32_window_binding XR_DXR_cocoa_window_binding + XR_DXR_atlas_capture XR_DXR_view_rig XR_DXR_local_3d_zone XR_DXR_display_zones company: DisplayXR priority: 0 targetOpenXRApiVersion: diff --git a/samples/desktop-avatar/CLAUDE.md b/samples/desktop-avatar/CLAUDE.md index a6416f4..bcdb199 100644 --- a/samples/desktop-avatar/CLAUDE.md +++ b/samples/desktop-avatar/CLAUDE.md @@ -50,7 +50,7 @@ All test-project components are runtime-wired by `TransparentAutoSetup` — ther The mechanism splits across plugin (most of it) and test-project (small bootstrap): -1. **Transparent session** — `TransparentAutoSetup.RequestTransparentSession()` (called from `[RuntimeInitializeOnLoadMethod(SubsystemRegistration)]`) tells the plugin to ask for a transparent OpenXR session. The plugin sets `xsi.transparentBackgroundEnabled` on `XrWin32WindowBindingCreateInfoEXT` and opts the session into `XR_ENVIRONMENT_BLEND_MODE_ALPHA_BLEND` so Unity emits per-pixel alpha into the swapchain. +1. **Transparent session** — `TransparentAutoSetup.RequestTransparentSession()` (called from `[RuntimeInitializeOnLoadMethod(SubsystemRegistration)]`) tells the plugin to ask for a transparent OpenXR session. The plugin sets `xsi.transparentBackgroundEnabled` on `XrWin32WindowBindingCreateInfoDXR` and opts the session into `XR_ENVIRONMENT_BLEND_MODE_ALPHA_BLEND` so Unity emits per-pixel alpha into the swapchain. 2. **Alpha-native camera clear** — the overlay's `OnEnable` flips the camera to `CameraClearFlags.SolidColor` with `backgroundColor = (0,0,0,0)` so transparent regions emit `alpha=0` directly. No chroma color is involved anywhere. (Older plugin versions painted a gray chroma color and relied on a runtime post-weave conversion pass; that workaround was removed once the runtime's compose-under-bg + alpha-gate DP path shipped — tracked in `DisplayXR/displayxr-unity#103`.) 3. **Per-pixel-alpha overlay HWND** — the plugin creates the overlay as a top-level `WS_POPUP` with `WS_EX_NOREDIRECTIONBITMAP`, so DWM has no opaque redirection surface and composites the HWND purely from the runtime's DComp visuals (real per-pixel alpha against the desktop). The runtime DP composes the captured desktop content under each tile pre-weave and alpha-gates post-weave, so anti-aliased silhouettes carry true soft alpha. The plugin explicitly strips `WS_EX_LAYERED` off Unity's HWND and does **not** call `SetLayeredWindowAttributes` / `LWA_COLORKEY`. 4. **Per-pixel click-through** — `WM_NCHITTEST` in the native overlay reads `s_hit_active` (set by the C# polling code each frame). When the cyclopean ray hits the tiger silhouette → `s_hit_active=1` → `HTCLIENT` → overlay captures. Otherwise `HTTRANSPARENT` → click forwards to the underlying app via `forward_click_to_underlying_window` (`SetForegroundWindow` + `PostMessage`). diff --git a/samples/desktop-avatar/README.md b/samples/desktop-avatar/README.md index b9e2acf..f8f52d8 100644 --- a/samples/desktop-avatar/README.md +++ b/samples/desktop-avatar/README.md @@ -8,7 +8,7 @@ see-through desktop avatar (cartoon tiger) rendered over the live screen on - **Alpha-native transparency** (the avatar composites over whatever is behind it) - **Click-through** — input passes to the apps beneath the transparent regions - **Per-eye foreground clipping** -- **`XR_EXT_display_zones`** layout — the avatar is Kooima-projected into a 3D +- **`XR_DXR_display_zones`** layout — the avatar is Kooima-projected into a 3D zone, with a **Local2D** speech-bubble zone alongside it Part of the [displayxr-unity-samples](https://github.com/DisplayXR/displayxr-unity-samples) diff --git a/samples/desktop-avatar/URP_FOREGROUND_CLIP.md b/samples/desktop-avatar/URP_FOREGROUND_CLIP.md index 9568224..d1fb015 100644 --- a/samples/desktop-avatar/URP_FOREGROUND_CLIP.md +++ b/samples/desktop-avatar/URP_FOREGROUND_CLIP.md @@ -73,7 +73,7 @@ a URP-guarded assembly) so every app gets per-eye URP foreground clip for free. ## Validation status (2026-06-14, Win64 / RTX 3080 / D3D12) Headless build + run on this machine against the installed DisplayXR runtime -(active OpenXR runtime, advertises **`XR_EXT_view_rig` Version=2**): +(active OpenXR runtime, advertises **`XR_DXR_view_rig` Version=2**): - ✅ C# + shader compile clean; `DisplayXR/ForegroundClipURP` is built into the Player. - ✅ `URPSetupBootstrap` creates the URP pipeline (depth texture on); Built-in→URP diff --git a/samples/desktop-avatar/docs~/issue-82-hud.md b/samples/desktop-avatar/docs~/issue-82-hud.md index 85ed32d..83acb57 100644 --- a/samples/desktop-avatar/docs~/issue-82-hud.md +++ b/samples/desktop-avatar/docs~/issue-82-hud.md @@ -40,14 +40,14 @@ What we already know (from the v1.3.0 repro, see #82 for the full log tail): - In transparent mode, the `FINALv2` projection log shows all-zero values (FOV=0°, pos=0,0,0). Possibly a symptom of the same broken composition path, possibly unrelated — worth checking either way. -- `xrCreateSession` injects `XrWin32WindowBindingCreateInfoEXT` with +- `xrCreateSession` injects `XrWin32WindowBindingCreateInfoDXR` with `transparentBackgroundEnabled=1` and a non-zero `chromaKeyColor`. That selects the runtime's BitBlt (D3D11) or DComp (D3D12) swapchain path. - `wsui_hooked` separately calls `xrCreateSwapchain` for the overlay layer with format 28 (`DXGI_FORMAT_R8G8B8A8_UNORM`) and usage `COLOR_ATTACHMENT | SAMPLED`. That swapchain isn't part of the transparent BitBlt path. - `hooked_xrEndFrame` extends the original layer array with the wsui layer - via `XrCompositionLayerWindowSpaceEXT` and forwards to the runtime's + via `XrCompositionLayerWindowSpaceDXR` and forwards to the runtime's real `xrEndFrame`. The first such forwarded call is what dies. Probable causes (in rough likelihood order): @@ -57,7 +57,7 @@ Probable causes (in rough likelihood order): transparent path leaves the main swapchain in. The `wsui_copy_to_swapchain_image` path in `native~/displayxr_d3d12_backend.cpp` relies on D3D12 common-state implicit promotion — may not hold under transparent compositor. -2. The runtime can't compose an `XrCompositionLayerWindowSpaceEXT` over a +2. The runtime can't compose an `XrCompositionLayerWindowSpaceDXR` over a transparent-background main layer; the layer-mixer code path was only exercised against opaque sessions. This would be a runtime-side bug — investigation may need to touch `DisplayXR/displayxr-runtime`. diff --git a/samples/desktop-avatar/installer/DesktopAvatarInstaller.nsi b/samples/desktop-avatar/installer/DesktopAvatarInstaller.nsi index 4dc1250..c082dfa 100644 --- a/samples/desktop-avatar/installer/DesktopAvatarInstaller.nsi +++ b/samples/desktop-avatar/installer/DesktopAvatarInstaller.nsi @@ -6,7 +6,7 @@ !define SAMPLE_PRODUCT_EXE "DisplayXR-DesktopAvatar" !define SAMPLE_DISPLAY_NAME "DisplayXR Unity Sample - Desktop Avatar" !define SAMPLE_SLUG "unity_desktop_avatar" -!define SAMPLE_DESCRIPTION "Desktop avatar showcase - alpha-native transparency, click-through, per-eye foreground clip, and XR_EXT_display_zones (3D zone + Local2D speech bubble)." +!define SAMPLE_DESCRIPTION "Desktop avatar showcase - alpha-native transparency, click-through, per-eye foreground clip, and XR_DXR_display_zones (3D zone + Local2D speech bubble)." !ifndef VERSION !define VERSION "1.0.0" diff --git a/samples/hdrp-singlepass-ui/Assets/Scripts/DisplayXRWsuiMouseRouter.cs b/samples/hdrp-singlepass-ui/Assets/Scripts/DisplayXRWsuiMouseRouter.cs index 60ab21c..f229b93 100644 --- a/samples/hdrp-singlepass-ui/Assets/Scripts/DisplayXRWsuiMouseRouter.cs +++ b/samples/hdrp-singlepass-ui/Assets/Scripts/DisplayXRWsuiMouseRouter.cs @@ -3,7 +3,7 @@ // // Sample input router for DisplayXRWindowSpaceUI — NOT part of the plugin. // -// `XrCompositionLayerWindowSpaceEXT` submits pixels and lets the runtime +// `XrCompositionLayerWindowSpaceDXR` submits pixels and lets the runtime // composite them; it doesn't carry input. Unity's GraphicRaycaster works on // screen-space mouse coords against canvases that live in the screen's // coordinate space — but our wsui canvas is a private WorldSpace canvas diff --git a/samples/hdrp-singlepass-ui/Assets/XR/Settings/OpenXR Package Settings.asset b/samples/hdrp-singlepass-ui/Assets/XR/Settings/OpenXR Package Settings.asset index e4e3075..d88d26c 100644 --- a/samples/hdrp-singlepass-ui/Assets/XR/Settings/OpenXR Package Settings.asset +++ b/samples/hdrp-singlepass-ui/Assets/XR/Settings/OpenXR Package Settings.asset @@ -295,8 +295,8 @@ MonoBehaviour: nameUi: DisplayXR version: 0.1.0 featureIdInternal: com.displayxr.unity.feature - openxrExtensionStrings: XR_EXT_display_info XR_EXT_win32_window_binding XR_EXT_cocoa_window_binding - XR_EXT_atlas_capture XR_EXT_view_rig XR_EXT_local_3d_zone XR_EXT_display_zones + openxrExtensionStrings: XR_DXR_display_info XR_DXR_win32_window_binding XR_DXR_cocoa_window_binding + XR_DXR_atlas_capture XR_DXR_view_rig XR_DXR_local_3d_zone XR_DXR_display_zones company: DisplayXR priority: 0 targetOpenXRApiVersion: diff --git a/samples/hdrp-singlepass-ui/CLAUDE.md b/samples/hdrp-singlepass-ui/CLAUDE.md index ab9b22f..f1d8ac6 100644 --- a/samples/hdrp-singlepass-ui/CLAUDE.md +++ b/samples/hdrp-singlepass-ui/CLAUDE.md @@ -77,7 +77,7 @@ Two test-project scripts plus an editor bootstrap. The plugin contributes the ri The mechanism is shared between plugin and test-project: 1. **Layer build (`DisplayXRTuningUI.OnEnable`):** creates a `Canvas` (`ScreenSpaceOverlay` initially), attaches `DisplayXRWindowSpaceUI` with fractional placement (`panelX`, `panelY`, `panelWidth`, `panelHeight`) and a fixed RT resolution of 1024 × 1024. The wsui flips the canvas to `WorldSpace`, parks it at `(0, 100000, 0)` on a hidden layer, and spins up an `OverlayCamera` that renders the canvas into its private RT. -2. **Composition layer submission (plugin native):** each frame the plugin grabs the RT, hands it to the runtime as an `XrCompositionLayerWindowSpaceEXT` payload, and the runtime composes it on top of the stereo scene with the configured per-eye `disparity`. +2. **Composition layer submission (plugin native):** each frame the plugin grabs the RT, hands it to the runtime as an `XrCompositionLayerWindowSpaceDXR` payload, and the runtime composes it on top of the stereo scene with the configured per-eye `disparity`. 3. **Input bridge (`DisplayXRWsuiMouseRouter.Update`):** EventSystem can't see the wsui canvas because it's at world-space-far-away with no main-camera coverage. Router reads cursor coords from `DisplayXRPreviewInput` (editor) or `Input` (built), tests the wsui rect, maps to canvas-pixel coords, and dispatches `pointerDown` / `drag` / `pointerUp` / `pointerClick` directly via `ExecuteEvents`. It also strips any pre-existing `StandaloneInputModule` from `EventSystem.current` — that module throws every frame on the new Input System Package and corrupts EventSystem state for `GraphicRaycaster`. 4. **Render-mode enumeration:** `DisplayXRTuningUI.TryEnumerateModes` calls `displayxr_standalone_enumerate_rendering_modes` (DllImport on `displayxr_unity`) to populate the cycle button. Retried from `Update` until the standalone session is up. Names come from `displayxr_standalone_get_rendering_mode_name`; synthesized fallback for older runtimes. diff --git a/samples/hdrp-singlepass-ui/README.md b/samples/hdrp-singlepass-ui/README.md index 8df7cf2..5d4622c 100644 --- a/samples/hdrp-singlepass-ui/README.md +++ b/samples/hdrp-singlepass-ui/README.md @@ -3,7 +3,7 @@ The **HDRP** counterpart of the URP Single-Pass + 2D UI sample for the [DisplayXR Unity plugin](https://github.com/DisplayXR/displayxr-unity). Same window-space 2D UI overlay (`DisplayXRWindowSpaceUI` via -`XrCompositionLayerWindowSpaceEXT`) and single-pass instanced stereo, rendered +`XrCompositionLayerWindowSpaceDXR`) and single-pass instanced stereo, rendered through the High Definition Render Pipeline — used to catch HDRP-specific off-axis / projection regressions. diff --git a/samples/urp-singlepass-ui/Assets/Scripts/DisplayXRWsuiMouseRouter.cs b/samples/urp-singlepass-ui/Assets/Scripts/DisplayXRWsuiMouseRouter.cs index 60ab21c..f229b93 100644 --- a/samples/urp-singlepass-ui/Assets/Scripts/DisplayXRWsuiMouseRouter.cs +++ b/samples/urp-singlepass-ui/Assets/Scripts/DisplayXRWsuiMouseRouter.cs @@ -3,7 +3,7 @@ // // Sample input router for DisplayXRWindowSpaceUI — NOT part of the plugin. // -// `XrCompositionLayerWindowSpaceEXT` submits pixels and lets the runtime +// `XrCompositionLayerWindowSpaceDXR` submits pixels and lets the runtime // composite them; it doesn't carry input. Unity's GraphicRaycaster works on // screen-space mouse coords against canvases that live in the screen's // coordinate space — but our wsui canvas is a private WorldSpace canvas diff --git a/samples/urp-singlepass-ui/Assets/XR/Settings/OpenXR Package Settings.asset b/samples/urp-singlepass-ui/Assets/XR/Settings/OpenXR Package Settings.asset index d439f42..4abc278 100644 --- a/samples/urp-singlepass-ui/Assets/XR/Settings/OpenXR Package Settings.asset +++ b/samples/urp-singlepass-ui/Assets/XR/Settings/OpenXR Package Settings.asset @@ -296,8 +296,8 @@ MonoBehaviour: nameUi: DisplayXR version: 0.1.0 featureIdInternal: com.displayxr.unity.feature - openxrExtensionStrings: XR_EXT_display_info XR_EXT_win32_window_binding XR_EXT_cocoa_window_binding - XR_EXT_atlas_capture XR_EXT_view_rig XR_EXT_local_3d_zone XR_EXT_display_zones + openxrExtensionStrings: XR_DXR_display_info XR_DXR_win32_window_binding XR_DXR_cocoa_window_binding + XR_DXR_atlas_capture XR_DXR_view_rig XR_DXR_local_3d_zone XR_DXR_display_zones company: DisplayXR priority: 0 targetOpenXRApiVersion: diff --git a/samples/urp-singlepass-ui/CLAUDE.md b/samples/urp-singlepass-ui/CLAUDE.md index 900296b..68d5dee 100644 --- a/samples/urp-singlepass-ui/CLAUDE.md +++ b/samples/urp-singlepass-ui/CLAUDE.md @@ -11,7 +11,7 @@ Guidance for Claude Code when working in this repository. ## Project Overview -This is the **window-space 2D UI test project** for the displayxr-unity plugin — exercises the `DisplayXRWindowSpaceUI` component, which submits a Unity `Canvas` as an `XrCompositionLayerWindowSpaceEXT` composition layer through the DisplayXR OpenXR runtime. Sibling Unity project that consumes the `com.displayxr.unity` UPM package. +This is the **window-space 2D UI test project** for the displayxr-unity plugin — exercises the `DisplayXRWindowSpaceUI` component, which submits a Unity `Canvas` as an `XrCompositionLayerWindowSpaceDXR` composition layer through the DisplayXR OpenXR runtime. Sibling Unity project that consumes the `com.displayxr.unity` UPM package. The scene (`Assets/CubeTest.unity`) renders an animated cube on a tracked 3D display and overlays a **runtime-built tuning panel** (IPD slider, Scale slider, Render Mode cycle button) submitted as a window-space layer. The panel survives without Play Mode — `[ExecuteAlways]` keeps it alive under the editor's standalone preview window flow. @@ -63,7 +63,7 @@ Two test-project scripts plus an editor bootstrap. The plugin contributes the ri The mechanism is shared between plugin and test-project: 1. **Layer build (`DisplayXRTuningUI.OnEnable`):** creates a `Canvas` (`ScreenSpaceOverlay` initially), attaches `DisplayXRWindowSpaceUI` with fractional placement (`panelX`, `panelY`, `panelWidth`, `panelHeight`) and a fixed RT resolution of 1024 × 1024. The wsui flips the canvas to `WorldSpace`, parks it at `(0, 100000, 0)` on a hidden layer, and spins up an `OverlayCamera` that renders the canvas into its private RT. -2. **Composition layer submission (plugin native):** each frame the plugin grabs the RT, hands it to the runtime as an `XrCompositionLayerWindowSpaceEXT` payload, and the runtime composes it on top of the stereo scene with the configured per-eye `disparity`. +2. **Composition layer submission (plugin native):** each frame the plugin grabs the RT, hands it to the runtime as an `XrCompositionLayerWindowSpaceDXR` payload, and the runtime composes it on top of the stereo scene with the configured per-eye `disparity`. 3. **Input bridge (`DisplayXRWsuiMouseRouter.Update`):** EventSystem can't see the wsui canvas because it's at world-space-far-away with no main-camera coverage. Router reads cursor coords from `DisplayXRPreviewInput` (editor) or `Input` (built), tests the wsui rect, maps to canvas-pixel coords, and dispatches `pointerDown` / `drag` / `pointerUp` / `pointerClick` directly via `ExecuteEvents`. It also strips any pre-existing `StandaloneInputModule` from `EventSystem.current` — that module throws every frame on the new Input System Package and corrupts EventSystem state for `GraphicRaycaster`. 4. **Render-mode enumeration:** `DisplayXRTuningUI.TryEnumerateModes` calls `displayxr_standalone_enumerate_rendering_modes` (DllImport on `displayxr_unity`) to populate the cycle button. Retried from `Update` until the standalone session is up. Names come from `displayxr_standalone_get_rendering_mode_name`; synthesized fallback for older runtimes. diff --git a/samples/urp-singlepass-ui/README.md b/samples/urp-singlepass-ui/README.md index 53584b1..790ab7e 100644 --- a/samples/urp-singlepass-ui/README.md +++ b/samples/urp-singlepass-ui/README.md @@ -3,7 +3,7 @@ Sample for the [DisplayXR Unity plugin](https://github.com/DisplayXR/displayxr-unity) on **URP** (single-pass instanced stereo) that exercises the **window-space 2D UI overlay** feature (`DisplayXRWindowSpaceUI`, plumbed through -`XrCompositionLayerWindowSpaceEXT` in the runtime). The scene renders a textured +`XrCompositionLayerWindowSpaceDXR` in the runtime). The scene renders a textured cube on a tracked 3D display and overlays a runtime-built UI panel (IPD slider, virtual-display-height slider, render-mode cycle button) as a window-space composition layer. diff --git a/samples/urp-singlepass-ui/installer/URPSinglePassUIInstaller.nsi b/samples/urp-singlepass-ui/installer/URPSinglePassUIInstaller.nsi index 199eeff..52cb30b 100644 --- a/samples/urp-singlepass-ui/installer/URPSinglePassUIInstaller.nsi +++ b/samples/urp-singlepass-ui/installer/URPSinglePassUIInstaller.nsi @@ -6,7 +6,7 @@ !define SAMPLE_PRODUCT_EXE "DisplayXR-URP-SinglePass-UI" !define SAMPLE_DISPLAY_NAME "DisplayXR Unity Sample - URP Single-Pass + 2D UI" !define SAMPLE_SLUG "unity_urp_singlepass_ui" -!define SAMPLE_DESCRIPTION "URP single-pass instanced stereo with an XrCompositionLayerWindowSpaceEXT 2D UI overlay - DisplayXR provider test." +!define SAMPLE_DESCRIPTION "URP single-pass instanced stereo with an XrCompositionLayerWindowSpaceDXR 2D UI overlay - DisplayXR provider test." !ifndef VERSION !define VERSION "1.0.0"