@iwsdk/core 0.5.3 → 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/README.md +22 -1
  2. package/dist/asset/asset-manager.d.ts.map +1 -1
  3. package/dist/asset/asset-manager.js +3 -2
  4. package/dist/asset/asset-manager.js.map +1 -1
  5. package/dist/asset/cache-manager.js.map +1 -1
  6. package/dist/asset/loaders/audio-loader.js.map +1 -1
  7. package/dist/asset/loaders/cached-asset-load.js.map +1 -1
  8. package/dist/asset/loaders/gltf-loader.js.map +1 -1
  9. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
  10. package/dist/asset/loaders/texture-loader.js.map +1 -1
  11. package/dist/asset/loaders/uikitml-loader.js.map +1 -1
  12. package/dist/audio/audio-pool.js.map +1 -1
  13. package/dist/audio/audio-system.js.map +1 -1
  14. package/dist/audio/audio-utils.js.map +1 -1
  15. package/dist/audio/audio.js.map +1 -1
  16. package/dist/camera/camera-source.js.map +1 -1
  17. package/dist/camera/camera-system.d.ts +7 -3
  18. package/dist/camera/camera-system.d.ts.map +1 -1
  19. package/dist/camera/camera-system.js +81 -50
  20. package/dist/camera/camera-system.js.map +1 -1
  21. package/dist/camera/camera-utils.d.ts +5 -0
  22. package/dist/camera/camera-utils.d.ts.map +1 -1
  23. package/dist/camera/camera-utils.js +8 -1
  24. package/dist/camera/camera-utils.js.map +1 -1
  25. package/dist/camera/types.js.map +1 -1
  26. package/dist/depth/depth-occludable.js.map +1 -1
  27. package/dist/depth/depth-sensing-system.d.ts +3 -0
  28. package/dist/depth/depth-sensing-system.d.ts.map +1 -1
  29. package/dist/depth/depth-sensing-system.js +55 -1
  30. package/dist/depth/depth-sensing-system.js.map +1 -1
  31. package/dist/depth/depth-textures.js.map +1 -1
  32. package/dist/depth/occlusion/preprocessing-pass.js.map +1 -1
  33. package/dist/depth/occlusion/preprocessing-shader.glsl.js.map +1 -1
  34. package/dist/ecs/builtin-components.js.map +1 -1
  35. package/dist/ecs/component-editor-metadata.js.map +1 -1
  36. package/dist/ecs/component-manifest.js.map +1 -1
  37. package/dist/ecs/entity.js.map +1 -1
  38. package/dist/ecs/system.js.map +1 -1
  39. package/dist/ecs/world.d.ts +2 -0
  40. package/dist/ecs/world.d.ts.map +1 -1
  41. package/dist/ecs/world.js +4 -0
  42. package/dist/ecs/world.js.map +1 -1
  43. package/dist/environment/dome-gradient.js.map +1 -1
  44. package/dist/environment/dome-texture.js.map +1 -1
  45. package/dist/environment/environment-system.js.map +1 -1
  46. package/dist/environment/gradient-environment.js.map +1 -1
  47. package/dist/environment/ibl-gradient.js.map +1 -1
  48. package/dist/environment/ibl-texture.js.map +1 -1
  49. package/dist/environment/scene-ar-environment.js.map +1 -1
  50. package/dist/environment-raycast/environment-raycast.js.map +1 -1
  51. package/dist/environment-raycast/raycast-target.js.map +1 -1
  52. package/dist/grab/distance-grabbable.d.ts +5 -0
  53. package/dist/grab/distance-grabbable.d.ts.map +1 -1
  54. package/dist/grab/distance-grabbable.js +5 -0
  55. package/dist/grab/distance-grabbable.js.map +1 -1
  56. package/dist/grab/grab-helpers.js.map +1 -1
  57. package/dist/grab/grab-system.js.map +1 -1
  58. package/dist/grab/grab-warnings.js.map +1 -1
  59. package/dist/grab/grabbed.js.map +1 -1
  60. package/dist/grab/handles.d.ts +6 -0
  61. package/dist/grab/handles.d.ts.map +1 -1
  62. package/dist/grab/handles.js +46 -12
  63. package/dist/grab/handles.js.map +1 -1
  64. package/dist/grab/index.js.map +1 -1
  65. package/dist/grab/one-hand-grabbable.d.ts +5 -0
  66. package/dist/grab/one-hand-grabbable.d.ts.map +1 -1
  67. package/dist/grab/one-hand-grabbable.js +5 -0
  68. package/dist/grab/one-hand-grabbable.js.map +1 -1
  69. package/dist/grab/pointer-events-patch.js.map +1 -1
  70. package/dist/grab/two-hands-grabbable.d.ts +5 -0
  71. package/dist/grab/two-hands-grabbable.d.ts.map +1 -1
  72. package/dist/grab/two-hands-grabbable.js +5 -0
  73. package/dist/grab/two-hands-grabbable.js.map +1 -1
  74. package/dist/index.js +4 -3
  75. package/dist/index.js.map +1 -1
  76. package/dist/init/browser-camera.js.map +1 -1
  77. package/dist/init/index.d.ts +2 -2
  78. package/dist/init/index.d.ts.map +1 -1
  79. package/dist/init/player-camera.js.map +1 -1
  80. package/dist/init/session-grant.d.ts +34 -0
  81. package/dist/init/session-grant.d.ts.map +1 -0
  82. package/dist/init/session-grant.js +89 -0
  83. package/dist/init/session-grant.js.map +1 -0
  84. package/dist/init/world-initializer.d.ts +87 -4
  85. package/dist/init/world-initializer.d.ts.map +1 -1
  86. package/dist/init/world-initializer.js +45 -41
  87. package/dist/init/world-initializer.js.map +1 -1
  88. package/dist/init/xr.d.ts +19 -0
  89. package/dist/init/xr.d.ts.map +1 -1
  90. package/dist/init/xr.js +136 -41
  91. package/dist/init/xr.js.map +1 -1
  92. package/dist/input/canvas-pointer-system.d.ts +2 -0
  93. package/dist/input/canvas-pointer-system.d.ts.map +1 -1
  94. package/dist/input/canvas-pointer-system.js +33 -13
  95. package/dist/input/canvas-pointer-system.js.map +1 -1
  96. package/dist/input/input-actions.js.map +1 -1
  97. package/dist/input/input-manager.js.map +1 -1
  98. package/dist/input/input-system.d.ts.map +1 -1
  99. package/dist/input/input-system.js +5 -2
  100. package/dist/input/input-system.js.map +1 -1
  101. package/dist/input/state-tags.js.map +1 -1
  102. package/dist/input/stateful-browser-gamepad.js.map +1 -1
  103. package/dist/input/stateful-keyboard.js.map +1 -1
  104. package/dist/layers/xr-cylinder-layer.d.ts +2 -1
  105. package/dist/layers/xr-cylinder-layer.d.ts.map +1 -1
  106. package/dist/layers/xr-cylinder-layer.js +2 -1
  107. package/dist/layers/xr-cylinder-layer.js.map +1 -1
  108. package/dist/layers/xr-layer-init.d.ts +19 -0
  109. package/dist/layers/xr-layer-init.d.ts.map +1 -0
  110. package/dist/layers/xr-layer-init.js +20 -0
  111. package/dist/layers/xr-layer-init.js.map +1 -0
  112. package/dist/layers/xr-layer-state.js.map +1 -1
  113. package/dist/layers/xr-layer-system.d.ts +41 -1
  114. package/dist/layers/xr-layer-system.d.ts.map +1 -1
  115. package/dist/layers/xr-layer-system.js +506 -132
  116. package/dist/layers/xr-layer-system.js.map +1 -1
  117. package/dist/layers/xr-layer-transform.d.ts +18 -0
  118. package/dist/layers/xr-layer-transform.d.ts.map +1 -0
  119. package/dist/layers/xr-layer-transform.js +115 -0
  120. package/dist/layers/xr-layer-transform.js.map +1 -0
  121. package/dist/layers/xr-quad-layer.d.ts +2 -1
  122. package/dist/layers/xr-quad-layer.d.ts.map +1 -1
  123. package/dist/layers/xr-quad-layer.js +2 -1
  124. package/dist/layers/xr-quad-layer.js.map +1 -1
  125. package/dist/level/level-component-applier.d.ts +2 -0
  126. package/dist/level/level-component-applier.d.ts.map +1 -1
  127. package/dist/level/level-component-applier.js +24 -5
  128. package/dist/level/level-component-applier.js.map +1 -1
  129. package/dist/level/level-player-rig.js.map +1 -1
  130. package/dist/level/level-root.js.map +1 -1
  131. package/dist/level/level-scene-environment.js.map +1 -1
  132. package/dist/level/level-scene-json-importer.js.map +1 -1
  133. package/dist/level/level-scene-material.js.map +1 -1
  134. package/dist/level/level-scene-object.js.map +1 -1
  135. package/dist/level/level-scene-primitive.js.map +1 -1
  136. package/dist/level/level-system.js.map +1 -1
  137. package/dist/level/level-tag.js.map +1 -1
  138. package/dist/lighting/light-binding.js.map +1 -1
  139. package/dist/lighting/light-components.js.map +1 -1
  140. package/dist/lighting/light-system.js.map +1 -1
  141. package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -1
  142. package/dist/locomotion/locomotion-environment.js.map +1 -1
  143. package/dist/locomotion/locomotion-input-provider.js.map +1 -1
  144. package/dist/locomotion/locomotion.js.map +1 -1
  145. package/dist/locomotion/materials/line.js.map +1 -1
  146. package/dist/locomotion/slide.js.map +1 -1
  147. package/dist/locomotion/teleport.js.map +1 -1
  148. package/dist/locomotion/turn.js.map +1 -1
  149. package/dist/mcp/ecs-debug-tools.d.ts +4 -1
  150. package/dist/mcp/ecs-debug-tools.d.ts.map +1 -1
  151. package/dist/mcp/ecs-debug-tools.js +113 -10
  152. package/dist/mcp/ecs-debug-tools.js.map +1 -1
  153. package/dist/mcp/index.d.ts +1 -0
  154. package/dist/mcp/index.d.ts.map +1 -1
  155. package/dist/mcp/mcp-runtime.d.ts +2 -0
  156. package/dist/mcp/mcp-runtime.d.ts.map +1 -1
  157. package/dist/mcp/mcp-runtime.js +41 -0
  158. package/dist/mcp/mcp-runtime.js.map +1 -1
  159. package/dist/mcp/scene-tools.js.map +1 -1
  160. package/dist/mcp/ui-debug-tools.d.ts +56 -0
  161. package/dist/mcp/ui-debug-tools.d.ts.map +1 -0
  162. package/dist/mcp/ui-debug-tools.js +412 -0
  163. package/dist/mcp/ui-debug-tools.js.map +1 -0
  164. package/dist/physics/index.js +1 -1
  165. package/dist/physics/physics-runtime.d.ts +22 -0
  166. package/dist/physics/physics-runtime.d.ts.map +1 -0
  167. package/dist/physics/physics-runtime.js +423 -0
  168. package/dist/physics/physics-runtime.js.map +1 -0
  169. package/dist/physics/physics-system.d.ts +84 -108
  170. package/dist/physics/physics-system.d.ts.map +1 -1
  171. package/dist/physics/physics-system.js +686 -555
  172. package/dist/physics/physics-system.js.map +1 -1
  173. package/dist/physics/physics-transport.d.ts +20 -0
  174. package/dist/physics/physics-transport.d.ts.map +1 -0
  175. package/dist/physics/physics-transport.js +111 -0
  176. package/dist/physics/physics-transport.js.map +1 -0
  177. package/dist/physics/physics-worker-protocol.d.ts +144 -0
  178. package/dist/physics/physics-worker-protocol.d.ts.map +1 -0
  179. package/dist/physics/physics-worker-protocol.js +41 -0
  180. package/dist/physics/physics-worker-protocol.js.map +1 -0
  181. package/dist/physics/physics-worker-utils.d.ts +8 -0
  182. package/dist/physics/physics-worker-utils.d.ts.map +1 -0
  183. package/dist/physics/physics-worker-utils.js +12 -0
  184. package/dist/physics/physics-worker-utils.js.map +1 -0
  185. package/dist/physics/physics-worker.d.ts +8 -0
  186. package/dist/physics/physics-worker.d.ts.map +1 -0
  187. package/dist/physics/physics-worker.js +66 -0
  188. package/dist/physics/physics-worker.js.map +1 -0
  189. package/dist/physics/physicsBody.js.map +1 -1
  190. package/dist/physics/physicsManipulation.js.map +1 -1
  191. package/dist/physics/physicsShape.js.map +1 -1
  192. package/dist/physics/utils.js.map +1 -1
  193. package/dist/project/normalize.js +7 -1
  194. package/dist/project/normalize.js.map +1 -1
  195. package/dist/project/paths.js.map +1 -1
  196. package/dist/project/types.d.ts +7 -1
  197. package/dist/project/types.d.ts.map +1 -1
  198. package/dist/project/types.js.map +1 -1
  199. package/dist/project/validation.js +36 -2
  200. package/dist/project/validation.js.map +1 -1
  201. package/dist/runtime/three.js.map +1 -1
  202. package/dist/scene-understanding/anchor.js.map +1 -1
  203. package/dist/scene-understanding/mesh.js.map +1 -1
  204. package/dist/scene-understanding/plane.js.map +1 -1
  205. package/dist/scene-understanding/scene-understanding-system.d.ts +42 -6
  206. package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
  207. package/dist/scene-understanding/scene-understanding-system.js +391 -106
  208. package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
  209. package/dist/schemas/iwsdk-project.v1.schema.json +20 -1
  210. package/dist/transform/synced-euler.js.map +1 -1
  211. package/dist/transform/synced-quaternion.js.map +1 -1
  212. package/dist/transform/synced-vector3.js.map +1 -1
  213. package/dist/transform/transform-component.js.map +1 -1
  214. package/dist/transform/transform-utils.js.map +1 -1
  215. package/dist/transform/transform.js.map +1 -1
  216. package/dist/ui/document.js.map +1 -1
  217. package/dist/ui/follow-component.js.map +1 -1
  218. package/dist/ui/follow.d.ts.map +1 -1
  219. package/dist/ui/follow.js +0 -1
  220. package/dist/ui/follow.js.map +1 -1
  221. package/dist/ui/panel-components.js.map +1 -1
  222. package/dist/ui/screenspace-component.js.map +1 -1
  223. package/dist/ui/screenspace.js.map +1 -1
  224. package/dist/ui/ui.js.map +1 -1
  225. package/dist/ui/uikitml-asset.js.map +1 -1
  226. package/dist/ui/uikitml.js.map +1 -1
  227. package/dist/version.d.ts +1 -1
  228. package/dist/version.d.ts.map +1 -1
  229. package/dist/version.js +1 -1
  230. package/dist/version.js.map +1 -1
  231. package/dist/visibility/visibility-component.js.map +1 -1
  232. package/dist/visibility/visibility.js.map +1 -1
  233. package/package.json +5 -5
