@galacean/engine-xr-webxr 2.0.0-alpha.5 → 2.0.0-alpha.51

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.
package/dist/browser.js CHANGED
@@ -189,19 +189,15 @@
189
189
  var xrCamera = this._xrManager.inputManager.getTrackedDevice(type);
190
190
  var preCamera = xrCamera._camera;
191
191
  if (preCamera !== camera) {
192
- // @ts-ignore
193
192
  preCamera && (preCamera._cameraType = engine.CameraType.Normal);
194
193
  switch(type){
195
194
  case XRTrackedInputDevice.Camera:
196
- // @ts-ignore
197
195
  camera._cameraType = engine.CameraType.XRCenterCamera;
198
196
  break;
199
197
  case XRTrackedInputDevice.LeftCamera:
200
- // @ts-ignore
201
198
  camera._cameraType = engine.CameraType.XRLeftCamera;
202
199
  break;
203
200
  case XRTrackedInputDevice.RightCamera:
204
- // @ts-ignore
205
201
  camera._cameraType = engine.CameraType.XRRightCamera;
206
202
  break;
207
203
  }
@@ -215,7 +211,6 @@
215
211
  */ _proto.detachCamera = function detachCamera(type) {
216
212
  var xrCamera = this._xrManager.inputManager.getTrackedDevice(type);
217
213
  var preCamera = xrCamera._camera;
218
- // @ts-ignore
219
214
  preCamera && (preCamera._cameraType = engine.CameraType.Normal);
220
215
  xrCamera._camera = null;
221
216
  return preCamera;
@@ -283,7 +278,7 @@
283
278
  {
284
279
  key: "fixedFoveation",
285
280
  get: /**
286
- * The fixed foveation of the camera.
281
+ * Fixed foveation, or `undefined` if unsupported by the active session.
287
282
  */ function get() {
288
283
  var _this__xrManager_sessionManager = this._xrManager.sessionManager, platformSession = _this__xrManager_sessionManager._platformSession;
289
284
  if (platformSession) {
@@ -402,13 +397,13 @@
402
397
  function XRInputManager(_xrManager, _engine) {
403
398
  this._xrManager = _xrManager;
404
399
  this._engine = _engine;
400
+ this.onTrackedDeviceChanged = new engine.Signal();
405
401
  this./** @internal */ _cameras = [];
406
402
  this./** @internal */ _controllers = [];
407
403
  this._added = [];
408
404
  this._removed = [];
409
405
  this._trackedDevices = [];
410
406
  this._statusSnapshot = [];
411
- this._listeners = new engine.SafeLoopArray();
412
407
  var _this = this, trackedDevices = _this._trackedDevices, controllers = _this._controllers, cameras = _this._cameras;
413
408
  for(var i = 0; i < 6; i++){
414
409
  switch(i){
@@ -435,22 +430,6 @@
435
430
  return this._trackedDevices[type];
436
431
  };
437
432
  /**
438
- * Add a listener for tracked device changes.
439
- * @param listener - The listener to add
440
- */ _proto.addTrackedDeviceChangedListener = function addTrackedDeviceChangedListener(listener) {
441
- this._listeners.push({
442
- fn: listener
443
- });
444
- };
445
- /**
446
- * Remove a listener of tracked device changes.
447
- * @param listener - The listener to remove
448
- */ _proto.removeTrackedDeviceChangedListener = function removeTrackedDeviceChangedListener(listener) {
449
- this._listeners.findAndRemove(function(value) {
450
- return value.fn === listener ? value.destroyed = true : false;
451
- });
452
- };
453
- /**
454
433
  * @internal
455
434
  */ _proto._onUpdate = function _onUpdate() {
456
435
  var _this = this, added = _this._added, removed = _this._removed, statusSnapshot = _this._statusSnapshot;
@@ -462,7 +441,7 @@
462
441
  controller.down = controller.up = 0;
463
442
  }
464
443
  // Handle events and update tracked devices
465
- var _this__xrManager_sessionManager = this._xrManager.sessionManager, platformSession = _this__xrManager_sessionManager._platformSession;
444
+ var platformSession = this._xrManager.sessionManager._platformSession;
466
445
  var platformEvents = platformSession.events;
467
446
  for(var i1 = 0, n1 = platformEvents.length; i1 < n1; i1++){
468
447
  this._handleEvent(platformEvents[i1]);
@@ -486,19 +465,13 @@
486
465
  }
487
466
  // Dispatch change event
488
467
  if (added.length > 0 || removed.length > 0) {
489
- var listeners = this._listeners.getLoopArray();
490
- for(var i3 = 0, n3 = listeners.length; i3 < n3; i3++){
491
- var listener = listeners[i3];
492
- !listener.destroyed && listener.fn(added, removed);
493
- }
468
+ this.onTrackedDeviceChanged.invoke(added, removed);
494
469
  }
495
470
  };
496
471
  /**
497
472
  * @internal
498
473
  */ _proto._onDestroy = function _onDestroy() {
499
- this._listeners.findAndRemove(function(value) {
500
- return value.destroyed = true;
501
- });
474
+ this.onTrackedDeviceChanged.removeAll();
502
475
  };
503
476
  _proto._handleEvent = function _handleEvent(event) {
504
477
  var input = this._trackedDevices[event.input];
@@ -574,6 +547,18 @@
574
547
  }
575
548
  return new PointerEvent(type, eventInitDict);
576
549
  };
550
+ /**
551
+ * Add a listener for tracked device changes.
552
+ * @deprecated Use `onTrackedDeviceChanged.on(listener)` instead.
553
+ */ _proto.addTrackedDeviceChangedListener = function addTrackedDeviceChangedListener(listener) {
554
+ this.onTrackedDeviceChanged.on(listener);
555
+ };
556
+ /**
557
+ * Remove a listener of tracked device changes.
558
+ * @deprecated Use `onTrackedDeviceChanged.off(listener)` instead.
559
+ */ _proto.removeTrackedDeviceChangedListener = function removeTrackedDeviceChangedListener(listener) {
560
+ this.onTrackedDeviceChanged.off(listener);
561
+ };
577
562
  return XRInputManager;
578
563
  }();
579
564
  /**
@@ -590,10 +575,9 @@
590
575
  function XRSessionManager(_xrManager, _engine) {
591
576
  this._xrManager = _xrManager;
592
577
  this._engine = _engine;
578
+ this.onStateChanged = new engine.Signal();
593
579
  this._mode = XRSessionMode.None;
594
580
  this._state = XRSessionState.None;
595
- this._listeners = new engine.SafeLoopArray();
596
- // @ts-ignore
597
581
  this._rhi = _engine._hardwareRenderer;
598
582
  this._raf = requestAnimationFrame.bind(window);
599
583
  this._caf = cancelAnimationFrame.bind(window);
@@ -643,30 +627,10 @@
643
627
  }
644
628
  };
645
629
  /**
646
- * Add a listening function for session state changes.
647
- * @param listener - The listening function
648
- */ _proto.addStateChangedListener = function addStateChangedListener(listener) {
649
- this._listeners.push({
650
- fn: listener
651
- });
652
- };
653
- /**
654
- * Remove a listening function of session state changes.
655
- * @param listener - The listening function
656
- */ _proto.removeStateChangedListener = function removeStateChangedListener(listener) {
657
- this._listeners.findAndRemove(function(value) {
658
- return value.fn === listener ? value.destroyed = true : false;
659
- });
660
- };
661
- /**
662
630
  * @internal
663
631
  */ _proto._setState = function _setState(value) {
664
632
  this._state = value;
665
- var listeners = this._listeners.getLoopArray();
666
- for(var i = 0, n = listeners.length; i < n; i++){
667
- var listener = listeners[i];
668
- !listener.destroyed && listener.fn(value);
669
- }
633
+ this.onStateChanged.invoke(value);
670
634
  };
671
635
  /**
672
636
  * @internal
@@ -742,11 +706,21 @@
742
706
  /**
743
707
  * @internal
744
708
  */ _proto._onDestroy = function _onDestroy() {
745
- this._listeners.findAndRemove(function(value) {
746
- return value.destroyed = true;
747
- });
709
+ this.onStateChanged.removeAll();
748
710
  this._raf = this._caf = null;
749
711
  };
712
+ /**
713
+ * Add a listening function for session state changes.
714
+ * @deprecated Use `onStateChanged.on(listener)` instead.
715
+ */ _proto.addStateChangedListener = function addStateChangedListener(listener) {
716
+ this.onStateChanged.on(listener);
717
+ };
718
+ /**
719
+ * Remove a listening function of session state changes.
720
+ * @deprecated Use `onStateChanged.off(listener)` instead.
721
+ */ _proto.removeStateChangedListener = function removeStateChangedListener(listener) {
722
+ this.onStateChanged.off(listener);
723
+ };
750
724
  _create_class$1(XRSessionManager, [
751
725
  {
752
726
  key: "mode",
@@ -767,7 +741,7 @@
767
741
  {
768
742
  key: "supportedFrameRate",
769
743
  get: /**
770
- * Return a list of supported frame rates.(only available in-session)
744
+ * Supported frame rates, or `undefined` if unsupported. Only available in-session.
771
745
  */ function get() {
772
746
  return this._platformSession.supportedFrameRates;
773
747
  }
@@ -775,7 +749,7 @@
775
749
  {
776
750
  key: "frameRate",
777
751
  get: /**
778
- * Return the current frame rate as reported by the device.
752
+ * Current frame rate, or `undefined` if unsupported. Only available in-session.
779
753
  */ function get() {
780
754
  return this._platformSession.frameRate;
781
755
  }
@@ -1057,28 +1031,12 @@
1057
1031
  _inherits(XRTrackableFeature, XRFeature);
1058
1032
  function XRTrackableFeature() {
1059
1033
  var _this;
1060
- _this = XRFeature.apply(this, arguments) || this, _this._requestTrackings = [], _this._tracked = [], _this._added = [], _this._updated = [], _this._removed = [], _this._statusSnapshot = {}, _this._listeners = new engine.SafeLoopArray();
1034
+ _this = XRFeature.apply(this, arguments) || this, /** Signal emitted when tracked objects change. */ _this.onChanged = new engine.Signal(), _this._requestTrackings = [], _this._tracked = [], _this._added = [], _this._updated = [], _this._removed = [], _this._statusSnapshot = {};
1061
1035
  return _this;
1062
1036
  }
1063
1037
  var _proto = XRTrackableFeature.prototype;
1064
- /**
1065
- * Add a listening function for tracked object changes.
1066
- * @param listener - The listening function
1067
- */ _proto.addChangedListener = function addChangedListener(listener) {
1068
- this._listeners.push({
1069
- fn: listener
1070
- });
1071
- };
1072
- /**
1073
- * Remove a listening function of tracked object changes.
1074
- * @param listener - The listening function
1075
- */ _proto.removeChangedListener = function removeChangedListener(listener) {
1076
- this._listeners.findAndRemove(function(value) {
1077
- return value.fn === listener ? value.destroyed = true : false;
1078
- });
1079
- };
1080
1038
  _proto._onUpdate = function _onUpdate() {
1081
- var _this__xrManager_sessionManager = this._xrManager.sessionManager, platformSession = _this__xrManager_sessionManager._platformSession;
1039
+ var platformSession = this._xrManager.sessionManager._platformSession;
1082
1040
  var platformFrame = platformSession.frame;
1083
1041
  var _this = this, platformFeature = _this._platformFeature, requestTrackings = _this._requestTrackings, statusSnapshot = _this._statusSnapshot, allTracked = _this._tracked, added = _this._added, updated = _this._updated, removed = _this._removed;
1084
1042
  if (!platformFrame || !requestTrackings.length) {
@@ -1132,11 +1090,7 @@
1132
1090
  requestTrackings[i1].state === XRRequestTrackingState.Destroyed && requestTrackings.splice(i1, 1);
1133
1091
  }
1134
1092
  if (added.length > 0 || updated.length > 0 || removed.length > 0) {
1135
- var listeners = this._listeners.getLoopArray();
1136
- for(var i2 = 0, n3 = listeners.length; i2 < n3; i2++){
1137
- var listener = listeners[i2];
1138
- !listener.destroyed && listener.fn(added, updated, removed);
1139
- }
1093
+ this.onChanged.invoke(added, updated, removed);
1140
1094
  }
1141
1095
  };
1142
1096
  _proto._onSessionStop = function _onSessionStop() {
@@ -1145,9 +1099,7 @@
1145
1099
  _proto._onSessionExit = function _onSessionExit() {
1146
1100
  // prettier-ignore
1147
1101
  this._requestTrackings.length = this._tracked.length = this._added.length = this._updated.length = this._removed.length = 0;
1148
- this._listeners.findAndRemove(function(value) {
1149
- return value.destroyed = true;
1150
- });
1102
+ this.onChanged.removeAll();
1151
1103
  };
1152
1104
  _proto._addRequestTracking = function _addRequestTracking(requestTracking) {
1153
1105
  var _this = this, platformFeature = _this._platformFeature;
@@ -1174,6 +1126,18 @@
1174
1126
  platformFeature.onDelRequestTracking(requestTrackings[i]);
1175
1127
  }
1176
1128
  };
1129
+ /**
1130
+ * Add a listening function for tracked object changes.
1131
+ * @deprecated Use `onChanged.on(listener)` instead.
1132
+ */ _proto.addChangedListener = function addChangedListener(listener) {
1133
+ this.onChanged.on(listener);
1134
+ };
1135
+ /**
1136
+ * Remove a listening function of tracked object changes.
1137
+ * @deprecated Use `onChanged.off(listener)` instead.
1138
+ */ _proto.removeChangedListener = function removeChangedListener(listener) {
1139
+ this.onChanged.off(listener);
1140
+ };
1177
1141
  return XRTrackableFeature;
1178
1142
  }(XRFeature);
1179
1143
  XRTrackableFeature._uuid = 0;
@@ -1607,8 +1571,7 @@
1607
1571
  var _proto = XRReferenceImageLoader.prototype;
1608
1572
  _proto.load = function load(item, resourceManager) {
1609
1573
  return new engine.AssetPromise(function(resolve, reject) {
1610
- resourceManager // @ts-ignore
1611
- ._request(item.url, _extends({}, item, {
1574
+ resourceManager._request(item.url, _extends({}, item, {
1612
1575
  type: "arraybuffer"
1613
1576
  })).then(function(data) {
1614
1577
  engine.decode(data, resourceManager.engine).then(function(referenceImage) {
@@ -2136,13 +2099,16 @@
2136
2099
  * Converts the vector into a unit vector.
2137
2100
  * @param a - The vector to normalize
2138
2101
  * @param out - The normalized vector
2102
+ * @returns True if the vector has a unit form, otherwise false and `out` is left untouched
2139
2103
  */ Vector3.normalize = function normalize(a, out) {
2140
2104
  var _x = a._x, _y = a._y, _z = a._z;
2141
2105
  var len = Math.sqrt(_x * _x + _y * _y + _z * _z);
2142
- if (len > MathUtil.zeroTolerance) {
2143
- len = 1 / len;
2144
- out.set(_x * len, _y * len, _z * len);
2106
+ if (len > MathUtil.zeroTolerance && Number.isFinite(len)) {
2107
+ var inv = 1 / len;
2108
+ out.set(_x * inv, _y * inv, _z * inv);
2109
+ return true;
2145
2110
  }
2111
+ return false;
2146
2112
  };
2147
2113
  /**
2148
2114
  * Scale a vector by the given value.
@@ -2288,8 +2254,6 @@
2288
2254
  new Vector3();
2289
2255
  new Vector3();
2290
2256
  new Vector3();
2291
- new Vector3();
2292
- new Vector3();
2293
2257
  /**
2294
2258
  * Represents a 3x3 mathematical matrix.
2295
2259
  */ var Matrix3x3 = /*#__PURE__*/ function() {
@@ -2674,6 +2638,7 @@
2674
2638
  * Calculate the inverse of the specified matrix.
2675
2639
  * @param a - The matrix whose inverse is to be calculated
2676
2640
  * @param out - The inverse of the specified matrix
2641
+ * @returns Null if the matrix is singular; otherwise undefined
2677
2642
  */ Matrix3x3.invert = function invert(a, out) {
2678
2643
  var ae = a.elements;
2679
2644
  var oe = out.elements;
@@ -4143,6 +4108,7 @@
4143
4108
  * Calculate the inverse of the specified matrix.
4144
4109
  * @param a - The matrix whose inverse is to be calculated
4145
4110
  * @param out - The inverse of the specified matrix
4111
+ * @returns Null if the matrix is singular; otherwise undefined
4146
4112
  */ Matrix.invert = function invert(a, out) {
4147
4113
  var ae = a.elements;
4148
4114
  var oe = out.elements;
@@ -4449,7 +4415,7 @@
4449
4415
  this._updateCamera(inputs);
4450
4416
  };
4451
4417
  _proto._updateController = function _updateController(inputs) {
4452
- var _this = this, frame = _this._platformFrame;
4418
+ var frame = this._platformFrame;
4453
4419
  var _this__session = this._session, session = _this__session._platformSession, referenceSpace = _this__session._platformReferenceSpace;
4454
4420
  var inputSources = session.inputSources;
4455
4421
  for(var i = 0, n = inputSources.length; i < n; i++){
@@ -4461,31 +4427,33 @@
4461
4427
  case "tracked-pointer":
4462
4428
  var gripSpace = inputSource.gripSpace, targetRaySpace = inputSource.targetRaySpace;
4463
4429
  if (gripSpace) {
4464
- var _frame_getPose = frame.getPose(gripSpace, referenceSpace), transform = _frame_getPose.transform, emulatedPosition = _frame_getPose.emulatedPosition;
4465
- if (transform) {
4430
+ var pose = frame.getPose(gripSpace, referenceSpace);
4431
+ if (pose) {
4432
+ var transform = pose.transform;
4466
4433
  var gripPose = input.gripPose;
4467
4434
  gripPose.matrix.copyFromArray(transform.matrix);
4468
4435
  gripPose.position.copyFrom(transform.position);
4469
4436
  gripPose.rotation.copyFrom(transform.orientation);
4470
4437
  }
4471
- input.trackingState = emulatedPosition ? XRTrackingState.TrackingLost : XRTrackingState.Tracking;
4438
+ input.trackingState = !pose || pose.emulatedPosition ? XRTrackingState.TrackingLost : XRTrackingState.Tracking;
4472
4439
  }
4473
4440
  if (targetRaySpace) {
4474
- var _frame_getPose1 = frame.getPose(targetRaySpace, referenceSpace), transform1 = _frame_getPose1.transform, emulatedPosition1 = _frame_getPose1.emulatedPosition;
4475
- if (transform1) {
4441
+ var pose1 = frame.getPose(targetRaySpace, referenceSpace);
4442
+ if (pose1) {
4443
+ var transform1 = pose1.transform;
4476
4444
  var targetRayPose = input.targetRayPose;
4477
4445
  targetRayPose.matrix.copyFromArray(transform1.matrix);
4478
4446
  targetRayPose.position.copyFrom(transform1.position);
4479
4447
  targetRayPose.rotation.copyFrom(transform1.orientation);
4480
- input.trackingState = emulatedPosition1 ? XRTrackingState.TrackingLost : XRTrackingState.Tracking;
4481
4448
  }
4449
+ input.trackingState = !pose1 || pose1.emulatedPosition ? XRTrackingState.TrackingLost : XRTrackingState.Tracking;
4482
4450
  }
4483
4451
  break;
4484
4452
  }
4485
4453
  }
4486
4454
  };
4487
4455
  _proto._updateCamera = function _updateCamera(inputs) {
4488
- var _this = this, frame = _this._platformFrame;
4456
+ var frame = this._platformFrame;
4489
4457
  var _this__session = this._session, referenceSpace = _this__session._platformReferenceSpace, layer = _this__session._platformLayer, framebufferWidth = _this__session.framebufferWidth, framebufferHeight = _this__session.framebufferHeight;
4490
4458
  var viewerPose = frame.getViewerPose(referenceSpace);
4491
4459
  if (viewerPose) {
@@ -4760,6 +4728,8 @@
4760
4728
  case XRFeatureType.ImageTracking:
4761
4729
  // @ts-ignore
4762
4730
  return typeof XRImageTrackingResult !== "undefined";
4731
+ default:
4732
+ return false;
4763
4733
  }
4764
4734
  };
4765
4735
  _proto.createPlatformFeature = function createPlatformFeature(type) {
@@ -4789,11 +4759,12 @@
4789
4759
  var attributes = gl.getContextAttributes();
4790
4760
  if (!attributes) {
4791
4761
  reject(Error("GetContextAttributes Error!"));
4762
+ return;
4792
4763
  }
4793
4764
  gl.makeXRCompatible().then(function() {
4794
4765
  var scaleFactor = XRWebGLLayer.getNativeFramebufferScaleFactor(session);
4795
4766
  var layer;
4796
- if (session.renderState.layers === undefined || !!!rhi.isWebGL2) {
4767
+ if (session.renderState.layers === undefined || !rhi.isWebGL2) {
4797
4768
  var layerInit = {
4798
4769
  antialias: session.renderState.layers === undefined ? attributes.antialias : true,
4799
4770
  alpha: true,
@@ -4951,6 +4922,7 @@
4951
4922
  _proto._updateTrackedAnchor = function _updateTrackedAnchor(frame, space, requestTracking) {
4952
4923
  var xrAnchor = requestTracking.xrAnchor;
4953
4924
  var xrPose = frame.getPose(xrAnchor.anchorSpace, space);
4925
+ if (!xrPose) return true;
4954
4926
  var transform = xrPose.transform;
4955
4927
  var pose = requestTracking.tracked[0].pose;
4956
4928
  pose.matrix.copyFromArray(transform.matrix);
@@ -5010,8 +4982,7 @@
5010
4982
  tracked.referenceImage = requestTrackingImage.image;
5011
4983
  }
5012
4984
  if (trackingResult.trackingState === "tracked") {
5013
- this._updateTrackedImage(platformFrame, platformReferenceSpace, tracked, trackingResult);
5014
- tracked.state = XRTrackingState.Tracking;
4985
+ tracked.state = this._updateTrackedImage(platformFrame, platformReferenceSpace, tracked, trackingResult) ? XRTrackingState.Tracking : XRTrackingState.TrackingLost;
5015
4986
  } else {
5016
4987
  tracked.state = XRTrackingState.TrackingLost;
5017
4988
  }
@@ -5082,11 +5053,14 @@
5082
5053
  };
5083
5054
  _proto._updateTrackedImage = function _updateTrackedImage(frame, space, trackedImage, trackingResult) {
5084
5055
  var pose = trackedImage.pose;
5085
- var transform = frame.getPose(trackingResult.imageSpace, space).transform;
5056
+ var xrPose = frame.getPose(trackingResult.imageSpace, space);
5057
+ if (!xrPose) return false;
5058
+ var transform = xrPose.transform;
5086
5059
  pose.matrix.copyFromArray(transform.matrix);
5087
5060
  pose.rotation.copyFrom(transform.orientation);
5088
5061
  pose.position.copyFrom(transform.position);
5089
5062
  trackedImage.measuredPhysicalWidth = trackingResult.measuredWidthInMeters;
5063
+ return true;
5090
5064
  };
5091
5065
  return WebXRImageTracking;
5092
5066
  }(WebXRTrackableFeature);
@@ -5146,7 +5120,8 @@
5146
5120
  options.optionalFeatures.push("plane-detection");
5147
5121
  };
5148
5122
  _proto._updatePlane = function _updatePlane(frame, space, trackedPlane) {
5149
- var pose = trackedPlane.pose, polygon = trackedPlane.polygon, xrPlane = trackedPlane.xrPlane;
5123
+ var pose = trackedPlane.pose, polygon = trackedPlane.polygon;
5124
+ var xrPlane = trackedPlane.xrPlane;
5150
5125
  var planePose = frame.getPose(xrPlane.planeSpace, space);
5151
5126
  if (!planePose) return;
5152
5127
  var transform = planePose.transform, emulatedPosition = planePose.emulatedPosition;