@galacean/engine-xr-webxr 0.0.0-experimental-stateMachine.0 → 0.0.0-experimental-1.3-xr.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.
package/dist/browser.js CHANGED
@@ -574,6 +574,7 @@
574
574
  this._engine = _engine;
575
575
  this._mode = XRSessionMode.None;
576
576
  this._state = XRSessionState.None;
577
+ this._listeners = [];
577
578
  // @ts-ignore
578
579
  this._rhi = _engine._hardwareRenderer;
579
580
  this._raf = requestAnimationFrame.bind(window);
@@ -596,7 +597,7 @@
596
597
  throw new Error("Without session to run.");
597
598
  }
598
599
  platformSession.start();
599
- this._state = XRSessionState.Running;
600
+ this.state = XRSessionState.Running;
600
601
  this._xrManager._onSessionStart();
601
602
  if (!engine.isPaused) {
602
603
  engine.pause();
@@ -616,7 +617,7 @@
616
617
  rhi._mainFrameBuffer = null;
617
618
  rhi._mainFrameWidth = rhi._mainFrameHeight = 0;
618
619
  platformSession.stop();
619
- this._state = XRSessionState.Paused;
620
+ this.state = XRSessionState.Paused;
620
621
  this._xrManager._onSessionStop();
621
622
  if (!engine.isPaused) {
622
623
  engine.pause();
@@ -624,6 +625,22 @@
624
625
  }
625
626
  };