@@ -60,6 +60,7 @@ class DepthSensingSystem extends createSystem({
60
60
  // Depth data storage
61
61
  this.cpuDepthData = [];
62
62
  this.gpuDepthData = [];
63
+ this.hasCurrentFrameDepthData = false;
63
64
  // Occlusion
64
65
  this.entityShaderMap = new Map();
65
66
  this.viewportSize = new Vector2();
@@ -79,6 +80,7 @@ class DepthSensingSystem extends createSystem({
79
80
  }
80
81
  init() {
81
82
  const onSessionStart = () => {
83
+ this.cleanup();
82
84
  this.updateEnabledFeatures(this.xrManager.getSession());
83
85
  };
84
86
  const onSessionEnd = () => {
@@ -120,6 +122,7 @@ class DepthSensingSystem extends createSystem({
120
122
  // system is torn down mid-session.
121
123
  this.cleanupFuncs.push(() => {
122
124
  var _a, _b;
125
+ this.clearAllOcclusionUniforms();
123
126
  (_a = this.depthTextures) === null || _a === void 0 ? void 0 : _a.dispose();
124
127
  this.depthTextures = undefined;
125
128
  (_b = this.preprocessingPass) === null || _b === void 0 ? void 0 : _b.dispose();
@@ -169,8 +172,25 @@ class DepthSensingSystem extends createSystem({
169
172
  });
170
173
  }
171
174
  detachOcclusionFromEntity(entity) {
175
+ const entityUniforms = this.entityShaderMap.get(entity);
176
+ if (entityUniforms) {
177
+ this.clearOcclusionUniforms(entityUniforms);
178
+ }
172
179
  this.entityShaderMap.delete(entity);
173
180
  }
181
+ clearOcclusionUniforms(entityUniforms) {
182
+ for (const uniforms of entityUniforms) {
183
+ uniforms.occlusionEnabled.value = false;
184
+ uniforms.uXRDepthTextureArray.value = null;
185
+ uniforms.uMinMaxTexture0.value = null;
186
+ uniforms.uMinMaxTexture1.value = null;
187
+ }
188
+ }
189
+ clearAllOcclusionUniforms() {
190
+ for (const entityUniforms of this.entityShaderMap.values()) {
191
+ this.clearOcclusionUniforms(entityUniforms);
192
+ }
193
+ }
174
194
  /**
175
195
  * Modifies a material's shader in-place to incorporate inline depth-based
176
196
  * occlusion. Compares the virtual fragment's view-space depth against the
@@ -303,6 +323,12 @@ class DepthSensingSystem extends createSystem({
303
323
  this.depthFeatureEnabled = undefined;
304
324
  this.cpuDepthData = [];
305
325
  this.gpuDepthData = [];
326
+ this.hasCurrentFrameDepthData = false;
327
+ // The occlusion materials continue rendering after an immersive session
328
+ // ends. Clear every session-owned texture before disposing the min/max
329
+ // render targets, otherwise WebGL attempts to bind those deleted textures
330
+ // in the non-immersive frame (and again when the next session starts).
331
+ this.clearAllOcclusionUniforms();
306
332
  (_a = this.preprocessingPass) === null || _a === void 0 ? void 0 : _a.dispose();
307
333
  this.preprocessingPass = undefined;
308
334
  }
@@ -320,14 +346,27 @@ class DepthSensingSystem extends createSystem({
320
346
  if (!this.depthFeatureEnabled) {
321
347
  return;
322
348
  }
349
+ // XR depth information is frame-scoped. A runtime may temporarily return
350
+ // no depth data while the session remains active, so never carry readiness
351
+ // (or the public depth information objects) across animation frames.
352
+ this.hasCurrentFrameDepthData = false;
353
+ this.cpuDepthData.length = 0;
354
+ this.gpuDepthData.length = 0;
323
355
  const frame = this.xrFrame;
324
356
  if (frame) {
325
357
  this.updateLocalDepth(frame);
326
358
  }
359
+ if (!this.hasCurrentFrameDepthData) {
360
+ this.clearAllOcclusionUniforms();
361
+ return;
362
+ }
327
363
  if (this.config.enableOcclusion.value) {
328
364
  this.runMinMaxPreprocessing();
329
365
  this.updateOcclusionUniforms();
330
366
  }
367
+ else {
368
+ this.clearAllOcclusionUniforms();
369
+ }
331
370
  }
332
371
  /**
333
372
  * Runs the MinMax depth preprocessing pass if any entity uses MinMaxSoftOcclusion.
@@ -340,6 +379,9 @@ class DepthSensingSystem extends createSystem({
340
379
  }
341
380
  getDepthTextureArray() {
342
381
  var _a, _b;
382
+ if (!this.hasCurrentFrameDepthData) {
383
+ return undefined;
384
+ }
343
385
  return this.isGPUDepth
344
386
  ? (_a = this.depthTextures) === null || _a === void 0 ? void 0 : _a.getNativeTexture()
345
387
  : (_b = this.depthTextures) === null || _b === void 0 ? void 0 : _b.getDataArrayTexture();
@@ -394,21 +436,32 @@ class DepthSensingSystem extends createSystem({
394
436
  // views. We only need to update the ExternalTexture once using the
395
437
  // first view's depth data.
396
438
  const view = pose.views[0];
439
+ if (!view) {
440
+ return;
441
+ }
397
442
  const depthData = binding.getDepthInformation(view);
398
443
  if (depthData) {
399
444
  this.updateGPUDepthData(depthData);
445
+ this.hasCurrentFrameDepthData = true;
400
446
  }
401
447
  }
402
448
  else {
403
449
  // CPU path: each view has its own DataTexture.
450
+ const frameDepthData = [];
404
451
  for (let viewId = 0; viewId < pose.views.length; ++viewId) {
405
452
  const view = pose.views[viewId];
406
453
  const depthData = frame.getDepthInformation(view);
407
454
  if (!depthData) {
408
455
  return;
409
456
  }
410
- this.updateCPUDepthData(depthData, viewId);
457
+ frameDepthData.push(depthData);
458
+ }
459
+ // Commit the stereo sample atomically. Updating one eye before the
460
+ // other reports missing would create a mixed-frame depth texture.
461
+ for (let viewId = 0; viewId < frameDepthData.length; ++viewId) {
462
+ this.updateCPUDepthData(frameDepthData[viewId], viewId);
411
463
  }
464
+ this.hasCurrentFrameDepthData = frameDepthData.length > 0;
412
465
  }
413
466
  }
414
467
  }
@@ -440,6 +493,7 @@ class DepthSensingSystem extends createSystem({
440
493
  var _a, _b;
441
494
  const depthTextureArray = this.getDepthTextureArray();
442
495
  if (!depthTextureArray) {
496
+ this.clearAllOcclusionUniforms();
443
497
  return;
444
498
  }
445
499
  const isGPUDepth = this.isGPUDepth;
@@ -1 +1 @@
1
- {"version":3,"file":"depth-sensing-system.js","sources":["../../src/depth/depth-sensing-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"depth-sensing-system.js","sources":["../../src/depth/depth-sensing-system.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Types } from '../ecs/component.js';\nimport { Entity } from '../ecs/entity.js';\nimport { createSystem } from '../ecs/system.js';\nimport { type IUniform, Mesh, Texture, Vector2 } from '../runtime/three.js';\nimport { DepthOccludable, OcclusionShadersMode } from './depth-occludable.js';\nimport { DepthTextures } from './depth-textures.js';\nimport { DepthPreprocessingPass } from './occlusion/preprocessing-pass.js';\n\ntype ShaderUniforms = { [uniform: string]: IUniform };\n\ninterface Shader {\n uniforms: ShaderUniforms;\n defines?: { [key: string]: unknown };\n vertexShader: string;\n fragmentShader: string;\n}\n\n/**\n * DepthSensingSystem - Manages WebXR depth sensing and occlusion.\n *\n * @remarks\n * - Automatically retrieves and processes depth data from WebXR sessions.\n * - Supports both CPU-optimized and GPU-optimized depth sensing.\n * - Enables occlusion of virtual objects behind real-world surfaces.\n * - Requires WebXR session feature: 'depth-sensing'.\n * NOTE: The depth occlusion feature may not be compatible with custom shaders.\n *\n * @example Basic depth sensing setup\n * ```ts\n * // Configure world with depth sensing\n * World.create(document.getElementById('scene-container'), {\n * xr: {\n * sessionMode: SessionMode.ImmersiveAR,\n * features: {\n * depthSensing: { usage: 'gpu-optimized', format: 'float32' }\n * },\n * }\n * })\n *\n * // Add the depth sensing system\n * world.registerSystem(DepthSensingSystem)\n * ```\n *\n * @example Enable occlusion for an object\n * ```ts\n * const cube = world.createTransformEntity(cubeObject)\n * cube.addComponent(DepthOccludable) // Will be occluded by real-world geometry\n * ```\n *\n * @category Depth Sensing\n * @see {@link DepthOccludable}\n */\nexport class DepthSensingSystem extends createSystem(\n {\n occludables: { required: [DepthOccludable] },\n },\n {\n enableOcclusion: { type: Types.Boolean, default: true },\n enableDepthTexture: { type: Types.Boolean, default: true },\n useFloat32: { type: Types.Boolean, default: true },\n blurRadius: { type: Types.Float32, default: 20.0 },\n },\n) {\n private depthFeatureEnabled: boolean | undefined;\n\n // Depth data storage\n cpuDepthData: XRCPUDepthInformation[] = [];\n gpuDepthData: XRWebGLDepthInformation[] = [];\n private hasCurrentFrameDepthData = false;\n private depthTextures?: DepthTextures;\n\n // Occlusion\n private entityShaderMap = new Map<Entity, Set<ShaderUniforms>>();\n private readonly viewportSize = new Vector2();\n private preprocessingPass?: DepthPreprocessingPass;\n private minMaxEntityCount = 0;\n\n /**\n * Get the raw value to meters conversion factor.\n */\n get rawValueToMeters(): number {\n if (this.cpuDepthData.length) {\n return this.cpuDepthData[0].rawValueToMeters;\n } else if (this.gpuDepthData.length) {\n return this.gpuDepthData[0].rawValueToMeters;\n }\n return 0;\n }\n\n init(): void {\n const onSessionStart = () => {\n this.cleanup();\n this.updateEnabledFeatures(this.xrManager.getSession());\n };\n const onSessionEnd = () => {\n this.cleanup();\n };\n this.xrManager.addEventListener('sessionstart', onSessionStart);\n this.xrManager.addEventListener('sessionend', onSessionEnd);\n this.cleanupFuncs.push(() => {\n this.xrManager.removeEventListener('sessionstart', onSessionStart);\n this.xrManager.removeEventListener('sessionend', onSessionEnd);\n });\n\n // React to config changes. subscribe() returns an unsubscribe function;\n // register it for teardown so the callback (and its closure over `this`)\n // does not outlive the system.\n this.cleanupFuncs.push(\n this.config.enableDepthTexture.subscribe((enabled) => {\n if (enabled && !this.depthTextures) {\n this.initializeDepthTextures();\n }\n }),\n );\n\n this.cleanupFuncs.push(\n this.queries.occludables.subscribe(\n 'qualify',\n (entity: Entity) => {\n this.attachOcclusionToEntity(entity);\n if (\n DepthOccludable.data.mode[entity.index] ===\n OcclusionShadersMode.MinMaxSoftOcclusion\n ) {\n this.minMaxEntityCount++;\n }\n },\n true,\n ),\n this.queries.occludables.subscribe('disqualify', (entity: Entity) => {\n if (\n DepthOccludable.data.mode[entity.index] ===\n OcclusionShadersMode.MinMaxSoftOcclusion\n ) {\n this.minMaxEntityCount--;\n }\n this.detachOcclusionFromEntity(entity);\n }),\n );\n\n // Release GPU-backed resources on system teardown. `depthTextures` is\n // created once (the enableDepthTexture subscription fires immediately) and\n // reused across XR sessions, so it must be disposed on destroy() rather\n // than in cleanup() (sessionend) — disposing it per session would leave a\n // subsequent session with no depth textures. preprocessingPass is normally\n // released in cleanup() on sessionend; dispose it here too in case the\n // system is torn down mid-session.\n this.cleanupFuncs.push(() => {\n this.clearAllOcclusionUniforms();\n this.depthTextures?.dispose();\n this.depthTextures = undefined;\n this.preprocessingPass?.dispose();\n this.preprocessingPass = undefined;\n });\n }\n\n private initializeDepthTextures(): void {\n this.depthTextures = new DepthTextures(this.config.useFloat32.value);\n }\n\n /**\n * Injects inline depth occlusion shader code into all materials of an entity.\n */\n private attachOcclusionToEntity(entity: Entity): void {\n const object3D = entity.object3D;\n if (!object3D) {\n return;\n }\n\n const entityUniforms = new Set<ShaderUniforms>();\n this.entityShaderMap.set(entity, entityUniforms);\n\n object3D.traverse((child) => {\n if (!(child instanceof Mesh)) {\n return;\n }\n\n const materials = Array.isArray(child.material)\n ? child.material\n : [child.material];\n\n for (const material of materials) {\n if (!material) {\n continue;\n }\n material.transparent = true;\n const existingCallback = material.onBeforeCompile?.bind(material);\n material.onBeforeCompile = (shader: any, renderer: any) => {\n if (existingCallback) {\n existingCallback(shader, renderer);\n }\n // Only inject occlusion if not already present\n if (!shader.uniforms.occlusionEnabled) {\n DepthSensingSystem.addOcclusionToShader(shader);\n }\n material.userData.shader = shader;\n entityUniforms.add(shader.uniforms);\n };\n material.needsUpdate = true;\n }\n });\n }\n\n private detachOcclusionFromEntity(entity: Entity): void {\n const entityUniforms = this.entityShaderMap.get(entity);\n\n if (entityUniforms) {\n this.clearOcclusionUniforms(entityUniforms);\n }\n\n this.entityShaderMap.delete(entity);\n }\n\n private clearOcclusionUniforms(\n entityUniforms: Iterable<ShaderUniforms>,\n ): void {\n for (const uniforms of entityUniforms) {\n uniforms.occlusionEnabled.value = false;\n uniforms.uXRDepthTextureArray.value = null;\n uniforms.uMinMaxTexture0.value = null;\n uniforms.uMinMaxTexture1.value = null;\n }\n }\n\n private clearAllOcclusionUniforms(): void {\n for (const entityUniforms of this.entityShaderMap.values()) {\n this.clearOcclusionUniforms(entityUniforms);\n }\n }\n\n /**\n * Modifies a material's shader in-place to incorporate inline depth-based\n * occlusion. Compares the virtual fragment's view-space depth against the\n * real-world depth from the XR depth texture array.\n * Both GPU-optimized (ExternalTexture) and CPU-optimized (DataArrayTexture)\n * paths use sampler2DArray with VIEW_ID for correct stereo depth sampling.\n * @param shader - The shader object provided by onBeforeCompile.\n */\n private static addOcclusionToShader(shader: Shader): void {\n shader.uniforms.occlusionEnabled = { value: false };\n shader.uniforms.uXRDepthTextureArray = { value: null };\n shader.uniforms.uRawValueToMeters = { value: 0.001 };\n shader.uniforms.uIsGPUDepth = { value: false };\n shader.uniforms.uDepthNear = { value: 0 };\n shader.uniforms.uViewportSize = { value: new Vector2() };\n shader.uniforms.uOcclusionBlurRadius = { value: 20.0 };\n shader.uniforms.uOcclusionHardMode = { value: false };\n shader.uniforms.uOcclusionMinMaxMode = { value: false };\n shader.uniforms.uMinMaxTexture0 = { value: null };\n shader.uniforms.uMinMaxTexture1 = { value: null };\n\n shader.defines = {\n ...(shader.defines ?? {}),\n USE_UV: true,\n };\n\n // Vertex shader: compute view-space depth for occlusion comparison\n shader.vertexShader = shader.vertexShader\n .replace(\n '#include <common>',\n ['varying float vOcclusionViewDepth;', '#include <common>'].join('\\n'),\n )\n .replace(\n '#include <fog_vertex>',\n [\n '#include <fog_vertex>',\n 'vec4 occlusion_view_pos = modelViewMatrix * vec4(position, 1.0);',\n 'vOcclusionViewDepth = -occlusion_view_pos.z;',\n ].join('\\n'),\n );\n\n // Fragment shader: sample XR depth array and compare against virtual depth\n shader.fragmentShader = shader.fragmentShader\n .replace(\n 'uniform vec3 diffuse;',\n [\n 'uniform vec3 diffuse;',\n 'uniform bool occlusionEnabled;',\n 'uniform float uRawValueToMeters;',\n 'uniform bool uIsGPUDepth;',\n 'uniform float uDepthNear;',\n 'uniform vec2 uViewportSize;',\n 'uniform float uOcclusionBlurRadius;',\n 'uniform bool uOcclusionHardMode;',\n 'uniform bool uOcclusionMinMaxMode;',\n 'uniform sampler2D uMinMaxTexture0;',\n 'uniform sampler2D uMinMaxTexture1;',\n 'varying float vOcclusionViewDepth;',\n '',\n 'uniform sampler2DArray uXRDepthTextureArray;',\n '',\n '// Fallback for non-multiview sessions',\n '#ifndef VIEW_ID',\n '#define VIEW_ID 0',\n '#endif',\n '',\n 'float OcclusionDepthGetMeters(in vec2 uv) {',\n ' float textureValue = texture(uXRDepthTextureArray, vec3(uv.x, uv.y, float(VIEW_ID))).r;',\n ' if (uIsGPUDepth) {',\n ' return uRawValueToMeters * uDepthNear / (1.0 - textureValue);',\n ' }',\n ' return textureValue * uRawValueToMeters;',\n '}',\n '',\n 'float OcclusionGetSample(in vec2 depthUV, in vec2 offset) {',\n ' float sampleDepth = OcclusionDepthGetMeters(depthUV + offset);',\n ' return smoothstep(0.0, 0.05, sampleDepth - vOcclusionViewDepth);',\n '}',\n ].join('\\n'),\n )\n .replace(\n 'vec4 diffuseColor = vec4( diffuse, opacity );',\n [\n 'vec4 diffuseColor = vec4( diffuse, opacity );',\n 'if (occlusionEnabled) {',\n ' vec2 screenUV = gl_FragCoord.xy / uViewportSize;',\n ' vec2 depthUV = uIsGPUDepth ? screenUV : vec2(screenUV.x, 1.0 - screenUV.y);',\n ' float occlusion_value;',\n ' if (uOcclusionMinMaxMode) {',\n ' // MinMax soft occlusion — two-cluster edge-aware blending',\n ' vec4 mmData;',\n ' if (uint(VIEW_ID) == 0u) {',\n ' mmData = texture2D(uMinMaxTexture0, depthUV);',\n ' } else {',\n ' mmData = texture2D(uMinMaxTexture1, depthUV);',\n ' }',\n ' float minAvgDepth = mmData.r;',\n ' float maxAvgDepth = mmData.g;',\n ' float midAvgDepth = mmData.r + mmData.b;',\n ' float fadeRange = vOcclusionViewDepth * 0.04;',\n ' float fadeRangeInv = 1.0 / max(fadeRange, 0.001);',\n ' vec3 envDepths = vec3(minAvgDepth, maxAvgDepth, midAvgDepth);',\n ' vec3 occAlphas = clamp((envDepths - vOcclusionViewDepth) * fadeRangeInv, 0.0, 1.0);',\n ' occlusion_value = occAlphas.z;',\n ' float alphaDiff = occAlphas.y - occAlphas.x;',\n ' if (alphaDiff > 0.03) {',\n ' float denom = mmData.a;',\n ' float interp = denom > 0.001 ? mmData.b / denom : 0.5;',\n ' occlusion_value = mix(occAlphas.x, occAlphas.y, smoothstep(0.2, 0.8, interp));',\n ' }',\n ' } else if (uOcclusionHardMode) {',\n ' occlusion_value = OcclusionGetSample(depthUV, vec2(0.0));',\n ' } else {',\n ' vec2 texelSize = uOcclusionBlurRadius / uViewportSize;',\n ' // 13-tap two-ring sampling pattern for smooth occlusion edges',\n ' // Center sample',\n ' occlusion_value = OcclusionGetSample(depthUV, vec2(0.0));',\n ' // Inner ring: 6 samples at 40% radius, 60 degree intervals',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2( 0.4, 0.0));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2( 0.2, 0.346));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2(-0.2, 0.346));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2(-0.4, 0.0));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2(-0.2, -0.346));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2( 0.2, -0.346));',\n ' // Outer ring: 6 samples at full radius, offset 30 degrees',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2( 0.866, 0.5));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2( 0.0, 1.0));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2(-0.866, 0.5));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2(-0.866, -0.5));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2( 0.0, -1.0));',\n ' occlusion_value += OcclusionGetSample(depthUV, texelSize * vec2( 0.866, -0.5));',\n ' occlusion_value /= 13.0;',\n ' }',\n ' if (occlusion_value < 0.01) {',\n ' discard;',\n ' }',\n ' diffuseColor.a *= occlusion_value;',\n '}',\n ].join('\\n'),\n );\n }\n\n private cleanup(): void {\n this.depthFeatureEnabled = undefined;\n this.cpuDepthData = [];\n this.gpuDepthData = [];\n this.hasCurrentFrameDepthData = false;\n\n // The occlusion materials continue rendering after an immersive session\n // ends. Clear every session-owned texture before disposing the min/max\n // render targets, otherwise WebGL attempts to bind those deleted textures\n // in the non-immersive frame (and again when the next session starts).\n this.clearAllOcclusionUniforms();\n\n this.preprocessingPass?.dispose();\n this.preprocessingPass = undefined;\n }\n\n private updateEnabledFeatures(xrSession: XRSession | null): void {\n if (!xrSession) {\n return;\n }\n\n const enabledFeatures = xrSession.enabledFeatures;\n this.depthFeatureEnabled = enabledFeatures?.includes('depth-sensing');\n\n if (!this.depthFeatureEnabled) {\n console.log(\n 'Warning: depth-sensing feature not enabled for WebXR session. Depth sensing features are disabled.',\n );\n }\n }\n\n update(): void {\n if (!this.depthFeatureEnabled) {\n return;\n }\n\n // XR depth information is frame-scoped. A runtime may temporarily return\n // no depth data while the session remains active, so never carry readiness\n // (or the public depth information objects) across animation frames.\n this.hasCurrentFrameDepthData = false;\n this.cpuDepthData.length = 0;\n this.gpuDepthData.length = 0;\n\n const frame = this.xrFrame;\n if (frame) {\n this.updateLocalDepth(frame);\n }\n\n if (!this.hasCurrentFrameDepthData) {\n this.clearAllOcclusionUniforms();\n return;\n }\n\n if (this.config.enableOcclusion.value) {\n this.runMinMaxPreprocessing();\n this.updateOcclusionUniforms();\n } else {\n this.clearAllOcclusionUniforms();\n }\n }\n\n /**\n * Runs the MinMax depth preprocessing pass if any entity uses MinMaxSoftOcclusion.\n * Renders a fullscreen pass per eye that computes min/max/avg depth in a 4×4\n * neighborhood, outputting to per-view 2D render targets.\n */\n private get isGPUDepth(): boolean {\n const session = this.xrManager.getSession();\n return session?.depthUsage === 'gpu-optimized';\n }\n\n private getDepthTextureArray(): Texture | undefined {\n if (!this.hasCurrentFrameDepthData) {\n return undefined;\n }\n\n return this.isGPUDepth\n ? this.depthTextures?.getNativeTexture()\n : this.depthTextures?.getDataArrayTexture();\n }\n\n private runMinMaxPreprocessing(): void {\n if (this.minMaxEntityCount === 0) {\n return;\n }\n\n const depthTextureArray = this.getDepthTextureArray();\n if (!depthTextureArray) {\n return;\n }\n\n const isGPUDepth = this.isGPUDepth;\n const depthNear =\n (this.gpuDepthData[0] as unknown as { depthNear: number } | undefined)\n ?.depthNear ?? 0;\n\n if (!this.preprocessingPass) {\n this.preprocessingPass = new DepthPreprocessingPass();\n }\n\n this.preprocessingPass.setDepthTexture(\n depthTextureArray,\n this.rawValueToMeters,\n isGPUDepth,\n depthNear,\n );\n\n // Determine depth texture dimensions\n let depthWidth: number;\n let depthHeight: number;\n if (this.cpuDepthData[0]) {\n depthWidth = this.cpuDepthData[0].width;\n depthHeight = this.cpuDepthData[0].height;\n } else if (this.gpuDepthData[0]) {\n // GPU depth textures have their own resolution (typically ~256×192),\n // which is much smaller than the drawing buffer.\n depthWidth = this.gpuDepthData[0].width;\n depthHeight = this.gpuDepthData[0].height;\n } else {\n return; // No depth data available\n }\n\n // Render preprocessing for both eyes\n this.preprocessingPass.render(this.renderer, depthWidth, depthHeight, 0);\n this.preprocessingPass.render(this.renderer, depthWidth, depthHeight, 1);\n }\n\n /**\n * Updates depth data from the XR frame.\n */\n private updateLocalDepth(frame: XRFrame): void {\n const session = frame.session;\n const binding = this.renderer.xr.getBinding();\n\n const xrRefSpace = this.renderer.xr.getReferenceSpace();\n if (xrRefSpace) {\n const pose = frame.getViewerPose(xrRefSpace);\n if (pose) {\n if (session.depthUsage === 'gpu-optimized') {\n // GPU path: the native texture is a texture array containing all\n // views. We only need to update the ExternalTexture once using the\n // first view's depth data.\n const view = pose.views[0];\n if (!view) {\n return;\n }\n const depthData = binding.getDepthInformation(view);\n if (depthData) {\n this.updateGPUDepthData(depthData);\n this.hasCurrentFrameDepthData = true;\n }\n } else {\n // CPU path: each view has its own DataTexture.\n const frameDepthData: XRCPUDepthInformation[] = [];\n for (let viewId = 0; viewId < pose.views.length; ++viewId) {\n const view = pose.views[viewId];\n const depthData = frame.getDepthInformation(view);\n if (!depthData) {\n return;\n }\n frameDepthData.push(depthData);\n }\n\n // Commit the stereo sample atomically. Updating one eye before the\n // other reports missing would create a mixed-frame depth texture.\n for (let viewId = 0; viewId < frameDepthData.length; ++viewId) {\n this.updateCPUDepthData(frameDepthData[viewId], viewId);\n }\n this.hasCurrentFrameDepthData = frameDepthData.length > 0;\n }\n }\n }\n }\n\n /**\n * Update with CPU-optimized depth data.\n */\n private updateCPUDepthData(\n depthData: XRCPUDepthInformation,\n viewId = 0,\n ): void {\n this.cpuDepthData[viewId] = depthData;\n\n if (this.config.enableDepthTexture.value && this.depthTextures) {\n this.depthTextures.updateData(depthData, viewId);\n }\n }\n\n /**\n * Update with GPU-optimized depth data.\n */\n private updateGPUDepthData(depthData: XRWebGLDepthInformation): void {\n this.gpuDepthData[0] = depthData;\n\n if (this.config.enableDepthTexture.value && this.depthTextures) {\n this.depthTextures.updateNativeTexture(depthData, this.renderer);\n }\n }\n\n /**\n * Updates depth texture uniforms on all occludable materials each frame.\n * Both GPU and CPU paths set the texture array uniform; the shader uses\n * VIEW_ID to select the correct stereo layer.\n */\n private updateOcclusionUniforms(): void {\n const depthTextureArray = this.getDepthTextureArray();\n if (!depthTextureArray) {\n this.clearAllOcclusionUniforms();\n return;\n }\n\n const isGPUDepth = this.isGPUDepth;\n const depthNear =\n (this.gpuDepthData[0] as unknown as { depthNear: number } | undefined)\n ?.depthNear ?? 0;\n\n this.renderer.getDrawingBufferSize(this.viewportSize);\n\n for (const [entity, entityUniforms] of this.entityShaderMap) {\n const isHardMode =\n DepthOccludable.data.mode[entity.index] ===\n OcclusionShadersMode.HardOcclusion;\n const isMinMaxMode =\n DepthOccludable.data.mode[entity.index] ===\n OcclusionShadersMode.MinMaxSoftOcclusion;\n\n for (const uniforms of entityUniforms) {\n uniforms.uXRDepthTextureArray.value = depthTextureArray;\n uniforms.uRawValueToMeters.value = this.rawValueToMeters;\n uniforms.uIsGPUDepth.value = isGPUDepth;\n uniforms.uDepthNear.value = depthNear;\n (uniforms.uViewportSize.value as Vector2).copy(this.viewportSize);\n uniforms.uOcclusionBlurRadius.value = this.config.blurRadius.value;\n uniforms.uOcclusionHardMode.value = isHardMode;\n uniforms.uOcclusionMinMaxMode.value = isMinMaxMode;\n uniforms.occlusionEnabled.value = this.config.enableOcclusion.value;\n\n if (isMinMaxMode && this.preprocessingPass) {\n uniforms.uMinMaxTexture0.value = this.preprocessingPass.getTexture(0);\n uniforms.uMinMaxTexture1.value = this.preprocessingPass.getTexture(1);\n }\n }\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"depth-textures.js","sources":["../../src/depth/depth-textures.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"depth-textures.js","sources":["../../src/depth/depth-textures.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n DataArrayTexture,\n ExternalTexture,\n FloatType,\n RedFormat,\n RGFormat,\n UnsignedByteType,\n WebGLRenderer,\n} from '../runtime/three.js';\n/**\n * Manages depth textures from WebXR depth sensing.\n * Supports both CPU-optimized (DataArrayTexture) and GPU-optimized (ExternalTexture) depth data.\n */\nexport class DepthTextures {\n private nativeTexture?: ExternalTexture;\n private dataArrayTexture?: DataArrayTexture;\n private combinedArray?: Float32Array | Uint8Array;\n\n constructor(private useFloat32: boolean) {}\n\n /**\n * Create or recreate the DataArrayTexture for stereo CPU depth.\n * Packs per-view depth data into a single texture array (depth=2)\n * so the shader can select the correct layer via VIEW_ID.\n */\n private createDataArrayTexture(width: number, height: number): void {\n if (this.dataArrayTexture) {\n this.dataArrayTexture.dispose();\n }\n const depth = 2; // stereo: left + right eye\n if (this.useFloat32) {\n const pixelsPerLayer = width * height;\n this.combinedArray = new Float32Array(pixelsPerLayer * depth);\n this.dataArrayTexture = new DataArrayTexture(\n this.combinedArray,\n width,\n height,\n depth,\n );\n this.dataArrayTexture.format = RedFormat;\n this.dataArrayTexture.type = FloatType;\n } else {\n const bytesPerLayer = width * height * 2;\n this.combinedArray = new Uint8Array(bytesPerLayer * depth);\n this.dataArrayTexture = new DataArrayTexture(\n this.combinedArray,\n width,\n height,\n depth,\n );\n this.dataArrayTexture.format = RGFormat;\n this.dataArrayTexture.type = UnsignedByteType;\n }\n }\n\n /**\n * Update the depth texture with new CPU depth data.\n * Copies per-view data into the correct layer of the DataArrayTexture.\n * @param depthData - The CPU depth information from WebXR.\n * @param viewId - The view index (0 for left eye, 1 for right eye).\n */\n updateData(depthData: XRCPUDepthInformation, viewId: number): void {\n // Recreate the DataArrayTexture if dimensions changed or it doesn't exist\n if (\n !this.dataArrayTexture ||\n this.dataArrayTexture.image.width !== depthData.width ||\n this.dataArrayTexture.image.height !== depthData.height\n ) {\n this.createDataArrayTexture(depthData.width, depthData.height);\n }\n\n if (this.useFloat32) {\n const viewData = new Float32Array(depthData.data);\n const layerSize = depthData.width * depthData.height;\n (this.combinedArray as Float32Array).set(viewData, viewId * layerSize);\n } else {\n const viewData = new Uint8Array(depthData.data);\n const layerSize = depthData.width * depthData.height * 2;\n (this.combinedArray as Uint8Array).set(viewData, viewId * layerSize);\n }\n\n this.dataArrayTexture!.addLayerUpdate(viewId);\n this.dataArrayTexture!.needsUpdate = true;\n }\n\n /**\n * Update the depth texture with native GPU texture from WebXR.\n * The native texture is a texture array containing both eyes' depth data.\n * @param depthData - The GPU depth information from WebXR.\n * @param renderer - The WebGL renderer.\n */\n updateNativeTexture(\n depthData: XRWebGLDepthInformation,\n renderer: WebGLRenderer,\n ): void {\n if (!this.nativeTexture) {\n this.nativeTexture = new ExternalTexture(depthData.texture);\n } else {\n this.nativeTexture.sourceTexture = depthData.texture;\n }\n // Update the texture properties for three.js\n const textureProperties = renderer.properties.get(this.nativeTexture) as {\n __webglTexture: WebGLTexture;\n __version: number;\n };\n textureProperties.__webglTexture = depthData.texture;\n textureProperties.__version = 1;\n }\n\n /**\n * Get the native GPU depth texture array.\n * Contains both eyes' depth data; the shader uses VIEW_ID to select the layer.\n */\n getNativeTexture(): ExternalTexture | undefined {\n return this.nativeTexture;\n }\n\n /**\n * Get the CPU depth data as a DataArrayTexture.\n * Contains per-view depth packed into layers; the shader uses VIEW_ID to select the layer.\n */\n getDataArrayTexture(): DataArrayTexture | undefined {\n return this.dataArrayTexture;\n }\n\n /**\n * Dispose of all depth textures.\n */\n dispose(): void {\n this.dataArrayTexture?.dispose();\n this.dataArrayTexture = undefined;\n this.combinedArray = undefined;\n this.nativeTexture = undefined;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"preprocessing-pass.js","sources":["../../../src/depth/occlusion/preprocessing-pass.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preprocessing-pass.js","sources":["../../../src/depth/occlusion/preprocessing-pass.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { FullScreenQuad } from 'three/examples/jsm/postprocessing/Pass.js';\nimport {\n FloatType,\n RGBAFormat,\n ShaderMaterial,\n Texture,\n Vector2,\n WebGLRenderer,\n WebGLRenderTarget,\n} from '../../runtime/three.js';\nimport { DepthPreprocessingShader } from './preprocessing-shader.glsl.js';\n\n/**\n * Depth preprocessing pass — ported from Meta SDK DepthPreprocessing.shader.\n *\n * Runs a single fullscreen pass on the raw XR depth texture at depth texture\n * resolution (~256×192). For each output texel it samples a 4×4 neighborhood\n * and computes min/max/avg depth, writing the result to an RGBA float target:\n *\n * RGBA = (minAvg, maxAvg, avg - minAvg, maxAvg - minAvg) in meters\n *\n * The material shader then samples this preprocessed texture to apply soft\n * occlusion without requiring scene-override renders or Kawase blur.\n */\nexport class DepthPreprocessingPass {\n private material: ShaderMaterial;\n private renderTargets: [WebGLRenderTarget, WebGLRenderTarget];\n private fsQuad: FullScreenQuad;\n\n constructor() {\n this.material = new ShaderMaterial({\n name: 'DepthPreprocessing',\n uniforms: {\n uXRDepthTextureArray: { value: null },\n uRawValueToMeters: { value: 0.001 },\n uViewId: { value: 0 },\n uDepthTextureSize: { value: new Vector2() },\n uIsGPUDepth: { value: false },\n uDepthNear: { value: 0 },\n },\n vertexShader: DepthPreprocessingShader.vertexShader,\n fragmentShader: DepthPreprocessingShader.fragmentShader,\n });\n\n const rtOptions = { format: RGBAFormat, type: FloatType };\n this.renderTargets = [\n new WebGLRenderTarget(1, 1, rtOptions),\n new WebGLRenderTarget(1, 1, rtOptions),\n ];\n\n this.fsQuad = new FullScreenQuad(this.material);\n }\n\n /**\n * Set the depth texture source for preprocessing.\n * @param depthTexture - The XR depth texture array (ExternalTexture or DataArrayTexture).\n * @param rawValueToMeters - Conversion factor from raw depth values to meters.\n * @param isGPUDepth - Whether the depth data is GPU-optimized (inverse depth).\n * @param depthNear - The near plane distance for GPU depth conversion.\n */\n setDepthTexture(\n depthTexture: Texture,\n rawValueToMeters: number,\n isGPUDepth: boolean,\n depthNear: number,\n ): void {\n this.material.uniforms.uXRDepthTextureArray.value = depthTexture;\n this.material.uniforms.uRawValueToMeters.value = rawValueToMeters;\n this.material.uniforms.uIsGPUDepth.value = isGPUDepth;\n this.material.uniforms.uDepthNear.value = depthNear;\n }\n\n /**\n * Render the preprocessing pass.\n * @param renderer - The three.js WebGL renderer.\n * @param depthWidth - Width of the depth texture.\n * @param depthHeight - Height of the depth texture.\n * @param viewId - The view index to render (default 0).\n */\n render(\n renderer: WebGLRenderer,\n depthWidth: number,\n depthHeight: number,\n viewId = 0,\n ): void {\n const target = this.renderTargets[viewId];\n // Only resize if dimensions actually changed\n if (target.width !== depthWidth || target.height !== depthHeight) {\n target.setSize(depthWidth, depthHeight);\n }\n this.material.uniforms.uViewId.value = viewId;\n (this.material.uniforms.uDepthTextureSize.value as Vector2).set(\n depthWidth,\n depthHeight,\n );\n\n const originalRenderTarget = renderer.getRenderTarget();\n // Temporarily disable XR so FullScreenQuad renders with its own\n // identity camera instead of the XR stereo/multiview cameras.\n const xrEnabled = renderer.xr.enabled;\n renderer.xr.enabled = false;\n renderer.setRenderTarget(target);\n this.fsQuad.render(renderer);\n renderer.setRenderTarget(originalRenderTarget);\n renderer.xr.enabled = xrEnabled;\n }\n\n /**\n * Get the preprocessed depth texture for a given view.\n * RGBA = (minAvg, maxAvg, avg - minAvg, maxAvg - minAvg) in meters.\n * @param viewId - The view index (0 for left eye, 1 for right eye).\n */\n getTexture(viewId = 0): Texture {\n return this.renderTargets[viewId].texture;\n }\n\n /**\n * Dispose of all resources.\n */\n dispose(): void {\n for (const target of this.renderTargets) {\n target.dispose();\n }\n this.material.dispose();\n this.fsQuad.dispose();\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"preprocessing-shader.glsl.js","sources":["../../../src/depth/occlusion/preprocessing-shader.glsl.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;AAKG;AAEH;;;;;;;;;AASG;AACI,MAAM,wBAAwB,GAAG;AACtC,IAEA,YAAY,aAAa;;;;;;;AAO1B,CAAA;IAEC,cAAc,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqF5B,CAAA;;;;;"}
1
+ {"version":3,"file":"preprocessing-shader.glsl.js","sources":["../../../src/depth/occlusion/preprocessing-shader.glsl.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * Depth preprocessing shader — ported from Meta SDK DepthPreprocessing.shader.\n *\n * A single fullscreen pass on the raw XR depth texture that computes\n * min/max/avg depth in a 4×4 neighborhood, written to an RGBA float target.\n *\n * Output: vec4(minAvg, maxAvg, avg - minAvg, maxAvg - minAvg) in meters.\n * The interpolation ratio (avg-minAvg)/(maxAvg-minAvg) is deferred to the\n * occlusion shader to preserve bilinear interpolation properties.\n */\nexport const DepthPreprocessingShader = {\n name: 'DepthPreprocessingShader',\n\n vertexShader: /* glsl */ `\nvarying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n`,\n\n fragmentShader: /* glsl */ `\nprecision highp float;\n\nuniform sampler2DArray uXRDepthTextureArray;\nuniform float uRawValueToMeters;\nuniform int uViewId;\nuniform vec2 uDepthTextureSize;\nuniform bool uIsGPUDepth;\nuniform float uDepthNear;\n\nvarying vec2 vUv;\n\nfloat depthToMeters(float textureValue) {\n\tif (uIsGPUDepth) {\n\t\treturn uRawValueToMeters * uDepthNear / (1.0 - textureValue);\n\t}\n\treturn textureValue * uRawValueToMeters;\n}\n\nvoid main() {\n\tvec2 texelSize = 1.0 / uDepthTextureSize;\n\tvec2 baseUV = vUv - texelSize * 1.5;\n\n\t// Single pass: sample 4×4 neighborhood, convert, and store in 4 vec4s\n\tvec4 depths[4];\n\tfloat rawMin = 1e20;\n\tfloat rawMax = 0.0;\n\tfloat sum = 0.0;\n\tint count = 0;\n\n\tfor (int row = 0; row < 4; row++) {\n\t\tfor (int col = 0; col < 4; col++) {\n\t\t\tvec2 sampleUV = baseUV + vec2(float(col), float(row)) * texelSize;\n\t\t\tfloat rawValue = texture(uXRDepthTextureArray, vec3(sampleUV, float(uViewId))).r;\n\t\t\tfloat meters = depthToMeters(rawValue);\n\t\t\tdepths[row][col] = meters;\n\n\t\t\tif (meters > 0.0) {\n\t\t\t\trawMin = min(rawMin, meters);\n\t\t\t\trawMax = max(rawMax, meters);\n\t\t\t\tsum += meters;\n\t\t\t\tcount++;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (count == 0) {\n\t\tgl_FragColor = vec4(0.0);\n\t\treturn;\n\t}\n\n\tfloat avg = sum / float(count);\n\n\t// Group samples near the min (within 115%) and near the max (within 85%)\n\t// to compute stable minAvg and maxAvg — ported from CalculateMinMaxDepth\n\tfloat minThreshold = rawMin * 1.15;\n\tfloat maxThreshold = rawMax * 0.85;\n\n\t// Degenerate case: neighborhood is uniform (within both thresholds)\n\tif (maxThreshold < rawMin && minThreshold > rawMax) {\n\t\tgl_FragColor = vec4(avg, avg, 0.0, 0.0);\n\t\treturn;\n\t}\n\n\t// Vectorized clustering using stored depths — no second sampling loop\n\tfloat minSumDepth = 0.0;\n\tfloat minSumCount = 0.0;\n\tfloat maxSumDepth = 0.0;\n\tfloat maxSumCount = 0.0;\n\n\tfor (int i = 0; i < 4; i++) {\n\t\tvec4 valid = vec4(greaterThan(depths[i], vec4(0.0)));\n\t\tvec4 minMask = vec4(lessThanEqual(depths[i], vec4(minThreshold))) * valid;\n\t\tvec4 maxMask = vec4(greaterThanEqual(depths[i], vec4(maxThreshold))) * valid;\n\t\tminSumDepth += dot(minMask, depths[i]);\n\t\tminSumCount += dot(minMask, vec4(1.0));\n\t\tmaxSumDepth += dot(maxMask, depths[i]);\n\t\tmaxSumCount += dot(maxMask, vec4(1.0));\n\t}\n\n\tfloat minAvg = minSumCount > 0.0 ? minSumDepth / minSumCount : rawMin;\n\tfloat maxAvg = maxSumCount > 0.0 ? maxSumDepth / maxSumCount : rawMax;\n\n\tgl_FragColor = vec4(minAvg, maxAvg, avg - minAvg, maxAvg - minAvg);\n}\n`,\n};\n"],"names":[],"mappings":"AAAA;;;;;AAKG;AAEH;;;;;;;;;AASG;AACI,MAAM,wBAAwB,GAAG;AACtC,IAEA,YAAY,aAAa;;;;;;;AAO1B,CAAA;IAEC,cAAc,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqF5B,CAAA;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"builtin-components.js","sources":["../../src/ecs/builtin-components.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAKG;AAgDH;AACO,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;IACvD,WAAW;IACX,qBAAqB;IACrB,YAAY;IACZ,eAAe;IACf,iBAAiB;IACjB,yBAAyB;IACzB,YAAY;IACZ,WAAW;IACX,wBAAwB;IACxB,QAAQ;IACR,OAAO;IACP,MAAM;IACN,OAAO;IACP,wBAAwB;IACxB,WAAW;IACX,UAAU;IACV,SAAS;IACT,QAAQ;IACR,qBAAqB;IACrB,gBAAgB;IAChB,aAAa;IACb,OAAO;IACP,WAAW;IACX,mBAAmB;IACnB,YAAY;IACZ,mBAAmB;IACnB,gBAAgB;IAChB,OAAO;IACP,eAAe;IACf,sBAAsB;IACtB,WAAW;IACX,kBAAkB;IAClB,SAAS;IACT,iBAAiB;IACjB,UAAU;IACV,QAAQ;IACR,eAAe;IACf,YAAY;IACZ,MAAM;IACN,OAAO;IACP,WAAW;AACH,CAAA;;;;"}
1
+ {"version":3,"file":"builtin-components.js","sources":["../../src/ecs/builtin-components.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { AudioSource } from '../audio/audio.js';\nimport { CameraSource } from '../camera/camera-source.js';\nimport { DepthOccludable } from '../depth/depth-occludable.js';\nimport { DomeGradient } from '../environment/dome-gradient.js';\nimport { DomeTexture } from '../environment/dome-texture.js';\nimport { IBLGradient } from '../environment/ibl-gradient.js';\nimport { IBLTexture } from '../environment/ibl-texture.js';\nimport { EnvironmentRaycastTarget } from '../environment-raycast/raycast-target.js';\nimport { DistanceGrabbable } from '../grab/distance-grabbable.js';\nimport { Grabbed } from '../grab/grabbed.js';\nimport { Handle } from '../grab/handles.js';\nimport { OneHandGrabbable } from '../grab/one-hand-grabbable.js';\nimport { TwoHandsGrabbable } from '../grab/two-hands-grabbable.js';\nimport {\n Hovered,\n PokeInteractable,\n Pressed,\n RayInteractable,\n} from '../input/state-tags.js';\nimport { XRCylinderLayer } from '../layers/xr-cylinder-layer.js';\nimport { XRLayerState } from '../layers/xr-layer-state.js';\nimport { XRQuadLayer } from '../layers/xr-quad-layer.js';\nimport { LevelRoot } from '../level/level-root.js';\nimport { LevelTag } from '../level/level-tag.js';\nimport {\n AmbientLightComponent,\n DirectionalLightComponent,\n HemisphereLightComponent,\n PointLightComponent,\n RectAreaLightComponent,\n SpotLightComponent,\n} from '../lighting/light-components.js';\nimport { LocomotionEnvironment } from '../locomotion/locomotion-environment.js';\nimport { PhysicsBody } from '../physics/physicsBody.js';\nimport { PhysicsManipulation } from '../physics/physicsManipulation.js';\nimport { PhysicsShape } from '../physics/physicsShape.js';\nimport { XRAnchor } from '../scene-understanding/anchor.js';\nimport { XRMesh } from '../scene-understanding/mesh.js';\nimport { XRPlane } from '../scene-understanding/plane.js';\nimport { Transform } from '../transform/transform-component.js';\nimport { Follower } from '../ui/follow-component.js';\nimport { PanelDocument, PanelUI } from '../ui/panel-components.js';\nimport { ScreenSpace } from '../ui/screenspace-component.js';\nimport { Visibility } from '../visibility/visibility-component.js';\nimport { defineComponents } from './component-manifest.js';\n\n/** Complete editor-visible IWSDK component catalog in deterministic order. */\nexport const IWSDK_BUILTIN_COMPONENTS = defineComponents([\n AudioSource,\n AmbientLightComponent,\n CameraSource,\n DepthOccludable,\n DistanceGrabbable,\n DirectionalLightComponent,\n DomeGradient,\n DomeTexture,\n EnvironmentRaycastTarget,\n Follower,\n Grabbed,\n Handle,\n Hovered,\n HemisphereLightComponent,\n IBLGradient,\n IBLTexture,\n LevelRoot,\n LevelTag,\n LocomotionEnvironment,\n OneHandGrabbable,\n PanelDocument,\n PanelUI,\n PhysicsBody,\n PhysicsManipulation,\n PhysicsShape,\n PointLightComponent,\n PokeInteractable,\n Pressed,\n RayInteractable,\n RectAreaLightComponent,\n ScreenSpace,\n SpotLightComponent,\n Transform,\n TwoHandsGrabbable,\n Visibility,\n XRAnchor,\n XRCylinderLayer,\n XRLayerState,\n XRMesh,\n XRPlane,\n XRQuadLayer,\n] as const);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAKG;AAgDH;AACO,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;IACvD,WAAW;IACX,qBAAqB;IACrB,YAAY;IACZ,eAAe;IACf,iBAAiB;IACjB,yBAAyB;IACzB,YAAY;IACZ,WAAW;IACX,wBAAwB;IACxB,QAAQ;IACR,OAAO;IACP,MAAM;IACN,OAAO;IACP,wBAAwB;IACxB,WAAW;IACX,UAAU;IACV,SAAS;IACT,QAAQ;IACR,qBAAqB;IACrB,gBAAgB;IAChB,aAAa;IACb,OAAO;IACP,WAAW;IACX,mBAAmB;IACnB,YAAY;IACZ,mBAAmB;IACnB,gBAAgB;IAChB,OAAO;IACP,eAAe;IACf,sBAAsB;IACtB,WAAW;IACX,kBAAkB;IAClB,SAAS;IACT,iBAAiB;IACjB,UAAU;IACV,QAAQ;IACR,eAAe;IACf,YAAY;IACZ,MAAM;IACN,OAAO;IACP,WAAW;AACH,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"component-editor-metadata.js","sources":["../../src/ecs/component-editor-metadata.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;AAKG;AAYH,MAAM,mBAAmB,GAAG,IAAI,OAAO,EAGpC;AAEH;AACM,SAAU,0BAA0B,CACxC,SAAY,EACZ,QAAiC,EAAA;AAEjC,IAAA,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;AAClE,IAAA,OAAO,SAAS;AAClB;AAEA;AACM,SAAU,0BAA0B,CACxC,SAAuB,EAAA;AAEvB,IAAA,OAAO,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3C;;;;"}
1
+ {"version":3,"file":"component-editor-metadata.js","sources":["../../src/ecs/component-editor-metadata.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport type { AnyComponent } from './component.js';\n\n/** Presentation and lifecycle hints consumed by IWSDK authoring tools. */\nexport interface ComponentEditorMetadata {\n /** Exclude this component from generic component authoring UI. */\n hidden?: boolean;\n /** The runtime owns this component as an intrinsic part of an entity. */\n intrinsic?: boolean;\n}\n\nconst metadataByComponent = new WeakMap<\n AnyComponent,\n ComponentEditorMetadata\n>();\n\n/** Attach editor metadata without changing the Elics component shape. */\nexport function setComponentEditorMetadata<C extends AnyComponent>(\n component: C,\n metadata: ComponentEditorMetadata,\n): C {\n metadataByComponent.set(component, Object.freeze({ ...metadata }));\n return component;\n}\n\n/** Read editor metadata previously attached to an Elics component. */\nexport function getComponentEditorMetadata(\n component: AnyComponent,\n): Readonly<ComponentEditorMetadata> | undefined {\n return metadataByComponent.get(component);\n}\n"],"names":[],"mappings":"AAAA;;;;;AAKG;AAYH,MAAM,mBAAmB,GAAG,IAAI,OAAO,EAGpC;AAEH;AACM,SAAU,0BAA0B,CACxC,SAAY,EACZ,QAAiC,EAAA;AAEjC,IAAA,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;AAClE,IAAA,OAAO,SAAS;AAClB;AAEA;AACM,SAAU,0BAA0B,CACxC,SAAuB,EAAA;AAEvB,IAAA,OAAO,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3C;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"component-manifest.js","sources":["../../src/ecs/component-manifest.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component-manifest.js","sources":["../../src/ecs/component-manifest.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n createSceneComponentCatalog,\n type JsonValue,\n type SceneComponentCatalog,\n type SceneComponentFieldSchema,\n type SceneComponentSchema,\n} from '@iwsdk/scene-composition';\nimport { getComponentEditorMetadata } from './component-editor-metadata.js';\nimport { ComponentRegistry, type AnyComponent } from './component.js';\n\nexport type ComponentManifest<\n T extends readonly AnyComponent[] = readonly AnyComponent[],\n> = T & {\n /** Used by the managed editor to detect split Elics module instances. */\n readonly componentRegistry: typeof ComponentRegistry;\n};\n\n/**\n * Declare the complete set of application components shared by runtime and\n * editor. Individual createComponent declarations remain unchanged.\n */\nexport function defineComponents<const T extends readonly AnyComponent[]>(\n components: T,\n): ComponentManifest<T> {\n const ids = new Set<string>();\n for (const component of components) {\n if (component.id.trim().length === 0) {\n throw new Error('Component IDs must not be blank');\n }\n if (ids.has(component.id)) {\n throw new Error(`Duplicate component manifest ID \"${component.id}\"`);\n }\n ids.add(component.id);\n }\n const manifest = [...components] as unknown as ComponentManifest<T>;\n Object.defineProperty(manifest, 'componentRegistry', {\n configurable: false,\n enumerable: false,\n value: ComponentRegistry,\n writable: false,\n });\n return Object.freeze(manifest);\n}\n\nexport interface ComponentCatalogOptions {\n source?: SceneComponentSchema['source'];\n}\n\n/** Derive editor and validation metadata from the actual Elics schema. */\nexport function sceneComponentSchemaFromComponent(\n component: AnyComponent,\n options: ComponentCatalogOptions = {},\n): SceneComponentSchema {\n const editor = getComponentEditorMetadata(component);\n const fields: Record<string, SceneComponentFieldSchema> = {};\n for (const [fieldName, source] of Object.entries(component.schema)) {\n const field = source as Record<string, unknown>;\n const defaultValue = jsonValueOrUndefined(field.default);\n fields[fieldName] = {\n type: String(field.type) as SceneComponentFieldSchema['type'],\n ...(defaultValue === undefined ? {} : { default: defaultValue }),\n ...(typeof field.description === 'string'\n ? { description: field.description }\n : {}),\n ...(typeof field.label === 'string' ? { label: field.label } : {}),\n ...(typeof field.help === 'string' ? { help: field.help } : {}),\n ...(isComponentWidget(field.widget) ? { widget: field.widget } : {}),\n ...(field.required === true ? { required: true } : {}),\n ...(typeof field.step === 'number' && Number.isFinite(field.step)\n ? { step: field.step }\n : {}),\n ...(isStringRecord(field.enum) ? { enum: field.enum } : {}),\n ...(typeof field.fileTypes === 'string'\n ? { fileTypes: field.fileTypes }\n : {}),\n ...(typeof field.subfolder === 'string'\n ? { subfolder: field.subfolder }\n : {}),\n ...(typeof field.min === 'number' && Number.isFinite(field.min)\n ? { min: field.min }\n : {}),\n ...(typeof field.max === 'number' && Number.isFinite(field.max)\n ? { max: field.max }\n : {}),\n ...(field.hidden === true || fieldName.startsWith('_')\n ? { hidden: true }\n : {}),\n };\n }\n return {\n id: component.id,\n ...(component.description == null\n ? {}\n : { description: component.description }),\n fields,\n source: options.source ?? 'app',\n ...(editor == null ? {} : { editor: { ...editor } }),\n };\n}\n\nexport function componentCatalogFromComponents(\n components: readonly AnyComponent[],\n options: ComponentCatalogOptions = {},\n): SceneComponentCatalog {\n return createSceneComponentCatalog(\n components.map((component) =>\n sceneComponentSchemaFromComponent(component, options),\n ),\n );\n}\n\nfunction jsonValueOrUndefined(value: unknown): JsonValue | undefined {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n if (Array.isArray(value)) {\n const entries = value.map(jsonValueOrUndefined);\n return entries.every((entry) => entry !== undefined)\n ? (entries as JsonValue[])\n : undefined;\n }\n if (value != null && typeof value === 'object') {\n const entries = Object.entries(value).map(\n ([key, entry]) => [key, jsonValueOrUndefined(entry)] as const,\n );\n return entries.every(([, entry]) => entry !== undefined)\n ? (Object.fromEntries(entries) as Record<string, JsonValue>)\n : undefined;\n }\n return undefined;\n}\n\nfunction isStringRecord(value: unknown): value is Record<string, string> {\n return (\n value != null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n Object.values(value).every((entry) => typeof entry === 'string')\n );\n}\n\nfunction isComponentWidget(\n value: unknown,\n): value is NonNullable<SceneComponentFieldSchema['widget']> {\n return ['slider', 'color', 'vector', 'text', 'select', 'entity'].includes(\n String(value),\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"entity.js","sources":["../../src/ecs/entity.ts"],"sourcesContent":[null],"names":["ElicsEntity"],"mappings":";;;AAAA;;;;;AAKG;AA0DH,SAAS,mBAAmB,CAAC,KAAc,EAAA;AACzC,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,QAAQ,EAAE;AAC7D,YAAA,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH;QACH;QACA,OAAO;YACL,CAAC,CAAC,KAAK,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG;YAC5B,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG;AAC3B,YAAA,CAAC,KAAK,GAAG,IAAI,IAAI,GAAG;YACpB,CAAC;SACF;IACH;AAEA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,MAAM,KAAK,GAAG,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9D,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;QACjE;AAEA,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;QACpB,OAAO;AACL,YAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG;AACnC,YAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG;AACnC,YAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG;YACnC,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC;SAC3D;IACH;IAEA,IACE,OAAO,KAAK,KAAK,QAAQ;AACzB,QAAA,KAAK,KAAK,IAAI;QACb,KAA+B,CAAC,OAAO,KAAK,IAAI;AACjD,QAAA,OAAQ,KAA+B,CAAC,OAAO,KAAK,UAAU,EAC9D;AACA,QAAA,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAI,KAAe,CAAC,OAAO,EAAE;QACxD,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrB;AAEA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5C,YAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;QAC3D;QACA,IACE,CAAC,KAAK,CAAC,KAAK,CACV,CAAC,KAAK,KAAK,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC/D,EACD;AACA,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;QAChE;AACA,QAAA,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;QAC9B,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrB;AAEA,IAAA,MAAM,IAAI,KAAK,CACb,8FAA8F,CAC/F;AACH;AAEA,MAAM,gBAAgB,GAAGA,MAAW,CAAC,SAAS,CAAC,QAAQ;AAEvDA,MAAW,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,yBAAyB,CAEjE,SAAc,EACd,GAAQ,EACR,KAAU,EAAA;;AAEV,IAAA,IAAI,CAAA,CAAA,EAAA,GAAA,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,MAAK,KAAK,CAAC,KAAK,EAAE;AAC7C,QAAA,IAAY,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,CAAkB,CAAC,GAAG,CAC/D,mBAAmB,CAAC,KAAK,CAAC,CAC3B;QACA,IAAY,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC;QAC7D;IACF;IAEC,gBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC;AAC7D,CAAC;AAED;AACAA,MAAW,CAAC,SAAS,CAAC,OAAO,GAAG,UAE9B,OAA8B,EAAA;IAE9B,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,gBAAgB,MAAK,KAAK,EAAE;AACtC,QAAA,IAAY,CAAC,iBAAiB,GAAG,IAAI;IACxC;IACA,IAAI,CAAC,OAAO,EAAE;AAChB,CAAC;AAGD;AACO,MAAM,UAAU,GAAG;;;;"}
1
+ {"version":3,"file":"entity.js","sources":["../../src/ecs/entity.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport type { PointerEventsMap } from '@pmndrs/pointer-events';\nimport { Entity as ElicsEntity, Types } from 'elics';\nimport type { AnyComponent } from 'elics';\nimport type { Color, Object3D, Object3DEventMap } from '../runtime/index.js';\n\nexport type ColorValueInput =\n | number\n | string\n | Color\n | readonly [number, number, number]\n | readonly [number, number, number, number];\n\ntype ColorKeys<C extends AnyComponent> = {\n [K in keyof C['schema']]: C['schema'][K]['type'] extends 'Color' ? K : never;\n}[keyof C['schema']];\n\n/** Options for {@link Entity.dispose}. @category ECS */\nexport interface EntityDisposeOptions {\n /**\n * Whether to dispose GPU resources attached to this entity's Object3D tree.\n *\n * @defaultValue true\n */\n disposeResources?: boolean;\n}\n\ndeclare module 'elics' {\n interface Entity {\n object3D?: Object3D<Object3DEventMap & PointerEventsMap>;\n /** @internal Flag to indicate GPU resources should be disposed on destroy */\n _disposeResources?: boolean;\n /**\n * Destroy the entity and dispose of its GPU resources (geometry, materials, textures).\n *\n * @remarks\n * Use this instead of `destroy()` when you want to fully clean up GPU memory.\n * Use with caution when resources may be shared across multiple entities.\n *\n * @example\n * ```ts\n * // Remove entity and free GPU resources\n * entity.dispose();\n *\n * // Remove entity while preserving shared geometry/materials\n * entity.dispose({ disposeResources: false });\n * ```\n */\n dispose(options?: EntityDisposeOptions): void;\n setValue<C extends AnyComponent, K extends ColorKeys<C>>(\n component: C,\n key: K,\n value: ColorValueInput,\n ): void;\n }\n}\n\nfunction normalizeColorValue(value: unknown): [number, number, number, number] {\n if (typeof value === 'number') {\n if (!Number.isInteger(value) || value < 0 || value > 0xffffff) {\n throw new Error(\n 'Color hex numbers must be RGB integers between 0x000000 and 0xffffff. Use #RRGGBBAA strings when alpha is needed.',\n );\n }\n return [\n ((value >> 16) & 0xff) / 255,\n ((value >> 8) & 0xff) / 255,\n (value & 0xff) / 255,\n 1,\n ];\n }\n\n if (typeof value === 'string') {\n const match = /^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.exec(value);\n if (!match) {\n throw new Error('Color strings must use #RRGGBB or #RRGGBBAA.');\n }\n\n const hex = match[1];\n return [\n parseInt(hex.slice(0, 2), 16) / 255,\n parseInt(hex.slice(2, 4), 16) / 255,\n parseInt(hex.slice(4, 6), 16) / 255,\n hex.length === 8 ? parseInt(hex.slice(6, 8), 16) / 255 : 1,\n ];\n }\n\n if (\n typeof value === 'object' &&\n value !== null &&\n (value as { isColor?: unknown }).isColor === true &&\n typeof (value as { toArray?: unknown }).toArray === 'function'\n ) {\n const [r = 1, g = 1, b = 1] = (value as Color).toArray();\n return [r, g, b, 1];\n }\n\n if (Array.isArray(value)) {\n if (value.length !== 3 && value.length !== 4) {\n throw new Error('Color arrays must have 3 or 4 entries.');\n }\n if (\n !value.every(\n (entry) => typeof entry === 'number' && Number.isFinite(entry),\n )\n ) {\n throw new Error('Color array entries must be finite numbers.');\n }\n const [r, g, b, a = 1] = value;\n return [r, g, b, a];\n }\n\n throw new Error(\n 'Color values must be a hex number, #RRGGBB/#RRGGBBAA string, THREE.Color, or RGB/RGBA array.',\n );\n}\n\nconst originalSetValue = ElicsEntity.prototype.setValue;\n\nElicsEntity.prototype.setValue = function setValueWithColorCoercion(\n this: ElicsEntity,\n component: any,\n key: any,\n value: any,\n) {\n if (component.schema[key]?.type === Types.Color) {\n ((this as any).getVectorView(component, key) as Float32Array).set(\n normalizeColorValue(value),\n );\n (this as any).queryManager.updateEntityValue(this, component);\n return;\n }\n\n (originalSetValue as any).call(this, component, key, value);\n};\n\n// Add dispose method to Entity prototype\nElicsEntity.prototype.dispose = function (\n this: ElicsEntity,\n options?: EntityDisposeOptions,\n) {\n if (options?.disposeResources !== false) {\n (this as any)._disposeResources = true;\n }\n this.destroy();\n};\n\nexport { Entity } from 'elics';\n/** Sentinel value used for \"no parent\" in Transform.parent. @category ECS */\nexport const NullEntity = -1;\n"],"names":["ElicsEntity"],"mappings":";;;AAAA;;;;;AAKG;AA0DH,SAAS,mBAAmB,CAAC,KAAc,EAAA;AACzC,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,QAAQ,EAAE;AAC7D,YAAA,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH;QACH;QACA,OAAO;YACL,CAAC,CAAC,KAAK,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG;YAC5B,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG;AAC3B,YAAA,CAAC,KAAK,GAAG,IAAI,IAAI,GAAG;YACpB,CAAC;SACF;IACH;AAEA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,MAAM,KAAK,GAAG,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9D,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;QACjE;AAEA,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;QACpB,OAAO;AACL,YAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG;AACnC,YAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG;AACnC,YAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG;YACnC,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC;SAC3D;IACH;IAEA,IACE,OAAO,KAAK,KAAK,QAAQ;AACzB,QAAA,KAAK,KAAK,IAAI;QACb,KAA+B,CAAC,OAAO,KAAK,IAAI;AACjD,QAAA,OAAQ,KAA+B,CAAC,OAAO,KAAK,UAAU,EAC9D;AACA,QAAA,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAI,KAAe,CAAC,OAAO,EAAE;QACxD,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrB;AAEA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5C,YAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;QAC3D;QACA,IACE,CAAC,KAAK,CAAC,KAAK,CACV,CAAC,KAAK,KAAK,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC/D,EACD;AACA,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;QAChE;AACA,QAAA,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;QAC9B,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrB;AAEA,IAAA,MAAM,IAAI,KAAK,CACb,8FAA8F,CAC/F;AACH;AAEA,MAAM,gBAAgB,GAAGA,MAAW,CAAC,SAAS,CAAC,QAAQ;AAEvDA,MAAW,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,yBAAyB,CAEjE,SAAc,EACd,GAAQ,EACR,KAAU,EAAA;;AAEV,IAAA,IAAI,CAAA,CAAA,EAAA,GAAA,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,MAAK,KAAK,CAAC,KAAK,EAAE;AAC7C,QAAA,IAAY,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,CAAkB,CAAC,GAAG,CAC/D,mBAAmB,CAAC,KAAK,CAAC,CAC3B;QACA,IAAY,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC;QAC7D;IACF;IAEC,gBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC;AAC7D,CAAC;AAED;AACAA,MAAW,CAAC,SAAS,CAAC,OAAO,GAAG,UAE9B,OAA8B,EAAA;IAE9B,IAAI,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,gBAAgB,MAAK,KAAK,EAAE;AACtC,QAAA,IAAY,CAAC,iBAAiB,GAAG,IAAI;IACxC;IACA,IAAI,CAAC,OAAO,EAAE;AAChB,CAAC;AAGD;AACO,MAAM,UAAU,GAAG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","sources":["../../src/ecs/system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system.js","sources":["../../src/ecs/system.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { XROrigin } from '@iwsdk/xr-input';\nimport { Signal, signal } from '@preact/signals-core';\nimport {\n System as ElicsSystem,\n Query,\n SystemConstructor,\n SystemQueries,\n SystemSchema,\n TypeValueToType,\n} from 'elics';\nimport type { QueryManager } from 'elics/lib/query-manager.js';\nimport { Object3D } from 'three';\nimport type { InputManager } from '../input/index.js';\nimport {\n PerspectiveCamera,\n Scene,\n WebGLRenderer,\n WebXRManager,\n} from '../runtime/index.js';\nimport { Entity } from './entity.js';\nimport type { VisibilityState, World } from './world';\n\ntype SystemConfigSignals<S extends SystemSchema> = {\n [K in keyof S]: Signal<TypeValueToType<S[K]['type']>>;\n};\n\n/**\n * System base interface wired to the IWSDK World, renderer, and XR runtime.\n *\n * @remarks\n * - `createSystem(queries, schema)` returns a class that implements this interface.\n * - Config values are exposed as reactive Signals on `this.config.<key>`.\n * - Common world resources are available as readonly properties (`player`, `input`,\n * `scene`, `camera`, `renderer`, `visibilityState`).\n * - Use `cleanupFuncs.push(() => ...)` to register teardown callbacks.\n *\n * @category ECS\n */\nexport interface System<S extends SystemSchema, Q extends SystemQueries>\n extends ElicsSystem<S, Q> {\n isPaused: boolean;\n config: SystemConfigSignals<S>;\n queries: Record<keyof Q, Query>;\n world: World;\n queryManager: QueryManager;\n priority: number;\n globals: Record<string, any>;\n xrManager: WebXRManager;\n xrFrame: XRFrame;\n\n readonly player: XROrigin;\n readonly playerEntity: Entity;\n readonly playerHeadEntity: Entity;\n readonly input: InputManager;\n readonly scene: Scene;\n readonly camera: PerspectiveCamera;\n readonly renderer: WebGLRenderer;\n readonly visibilityState: Signal<VisibilityState>;\n readonly cleanupFuncs: Array<() => void>;\n\n init(): void;\n /**\n * Per-frame tick. Both arguments are in seconds (Three.js `Clock` convention),\n * not milliseconds.\n *\n * @param delta Seconds since the previous frame.\n * @param time Accumulated `Clock.elapsedTime` (seconds since the render loop\n * started ticking the clock); monotonic across frames within a\n * session.\n */\n update(delta: number, time: number): void;\n play(): void;\n stop(): void;\n createEntity: () => Entity;\n}\n\n/**\n * Create a strongly-typed System class with query bindings and reactive config.\n *\n * @param queries Elics query descriptors keyed by name.\n * @param schema Option map of config defaults and Types.\n * @returns A System constructor to `export class MySystem extends createSystem(...) { ... }`.\n *\n * @example\n * export class Rotator extends createSystem({ items: { required: [Transform] } }, {\n * speed: { type: Types.Float32, default: 1 }\n * }) {\n * update(dt:number){ this.queries.items.entities.forEach(e=> e.object3D.rotateY(dt*this.config.speed.value)) }\n * }\n *\n * @category ECS\n */\nexport function createSystem<S extends SystemSchema, Q extends SystemQueries>(\n queries: Q = {} as Q,\n schema: S = {} as S,\n): SystemConstructor<S, Q, World, System<S, Q>> {\n if (typeof queries === 'function') {\n throw new TypeError(\n 'createSystem() received a lifecycle function as its query map. ' +\n 'Pass only named query descriptors in createSystem({...}); define init(), update(), and destroy() in the subclass body.',\n );\n }\n for (const [name, query] of Object.entries(queries)) {\n if (typeof query === 'function') {\n throw new TypeError(\n `createSystem() received lifecycle method \"${name}\" inside its query map. ` +\n `Move ${name}() into the subclass body; each createSystem() entry must be a query descriptor such as { required: [Component] }.`,\n );\n }\n }\n\n return class implements System<S, Q> {\n static schema = schema;\n static isSystem = true;\n static queries = queries;\n\n public isPaused: boolean = false;\n public queries!: Record<keyof Q, Query>;\n public config = {} as SystemConfigSignals<S>;\n\n public readonly player: XROrigin;\n public readonly playerEntity: Entity;\n public readonly playerHeadEntity: Entity;\n public readonly input: InputManager;\n public readonly scene: Scene;\n public readonly camera: PerspectiveCamera;\n public readonly renderer: WebGLRenderer;\n public readonly visibilityState: Signal<VisibilityState>;\n public readonly cleanupFuncs: Array<() => void> = [];\n\n constructor(\n public readonly world: World,\n public queryManager: QueryManager,\n public priority: number,\n ) {\n for (const key in schema) {\n this.config[key] = signal(schema[key].default as any);\n }\n this.player = world.player;\n this.playerEntity = world.playerEntity;\n this.playerHeadEntity = world.playerHeadEntity;\n this.input = world.input;\n this.scene = world.scene;\n this.camera = world.camera;\n this.renderer = world.renderer;\n this.visibilityState = world.visibilityState;\n }\n\n get globals() {\n return this.world.globals;\n }\n\n get xrManager() {\n return this.world.renderer.xr;\n }\n\n get xrFrame() {\n return this.xrManager.getFrame();\n }\n\n createEntity(): Entity {\n return this.world.createEntity();\n }\n\n createTransformEntity(object?: Object3D, parent?: Entity): Entity {\n return this.world.createTransformEntity(object, parent);\n }\n\n init(): void {}\n\n update(_delta: number, _time: number): void {}\n\n play(): void {\n this.isPaused = false;\n }\n\n stop(): void {\n this.isPaused = true;\n }\n\n destroy(): void {\n this.cleanupFuncs.forEach((func) => func());\n }\n };\n}\n"],"names":[],"mappings":"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"}
@@ -80,6 +80,8 @@ export declare class World extends ElicsWorld {
80
80
  visibilityState: Signal<VisibilityState>;
81
81
  /** Whether this world was created with XR support enabled. */
82
82
  xrEnabled: boolean;
83
+ /** Whether an explicit XR session request is currently settling. @internal */
84
+ sessionRequestPending: boolean;
83
85
  requestedLevelUrl: string | undefined;
84
86
  requestedLevelDocument: SceneDocument | undefined;
85
87
  _resolveLevelLoad: (() => void) | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../../src/ecs/world.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../../src/ecs/world.ts"],"names":[],"mappings":"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"}
package/dist/ecs/world.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { signal } from '@preact/signals-core';
2
2
  import { World as World$1 } from 'elics';
3
+ import { armSessionGrantCaptureForOptions } from '../init/session-grant.js';
3
4
  import { launchXR } from '../init/xr.js';
4
5
  import { LevelTag } from '../level/level-tag.js';
5
6
  import '../runtime/three.js';
@@ -51,6 +52,8 @@ class World extends World$1 {
51
52
  this.visibilityState = signal(VisibilityState.NonImmersive);
52
53
  /** Whether this world was created with XR support enabled. */
53
54
  this.xrEnabled = true;
55
+ /** Whether an explicit XR session request is currently settling. @internal */
56
+ this.sessionRequestPending = false;
54
57
  /** Teardown callbacks run by {@link World.destroy} (render loop, global listeners). */
55
58
  this.worldCleanupFuncs = [];
56
59
  /** Guards {@link World.destroy} so a second call is a no-op. */
@@ -487,6 +490,7 @@ class World extends World$1 {
487
490
  * @see /getting-started/01-hello-xr
488
491
  */
489
492
  static async create(container, options) {
493
+ armSessionGrantCaptureForOptions(options === null || options === void 0 ? void 0 : options.xr);
490
494
  const { initializeWorld } = await import('../init/world-initializer.js');
491
495
  return initializeWorld(container, options);
492
496
  }