626
627
  /**
628
+ * Add a listening function for session state changes.
629
+ * @param listener - The listening function
630
+ */ _proto.addChangedListener = function addChangedListener(listener) {
631
+ this._listeners.push(listener);
632
+ };
633
+ /**
634
+ * Remove a listening function of session state changes.
635
+ * @param listener - The listening function
636
+ */ _proto.removeChangedListener = function removeChangedListener(listener) {
637
+ var _this = this, listeners = _this._listeners;
638
+ var index = listeners.indexOf(listener);
639
+ if (index >= 0) {
640
+ listeners.splice(index, 1);
641
+ }
642
+ };
643
+ /**
627
644
  * @internal
628
645
  */ _proto._initialize = function _initialize(mode, features) {
629
646
  var _this = this;
@@ -638,7 +655,7 @@
638
655
  xrManager._platformDevice.requestSession(_this._rhi, mode, platformFeatures).then(function(platformSession) {
639
656
  _this._mode = mode;
640
657
  _this._platformSession = platformSession;
641
- _this._state = XRSessionState.Initialized;
658
+ _this.state = XRSessionState.Initialized;
642
659
  platformSession.setSessionExitCallBack(_this._onSessionExit);
643
660
  platformSession.addEventListener();
644
661
  xrManager._onSessionInit();
@@ -687,7 +704,7 @@
687
704
  rhi._mainFrameWidth = rhi._mainFrameHeight = 0;
688
705
  platformSession.removeEventListener();
689
706
  this._platformSession = null;
690
- this._state = XRSessionState.None;
707
+ this.state = XRSessionState.None;
691
708
  this._xrManager._onSessionExit();
692
709
  if (!engine.isPaused) {
693
710
  engine.pause();
@@ -712,6 +729,15 @@
712
729
  * Return the current session state.
713
730
  */ function get() {
714
731
  return this._state;
732
+ },
733
+ set: /**
734
+ * @internal
735
+ */ function set(value) {
736
+ this._state = value;
737
+ var listeners = this._listeners;
738
+ for(var i = 0, n = listeners.length; i < n; i++){
739
+ listeners[i](value);
740
+ }
715
741
  }
716
742
  },
717
743
  {
@@ -760,21 +786,23 @@
760
786
  if (this.sessionManager._platformSession) {
761
787
  throw new Error("Cannot add feature when the session is initialized.");
762
788
  }
763
- var _this = this, features = _this._features;
789
+ if (!this._platformDevice.isSupportedFeature(XRManagerExtended._featureMap.get(type))) {
790
+ throw new Error("The feature is not supported");
791
+ }
792
+ var features = this.features;
764
793
  for(var i = 0, n = features.length; i < n; i++){
765
- var feature = features[i];
766
- if (_instanceof1(feature, type)) throw new Error("The feature has been added");
794
+ if (_instanceof1(features[i], type)) throw new Error("The feature has been added");
767
795
  }
768
- var feature1 = _construct$1(type, [].concat(this, args));
769
- this._features.push(feature1);
770
- return feature1;
796
+ var feature = _construct$1(type, [].concat(this, args));
797
+ features.push(feature);
798
+ return feature;
771
799
  };
772
800
  /**
773
801
  * Get feature which match the type.
774
802
  * @param type - The type of the feature
775
803
  * @returns The feature which match type
776
804
  */ _proto.getFeature = function getFeature(type) {
777
- var _this = this, features = _this._features;
805
+ var features = this.features;
778
806
  for(var i = 0, n = features.length; i < n; i++){
779
807
  var feature = features[i];
780
808
  if (_instanceof1(feature, type)) {
@@ -782,19 +810,6 @@
782
810
  }
783
811
  }
784
812
  };
785
- _proto.getFeatures = function getFeatures(type, out) {
786
- if (out) {
787
- out.length = 0;
788
- } else {
789
- out = [];
790
- }
791
- var _this = this, features = _this._features;
792
- for(var i = 0, n = features.length; i < n; i--){
793
- var feature = features[i];
794
- _instanceof1(feature, type) && out.push(feature);
795
- }
796
- return out;
797
- };
798
813
  /**
799
814
  * Enter XR immersive mode, when you call this method, it will initialize and display the XR virtual world.
800
815
  * @param sessionMode - The mode of the session
@@ -814,7 +829,7 @@
814
829
  // 1. Check if this xr mode is supported
815
830
  sessionManager.isSupportedMode(sessionMode).then(function() {
816
831
  // 2. Initialize session
817
- sessionManager._initialize(sessionMode, _this._features).then(function() {
832
+ sessionManager._initialize(sessionMode, _this.features).then(function() {
818
833
  autoRun && sessionManager.run();
819
834
  resolve();
820
835
  }, reject);
@@ -835,7 +850,7 @@
835
850
  /**
836
851
  * @internal
837
852
  */ _proto._initialize = function _initialize(engine, xrDevice) {
838
- this._features = [];
853
+ this.features.length = 0;
839
854
  this._platformDevice = xrDevice;
840
855
  this.sessionManager = new XRSessionManager(this, engine);
841
856
  this.inputManager = new XRInputManager(this, engine);
@@ -849,7 +864,7 @@
849
864
  sessionManager._onUpdate();
850
865
  this.inputManager._onUpdate();
851
866
  this.cameraManager._onUpdate();
852
- var _this = this, features = _this._features;
867
+ var features = this.features;
853
868
  for(var i = 0, n = features.length; i < n; i++){
854
869
  var feature = features[i];
855
870
  feature.enabled && feature._onUpdate();
@@ -889,7 +904,7 @@
889
904
  /**
890
905
  * @internal
891
906
  */ _proto._onSessionStop = function _onSessionStop() {
892
- var _this = this, features = _this._features;
907
+ var features = this.features;
893
908
  for(var i = 0, n = features.length; i < n; i++){
894
909
  var feature = features[i];
895
910
  feature.enabled && feature._onSessionStop();
@@ -898,7 +913,7 @@
898
913
  /**
899
914
  * @internal
900
915
  */ _proto._onSessionInit = function _onSessionInit() {
901
- var _this = this, features = _this._features;
916
+ var features = this.features;
902
917
  for(var i = 0, n = features.length; i < n; i++){
903
918
  var feature = features[i];
904
919
  feature.enabled && feature._onSessionInit();
@@ -908,7 +923,7 @@
908
923
  * @internal
909
924
  */ _proto._onSessionStart = function _onSessionStart() {
910
925
  this.cameraManager._onSessionStart();
911
- var _this = this, features = _this._features;
926
+ var features = this.features;
912
927
  for(var i = 0, n = features.length; i < n; i++){
913
928
  var feature = features[i];
914
929
  feature.enabled && feature._onSessionStart();
@@ -918,7 +933,7 @@
918
933
  * @internal
919
934
  */ _proto._onSessionExit = function _onSessionExit() {
920
935
  this.cameraManager._onSessionExit();
921
- var _this = this, features = _this._features;
936
+ var features = this.features;
922
937
  for(var i = 0, n = features.length; i < n; i++){
923
938
  var feature = features[i];
924
939
  feature.enabled && feature._onSessionExit();
@@ -1057,6 +1072,101 @@
1057
1072
  else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1058
1073
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1059
1074
  }
1075
+ function __generator(thisArg, body) {
1076
+ var verb = function verb(n) {
1077
+ return function(v) {
1078
+ return step([
1079
+ n,
1080
+ v
1081
+ ]);
1082
+ };
1083
+ };
1084
+ var step = function step(op) {
1085
+ if (f) throw new TypeError("Generator is already executing.");
1086
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
1087
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
1088
+ if (y = 0, t) op = [
1089
+ op[0] & 2,
1090
+ t.value
1091
+ ];
1092
+ switch(op[0]){
1093
+ case 0:
1094
+ case 1:
1095
+ t = op;
1096
+ break;
1097
+ case 4:
1098
+ _.label++;
1099
+ return {
1100
+ value: op[1],
1101
+ done: false
1102
+ };
1103
+ case 5:
1104
+ _.label++;
1105
+ y = op[1];
1106
+ op = [
1107
+ 0
1108
+ ];
1109
+ continue;
1110
+ case 7:
1111
+ op = _.ops.pop();
1112
+ _.trys.pop();
1113
+ continue;
1114
+ default:
1115
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
1116
+ _ = 0;
1117
+ continue;
1118
+ }
1119
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
1120
+ _.label = op[1];
1121
+ break;
1122
+ }
1123
+ if (op[0] === 6 && _.label < t[1]) {
1124
+ _.label = t[1];
1125
+ t = op;
1126
+ break;
1127
+ }
1128
+ if (t && _.label < t[2]) {
1129
+ _.label = t[2];
1130
+ _.ops.push(op);
1131
+ break;
1132
+ }
1133
+ if (t[2]) _.ops.pop();
1134
+ _.trys.pop();
1135
+ continue;
1136
+ }
1137
+ op = body.call(thisArg, _);
1138
+ } catch (e) {
1139
+ op = [
1140
+ 6,
1141
+ e
1142
+ ];
1143
+ y = 0;
1144
+ } finally{
1145
+ f = t = 0;
1146
+ }
1147
+ if (op[0] & 5) throw op[1];
1148
+ return {
1149
+ value: op[0] ? op[1] : void 0,
1150
+ done: true
1151
+ };
1152
+ };
1153
+ var _ = {
1154
+ label: 0,
1155
+ sent: function sent() {
1156
+ if (t[0] & 1) throw t[1];
1157
+ return t[1];
1158
+ },
1159
+ trys: [],
1160
+ ops: []
1161
+ }, f, y, t, g;
1162
+ return g = {
1163
+ next: verb(0),
1164
+ "throw": verb(1),
1165
+ "return": verb(2)
1166
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
1167
+ return this;
1168
+ }), g;
1169
+ }
1060
1170
  typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
1061
1171
  var e = new Error(message);
1062
1172
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
@@ -1411,7 +1521,7 @@
1411
1521
  ], XRHitTest);
1412
1522
  /**
1413
1523
  * The anchor in XR space.
1414
- */ var XRAnchor = /*#__PURE__*/ function(XRTracked1) {
1524
+ */ var XRAnchor$1 = /*#__PURE__*/ function(XRTracked1) {
1415
1525
  var XRAnchor = function XRAnchor() {
1416
1526
  return XRTracked1.apply(this, arguments);
1417
1527
  };
@@ -1481,7 +1591,7 @@
1481
1591
  this._removeAllRequestTrackings();
1482
1592
  };
1483
1593
  _proto._generateTracked = function _generateTracked() {
1484
- var anchor = new XRAnchor();
1594
+ var anchor = new XRAnchor$1();
1485
1595
  anchor.id = XRTrackableFeature._uuid++;
1486
1596
  return anchor;
1487
1597
  };
@@ -1574,6 +1684,256 @@
1574
1684
  XRImageTracking = __decorate([
1575
1685
  registerXRFeature(XRFeatureType.ImageTracking)
1576
1686
  ], XRImageTracking);
1687
+ /**
1688
+ * A reference image is an image to look for in the physical environment.
1689
+ */ var XRReferenceImage = function XRReferenceImage(name, imageSource, physicalWidth) {
1690
+ this.name = name;
1691
+ this.imageSource = imageSource;
1692
+ this.physicalWidth = physicalWidth;
1693
+ };
1694
+ var XRReferenceImageDecoder = /*#__PURE__*/ function() {
1695
+ var XRReferenceImageDecoder = function XRReferenceImageDecoder() {};
1696
+ XRReferenceImageDecoder.decode = function decode(engine, bufferReader) {
1697
+ return new Promise(function(resolve, reject) {
1698
+ var physicalWidth = bufferReader.nextFloat32();
1699
+ bufferReader.nextUint8();
1700
+ var img = new Image();
1701
+ img.onload = function() {
1702
+ resolve(new XRReferenceImage("", img, physicalWidth));
1703
+ };
1704
+ img.src = URL.createObjectURL(new window.Blob([
1705
+ bufferReader.nextImagesData(1)[0]
1706
+ ]));
1707
+ });
1708
+ };
1709
+ return XRReferenceImageDecoder;
1710
+ }();
1711
+ XRReferenceImageDecoder = __decorate([
1712
+ engine.decoder("XRReferenceImage")
1713
+ ], XRReferenceImageDecoder);
1714
+ function _extends() {
1715
+ _extends = Object.assign || function assign(target) {
1716
+ for(var i = 1; i < arguments.length; i++){
1717
+ var source = arguments[i];
1718
+ for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
1719
+ }
1720
+ return target;
1721
+ };
1722
+ return _extends.apply(this, arguments);
1723
+ }
1724
+ var XRReferenceImageLoader = /*#__PURE__*/ function(Loader1) {
1725
+ var XRReferenceImageLoader = function XRReferenceImageLoader() {
1726
+ return Loader1.apply(this, arguments);
1727
+ };
1728
+ _inherits(XRReferenceImageLoader, Loader1);
1729
+ var _proto = XRReferenceImageLoader.prototype;
1730
+ _proto.load = function load(item, resourceManager) {
1731
+ var _this = this;
1732
+ return new engine.AssetPromise(function(resolve, reject) {
1733
+ _this.request(item.url, _extends({}, item, {
1734
+ type: "arraybuffer"
1735
+ })).then(function(data) {
1736
+ engine.decode(data, resourceManager.engine).then(function(referenceImage) {
1737
+ resolve(referenceImage);
1738
+ });
1739
+ }).catch(reject);
1740
+ });
1741
+ };
1742
+ return XRReferenceImageLoader;
1743
+ }(engine.Loader);
1744
+ XRReferenceImageLoader = __decorate([
1745
+ engine.resourceLoader("XRReferenceImage", [])
1746
+ ], XRReferenceImageLoader);
1747
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
1748
+ try {
1749
+ var info = gen[key](arg);
1750
+ var value = info.value;
1751
+ } catch (error) {
1752
+ reject(error);
1753
+ return;
1754
+ }
1755
+ if (info.done) resolve(value);
1756
+ else Promise.resolve(value).then(_next, _throw);
1757
+ }
1758
+ function _async_to_generator(fn) {
1759
+ return function() {
1760
+ var self = this, args = arguments;
1761
+ return new Promise(function(resolve, reject) {
1762
+ var gen = fn.apply(self, args);
1763
+ function _next(value) {
1764
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
1765
+ }
1766
+ function _throw(err) {
1767
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
1768
+ }
1769
+ _next(undefined);
1770
+ });
1771
+ };
1772
+ }
1773
+ var XRSceneExtendParser = /*#__PURE__*/ function() {
1774
+ var XRSceneExtendParser = function XRSceneExtendParser() {};
1775
+ XRSceneExtendParser.parse = function parse(engine$1, context, data) {
1776
+ return _async_to_generator(function() {
1777
+ var xrManager, xr, origin, camera, leftCamera, rightCamera, features, entityMap, cameraManager, i, n, feature, _;
1778
+ return __generator(this, function(_state) {
1779
+ switch(_state.label){
1780
+ case 0:
1781
+ xrManager = engine$1.xrManager;
1782
+ if (!xrManager) {
1783
+ engine.Logger.error("XRManager is not found in the engine.");
1784
+ return [
1785
+ 2
1786
+ ];
1787
+ }
1788
+ xr = data.scene.xr;
1789
+ origin = xr.origin, camera = xr.camera, leftCamera = xr.leftCamera, rightCamera = xr.rightCamera, features = xr.features;
1790
+ entityMap = context.entityMap;
1791
+ origin && (xrManager.origin = entityMap.get(origin));
1792
+ cameraManager = xrManager.cameraManager;
1793
+ setCamera(cameraManager, XRTrackedInputDevice.Camera, entityMap.get(camera));
1794
+ setCamera(cameraManager, XRTrackedInputDevice.LeftCamera, entityMap.get(leftCamera));
1795
+ setCamera(cameraManager, XRTrackedInputDevice.RightCamera, entityMap.get(rightCamera));
1796
+ i = 0, n = features.length;
1797
+ _state.label = 1;
1798
+ case 1:
1799
+ if (!(i < n)) return [
1800
+ 3,
1801
+ 9
1802
+ ];
1803
+ feature = features[i];
1804
+ if (!feature.enable) return [
1805
+ 3,
1806
+ 8
1807
+ ];
1808
+ _ = feature.type;
1809
+ switch(_){
1810
+ case XRFeatureType.ImageTracking:
1811
+ return [
1812
+ 3,
1813
+ 2
1814
+ ];
1815
+ case XRFeatureType.PlaneTracking:
1816
+ return [
1817
+ 3,
1818
+ 4
1819
+ ];
1820
+ case XRFeatureType.AnchorTracking:
1821
+ return [
1822
+ 3,
1823
+ 5
1824
+ ];
1825
+ case XRFeatureType.HitTest:
1826
+ return [
1827
+ 3,
1828
+ 6
1829
+ ];
1830
+ }
1831
+ return [
1832
+ 3,
1833
+ 7
1834
+ ];
1835
+ case 2:
1836
+ return [
1837
+ 4,
1838
+ addImageTracking(engine$1, xrManager, feature)
1839
+ ];
1840
+ case 3:
1841
+ _state.sent();
1842
+ return [
1843
+ 3,
1844
+ 8
1845
+ ];
1846
+ case 4:
1847
+ addPlaneTracking(xrManager, feature);
1848
+ return [
1849
+ 3,
1850
+ 8
1851
+ ];
1852
+ case 5:
1853
+ addAnchorTracking(xrManager, feature);
1854
+ return [
1855
+ 3,
1856
+ 8
1857
+ ];
1858
+ case 6:
1859
+ addHitTest(xrManager);
1860
+ return [
1861
+ 3,
1862
+ 8
1863
+ ];
1864
+ case 7:
1865
+ return [
1866
+ 3,
1867
+ 8
1868
+ ];
1869
+ case 8:
1870
+ i++;
1871
+ return [
1872
+ 3,
1873
+ 1
1874
+ ];
1875
+ case 9:
1876
+ return [
1877
+ 2
1878
+ ];
1879
+ }
1880
+ });
1881
+ })();
1882
+ };
1883
+ return XRSceneExtendParser;
1884
+ }();
1885
+ XRSceneExtendParser = __decorate([
1886
+ engine.registerSceneExtendParser("XR")
1887
+ ], XRSceneExtendParser);
1888
+ function addImageTracking(engine$1, xrManager, schema) {
1889
+ if (!xrManager.isSupportedFeature(XRImageTracking)) {
1890
+ engine.Logger.error("Image Tracking is not supported.");
1891
+ return;
1892
+ }
1893
+ var promises = [];
1894
+ var images = schema.images;
1895
+ var resourceManager = engine$1.resourceManager;
1896
+ for(var i = 0, n = images.length; i < n; i++){
1897
+ // @ts-ignore
1898
+ promises.push(resourceManager.getResourceByRef(images[i]));
1899
+ }
1900
+ return Promise.all(promises).then(function(xrReferenceImages) {
1901
+ xrManager.addFeature(XRImageTracking, xrReferenceImages);
1902
+ });
1903
+ }
1904
+ function addPlaneTracking(xrManager, schema) {
1905
+ if (!xrManager.isSupportedFeature(XRPlaneTracking)) {
1906
+ engine.Logger.error("Plane Tracking is not supported.");
1907
+ return;
1908
+ }
1909
+ xrManager.addFeature(XRPlaneTracking, schema.detectionMode);
1910
+ }
1911
+ function addAnchorTracking(xrManager, schema) {
1912
+ if (!xrManager.isSupportedFeature(XRAnchorTracking)) {
1913
+ engine.Logger.error("Anchor Tracking is not supported.");
1914
+ return;
1915
+ }
1916
+ var anchorTracking = xrManager.addFeature(XRAnchorTracking);
1917
+ var anchors = schema.anchors;
1918
+ for(var i = 0, n = anchors.length; i < n; i++){
1919
+ var anchor = anchors[i];
1920
+ var position = new engine.Vector3().copyFrom(anchor.position);
1921
+ var rotation = new engine.Quaternion().copyFrom(anchor.rotation);
1922
+ anchorTracking.addAnchor(position, rotation);
1923
+ }
1924
+ }
1925
+ function addHitTest(xrManager, schema) {
1926
+ if (!xrManager.isSupportedFeature(XRHitTest)) {
1927
+ engine.Logger.error("Hit Test is not supported.");
1928
+ return;
1929
+ }
1930
+ xrManager.addFeature(XRHitTest);
1931
+ }
1932
+ function setCamera(cameraManager, device, entity) {
1933
+ var _entity;
1934
+ var camera = (_entity = entity) == null ? void 0 : _entity.getComponent(engine.Camera);
1935
+ camera && cameraManager.attachCamera(device, camera);
1936
+ }
1577
1937
 
1578
1938
  function _is_native_reflect_construct() {
1579
1939
  if (typeof Reflect === "undefined" || !Reflect.construct) return false;
@@ -1739,6 +2099,15 @@
1739
2099
  */ MathUtil.degreeToRadian = function degreeToRadian(d) {
1740
2100
  return d * MathUtil.degreeToRadFactor;
1741
2101
  };
2102
+ /**
2103
+ * Linearly interpolate between two values
2104
+ * @param start - Specify the start of the range in which to interpolate
2105
+ * @param end - Specify the end of the range in which to interpolate
2106
+ * @param t - The blend amount where 0 returns start and 1 end
2107
+ * @returns The result of linear blending between start and end
2108
+ */ MathUtil.lerp = function lerp(start, end, t) {
2109
+ return start + (end - start) * t;
2110
+ };
1742
2111
  return MathUtil;
1743
2112
  }();
1744
2113
  (function() {
@@ -5973,7 +6342,7 @@
5973
6342
  session.removeEventListener("squeeze", onSessionEvent);
5974
6343
  session.removeEventListener("squeezestart", onSessionEvent);
5975
6344
  session.removeEventListener("squeezeend", onSessionEvent);
5976
- session.addEventListener("end", this._onSessionExit);
6345
+ session.removeEventListener("end", this._onSessionExit);
5977
6346
  this._events.length = 0;
5978
6347
  };
5979
6348
  _proto.resetEvents = function resetEvents() {
@@ -6116,7 +6485,16 @@
6116
6485
  });
6117
6486
  };
6118
6487
  _proto.isSupportedFeature = function isSupportedFeature(type) {
6119
- return true;
6488
+ switch(type){
6489
+ case XRFeatureType.HitTest:
6490
+ case XRFeatureType.PlaneTracking:
6491
+ return typeof XRPlane !== "undefined";
6492
+ case XRFeatureType.AnchorTracking:
6493
+ return typeof XRAnchor !== "undefined";
6494
+ case XRFeatureType.ImageTracking:
6495
+ // @ts-ignore
6496
+ return typeof XRImageTrackingResult !== "undefined";
6497
+ }
6120
6498
  };
6121
6499
  _proto.createPlatformFeature = function createPlatformFeature(type) {
6122
6500
  for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){