iwer 2.1.0 → 2.1.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 (83) hide show
  1. package/build/iwer.js +412 -1291
  2. package/build/iwer.min.js +52 -11
  3. package/build/iwer.module.js +412 -1291
  4. package/build/iwer.module.min.js +52 -11
  5. package/lib/action/ActionPlayer.d.ts.map +1 -1
  6. package/lib/action/ActionPlayer.js.map +1 -1
  7. package/lib/action/ActionRecorder.d.ts.map +1 -1
  8. package/lib/action/ActionRecorder.js +1 -1
  9. package/lib/action/ActionRecorder.js.map +1 -1
  10. package/lib/anchors/XRAnchor.d.ts.map +1 -1
  11. package/lib/anchors/XRAnchor.js.map +1 -1
  12. package/lib/device/XRController.d.ts.map +1 -1
  13. package/lib/device/XRController.js.map +1 -1
  14. package/lib/device/XRDevice.d.ts +1 -1
  15. package/lib/device/XRDevice.d.ts.map +1 -1
  16. package/lib/device/XRDevice.js +8 -3
  17. package/lib/device/XRDevice.js.map +1 -1
  18. package/lib/device/XRHandInput.d.ts.map +1 -1
  19. package/lib/device/XRHandInput.js.map +1 -1
  20. package/lib/device/XRTrackedInput.d.ts.map +1 -1
  21. package/lib/device/XRTrackedInput.js.map +1 -1
  22. package/lib/device/configs/controller/meta.js.map +1 -1
  23. package/lib/device/configs/hand/pinch.js.map +1 -1
  24. package/lib/device/configs/hand/point.js.map +1 -1
  25. package/lib/device/configs/hand/relaxed.js.map +1 -1
  26. package/lib/device/configs/headset/meta.js.map +1 -1
  27. package/lib/events/XRInputSourceEvent.d.ts.map +1 -1
  28. package/lib/events/XRInputSourceEvent.js.map +1 -1
  29. package/lib/events/XRInputSourcesChangeEvent.d.ts.map +1 -1
  30. package/lib/events/XRInputSourcesChangeEvent.js.map +1 -1
  31. package/lib/events/XRReferenceSpaceEvent.d.ts.map +1 -1
  32. package/lib/events/XRReferenceSpaceEvent.js.map +1 -1
  33. package/lib/events/XRSessionEvent.d.ts.map +1 -1
  34. package/lib/events/XRSessionEvent.js.map +1 -1
  35. package/lib/frameloop/XRFrame.d.ts.map +1 -1
  36. package/lib/frameloop/XRFrame.js.map +1 -1
  37. package/lib/gamepad/Gamepad.d.ts.map +1 -1
  38. package/lib/gamepad/Gamepad.js.map +1 -1
  39. package/lib/hittest/XRHitTest.d.ts.map +1 -1
  40. package/lib/hittest/XRHitTest.js.map +1 -1
  41. package/lib/hittest/XRRay.d.ts.map +1 -1
  42. package/lib/hittest/XRRay.js.map +1 -1
  43. package/lib/initialization/XRSystem.d.ts.map +1 -1
  44. package/lib/initialization/XRSystem.js.map +1 -1
  45. package/lib/input/XRHand.d.ts.map +1 -1
  46. package/lib/input/XRHand.js.map +1 -1
  47. package/lib/input/XRInputSource.d.ts.map +1 -1
  48. package/lib/input/XRInputSource.js.map +1 -1
  49. package/lib/labels/labels.d.ts.map +1 -1
  50. package/lib/labels/labels.js.map +1 -1
  51. package/lib/layers/XRWebGLLayer.d.ts.map +1 -1
  52. package/lib/layers/XRWebGLLayer.js.map +1 -1
  53. package/lib/meshes/XRMesh.d.ts.map +1 -1
  54. package/lib/meshes/XRMesh.js.map +1 -1
  55. package/lib/planes/XRPlane.d.ts.map +1 -1
  56. package/lib/planes/XRPlane.js.map +1 -1
  57. package/lib/pose/XRJointPose.d.ts.map +1 -1
  58. package/lib/pose/XRJointPose.js.map +1 -1
  59. package/lib/pose/XRPose.d.ts.map +1 -1
  60. package/lib/pose/XRPose.js.map +1 -1
  61. package/lib/pose/XRViewerPose.d.ts.map +1 -1
  62. package/lib/pose/XRViewerPose.js.map +1 -1
  63. package/lib/primitives/XRRigidTransform.d.ts.map +1 -1
  64. package/lib/primitives/XRRigidTransform.js.map +1 -1
  65. package/lib/session/XRRenderState.d.ts.map +1 -1
  66. package/lib/session/XRRenderState.js.map +1 -1
  67. package/lib/session/XRSession.d.ts.map +1 -1
  68. package/lib/session/XRSession.js.map +1 -1
  69. package/lib/spaces/XRJointSpace.d.ts.map +1 -1
  70. package/lib/spaces/XRJointSpace.js.map +1 -1
  71. package/lib/spaces/XRReferenceSpace.d.ts.map +1 -1
  72. package/lib/spaces/XRReferenceSpace.js.map +1 -1
  73. package/lib/spaces/XRSpace.d.ts.map +1 -1
  74. package/lib/spaces/XRSpace.js.map +1 -1
  75. package/lib/utils/Math.d.ts.map +1 -1
  76. package/lib/utils/Math.js.map +1 -1
  77. package/lib/version.d.ts +1 -1
  78. package/lib/version.js +1 -1
  79. package/lib/views/XRView.d.ts.map +1 -1
  80. package/lib/views/XRView.js.map +1 -1
  81. package/lib/views/XRViewport.d.ts.map +1 -1
  82. package/lib/views/XRViewport.js.map +1 -1
  83. package/package.json +61 -61
package/build/iwer.min.js CHANGED
@@ -1,4 +1,45 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).IWER={})}(this,function(e){"use strict";var t=1e-6,r="undefined"!=typeof Float32Array?Float32Array:Array;function i(){var e=new r(16);return r!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0),e[0]=1,e[5]=1,e[10]=1,e[15]=1,e}function s(e){var t=new r(16);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function a(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function n(e,t){var r=t[0],i=t[1],s=t[2],a=t[3],n=t[4],o=t[5],h=t[6],l=t[7],u=t[8],c=t[9],d=t[10],p=t[11],f=t[12],m=t[13],x=t[14],g=t[15],y=r*o-i*n,v=r*h-s*n,T=r*l-a*n,R=i*h-s*o,w=i*l-a*o,E=s*l-a*h,S=u*m-c*f,_=u*x-d*f,b=u*g-p*f,A=c*x-d*m,M=c*g-p*m,F=d*g-p*x,P=y*F-v*M+T*A+R*b-w*_+E*S;return P?(P=1/P,e[0]=(o*F-h*M+l*A)*P,e[1]=(s*M-i*F-a*A)*P,e[2]=(m*E-x*w+g*R)*P,e[3]=(d*w-c*E-p*R)*P,e[4]=(h*b-n*F-l*_)*P,e[5]=(r*F-s*b+a*_)*P,e[6]=(x*T-f*E-g*v)*P,e[7]=(u*E-d*T+p*v)*P,e[8]=(n*M-o*b+l*S)*P,e[9]=(i*b-r*M-a*S)*P,e[10]=(f*w-m*T+g*y)*P,e[11]=(c*T-u*w-p*y)*P,e[12]=(o*_-n*A-h*S)*P,e[13]=(r*A-i*_+s*S)*P,e[14]=(m*v-f*R-x*y)*P,e[15]=(u*R-c*v+d*y)*P,e):null}function o(e,t,r){var i=t[0],s=t[1],a=t[2],n=t[3],o=t[4],h=t[5],l=t[6],u=t[7],c=t[8],d=t[9],p=t[10],f=t[11],m=t[12],x=t[13],g=t[14],y=t[15],v=r[0],T=r[1],R=r[2],w=r[3];return e[0]=v*i+T*o+R*c+w*m,e[1]=v*s+T*h+R*d+w*x,e[2]=v*a+T*l+R*p+w*g,e[3]=v*n+T*u+R*f+w*y,v=r[4],T=r[5],R=r[6],w=r[7],e[4]=v*i+T*o+R*c+w*m,e[5]=v*s+T*h+R*d+w*x,e[6]=v*a+T*l+R*p+w*g,e[7]=v*n+T*u+R*f+w*y,v=r[8],T=r[9],R=r[10],w=r[11],e[8]=v*i+T*o+R*c+w*m,e[9]=v*s+T*h+R*d+w*x,e[10]=v*a+T*l+R*p+w*g,e[11]=v*n+T*u+R*f+w*y,v=r[12],T=r[13],R=r[14],w=r[15],e[12]=v*i+T*o+R*c+w*m,e[13]=v*s+T*h+R*d+w*x,e[14]=v*a+T*l+R*p+w*g,e[15]=v*n+T*u+R*f+w*y,e}function h(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e}function l(e,r,i){var s,a,n,o=i[0],h=i[1],l=i[2],u=Math.sqrt(o*o+h*h+l*l);return u<t?null:(o*=u=1/u,h*=u,l*=u,s=Math.sin(r),n=1-(a=Math.cos(r)),e[0]=o*o*n+a,e[1]=h*o*n+l*s,e[2]=l*o*n-h*s,e[3]=0,e[4]=o*h*n-l*s,e[5]=h*h*n+a,e[6]=l*h*n+o*s,e[7]=0,e[8]=o*l*n+h*s,e[9]=h*l*n-o*s,e[10]=l*l*n+a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e)}function u(e,t,r){var i=t[0],s=t[1],a=t[2],n=t[3],o=i+i,h=s+s,l=a+a,u=i*o,c=i*h,d=i*l,p=s*h,f=s*l,m=a*l,x=n*o,g=n*h,y=n*l;return e[0]=1-(p+m),e[1]=c+y,e[2]=d-g,e[3]=0,e[4]=c-y,e[5]=1-(u+m),e[6]=f+x,e[7]=0,e[8]=d+g,e[9]=f-x,e[10]=1-(u+p),e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function c(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function d(e,t){var r=t[0],i=t[1],s=t[2],a=t[4],n=t[5],o=t[6],h=t[8],l=t[9],u=t[10];return e[0]=Math.sqrt(r*r+i*i+s*s),e[1]=Math.sqrt(a*a+n*n+o*o),e[2]=Math.sqrt(h*h+l*l+u*u),e}function p(e,t){var i=new r(3);d(i,t);var s=1/i[0],a=1/i[1],n=1/i[2],o=t[0]*s,h=t[1]*a,l=t[2]*n,u=t[4]*s,c=t[5]*a,p=t[6]*n,f=t[8]*s,m=t[9]*a,x=t[10]*n,g=o+c+x,y=0;return g>0?(y=2*Math.sqrt(g+1),e[3]=.25*y,e[0]=(p-m)/y,e[1]=(f-l)/y,e[2]=(h-u)/y):o>c&&o>x?(y=2*Math.sqrt(1+o-c-x),e[3]=(p-m)/y,e[0]=.25*y,e[1]=(h+u)/y,e[2]=(f+l)/y):c>x?(y=2*Math.sqrt(1+c-o-x),e[3]=(f-l)/y,e[0]=(h+u)/y,e[1]=.25*y,e[2]=(p+m)/y):(y=2*Math.sqrt(1+x-o-c),e[3]=(h-u)/y,e[0]=(f+l)/y,e[1]=(p+m)/y,e[2]=.25*y),e}function f(e,t){var r=t[0],i=t[1],s=t[2],a=t[3],n=r+r,o=i+i,h=s+s,l=r*n,u=i*n,c=i*o,d=s*n,p=s*o,f=s*h,m=a*n,x=a*o,g=a*h;return e[0]=1-c-f,e[1]=u+g,e[2]=d-x,e[3]=0,e[4]=u-g,e[5]=1-l-f,e[6]=p+m,e[7]=0,e[8]=d+x,e[9]=p-m,e[10]=1-l-c,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}var m=function(e,t,r,i,s){var a=1/Math.tan(t/2);if(e[0]=a/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,null!=s&&s!==1/0){var n=1/(i-s);e[10]=(s+i)*n,e[14]=2*s*i*n}else e[10]=-1,e[14]=-2*i;return e};function x(){var e=new r(3);return r!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function g(e,t,i){var s=new r(3);return s[0]=e,s[1]=t,s[2]=i,s}function y(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function v(e,t,r,i){return e[0]=t,e[1]=r,e[2]=i,e}function T(e,t){var r=t[0],i=t[1],s=t[2],a=r*r+i*i+s*s;return a>0&&(a=1/Math.sqrt(a)),e[0]=t[0]*a,e[1]=t[1]*a,e[2]=t[2]*a,e}function R(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function w(e,t,r){var i=t[0],s=t[1],a=t[2],n=r[0],o=r[1],h=r[2];return e[0]=s*h-a*o,e[1]=a*n-i*h,e[2]=i*o-s*n,e}function E(e,t,r,i){var s=t[0],a=t[1],n=t[2];return e[0]=s+i*(r[0]-s),e[1]=a+i*(r[1]-a),e[2]=n+i*(r[2]-n),e}function S(){var e=new r(4);return r!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0,e[3]=0),e}function _(e,t,r,i,s){return e[0]=t,e[1]=r,e[2]=i,e[3]=s,e}function b(e,t,r){var i=t[0],s=t[1],a=t[2],n=t[3];return e[0]=r[0]*i+r[4]*s+r[8]*a+r[12]*n,e[1]=r[1]*i+r[5]*s+r[9]*a+r[13]*n,e[2]=r[2]*i+r[6]*s+r[10]*a+r[14]*n,e[3]=r[3]*i+r[7]*s+r[11]*a+r[15]*n,e}function A(){var e=new r(4);return r!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function M(e,t,r){r*=.5;var i=Math.sin(r);return e[0]=i*t[0],e[1]=i*t[1],e[2]=i*t[2],e[3]=Math.cos(r),e}function F(e,r,i,s){var a,n,o,h,l,u=r[0],c=r[1],d=r[2],p=r[3],f=i[0],m=i[1],x=i[2],g=i[3];return(n=u*f+c*m+d*x+p*g)<0&&(n=-n,f=-f,m=-m,x=-x,g=-g),1-n>t?(a=Math.acos(n),o=Math.sin(a),h=Math.sin((1-s)*a)/o,l=Math.sin(s*a)/o):(h=1-s,l=s),e[0]=h*u+l*f,e[1]=h*c+l*m,e[2]=h*d+l*x,e[3]=h*p+l*g,e}x(),function(){var e=S()}();var P,I=function(e,t,i,s){var a=new r(4);return a[0]=e,a[1]=t,a[2]=i,a[3]=s,a},L=function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e},C=_,N=function(e,t){var r=t[0],i=t[1],s=t[2],a=t[3],n=r*r+i*i+s*s+a*a;return n>0&&(n=1/Math.sqrt(n)),e[0]=r*n,e[1]=i*n,e[2]=s*n,e[3]=a*n,e};function D(){var e=new r(2);return r!=Float32Array&&(e[0]=0,e[1]=0),e}x(),g(1,0,0),g(0,1,0),A(),A(),P=new r(9),r!=Float32Array&&(P[1]=0,P[2]=0,P[3]=0,P[5]=0,P[6]=0,P[7]=0),P[0]=1,P[4]=1,P[8]=1,function(){var e=D()}();const B=Symbol("@iwer/action-player"),O=Symbol("@iwer/action-recorder"),U=Symbol("@iwer/xr-anchor"),V=Symbol("@iwer/xr-controller"),X=Symbol("@iwer/xr-device"),G=Symbol("@iwer/xr-hand-input"),q=Symbol("@iwer/xr-tracked-input"),z=Symbol("@iwer/xr-frame"),H=Symbol("@iwer/gamepad"),k=Symbol("@iwer/xr-system"),W=Symbol("@iwer/xr-input-source"),j=Symbol("@iwer/xr-webgl-layer"),Y=Symbol("@iwer/xr-mesh"),Q=Symbol("@iwer/xr-plane"),$=Symbol("@iwer/xr-joint-pose"),K=Symbol("@iwer/xr-pose"),J=Symbol("@iwer/xr-viewer-pose"),Z=Symbol("@iwer/xr-rigid-transform"),ee=Symbol("@iwer/xr-render-state"),te=Symbol("@iwer/xr-session"),re=Symbol("@iwer/xr-joint-space"),ie=Symbol("@iwer/xr-reference-space"),se=Symbol("@iwer/xr-space"),ae=Symbol("@iwer/xr-view"),ne=Symbol("@iwer/xr-viewport"),oe=Symbol("@iwer/xr-ray"),he=Symbol("@iwer/xr-hit-test");class le extends EventTarget{constructor(e,t){super(),this[se]={parentSpace:e,offsetMatrix:t?s(t):i(),emulated:!0}}}class ue extends le{constructor(){super(void 0,i())}}class ce{static updateOffsetPosition(e,t){h(e[se].offsetMatrix,t)}static updateOffsetQuaternion(e,t){const r=e[se].offsetMatrix,i=x();c(i,r),u(r,t,i)}static updateOffsetMatrix(e,t){a(e[se].offsetMatrix,t)}static calculateGlobalOffsetMatrix(e,t=i()){return o(t,e[se].parentSpace?ce.calculateGlobalOffsetMatrix(e[se].parentSpace):i(),e[se].offsetMatrix),t}}class de{constructor(e=0,t=0,r=0){this.vec3=g(e,t,r),this.tempVec3=x()}get x(){return this.vec3[0]}set x(e){this.vec3[0]=e}get y(){return this.vec3[1]}set y(e){this.vec3[1]=e}get z(){return this.vec3[2]}set z(e){this.vec3[2]=e}set(e,t,r){return v(this.vec3,e,t,r),this}clone(){return new de(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}normalize(){return y(this.tempVec3,this.vec3),T(this.vec3,this.tempVec3),this}add(e){return y(this.tempVec3,this.vec3),function(e,t,r){e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2]}(this.vec3,this.tempVec3,e.vec3),this}applyQuaternion(e){return y(this.tempVec3,this.vec3),function(e,t,r){var i=r[0],s=r[1],a=r[2],n=r[3],o=t[0],h=t[1],l=t[2],u=s*l-a*h,c=a*o-i*l,d=i*h-s*o;u+=u,c+=c,d+=d,e[0]=o+n*u+s*d-a*c,e[1]=h+n*c+a*u-i*d,e[2]=l+n*d+i*c-s*u}(this.vec3,this.tempVec3,e.quat),this}}class pe{constructor(e=0,t=0,r=0,i=1){this.quat=I(e,t,r,i),this.tempQuat=A()}get x(){return this.quat[0]}set x(e){this.quat[0]=e}get y(){return this.quat[1]}set y(e){this.quat[1]=e}get z(){return this.quat[2]}set z(e){this.quat[2]=e}get w(){return this.quat[3]}set w(e){this.quat[3]=e}set(e,t,r,i){return C(this.quat,e,t,r,i),this}clone(){return new pe(this.x,this.y,this.z,this.w)}copy(e){return C(this.quat,e.x,e.y,e.z,e.w),this}normalize(){return L(this.tempQuat,this.quat),N(this.quat,this.tempQuat),this}invert(){return L(this.tempQuat,this.quat),function(e,t){e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3]}(this.quat,this.tempQuat),this}multiply(e){return L(this.tempQuat,this.quat),function(e,t,r){var i=t[0],s=t[1],a=t[2],n=t[3],o=r[0],h=r[1],l=r[2],u=r[3];e[0]=i*u+n*o+s*l-a*h,e[1]=s*u+n*h+a*o-i*l,e[2]=a*u+n*l+i*h-s*o,e[3]=n*u-i*o-s*h-a*l}(this.quat,this.tempQuat,e.quat),this}setFromAxisAngle(e,t){return M(this.quat,e.vec3,t),this}}var fe,me,xe;!function(e){e.None="",e.Standard="standard",e.XRStandard="xr-standard"}(fe||(fe={}));class ge{constructor(e,t){this[H]={type:e,eventTrigger:t,pressed:!1,touched:!1,value:0,lastFrameValue:0,pendingValue:null}}get pressed(){return"manual"===this[H].type?this[H].pressed:this[H].value>0}get touched(){return"manual"===this[H].type?this[H].touched:this[H].touched||this.pressed}get value(){return this[H].value}}class ye{constructor(){this.pressed=!1,this.touched=!1,this.value=0}}class ve{constructor(e,t="",r=-1){this[H]={id:t,index:r,connected:!1,timestamp:performance.now(),mapping:e.mapping,buttonsMap:{},buttonsSequence:[],axesMap:{},axesSequence:[],hapticActuators:[]},e.buttons.forEach(e=>{var t;null===e?this[H].buttonsSequence.push(null):(this[H].buttonsSequence.push(e.id),this[H].buttonsMap[e.id]=new ge(e.type,null!==(t=e.eventTrigger)&&void 0!==t?t:null))}),e.axes.forEach(e=>{null===e?this[H].axesSequence.push(null):(this[H].axesSequence.push(e.id+e.type),this[H].axesMap[e.id]||(this[H].axesMap[e.id]={x:0,y:0}))})}get id(){return this[H].id}get index(){return this[H].index}get connected(){return this[H].connected}get timestamp(){return this[H].timestamp}get mapping(){return this[H].mapping}get axes(){const e=[];return this[H].axesSequence.forEach(t=>{if(null===t)e.push(null);else{const r=t.substring(0,t.length-6),i=t.substring(t.length-6);e.push("y-axis"===i?this[H].axesMap[r].y:this[H].axesMap[r].x)}}),e}get buttons(){return this[H].buttonsSequence.map(e=>null===e?new ye:this[H].buttonsMap[e])}get hapticActuators(){return this[H].hapticActuators}get vibrationActuator(){return null}}!function(e){e.None="none",e.Left="left",e.Right="right"}(me||(me={})),function(e){e.Gaze="gaze",e.TrackedPointer="tracked-pointer",e.Screen="screen",e.TransientPointer="transient-pointer"}(xe||(xe={}));class Te extends Array{}class Re{constructor(e,t,r,i,s,a,n){this[W]={handedness:e,targetRayMode:t,targetRaySpace:i,gripSpace:a,profiles:r,gamepad:s,hand:n}}get handedness(){return this[W].handedness}get targetRayMode(){return this[W].targetRayMode}get targetRaySpace(){return this[W].targetRaySpace}get gripSpace(){return this[W].gripSpace}get profiles(){return this[W].profiles}get gamepad(){return this[W].gamepad}get hand(){return this[W].hand}}class we extends Event{constructor(e,t){if(super(e,t),!t.frame)throw new Error("XRInputSourceEventInit.frame is required");if(!t.inputSource)throw new Error("XRInputSourceEventInit.inputSource is required");this.frame=t.frame,this.inputSource=t.inputSource}}const Ee={[me.Left]:{position:new de(-.25,1.5,-.4),quaternion:new pe},[me.Right]:{position:new de(.25,1.5,-.4),quaternion:new pe},[me.None]:{position:new de(.25,1.5,-.4),quaternion:new pe}};class Se{constructor(e){this[q]={inputSource:e,position:Ee[e.handedness].position.clone(),quaternion:Ee[e.handedness].quaternion.clone(),connected:!0,lastFrameConnected:!1,inputSourceChanged:!0}}get position(){return this[q].position}get quaternion(){return this[q].quaternion}get inputSource(){return this[q].inputSource}get connected(){return this[q].connected}set connected(e){this[q].connected=e,this[q].inputSource.gamepad[H].connected=e}onFrameStart(e){u(this[q].inputSource.targetRaySpace[se].offsetMatrix,this[q].quaternion.quat,this[q].position.vec3);const t=e.session;this[q].inputSource.gamepad.buttons.forEach(r=>{r instanceof ge&&(r[H].lastFrameValue=r[H].value,null!=r[H].pendingValue&&(r[H].value=r[H].pendingValue,r[H].pendingValue=null),null!=r[H].eventTrigger&&(0===r[H].lastFrameValue&&r[H].value>0?(t.dispatchEvent(new we(r[H].eventTrigger,{frame:e,inputSource:this[q].inputSource})),t.dispatchEvent(new we(r[H].eventTrigger+"start",{frame:e,inputSource:this[q].inputSource}))):r[H].lastFrameValue>0&&0===r[H].value&&t.dispatchEvent(new we(r[H].eventTrigger+"end",{frame:e,inputSource:this[q].inputSource}))))}),this[q].inputSourceChanged=this.connected!==this[q].lastFrameConnected,this[q].lastFrameConnected=this.connected}}class _e extends Se{constructor(e,t,r){if(!e.layout[t])throw new DOMException("Handedness not supported","InvalidStateError");const i=new le(r),s=e.layout[t].gripOffsetMatrix?new le(i,e.layout[t].gripOffsetMatrix):void 0,a=[e.profileId,...e.fallbackProfileIds];super(new Re(t,xe.TrackedPointer,a,i,new ve(e.layout[t].gamepad),s)),this[V]={profileId:e.profileId,gamepadConfig:e.layout[t].gamepad}}get gamepadConfig(){return this[V].gamepadConfig}get profileId(){return this[V].profileId}updateButtonValue(e,t){if(t>1||t<0)return void console.warn(`Out-of-range value ${t} provided for button ${e}.`);const r=this[q].inputSource.gamepad[H].buttonsMap[e];if(r){if("binary"===r[H].type&&1!=t&&0!=t)return void console.warn(`Non-binary value ${t} provided for binary button ${e}.`);r[H].pendingValue=t}else console.warn(`Current controller does not have button ${e}.`)}updateButtonTouch(e,t){const r=this[q].inputSource.gamepad[H].buttonsMap[e];r?r[H].touched=t:console.warn(`Current controller does not have button ${e}.`)}updateAxis(e,t,r){if(r>1||r<-1)return void console.warn(`Out-of-range value ${r} provided for ${e} axes.`);const i=this[q].inputSource.gamepad[H].axesMap[e];i?"x-axis"===t?i.x=r:"y-axis"===t&&(i.y=r):console.warn(`Current controller does not have ${e} axes.`)}updateAxes(e,t,r){if(t>1||t<-1||r>1||r<-1)return void console.warn(`Out-of-range value x:${t}, y:${r} provided for ${e} axes.`);const i=this[q].inputSource.gamepad[H].axesMap[e];i?(i.x=t,i.y=r):console.warn(`Current controller does not have ${e} axes.`)}}class be{constructor(e,t,r,i,s){this[Y]={nativeMesh:e,frame:void 0,meshSpace:t,vertices:r,indices:i,lastChangedTime:performance.now(),semanticLabel:s}}get meshSpace(){return this[Y].meshSpace}get vertices(){return this[Y].vertices}get indices(){return this[Y].indices}get lastChangedTime(){return this[Y].lastChangedTime}get semanticLabel(){return this[Y].semanticLabel}}class Ae extends Set{}var Me,Fe;e.XRSemanticLabels=void 0,(Me=e.XRSemanticLabels||(e.XRSemanticLabels={})).Desk="desk",Me.Couch="couch",Me.Floor="floor",Me.Ceiling="ceiling",Me.Wall="wall",Me.Door="door",Me.Window="window",Me.Table="table",Me.Shelf="shelf",Me.Bed="bed",Me.Screen="screen",Me.Lamp="lamp",Me.Plant="plant",Me.WallArt="wall art",Me.GlobalMesh="global mesh",Me.Other="other",function(e){e.Horizontal="horizontal",e.Vertical="vertical"}(Fe||(Fe={}));const Pe={[e.XRSemanticLabels.Desk]:Fe.Horizontal,[e.XRSemanticLabels.Couch]:Fe.Horizontal,[e.XRSemanticLabels.Floor]:Fe.Horizontal,[e.XRSemanticLabels.Ceiling]:Fe.Horizontal,[e.XRSemanticLabels.Wall]:Fe.Vertical,[e.XRSemanticLabels.Door]:Fe.Vertical,[e.XRSemanticLabels.Window]:Fe.Vertical,[e.XRSemanticLabels.Table]:Fe.Horizontal,[e.XRSemanticLabels.Shelf]:Fe.Horizontal,[e.XRSemanticLabels.Bed]:Fe.Horizontal,[e.XRSemanticLabels.Screen]:Fe.Horizontal,[e.XRSemanticLabels.Lamp]:Fe.Horizontal,[e.XRSemanticLabels.Plant]:Fe.Horizontal,[e.XRSemanticLabels.WallArt]:Fe.Vertical};class Ie{constructor(e,t,r,i){this[Q]={nativePlane:e,frame:void 0,planeSpace:t,polygon:r,lastChangedTime:performance.now(),semanticLabel:i,orientation:i?Pe[i]:void 0}}get planeSpace(){return this[Q].planeSpace}get polygon(){return this[Q].polygon}get orientation(){return this[Q].orientation}get lastChangedTime(){return this[Q].lastChangedTime}get semanticLabel(){return this[Q].semanticLabel}}class Le extends Set{}class Ce{constructor(e,t){this[U]={anchorSpace:e,session:t,deleted:!1},t[te].trackedAnchors.add(this)}get anchorSpace(){if(this[U].deleted)throw new DOMException("XRAnchor has already been deleted.","InvalidStateError");return this[U].anchorSpace}requestPersistentHandle(){return new Promise((e,t)=>{if(this[U].deleted)t(new DOMException("XRAnchor has already been deleted.","InvalidStateError"));else{const t=this[U].session[te].persistentAnchors;for(const[r,i]of t.entries())if(i===this)return void e(r);const r=crypto.randomUUID();Be.createPersistentAnchor(this[U].session,this,r),e(r)}})}delete(){this[U].deleted||(this[U].anchorSpace=null,this[U].deleted=!0,this[U].session[te].trackedAnchors.delete(this))}}class Ne extends Set{}const De="@immersive-web-emulation-runtime/persistent-anchors";class Be{static recoverPersistentAnchorsFromStorage(e){const t=JSON.parse(localStorage.getItem(De)||"{}");Object.entries(t).forEach(([t,r])=>{const i=e[te].device[X].globalSpace,s=new le(i,r),a=new Ce(s,e);e[te].persistentAnchors.set(t,a)})}static createPersistentAnchor(e,t,r){e[te].trackedAnchors.add(t),e[te].persistentAnchors.set(r,t);const i=JSON.parse(localStorage.getItem(De)||"{}");i[r]=Array.from(t[U].anchorSpace[se].offsetMatrix),localStorage.setItem(De,JSON.stringify(i))}}class Oe{constructor(e,t){const r=g(0,0,0),s=A();this[Z]={matrix:i(),position:e?g(e.x,e.y,e.z):r,orientation:t?N(A(),I(t.x,t.y,t.z,t.w)):s,inverse:null},this.updateMatrix()}updateMatrix(){u(this[Z].matrix,this[Z].orientation,this[Z].position)}get matrix(){return this[Z].matrix}get position(){const e=this[Z].position;return new DOMPointReadOnly(e[0],e[1],e[2],1)}get orientation(){const e=this[Z].orientation;return new DOMPointReadOnly(e[0],e[1],e[2],e[3])}get inverse(){if(!this[Z].inverse){const e=i();if(!n(e,this[Z].matrix))throw new Error("Matrix is not invertible.");let t=x();c(t,e);let r=A();p(r,e),this[Z].inverse=new Oe(new DOMPointReadOnly(t[0],t[1],t[2],1),new DOMPointReadOnly(r[0],r[1],r[2],r[3])),this[Z].inverse[Z].inverse=this}return this[Z].inverse}}class Ue{constructor(e=0,t=0,r=0,i=1){this.x=e,this.y=t,this.z=r,this.w=i}}class Ve{constructor(e,t){const r={x:0,y:0,z:0,w:1},i={x:0,y:0,z:-1,w:0};if(e instanceof Oe){const t=e.matrix,s=_(S(),r.x,r.y,r.z,r.w),a=_(S(),i.x,i.y,i.z,i.w);b(s,s,t),b(a,a,t),r.x=s[0],r.y=s[1],r.z=s[2],r.w=s[3],i.x=a[0],i.y=a[1],i.z=a[2],i.w=a[3]}else if(e&&(r.x=e.x,r.y=e.y,r.z=e.z,r.w=e.w),t){if(0===t.x&&0===t.y&&0===t.z||0!==t.w)throw new DOMException("Invalid direction value to construct XRRay","TypeError");i.x=t.x,i.y=t.y,i.z=t.z,i.w=t.w}const s=Math.sqrt(i.x*i.x+i.y*i.y+i.z*i.z)||1;i.x=i.x/s,i.y=i.y/s,i.z=i.z/s,this[oe]={origin:new Ue(r.x,r.y,r.z,r.w),direction:new Ue(i.x,i.y,i.z,i.w),matrix:null}}get origin(){return this[oe].origin}get direction(){return this[oe].direction}get matrix(){if(this[oe].matrix)return this[oe].matrix;const e=v(x(),0,0,-1),t=v(x(),this[oe].origin.x,this[oe].origin.y,this[oe].origin.z),r=v(x(),this[oe].direction.x,this[oe].direction.y,this[oe].direction.z),s=w(x(),r,e),a=R(r,e),n=i();a>-1&&a<1?l(n,Math.acos(a),s):-1===a?l(n,Math.acos(a),v(x(),1,0,0)):function(e){e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1}(n);const u=h(i(),t),c=o(i(),u,n);return this[oe].matrix=new Float32Array(c),this[oe].matrix}}class Xe{constructor(e,t){var r;this[he]={session:e,space:t.space,offsetRay:null!==(r=t.offsetRay)&&void 0!==r?r:new Ve}}cancel(){this[he].session[te].hitTestSources.delete(this)}}class Ge{constructor(e,t){this[he]={frame:e,offsetSpace:t}}getPose(e){return this[he].frame.getPose(this[he].offsetSpace,e)}createAnchor(){return this[he].frame.createAnchor(new Oe,this[he].offsetSpace)}}class qe extends Event{constructor(e,t){if(super(e,t),!t.session)throw new Error("XRInputSourcesChangeEventInit.session is required");if(!t.added)throw new Error("XRInputSourcesChangeEventInit.added is required");if(!t.removed)throw new Error("XRInputSourcesChangeEventInit.removed is required");this.session=t.session,this.added=t.added,this.removed=t.removed}}var ze,He,ke;!function(e){e.Viewer="viewer",e.Local="local",e.LocalFloor="local-floor",e.BoundedFloor="bounded-floor",e.Unbounded="unbounded"}(He||(He={}));class We extends le{constructor(e,t,r){super(t,r),this[ze]={type:null,onreset:()=>{}},this[ie].type=e}get onreset(){var e;return null!==(e=this[ie].onreset)&&void 0!==e?e:()=>{}}set onreset(e){this[ie].onreset&&this.removeEventListener("reset",this[ie].onreset),this[ie].onreset=e,e&&this.addEventListener("reset",e)}getOffsetReferenceSpace(e){return new We(this[ie].type,this,e)}}ze=ie;class je{constructor(e={},t){this[ee]={depthNear:e.depthNear||(null==t?void 0:t.depthNear)||.1,depthFar:e.depthFar||(null==t?void 0:t.depthFar)||1e3,inlineVerticalFieldOfView:e.inlineVerticalFieldOfView||(null==t?void 0:t.inlineVerticalFieldOfView)||null,baseLayer:e.baseLayer||(null==t?void 0:t.baseLayer)||null}}get depthNear(){return this[ee].depthNear}get depthFar(){return this[ee].depthFar}get inlineVerticalFieldOfView(){return this[ee].inlineVerticalFieldOfView}get baseLayer(){return this[ee].baseLayer}}class Ye extends Event{constructor(e,t){if(super(e,t),!t.session)throw new Error("XRSessionEventInit.session is required");this.session=t.session}}!function(e){e.None="none",e.Left="left",e.Right="right"}(ke||(ke={}));class Qe{constructor(e,t,r,i){this[ae]={eye:e,projectionMatrix:t,transform:r,recommendedViewportScale:null,requestedViewportScale:1,session:i}}get eye(){return this[ae].eye}get projectionMatrix(){return this[ae].projectionMatrix}get transform(){return this[ae].transform}get recommendedViewportScale(){return this[ae].recommendedViewportScale}requestViewportScale(e){null===e||e<=0||e>1?console.warn("Invalid scale value. Scale must be > 0 and <= 1."):this[ae].requestedViewportScale=e}}class $e{constructor(e,t=!1,r=void 0,i=void 0){this[K]={transform:e,emulatedPosition:t,linearVelocity:r,angularVelocity:i}}get transform(){return this[K].transform}get emulatedPosition(){return this[K].emulatedPosition}get linearVelocity(){return this[K].linearVelocity}get angularVelocity(){return this[K].angularVelocity}}class Ke extends $e{constructor(e,t,r=!1,i=void 0,s=void 0){super(e,r,i,s),this[$]={radius:t}}get radius(){return this[$].radius}}class Je extends $e{constructor(e,t,r=!1,i=void 0,s=void 0){super(e,r,i,s),this[J]={views:Object.freeze(t)}}get views(){return this[J].views}}const Ze=i(),et=i(),tt=i(),rt=(e,t,r)=>{ce.calculateGlobalOffsetMatrix(t,Ze),ce.calculateGlobalOffsetMatrix(r,et),n(tt,et),o(e,tt,Ze)};class it{constructor(e,t,r,s,a){this[z]={session:e,id:t,active:r,animationFrame:s,predictedDisplayTime:a,tempMat4:i(),detectedPlanes:new Le,detectedMeshes:new Ae,trackedAnchors:e[te].frameTrackedAnchors,hitTestResultsMap:new Map}}get session(){return this[z].session}get predictedDisplayTime(){return this[z].predictedDisplayTime}getPose(e,t){if(!this[z].active)throw new DOMException("XRFrame access outside the callback that produced it is invalid.","InvalidStateError");rt(this[z].tempMat4,e,t);const r=x();c(r,this[z].tempMat4);const i=A();return p(i,this[z].tempMat4),new $e(new Oe({x:r[0],y:r[1],z:r[2],w:1},{x:i[0],y:i[1],z:i[2],w:i[3]}),e[se].emulated)}getViewerPose(e){if(!this[z].animationFrame)throw new DOMException("getViewerPose can only be called on XRFrame objects passed to XRSession.requestAnimationFrame callbacks.","InvalidStateError");const t=this[z].session,r=t[te].device,i=this.getPose(r.viewerSpace,e),s="inline"===t[te].mode?[ke.None]:[ke.Left,ke.Right],a=[];return s.forEach(i=>{const s=r.viewSpaces[i],n=this.getPose(s,e),o=t[te].getProjectionMatrix(i),h=new Qe(i,new Float32Array(o),n.transform,t);a.push(h)}),new Je(i.transform,a,!1)}getJointPose(e,t){const r=this.getPose(e,t),i=e[re].radius;return new Ke(r.transform,i,!1)}fillJointRadii(e,t){if(e=Array.from(e),!this[z].active)throw new DOMException("XRFrame access outside the callback that produced it is invalid.","InvalidStateError");if(e.length>t.length)throw new DOMException("The length of jointSpaces is larger than the number of elements in radii","TypeError");let r=!0;for(let i=0;i<e.length;i++)e[i][re].radius?t[i]=e[i][re].radius:(t[i]=NaN,r=!1);return r}fillPoses(e,t,r){if(e=Array.from(e),!this[z].active)throw new DOMException("XRFrame access outside the callback that produced it is invalid.","InvalidStateError");if(16*e.length>r.length)throw new DOMException("The length of spaces multiplied by 16 is larger than the number of elements in transforms","TypeError");return e.forEach((e,i)=>{rt(this[z].tempMat4,e,t);for(let e=0;e<16;e++)r[16*i+e]=this[z].tempMat4[e]}),!0}get detectedPlanes(){if(!this[z].active)throw new DOMException("XRFrame access outside the callback that produced it is invalid.","InvalidStateError");return this[z].detectedPlanes}get detectedMeshes(){if(!this[z].active)throw new DOMException("XRFrame access outside the callback that produced it is invalid.","InvalidStateError");return this[z].detectedMeshes}get trackedAnchors(){if(!this[z].active)throw new DOMException("XRFrame access outside the callback that produced it is invalid.","InvalidStateError");return this[z].trackedAnchors}createAnchor(e,t){return new Promise((r,i)=>{if(this[z].active){const s=this[z].session[te].device[X].globalSpace,a=new le(t,e.matrix),n=ce.calculateGlobalOffsetMatrix(a),o=new le(s,n),h=new Ce(o,this[z].session);this[z].session[te].trackedAnchors.add(h),this[z].session[te].newAnchors.set(h,{resolve:r,reject:i})}else i(new DOMException("XRFrame access outside the callback that produced it is invalid.","InvalidStateError"))})}getHitTestResults(e){if(this[z].active){if(this[z].hitTestResultsMap.has(e))return[...this[z].hitTestResultsMap.get(e)];throw new DOMException("Requested hit test results are not available for current frame.","InvalidStateError")}throw new DOMException("XRFrame access outside the callback that produced it is invalid.","InvalidStateError")}}var st,at,nt;!function(e){e.Opaque="opaque",e.AlphaBlend="alpha-blend",e.Additive="additive"}(st||(st={})),function(e){e.ScreenSpace="screen-space",e.WorldSpace="world-space"}(at||(at={}));class ot extends EventTarget{constructor(e,t,r){super(),this[te]={device:e,mode:t,renderState:new je,pendingRenderState:null,enabledFeatures:r,isSystemKeyboardSupported:!1,ended:!1,projectionMatrices:{[ke.Left]:i(),[ke.Right]:i(),[ke.None]:i()},getProjectionMatrix:e=>this[te].projectionMatrices[e],referenceSpaceIsSupported:e=>{if(!this[te].enabledFeatures.includes(e))return!1;switch(e){case He.Viewer:return!0;case He.Local:case He.LocalFloor:case He.BoundedFloor:case He.Unbounded:return"inline"!=this[te].mode}},frameHandle:0,frameCallbacks:[],currentFrameCallbacks:null,onDeviceFrame:()=>{if(this[te].ended)return;this[te].deviceFrameHandle=globalThis.requestAnimationFrame(this[te].onDeviceFrame),null!=this[te].pendingRenderState&&(this[te].renderState=this[te].pendingRenderState,this[te].pendingRenderState=null,this[te].device[X].onBaseLayerSet(this[te].renderState.baseLayer));const e=this[te].renderState.baseLayer;if(null===e)return;const t=e.context,r=t.canvas;if("inline"!=this[te].mode){const e=t.getParameter(t.COLOR_CLEAR_VALUE),r=t.getParameter(t.DEPTH_CLEAR_VALUE),i=t.getParameter(t.STENCIL_CLEAR_VALUE);t.clearColor(0,0,0,0),t.clearDepth(1),t.clearStencil(0),t.clear(t.DEPTH_BUFFER_BIT|t.COLOR_BUFFER_BIT|t.STENCIL_BUFFER_BIT),t.clearColor(e[0],e[1],e[2],e[3]),t.clearDepth(r),t.clearStencil(i)}const{depthNear:i,depthFar:s}=this[te].renderState,{width:n,height:o}=r;if("inline"!==this[te].mode){const e=n*(this[te].device.stereoEnabled?.5:1)/o;m(this[te].projectionMatrices[ke.Left],this[te].device.fovy,e,i,s),a(this[te].projectionMatrices[ke.Right],this[te].projectionMatrices[ke.Left])}else{const e=n/o;m(this[te].projectionMatrices[ke.None],this[te].renderState.inlineVerticalFieldOfView,e,i,s)}const h=new it(this,this[te].frameHandle,!0,!0,performance.now()),l=performance.now(),u=this[te].device[X].devui;if(u&&u.render(l),"immersive-ar"===this[te].mode){const e=this[te].device[X].sem;e&&e.render(l)}this[te].enabledFeatures.includes("anchors")&&this[te].updateTrackedAnchors(),this[te].enabledFeatures.includes("plane-detection")&&this[te].updateTrackedPlanes(h),this[te].enabledFeatures.includes("mesh-detection")&&this[te].updateTrackedMeshes(h),this[te].enabledFeatures.includes("hit-test")&&this[te].computeHitTestResults(h),this[te].device[X].onFrameStart(h),this[te].updateActiveInputSources();const c=this[te].currentFrameCallbacks=this[te].frameCallbacks;this[te].frameCallbacks=[];const d=performance.now();for(let e=0;e<c.length;e++)try{c[e].cancelled||c[e].callback(d,h)}catch(e){console.error(e)}this[te].currentFrameCallbacks=null,h[z].active=!1},nominalFrameRate:e.internalNominalFrameRate,referenceSpaces:[],inputSourceArray:[],activeInputSources:[],updateActiveInputSources:()=>{const e=this[te].enabledFeatures.includes("hand-tracking"),t=this[te].activeInputSources,r=this[te].device.inputSources.filter(t=>!t.hand||e),i=r.filter(e=>!t.includes(e)),s=t.filter(e=>!r.includes(e));this[te].activeInputSources=r,(i.length>0||s.length>0)&&this.dispatchEvent(new qe("inputsourceschange",{session:this,added:i,removed:s}))},trackedAnchors:new Ne,persistentAnchors:new Map,newAnchors:new Map,frameTrackedAnchors:new Ne,updateTrackedAnchors:()=>{this[te].enabledFeatures.includes("anchors")&&(this[te].frameTrackedAnchors.clear(),Array.from(this[te].trackedAnchors).forEach(e=>{if(e[U].deleted){if(this[te].trackedAnchors.delete(e),this[te].newAnchors.has(e)){const{reject:t}=this[te].newAnchors.get(e);t(new DOMException("Anchor is no longer tracked","InvalidStateError"))}}else if(this[te].frameTrackedAnchors.add(e),this[te].newAnchors.has(e)){const{resolve:t}=this[te].newAnchors.get(e);t(e),this[te].newAnchors.delete(e)}}))},trackedPlanes:new Map,updateTrackedPlanes:e=>{const t=this[te].device[X].sem;if(!t)return;Array.from(this[te].trackedPlanes.keys()).forEach(e=>{t.trackedPlanes.has(e)||this[te].trackedPlanes.delete(e)}),t.trackedPlanes.forEach(t=>{let r=this[te].trackedPlanes.get(t);if(!r){const e=new le(this[te].device[X].globalSpace,t.transform.matrix);r=new Ie(t,e,t.polygon,t.semanticLabel),this[te].trackedPlanes.set(t,r)}r[Q].lastChangedTime=e.predictedDisplayTime,r[Q].frame=e,e[z].detectedPlanes.add(r)})},trackedMeshes:new Map,updateTrackedMeshes:e=>{const t=this[te].device[X].sem;if(!t)return;Array.from(this[te].trackedMeshes.keys()).forEach(e=>{t.trackedMeshes.has(e)||this[te].trackedMeshes.delete(e)}),t.trackedMeshes.forEach(t=>{let r=this[te].trackedMeshes.get(t);if(!r){const e=new le(this[te].device[X].globalSpace,t.transform.matrix);r=new be(t,e,t.vertices,t.indices,t.semanticLabel),this[te].trackedMeshes.set(t,r)}r[Y].lastChangedTime=e.predictedDisplayTime,r[Y].frame=e,e[z].detectedMeshes.add(r)})},hitTestSources:new Set,computeHitTestResults:e=>{const t=this[te].device[X].sem;if(!t)return;const r=this[te].device[X].globalSpace;this[te].hitTestSources.forEach(s=>{const a=s[he].space,n=ce.calculateGlobalOffsetMatrix(a),h=s[he].offsetRay.matrix,l=i();o(l,n,h);const u=[];t.computeHitTestResults(l).forEach(t=>{const i=new le(r,t),s=new Ge(e,i);u.push(s)}),e[z].hitTestResultsMap.set(s,u)})},onend:null,oninputsourceschange:null,onselect:null,onselectstart:null,onselectend:null,onsqueeze:null,onsqueezestart:null,onsqueezeend:null,onvisibilitychange:null,onframeratechange:null},Be.recoverPersistentAnchorsFromStorage(this),this[te].onDeviceFrame()}get visibilityState(){return this[te].device.visibilityState}get frameRate(){return this[te].nominalFrameRate}get supportedFrameRates(){return new Float32Array(this[te].device.supportedFrameRates)}get renderState(){return this[te].renderState}get inputSources(){return this[te].inputSourceArray.length=0,this[te].ended||"inline"===this[te].mode||this[te].inputSourceArray.push(...this[te].activeInputSources),this[te].inputSourceArray}get enabledFeatures(){return this[te].enabledFeatures}get isSystemKeyboardSupported(){return this[te].isSystemKeyboardSupported}get environmentBlendMode(){var e;return null!==(e=this[te].device[X].environmentBlendModes[this[te].mode])&&void 0!==e?e:st.Opaque}get interactionMode(){return this[te].device[X].interactionMode}updateRenderState(e={}){var t,r,i,s;if(this[te].ended)throw new DOMException("XRSession has already ended.","InvalidStateError");if(e.baseLayer&&e.baseLayer[j].session!==this)throw new DOMException("Base layer was created by a different XRSession","InvalidStateError");if(null!=e.inlineVerticalFieldOfView&&"inline"!==this[te].mode)throw new DOMException("InlineVerticalFieldOfView must not be set for an immersive session","InvalidStateError");const a={baseLayer:e.baseLayer||(null===(t=this[te].pendingRenderState)||void 0===t?void 0:t.baseLayer)||void 0,depthFar:e.depthFar||(null===(r=this[te].pendingRenderState)||void 0===r?void 0:r.depthFar)||void 0,depthNear:e.depthNear||(null===(i=this[te].pendingRenderState)||void 0===i?void 0:i.depthNear)||void 0,inlineVerticalFieldOfView:e.inlineVerticalFieldOfView||(null===(s=this[te].pendingRenderState)||void 0===s?void 0:s.inlineVerticalFieldOfView)||void 0};this[te].pendingRenderState=new je(a,this[te].renderState)}async updateTargetFrameRate(e){return new Promise((t,r)=>{this[te].ended?r(new DOMException("XRSession has already ended.","InvalidStateError")):this[te].device.supportedFrameRates.includes(e)?(this[te].nominalFrameRate===e?console.log("Requested frame rate is the same as the current nominal frame rate, no update made"):(this[te].nominalFrameRate=e,this.dispatchEvent(new Ye("frameratechange",{session:this})),console.log(`Nominal frame rate updated to ${e}`)),t()):r(new DOMException("Requested frame rate not supported.","InvalidStateError"))})}async requestReferenceSpace(e){return new Promise((t,r)=>{if(this[te].ended||!this[te].referenceSpaceIsSupported(e))return void r(new DOMException("The requested reference space type is not supported.","NotSupportedError"));let i;switch(e){case He.Viewer:i=this[te].device.viewerSpace;break;case He.Local:i=new We(e,this[te].device[X].globalSpace,this[te].device.viewerSpace[se].offsetMatrix);break;case He.LocalFloor:case He.BoundedFloor:case He.Unbounded:i=new We(e,this[te].device[X].globalSpace)}this[te].referenceSpaces.push(i),t(i)})}requestAnimationFrame(e){if(this[te].ended)return 0;const t=++this[te].frameHandle;return this[te].frameCallbacks.push({handle:t,callback:e,cancelled:!1}),t}cancelAnimationFrame(e){let t=this[te].frameCallbacks,r=t.findIndex(t=>t&&t.handle===e);r>-1&&(t[r].cancelled=!0,t.splice(r,1)),t=this[te].currentFrameCallbacks,t&&(r=t.findIndex(t=>t&&t.handle===e),r>-1&&(t[r].cancelled=!0))}async end(){return new Promise((e,t)=>{this[te].ended||null===this[te].deviceFrameHandle?t(new DOMException("XRSession has already ended.","InvalidStateError")):(globalThis.cancelAnimationFrame(this[te].deviceFrameHandle),this[te].device[X].onSessionEnd(),this.dispatchEvent(new Ye("end",{session:this})),e())})}get persistentAnchors(){return Array.from(this[te].persistentAnchors.keys())}restorePersistentAnchor(e){return new Promise((t,r)=>{if(this[te].persistentAnchors.has(e))if(this[te].ended)r(new DOMException("XRSession has already ended.","InvalidStateError"));else{const i=this[te].persistentAnchors.get(e);this[te].newAnchors.has(i)?r(new DOMException(`Multiple concurrent attempts detected to restore the anchor with UUID: ${e}.`,"InvalidStateError")):(this[te].trackedAnchors.add(i),this[te].newAnchors.set(i,{resolve:t,reject:r}))}else r(new DOMException(`Persistent anchor with uuid ${e} not found.`,"InvalidStateError"))})}deletePersistentAnchor(e){return new Promise((t,r)=>{if(this[te].persistentAnchors.has(e)){const r=this[te].persistentAnchors.get(e);this[te].persistentAnchors.delete(e),r.delete(),t(void 0)}else r(new DOMException(`Persistent anchor with uuid ${e} not found.`,"InvalidStateError"))})}requestHitTestSource(e){return new Promise((t,r)=>{if(this[te].enabledFeatures.includes("hit-test"))if(this[te].ended)r(new DOMException("XRSession has already ended.","InvalidStateError"));else if(this[te].device[X].sem){const r=new Xe(this,e);this[te].hitTestSources.add(r),t(r)}else r(new DOMException("Synthethic Environment Module required for emulating hit-test","OperationError"));else r(new DOMException('WebXR feature "hit-test" is not supported by current session',"NotSupportedError"))})}get onend(){var e;return null!==(e=this[te].onend)&&void 0!==e?e:()=>{}}set onend(e){this[te].onend&&this.removeEventListener("end",this[te].onend),this[te].onend=e,e&&this.addEventListener("end",e)}get oninputsourceschange(){var e;return null!==(e=this[te].oninputsourceschange)&&void 0!==e?e:()=>{}}set oninputsourceschange(e){this[te].oninputsourceschange&&this.removeEventListener("inputsourceschange",this[te].oninputsourceschange),this[te].oninputsourceschange=e,e&&this.addEventListener("inputsourceschange",e)}get onselect(){var e;return null!==(e=this[te].onselect)&&void 0!==e?e:()=>{}}set onselect(e){this[te].onselect&&this.removeEventListener("select",this[te].onselect),this[te].onselect=e,e&&this.addEventListener("select",e)}get onselectstart(){var e;return null!==(e=this[te].onselectstart)&&void 0!==e?e:()=>{}}set onselectstart(e){this[te].onselectstart&&this.removeEventListener("selectstart",this[te].onselectstart),this[te].onselectstart=e,e&&this.addEventListener("selectstart",e)}get onselectend(){var e;return null!==(e=this[te].onselectend)&&void 0!==e?e:()=>{}}set onselectend(e){this[te].onselectend&&this.removeEventListener("selectend",this[te].onselectend),this[te].onselectend=e,e&&this.addEventListener("selectend",e)}get onsqueeze(){var e;return null!==(e=this[te].onsqueeze)&&void 0!==e?e:()=>{}}set onsqueeze(e){this[te].onsqueeze&&this.removeEventListener("squeeze",this[te].onsqueeze),this[te].onsqueeze=e,e&&this.addEventListener("squeeze",e)}get onsqueezestart(){var e;return null!==(e=this[te].onsqueezestart)&&void 0!==e?e:()=>{}}set onsqueezestart(e){this[te].onsqueezestart&&this.removeEventListener("squeezestart",this[te].onsqueezestart),this[te].onsqueezestart=e,e&&this.addEventListener("squeezestart",e)}get onsqueezeend(){var e;return null!==(e=this[te].onsqueezeend)&&void 0!==e?e:()=>{}}set onsqueezeend(e){this[te].onsqueezeend&&this.removeEventListener("squeezeend",this[te].onsqueezeend),this[te].onsqueezeend=e,e&&this.addEventListener("squeezeend",e)}get onvisibilitychange(){var e;return null!==(e=this[te].onvisibilitychange)&&void 0!==e?e:()=>{}}set onvisibilitychange(e){this[te].onvisibilitychange&&this.removeEventListener("visibilitychange",this[te].onvisibilitychange),this[te].onvisibilitychange=e,e&&this.addEventListener("visibilitychange",e)}get onframeratechange(){var e;return null!==(e=this[te].onframeratechange)&&void 0!==e?e:()=>{}}set onframeratechange(e){this[te].onframeratechange&&this.removeEventListener("frameratechange",this[te].onframeratechange),this[te].onframeratechange=e,e&&this.addEventListener("frameratechange",e)}}!function(e){e.Wrist="wrist",e.ThumbMetacarpal="thumb-metacarpal",e.ThumbPhalanxProximal="thumb-phalanx-proximal",e.ThumbPhalanxDistal="thumb-phalanx-distal",e.ThumbTip="thumb-tip",e.IndexFingerMetacarpal="index-finger-metacarpal",e.IndexFingerPhalanxProximal="index-finger-phalanx-proximal",e.IndexFingerPhalanxIntermediate="index-finger-phalanx-intermediate",e.IndexFingerPhalanxDistal="index-finger-phalanx-distal",e.IndexFingerTip="index-finger-tip",e.MiddleFingerMetacarpal="middle-finger-metacarpal",e.MiddleFingerPhalanxProximal="middle-finger-phalanx-proximal",e.MiddleFingerPhalanxIntermediate="middle-finger-phalanx-intermediate",e.MiddleFingerPhalanxDistal="middle-finger-phalanx-distal",e.MiddleFingerTip="middle-finger-tip",e.RingFingerMetacarpal="ring-finger-metacarpal",e.RingFingerPhalanxProximal="ring-finger-phalanx-proximal",e.RingFingerPhalanxIntermediate="ring-finger-phalanx-intermediate",e.RingFingerPhalanxDistal="ring-finger-phalanx-distal",e.RingFingerTip="ring-finger-tip",e.PinkyFingerMetacarpal="pinky-finger-metacarpal",e.PinkyFingerPhalanxProximal="pinky-finger-phalanx-proximal",e.PinkyFingerPhalanxIntermediate="pinky-finger-phalanx-intermediate",e.PinkyFingerPhalanxDistal="pinky-finger-phalanx-distal",e.PinkyFingerTip="pinky-finger-tip"}(nt||(nt={}));class ht extends Map{}class lt extends le{constructor(e,t,r){super(t,r),this[re]={jointName:e,radius:0}}get jointName(){return this[re].jointName}}const ut={profileId:"oculus-hand",fallbackProfileIds:["generic-hand","generic-hand-select","generic-trigger"],poses:{default:{jointTransforms:{wrist:{offsetMatrix:[.9616971015930176,-.13805118203163147,.2368120402097702,0,.0005348679260350764,.8648636937141418,.5020061135292053,0,-.2741127610206604,-.48265108466148376,.8318111300468445,0,-.04913589730858803,.0021463718730956316,.11701996624469757,1],radius:.021460847929120064},"thumb-metacarpal":{offsetMatrix:[-.07536252588033676,-.9959676265716553,-.04867160692811012,0,.5877083539962769,-.08379616588354111,.8047218918800354,0,-.8055551648139954,.032041035592556,.5916536450386047,0,-.010643752291798592,.0006936835707165301,.08736639469861984,1],radius:.019382517784833908},"thumb-phalanx-proximal":{offsetMatrix:[.1374533325433731,-.9904957413673401,.004982374142855406,0,.5534393787384033,.08097179979085922,.8289443850517273,0,-.8214688897132874,-.11118389666080475,.559309184551239,0,.015547193586826324,-.0003480653394944966,.0681300163269043,1],radius:.01228295173496008},"thumb-phalanx-distal":{offsetMatrix:[-.04659227654337883,-.9974699020385742,-.05369402840733528,0,.6812446117401123,-.07104194164276123,.728600800037384,0,-.7305715084075928,-.002631746232509613,.6828309893608093,0,.04330715537071228,.003409178927540779,.0492292083799839,1],radius:.009768804535269737},"thumb-tip":{offsetMatrix:[-.04659227654337883,-.9974699020385742,-.05369402840733528,0,.6812446117401123,-.07104194164276123,.728600800037384,0,-.7305715084075928,-.002631746232509613,.6828309893608093,0,.062003348022699356,.004069602582603693,.03322213143110275,1],radius:.008768804371356964},"index-finger-metacarpal":{offsetMatrix:[.9616971015930176,-.13805118203163147,.2368120402097702,0,.0005348679260350764,.8648636937141418,.5020061135292053,0,-.2741127610206604,-.48265108466148376,.8318111300468445,0,-.02009812369942665,.008770795539021492,.08660387247800827,1],radius:.021228281781077385},"index-finger-phalanx-proximal":{offsetMatrix:[.9001791477203369,-.2598813474178314,.3494834005832672,0,.06073702871799469,.8695210218429565,.490146666765213,0,-.4312632381916046,-.41999316215515137,.7985095381736755,0,-.00017739279428496957,.03890012577176094,.039073407649993896,1],radius:.010295259766280651},"index-finger-phalanx-intermediate":{offsetMatrix:[.9082008600234985,-.20898112654685974,.36262574791908264,0,.11045389622449875,.9553793668746948,.27395179867744446,0,-.40369608998298645,-.20874978601932526,.8907597661018372,0,.01617925800383091,.05482936650514603,.008788082748651505,1],radius:.00853810179978609},"index-finger-phalanx-distal":{offsetMatrix:[.9309692978858948,-.16783711314201355,.32423174381256104,0,.1080828532576561,.9749603867530823,.1943446695804596,0,-.34873148798942566,-.14588497579097748,.9257990717887878,0,.02599053829908371,.059902746230363846,-.012860597111284733,1],radius:.007636196445673704},"index-finger-tip":{offsetMatrix:[.9309692978858948,-.16783711314201355,.32423174381256104,0,.1080828532576561,.9749603867530823,.1943446695804596,0,-.34873148798942566,-.14588497579097748,.9257990717887878,0,.03362493962049484,.06421422213315964,-.033461250364780426,1],radius:.006636196281760931},"middle-finger-metacarpal":{offsetMatrix:[.9616971015930176,-.13805118203163147,.2368120402097702,0,.0005348679260350764,.8648636937141418,.5020061135292053,0,-.2741127610206604,-.48265108466148376,.8318111300468445,0,-.03627845644950867,.011579737067222595,.08550142496824265,1],radius:.021231964230537415},"middle-finger-phalanx-proximal":{offsetMatrix:[.9876697659492493,-.06786545366048813,.1410750150680542,0,-.015095947310328484,.855663537979126,.5173118710517883,0,-.15582047402858734,-.5130629539489746,.8440889716148376,0,-.021259509027004242,.04587256908416748,.03659208118915558,1],radius:.01117393933236599},"middle-finger-phalanx-intermediate":{offsetMatrix:[.988391637802124,-.04354291781783104,.14555205404758453,0,.008894841186702251,.9729899168014526,.23067504167556763,0,-.15166506171226501,-.22670257091522217,.9620829224586487,0,-.014570588245987892,.06789684295654297,.0003578895702958107,1],radius:.008030958473682404},"middle-finger-phalanx-distal":{offsetMatrix:[.9853697419166565,.044260796159505844,.16458062827587128,0,-.0757969319820404,.9787378311157227,.19059516489505768,0,-.1526455283164978,-.20028135180473328,.9677740931510925,0,-.010392282158136368,.07414241135120392,-.026147106662392616,1],radius:.007629410829395056},"middle-finger-tip":{offsetMatrix:[.9853697419166565,.044260796159505844,.16458062827587128,0,-.0757969319820404,.9787378311157227,.19059516489505768,0,-.1526455283164978,-.20028135180473328,.9677740931510925,0,-.0069718430750072,.08024183660745621,-.05014154314994812,1],radius:.006629410665482283},"ring-finger-metacarpal":{offsetMatrix:[.9616971015930176,-.13805118203163147,.2368120402097702,0,.0005348679260350764,.8648636937141418,.5020061135292053,0,-.2741127610206604,-.48265108466148376,.8318111300468445,0,-.05402477830648422,.015797706320881844,.08152295649051666,1],radius:.019088275730609894},"ring-finger-phalanx-proximal":{offsetMatrix:[.9940828680992126,.05735103040933609,.09224652498960495,0,-.10022822767496109,.8116500377655029,.5754809379577637,0,-.041867565363645554,-.5813214182853699,.8125960826873779,0,-.041623555123806,.04171867296099663,.03582974523305893,1],radius:.00992213748395443},"ring-finger-phalanx-intermediate":{offsetMatrix:[.9843675494194031,.12044742703437805,.12850022315979004,0,-.15629759430885315,.9337108135223389,.3221098482608795,0,-.08118485659360886,-.3371586799621582,.937940776348114,0,-.039990875869989395,.06438793987035751,.004141641780734062,1],radius:.007611672393977642},"ring-finger-phalanx-distal":{offsetMatrix:[.9748351573944092,.11857274919748306,.18877571821212769,0,-.15575434267520905,.9681083559989929,.19623035192489624,0,-.15948788821697235,-.22069483995437622,.9622148275375366,0,-.03783353418111801,.07334739714860916,-.020782606676220894,1],radius:.007231088820844889},"ring-finger-tip":{offsetMatrix:[.9748351573944092,.11857274919748306,.18877571821212769,0,-.15575434267520905,.9681083559989929,.19623035192489624,0,-.15948788821697235,-.22069483995437622,.9622148275375366,0,-.03445569798350334,.0802423357963562,-.04392268508672714,1],radius:.0062310886569321156},"pinky-finger-metacarpal":{offsetMatrix:[.9181402921676636,.35625091195106506,.17350243031978607,0,-.39615097641944885,.8352503180503845,.38134080171585083,0,-.009065053425729275,-.41885748505592346,.9080066680908203,0,-.06191859766840935,.013620133511722088,.07850203663110733,1],radius:.01808827556669712},"pinky-finger-phalanx-proximal":{offsetMatrix:[.9714386463165283,.236698180437088,-.016745081171393394,0,-.18462024629116058,.7982627749443054,.5733163952827454,0,.14906984567642212,-.5538501739501953,.8191629648208618,0,-.061502378433942795,.032741155475378036,.03705105185508728,1],radius:.008483353070914745},"pinky-finger-phalanx-intermediate":{offsetMatrix:[.9337416291236877,.35620439052581787,-.03527557849884033,0,-.33203884959220886,.8987522721290588,.28634607791900635,0,.13370157778263092,-.2556603252887726,.9574766755104065,0,-.06608185172080994,.049755651503801346,.011886020191013813,1],radius:.0067641944624483585},"pinky-finger-phalanx-distal":{offsetMatrix:[.9419984817504883,.3303581774234772,.059175245463848114,0,-.33483216166496277,.9130291938781738,.23294763267040253,0,.02292730286717415,-.2392500638961792,.970687210559845,0,-.0687975287437439,.054948460310697556,-.007561664097011089,1],radius:.0064259846694767475},"pinky-finger-tip":{offsetMatrix:[.9419984817504883,.3303581774234772,.059175245463848114,0,-.33483216166496277,.9130291938781738,.23294763267040253,0,.02292730286717415,-.2392500638961792,.970687210559845,0,-.06947512179613113,.0613851435482502,-.028543535619974136,1],radius:.005425984505563974}},gripOffsetMatrix:[-.0005348679260350764,-.8648636937141418,-.5020061135292053,0,-.2741127908229828,-.48265108466148376,.8318111896514893,0,-.9616971015930176,.13805119693279266,-.2368120402097702,0,-.02878567762672901,.0017147823236882687,.04536811262369156,1]},pinch:{jointTransforms:{wrist:{offsetMatrix:[.9060805439949036,-.1844543218612671,.3807799518108368,0,-.08027800172567368,.8086723685264587,.5827555656433105,0,-.4154181182384491,-.5585917234420776,.7179155349731445,0,-.06867414712905884,-.009423808194696903,.10627774149179459,1],radius:.021460847929120064},"thumb-metacarpal":{offsetMatrix:[-.5012241005897522,-.8650535345077515,-.0213695727288723,0,.7415963411331177,-.4421543478965759,.5045139193534851,0,-.44587990641593933,.23702676594257355,.8631392121315002,0,-.032122574746608734,-.01196830440312624,.07194234430789948,1],radius:.019382517784833908},"thumb-phalanx-proximal":{offsetMatrix:[-.3175753057003021,-.9460570216178894,-.06419729441404343,0,.8958902955055237,-.32153913378715515,.30658137798309326,0,-.3106854259967804,.03984907269477844,.9496771097183228,0,-.017625702545046806,-.01967475935816765,.04387917369604111,1],radius:.01228295173496008},"thumb-phalanx-distal":{offsetMatrix:[-.4944636821746826,-.8691971898078918,.001086252392269671,0,.8307800889015198,-.4722411036491394,.2946045398712158,0,-.25555649399757385,.14657381176948547,.9556186199188232,0,-.007126678712666035,-.021021386608481407,.011786630377173424,1],radius:.009768804535269737},"thumb-tip":{offsetMatrix:[-.4944636821746826,-.8691971898078918,.001086252392269671,0,.8307800889015198,-.4722411036491394,.2946045398712158,0,-.25555649399757385,.14657381176948547,.9556186199188232,0,.0003423091256991029,-.024528030306100845,-.011410919018089771,1],radius:.008768804371356964},"index-finger-metacarpal":{offsetMatrix:[.9060805439949036,-.1844543218612671,.3807799518108368,0,-.08027800172567368,.8086723685264587,.5827555656433105,0,-.4154181182384491,-.5585917234420776,.7179155349731445,0,-.038037415593862534,-.0020236473064869642,.07626739144325256,1],radius:.021228281781077385},"index-finger-phalanx-proximal":{offsetMatrix:[.7986818552017212,-.35985732078552246,.48229536414146423,0,.538311243057251,.7854709625244141,-.30537736415863037,0,-.2689369022846222,.5035246014595032,.8210577368736267,0,-.006869405973702669,.033938243985176086,.04206443578004837,1],radius:.010295259766280651},"index-finger-phalanx-intermediate":{offsetMatrix:[.8285930156707764,-.32672837376594543,.4546217918395996,0,.5577570199966431,.4116027057170868,-.7207564115524292,0,.04836784675717354,.8507823944091797,.5232869386672974,0,.0033306588884443045,.014840902760624886,.010923954658210278,1],radius:.00853810179978609},"index-finger-phalanx-distal":{offsetMatrix:[.8412464261054993,-.35794928669929504,.4051857888698578,0,.5139996409416199,.29711154103279114,-.8046918511390686,0,.16765329241752625,.8852096796035767,.4339304566383362,0,.0021551470272243023,-.0058362227864563465,-.0017938464879989624,1],radius:.007636196445673704},"index-finger-tip":{offsetMatrix:[.8412464261054993,-.35794928669929504,.4051857888698578,0,.5139996409416199,.29711154103279114,-.8046918511390686,0,.16765329241752625,.8852096796035767,.4339304566383362,0,-.00131594471167773,-.025222131982445717,-.012442642822861671,1],radius:.006636196281760931},"middle-finger-metacarpal":{offsetMatrix:[.9060805439949036,-.1844543218612671,.3807799518108368,0,-.08027800172567368,.8086723685264587,.5827555656433105,0,-.4154181182384491,-.5585917234420776,.7179155349731445,0,-.05395089089870453,.003063359996303916,.07402937114238739,1],radius:.021231964230537415},"middle-finger-phalanx-proximal":{offsetMatrix:[.9187911748886108,-.1530158370733261,.36387869715690613,0,.038666240870952606,.9522662162780762,.302808940410614,0,-.3928440511226654,-.26414817571640015,.8808513283729553,0,-.02717282809317112,.04162866622209549,.03678669035434723,1],radius:.01117393933236599},"middle-finger-phalanx-intermediate":{offsetMatrix:[.9228746294975281,-.12856416404247284,.36300456523895264,0,.14524033665657043,.9892153143882751,-.01890045404434204,0,-.3566599190235138,.07016586512327194,.9315956234931946,0,-.01030921470373869,.05296773463487625,-.0010256498353555799,1],radius:.008030958473682404},"middle-finger-phalanx-distal":{offsetMatrix:[.9325166344642639,-.040404170751571655,.35885775089263916,0,.06836572289466858,.995502769947052,-.0655682161450386,0,-.3545948565006256,.08567725121974945,.9310863614082336,0,-.0004833847051486373,.05103470757603645,-.026690717786550522,1],radius:.007629410829395056},"middle-finger-tip":{offsetMatrix:[.9325166344642639,-.040404170751571655,.35885775089263916,0,.06836572289466858,.995502769947052,-.0655682161450386,0,-.3545948565006256,.08567725121974945,.9310863614082336,0,.008158999495208263,.05004044249653816,-.050120558589696884,1],radius:.006629410665482283},"ring-finger-metacarpal":{offsetMatrix:[.9060805439949036,-.1844543218612671,.3807799518108368,0,-.08027800172567368,.8086723685264587,.5827555656433105,0,-.4154181182384491,-.5585917234420776,.7179155349731445,0,-.06732909381389618,.007902119308710098,.07209732383489609,1],radius:.019088275730609894},"ring-finger-phalanx-proximal":{offsetMatrix:[.9391821026802063,-.027994679287075996,.34227466583251953,0,-.18282271921634674,.8029410243034363,.5673282742500305,0,-.2907087206840515,-.5954000353813171,.7489906549453735,0,-.047129884362220764,.03806127607822418,.032147664576768875,1],radius:.00992213748395443},"ring-finger-phalanx-intermediate":{offsetMatrix:[.9249380826950073,.03699534013867378,.3783116042613983,0,-.12898847460746765,.9667453765869141,.2208271026611328,0,-.3575615882873535,-.25304901599884033,.8989526629447937,0,-.03579339757561684,.06127955764532089,.002939916681498289,1],radius:.007611672393977642},"ring-finger-phalanx-distal":{offsetMatrix:[.9001164436340332,.03983335196971893,.4338230490684509,0,-.09662467986345291,.9892624020576477,.10964841395616531,0,-.4247973561286926,-.14061418175697327,.8943013548851013,0,-.026291755959391594,.06800390034914017,-.02094830758869648,1],radius:.007231088820844889},"ring-finger-tip":{offsetMatrix:[.9001164436340332,.03983335196971893,.4338230490684509,0,-.09662467986345291,.9892624020576477,.10964841395616531,0,-.4247973561286926,-.14061418175697327,.8943013548851013,0,-.016345610842108727,.07300511747598648,-.04263874143362045,1],radius:.0062310886569321156},"pinky-finger-metacarpal":{offsetMatrix:[.8769711852073669,.31462907791137695,.36322021484375,0,-.4506046175956726,.801031768321991,.39408499002456665,0,-.16696058213710785,-.5092697143554688,.8442559838294983,0,-.07460174709558487,.0062340241856873035,.06756893545389175,1],radius:.01808827556669712},"pinky-finger-phalanx-proximal":{offsetMatrix:[.9498357176780701,.1553308218717575,.2714462876319885,0,-.3019258379936218,.6817675232887268,.6663586497306824,0,-.08155745267868042,-.7148879170417786,.694466233253479,0,-.06697750836610794,.029482364654541016,.02902858518064022,1],radius:.008483353070914745},"pinky-finger-phalanx-intermediate":{offsetMatrix:[.9214097261428833,.27928245067596436,.2701927423477173,0,-.3670244514942169,.8538867831230164,.36901235580444336,0,-.12765564024448395,-.43917882442474365,.8892839550971985,0,-.06447203457355499,.05144399777054787,.0076942890882492065,1],radius:.0067641944624483585},"pinky-finger-phalanx-distal":{offsetMatrix:[.9038633704185486,.23618005216121674,.3567195236682892,0,-.3532794713973999,.8823202252388,.3109731376171112,0,-.24129553139209747,-.4070987403392792,.8809353709220886,0,-.06187915802001953,.060364335775375366,-.010368337854743004,1],radius:.0064259846694767475},"pinky-finger-tip":{offsetMatrix:[.9038633704185486,.23618005216121674,.3567195236682892,0,-.3532794713973999,.8823202252388,.3109731376171112,0,-.24129553139209747,-.4070987403392792,.8809353709220886,0,-.056796226650476456,.07042007893323898,-.02921444922685623,1],radius:.005425984505563974}},gripOffsetMatrix:[.08027800917625427,-.8086723685264587,-.5827556252479553,0,-.4154181480407715,-.5585916638374329,.7179154753684998,0,-.9060805439949036,.1844543218612671,-.3807799518108368,0,-.038054611533880234,-.002910431008785963,.03720742464065552,1]},point:{jointTransforms:{wrist:{offsetMatrix:[.9340395331382751,-.13936476409435272,.32885703444480896,0,-.005510995630174875,.914999783039093,.40341612696647644,0,-.3571262061595917,-.37861889600753784,.8538784384727478,0,-.05789132043719292,.01670890860259533,.11183350533246994,1],radius:.021460847929120064},"thumb-metacarpal":{offsetMatrix:[.02145560085773468,-.9978390336036682,.0621047280728817,0,.41311800479888916,.06541631370782852,.9083252549171448,0,-.9104245901107788,.006167683284729719,.4136286973953247,0,-.016488194465637207,.012708572670817375,.08862338215112686,1],radius:.019382517784833908},"thumb-phalanx-proximal":{offsetMatrix:[.21270370483398438,-.966137707233429,.14606566727161407,0,.49890995025634766,.2359165996313095,.8339261412620544,0,-.8401462435722351,-.10450579971075058,.5321959853172302,0,.013112368993461132,.012508046813309193,.07517509907484055,1],radius:.01228295173496008},"thumb-phalanx-distal":{offsetMatrix:[.01653280481696129,-.9986647963523865,.048943229019641876,0,.26313456892967224,.051570065319538116,.9633802771568298,0,-.9646173715591431,-.0030490627977997065,.26363563537597656,0,.04150351136922836,.016039609909057617,.05719054117798805,1],radius:.009768804535269737},"thumb-tip":{offsetMatrix:[.01653280481696129,-.9986647963523865,.048943229019641876,0,.26313456892967224,.051570065319538116,.9633802771568298,0,-.9646173715591431,-.0030490627977997065,.26363563537597656,0,.06548332422971725,.01683700829744339,.0516640841960907,1],radius:.008768804371356964},"index-finger-metacarpal":{offsetMatrix:[.9340395331382751,-.13936476409435272,.32885703444480896,0,-.005510995630174875,.914999783039093,.40341612696647644,0,-.3571262061595917,-.37861889600753784,.8538784384727478,0,-.02592567168176174,.019982583820819855,.08479326963424683,1],radius:.021228281781077385},"index-finger-phalanx-proximal":{offsetMatrix:[.9063700437545776,-.21756279468536377,.3621589243412018,0,.0970839336514473,.9415287375450134,.3226419687271118,0,-.41117796301841736,-.2572731077671051,.8744958639144897,0,-.0015709538711234927,.043078210204839706,.034657616168260574,1],radius:.010295259766280651},"index-finger-phalanx-intermediate":{offsetMatrix:[.9159826040267944,-.1651475727558136,.36565208435058594,0,.09755707532167435,.9756820797920227,.1962820291519165,0,-.3891757130622864,-.14411886036396027,.9098196625709534,0,.014023927971720695,.052835866808891296,.0014903299743309617,1],radius:.00853810179978609},"index-finger-phalanx-distal":{offsetMatrix:[.9378057718276978,-.12329639494419098,.3245268166065216,0,.032558172941207886,.9619227051734924,.2713746726512909,0,-.3456292748451233,-.2439306229352951,.9061115384101868,0,.023482320830225945,.05633850023150444,-.020621655508875847,1],radius:.007636196445673704},"index-finger-tip":{offsetMatrix:[.9378057718276978,-.12329639494419098,.3245268166065216,0,.032558172941207886,.9619227051734924,.2713746726512909,0,-.3456292748451233,-.2439306229352951,.9061115384101868,0,.03096788562834263,.06281610578298569,-.040703095495700836,1],radius:.006636196281760931},"middle-finger-metacarpal":{offsetMatrix:[.9340395331382751,-.13936476409435272,.32885703444480896,0,-.005510995630174875,.914999783039093,.40341612696647644,0,-.3571262061595917,-.37861889600753784,.8538784384727478,0,-.04184452444314957,.022474845871329308,.08177298307418823,1],radius:.021231964230537415},"middle-finger-phalanx-proximal":{offsetMatrix:[.9720265865325928,-.08313076198101044,.21966552734375,0,.20477405190467834,.7580050826072693,-.6192700862884521,0,-.11502730846405029,.6469289064407349,.7538246512413025,0,-.022107340395450592,.05035499855875969,.02970452979207039,1],radius:.01117393933236599},"middle-finger-phalanx-intermediate":{offsetMatrix:[.9779140949249268,-.07129573822021484,.19646917283535004,0,.1287083923816681,-.5352076292037964,-.8348574042320251,0,.1646735966205597,.8417060971260071,-.5142109394073486,0,-.017169542610645294,.022584279999136925,-.00265491777099669,1],radius:.008030958473682404},"middle-finger-phalanx-distal":{offsetMatrix:[.9774913787841797,-.19657190144062042,.07661263644695282,0,-.1924918293952942,-.9796126484870911,-.05749811604619026,0,.08635343611240387,.041456472128629684,-.995401918888092,0,-.02170622907578945,-.0006043742760084569,.011511396616697311,1],radius:.007629410829395056},"middle-finger-tip":{offsetMatrix:[.9774913787841797,-.19657190144062042,.07661263644695282,0,-.1924918293952942,-.9796126484870911,-.05749811604619026,0,.08635343611240387,.041456472128629684,-.995401918888092,0,-.02438267692923546,-.0026927536819130182,.03627248480916023,1],radius:.006629410665482283},"ring-finger-metacarpal":{offsetMatrix:[.9340395331382751,-.13936476409435272,.32885703444480896,0,-.005510995630174875,.914999783039093,.40341612696647644,0,-.3571262061595917,-.37861889600753784,.8538784384727478,0,-.05944233387708664,.0264605600386858,.07478221505880356,1],radius:.019088275730609894},"ring-finger-phalanx-proximal":{offsetMatrix:[.9842101335525513,.024470895528793335,.1753024309873581,0,.12200043350458145,.6237703561782837,-.7720272541046143,0,-.12824076414108276,.7812241315841675,.610936164855957,0,-.04249368980526924,.0467497780919075,.027722163125872612,1],radius:.00992213748395443},"ring-finger-phalanx-intermediate":{offsetMatrix:[.9941774606704712,.05949164181947708,.08983955532312393,0,.10504482686519623,-.7208291888237,-.6851072907447815,0,.024001073092222214,.6905553936958313,-.7228817939758301,0,-.0374927744269371,.016285063698887825,.0038980208337306976,1],radius:.007611672393977642},"ring-finger-phalanx-distal":{offsetMatrix:[.9995742440223694,.01638498157262802,.02412819117307663,0,.007813597097992897,-.9474818110466003,.31971633434295654,0,.028100071474909782,-.31939181685447693,-.9472070932388306,0,-.038130562752485275,-.0020653479732573032,.02310742810368538,1],radius:.007231088820844889},"ring-finger-tip":{offsetMatrix:[.9995742440223694,.01638498157262802,.02412819117307663,0,.007813597097992897,-.9474818110466003,.31971633434295654,0,.028100071474909782,-.31939181685447693,-.9472070932388306,0,-.0390593595802784,.004176302347332239,.0466572530567646,1],radius:.0062310886569321156},"pinky-finger-metacarpal":{offsetMatrix:[.9147363901138306,.3458845317363739,.20885537564754486,0,-.3923271894454956,.8839452862739563,.2544005811214447,0,-.09662359952926636,-.3146490156650543,.9442773461341858,0,-.06715242564678192,.024195827543735504,.07137546688318253,1],radius:.01808827556669712},"pinky-finger-phalanx-proximal":{offsetMatrix:[.9613109827041626,.22439135611057281,.15977802872657776,0,.01002211682498455,.5511574745178223,-.8343409299850464,0,-.27528178691864014,.8036624789237976,.5275853276252747,0,-.06273911893367767,.038559623062610626,.028268879279494286,1],radius:.008483353070914745},"pinky-finger-phalanx-intermediate":{offsetMatrix:[.9820972084999084,.18811029195785522,-.00995189044624567,0,.14063723385334015,-.7673450708389282,-.6256227493286133,0,-.12532226741313934,.6130226850509644,-.7800630927085876,0,-.05428232625126839,.013870777562260628,.012061242014169693,1],radius:.0067641944624483585},"pinky-finger-phalanx-distal":{offsetMatrix:[.9744614362716675,.20454788208007812,-.09265263378620148,0,.22429193556308746,-.9065253138542175,.35764020681381226,0,-.010836843401193619,-.3692878782749176,-.9292529225349426,0,-.05173685774207115,.0014194445684552193,.02790539152920246,1],radius:.0064259846694767475},"pinky-finger-tip":{offsetMatrix:[.9744614362716675,.20454788208007812,-.09265263378620148,0,.22429193556308746,-.9065253138542175,.35764020681381226,0,-.010836843401193619,-.3692878782749176,-.9292529225349426,0,-.05098633095622063,.008463085629045963,.048688892275094986,1],radius:.005425984505563974}},gripOffsetMatrix:[.005510995630174875,-.9149997234344482,-.40341615676879883,0,-.3571262061595917,-.37861889600753784,.8538784384727478,0,-.9340395331382751,.13936474919319153,-.32885703444480896,0,-.031803809106349945,.007837686687707901,.04313928261399269,1]}}},ct={mapping:fe.None,buttons:[{id:"pinch",type:"analog",eventTrigger:"select"}],axes:[]},dt=x(),pt=A(),ft=x(),mt=x(),xt=A(),gt=x(),yt=x(),vt=A(),Tt=x(),Rt=(e,t,r,i)=>(c(dt,t),p(pt,t),d(ft,t),c(mt,r),p(xt,r),d(gt,r),E(yt,dt,mt,i),F(vt,pt,xt,i),E(Tt,ft,gt,i),function(e,t,r,i){var s=t[0],a=t[1],n=t[2],o=t[3],h=s+s,l=a+a,u=n+n,c=s*h,d=s*l,p=s*u,f=a*l,m=a*u,x=n*u,g=o*h,y=o*l,v=o*u,T=i[0],R=i[1],w=i[2];e[0]=(1-(f+x))*T,e[1]=(d+v)*T,e[2]=(p-y)*T,e[3]=0,e[4]=(d-v)*R,e[5]=(1-(c+x))*R,e[6]=(m+g)*R,e[7]=0,e[8]=(p+y)*w,e[9]=(m-g)*w,e[10]=(1-(c+f))*w,e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1}(e,vt,yt,Tt),e),wt=[1,-1,-1,0,-1,1,1,0,-1,1,1,0,-1,1,1,1];class Et extends Se{constructor(e,t,r){if(t!==me.Left&&t!==me.Right)throw new DOMException('handedness for XRHandInput must be either "left" or "right"',"InvalidStateError");if(!e.poses.default||!e.poses.pinch)throw new DOMException('"default" and "pinch" hand pose configs are required',"InvalidStateError");const i=new le(r),s=new le(i),a=[e.profileId,...e.fallbackProfileIds],n=new ht;Object.values(nt).forEach(e=>{n.set(e,new lt(e,i))});super(new Re(t,xe.TrackedPointer,a,i,new ve(ct),s,n)),this[G]={poseId:"default",poses:e.poses},this.updateHandPose()}get poseId(){return this[G].poseId}set poseId(e){this[G].poses[e]?this[G].poseId=e:console.warn(`Pose config ${e} not found`)}updateHandPose(){const e=this[G].poses[this[G].poseId],t=this[G].poses.pinch;Object.values(nt).forEach(r=>{const i=e.jointTransforms[r].offsetMatrix,s=t.jointTransforms[r].offsetMatrix,a=this.inputSource.hand.get(r);Rt(a[se].offsetMatrix,i,s,this.pinchValue),this.inputSource.handedness===me.Right&&(e=>{for(let t=0;t<16;t++)e[t]*=wt[t]})(a[se].offsetMatrix),a[re].radius=(1-this.pinchValue)*e.jointTransforms[r].radius+this.pinchValue*t.jointTransforms[r].radius}),e.gripOffsetMatrix&&t.gripOffsetMatrix&&Rt(this.inputSource.gripSpace[se].offsetMatrix,e.gripOffsetMatrix,t.gripOffsetMatrix,this.pinchValue)}get pinchValue(){return this[q].inputSource.gamepad[H].buttonsMap.pinch.value}updatePinchValue(e){if(e>1||e<0)return void console.warn(`Out-of-range value ${e} provided for pinch`);this[q].inputSource.gamepad[H].buttonsMap.pinch[H].pendingValue=e}onFrameStart(e){super.onFrameStart(e),this.updateHandPose()}}class St extends EventTarget{}const _t={antialias:!0,depth:!0,stencil:!1,alpha:!0,ignoreDepthValues:!1,framebufferScaleFactor:1};class bt extends St{constructor(e,t,r={}){if(super(),e[te].ended)throw new DOMException("Session has ended","InvalidStateError");const i={..._t,...r};this[j]={session:e,context:t,antialias:i.antialias}}get context(){return this[j].context}get antialias(){return this[j].antialias}get ignoreDepthValues(){return!0}get framebuffer(){return null}get framebufferWidth(){return this[j].context.drawingBufferWidth}get framebufferHeight(){return this[j].context.drawingBufferHeight}getViewport(e){if(e[ae].session!==this[j].session)throw new DOMException("View's session differs from Layer's session","InvalidStateError");return this[j].session[te].device[X].getViewport(this,e)}static getNativeFramebufferScaleFactor(e){if(!(e instanceof ot))throw new TypeError("getNativeFramebufferScaleFactor must be passed a session.");return e[te].ended?0:1}}class At{constructor(e,t,r){const{schema:i,frames:s}=t;if(!s||!i||0===s.length)throw new DOMException("wrong recording format","NotSupportedError");const a=new We(He.Viewer,e),n={[ke.Left]:new le(a),[ke.Right]:new le(a),[ke.None]:new le(a)};this[B]={refSpace:e,inputSources:new Map,inputSchemas:new Map,frames:s,recordedFramePointer:0,startingTimeStamp:s[0][0],endingTimeStamp:s[s.length-1][0],playbackTime:s[0][0],playing:!1,viewerSpace:a,viewSpaces:n,vec3:x(),quat:A()},h(this[B].viewSpaces[ke.Left][se].offsetMatrix,g(-r/2,0,0)),h(this[B].viewSpaces[ke.Right][se].offsetMatrix,g(r/2,0,0)),i.forEach(t=>{const r=t[0],i=t[1];let s;if(i.hasGamepad){const e=[];for(let t=0;t<i.numButtons;t++)e.push({id:t.toString(),type:"manual"});const t=[];for(let e=0;e<i.numAxes;e++)t.push({id:e.toString(),type:"manual"});s=new ve({mapping:i.mapping,buttons:e,axes:t})}const a=new le(e);let n;i.hasHand&&(n=new ht,Object.values(nt).forEach(e=>{n.set(e,new lt(e,a))}));const o=new Re(i.handedness,i.targetRayMode,i.profiles,a,s,i.hasGrip?new le(e):void 0,i.hasHand?n:void 0);this[B].inputSources.set(r,{active:!1,source:o}),this[B].inputSchemas.set(r,i)})}play(){this[B].recordedFramePointer=0,this[B].playbackTime=this[B].startingTimeStamp,this[B].playing=!0,this[B].actualTimeStamp=performance.now()}stop(){this[B].playing=!1}get playing(){return this[B].playing}get viewerSpace(){return this[B].viewerSpace}get viewSpaces(){return this[B].viewSpaces}get inputSources(){return Array.from(this[B].inputSources.values()).filter(e=>e.active).map(e=>e.source)}playFrame(){const e=performance.now(),t=e-this[B].actualTimeStamp;if(this[B].actualTimeStamp=e,this[B].playbackTime+=t,this[B].playbackTime>this[B].endingTimeStamp)return void this.stop();for(;this[B].frames[this[B].recordedFramePointer+1][0]<this[B].playbackTime;)this[B].recordedFramePointer++;const r=this[B].frames[this[B].recordedFramePointer],i=this[B].frames[this[B].recordedFramePointer+1],s=(this[B].playbackTime-r[0])/(i[0]-r[0]);this.updateXRSpaceFromMergedFrames(this[B].viewerSpace,r.slice(1,8),i.slice(1,8),s);const a=new Map;for(let e=8;e<r.length;e++){const{index:t,inputData:i}=this.processRawInputData(r[e]);a.set(t,i)}const n=new Map;for(let e=8;e<i.length;e++){const{index:t,inputData:r}=this.processRawInputData(i[e]);n.set(t,r)}this[B].inputSources.forEach(e=>{e.active=!1}),n.forEach((e,t)=>{this[B].inputSources.get(t).active=!0;const r=this[B].inputSources.get(t).source,i=this[B].inputSchemas.get(t);this.updateInputSource(r,i,a.has(t)?a.get(t):e,e,s)})}updateInputSource(e,t,r,i,s){if(this.updateXRSpaceFromMergedFrames(e.targetRaySpace,r.targetRayTransform,i.targetRayTransform,s),t.hasGrip&&this.updateXRSpaceFromMergedFrames(e.gripSpace,r.gripTransform,i.gripTransform,s),t.hasHand)for(let a=0;a<25;a++){const n=r.handTransforms.slice(8*a,8*a+7),o=i.handTransforms.slice(8*a,8*a+7),h=r.handTransforms[8*a+7],l=i.handTransforms[8*a+7],u=e.hand.get(t.jointSequence[a]);this.updateXRSpaceFromMergedFrames(u,n,o,s),u[re].radius=(l-h)*s+h}if(t.hasGamepad){const t=e.gamepad;i.buttons.forEach((e,i)=>{const a=t.buttons[i];a[H].pressed=1===e[0],a[H].touched=1===e[1];const n=r.buttons[i][2],o=e[2];a[H].value=(o-n)*s+n}),i.axes.forEach((e,i)=>{const a=r.axes[i];t[H].axesMap[i.toString()].x=(e-a)*s+a})}}updateXRSpaceFromMergedFrames(e,t,r,i){const s=g(t[0],t[1],t[2]),a=I(t[3],t[4],t[5],t[6]),n=g(r[0],r[1],r[2]),o=I(r[3],r[4],r[5],r[6]);E(this[B].vec3,s,n,i),F(this[B].quat,a,o,i),u(e[se].offsetMatrix,this[B].quat,this[B].vec3)}processRawInputData(e){const t=e[0],r=this[B].inputSchemas.get(t),i={targetRayTransform:e.slice(1,8)};let s=8;if(r.hasGrip&&(i.gripTransform=e[s++]),r.hasHand&&(i.handTransforms=e[s++]),r.hasGamepad){const t=e[s];i.buttons=t.slice(0,r.numButtons),i.axes=t.slice(r.numButtons)}return{index:t,inputData:i}}}const Mt="2.1.0";class Ft extends Event{constructor(e,t){if(super(e,t),!t.referenceSpace)throw new Error("XRReferenceSpaceEventInit.referenceSpace is required");this.referenceSpace=t.referenceSpace,this.transform=t.transform}}class Pt extends EventTarget{constructor(e){super(),this[k]={device:e,grantSession:({resolve:e,reject:t,mode:r,options:i})=>{if(this[k].activeSession)return void t(new DOMException("An active XRSession already exists.","InvalidStateError"));const{requiredFeatures:s=[],optionalFeatures:a=[]}=i,{supportedFeatures:n}=this[k].device;if(!s.every(e=>n.includes(e)))return void t(new Error("One or more required features are not supported by the device."));const o=a.filter(e=>n.includes(e)),h=Array.from(new Set([...s,...o,"viewer","local"])),l=new ot(this[k].device,r,h);this[k].activeSession=l,l.addEventListener("end",()=>{this[k].activeSession=void 0}),e(l)}}}isSessionSupported(e){return new Promise((t,r)=>{t("inline"===e||this[k].device.supportedSessionModes.includes(e))})}requestSession(e,t={}){return new Promise((r,i)=>{this.isSessionSupported(e).then(s=>{if(!s)return void i(new DOMException("The requested XRSession mode is not supported.","NotSupportedError"));const a={resolve:r,reject:i,mode:e,options:t};this[k].grantSession(a)}).catch(i)})}offerSession(e,t={}){return new Promise((r,i)=>{this.isSessionSupported(e).then(s=>{s?this[k].offeredSessionConfig={resolve:r,reject:i,mode:e,options:t}:i(new DOMException("The requested XRSession mode is not supported.","NotSupportedError"))}).catch(i)})}}class It{constructor(e,t,r,i){this[ne]={x:e,y:t,width:r,height:i}}get x(){return this[ne].x}get y(){return this[ne].y}get width(){return this[ne].width}get height(){return this[ne].height}}var Lt,Ct;!function(e){e.texture="texture",e["texture-array"]="texture-array"}(Lt||(Lt={})),function(e){e.default="default",e.mono="mono",e.stereo="stereo",e["stereo-left-right"]="stereo-left-right",e["stereo-top-bottom"]="stereo-top-bottom"}(Ct||(Ct={}));const Nt=e=>e&&"function"==typeof e.getOffsetReferenceSpace,Dt=()=>"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},Bt=(e,t)=>{switch(t){case e.RGBA8:case e.RGB5_A1:case e.RGBA4:case e.SRGB8_ALPHA8:return{internalFormat:t,textureFormat:e.RGBA,type:e.UNSIGNED_BYTE};case e.RGBA8_SNORM:return{internalFormat:t,textureFormat:e.RGBA,type:e.BYTE};case e.RGB10_A2:return{internalFormat:t,textureFormat:e.RGBA,type:e.UNSIGNED_INT_2_10_10_10_REV};case e.RGBA16F:return{internalFormat:t,textureFormat:e.RGBA,type:e.HALF_FLOAT};case e.RGBA32F:return{internalFormat:t,textureFormat:e.RGBA,type:e.FLOAT};case e.RGBA8UI:return{internalFormat:t,textureFormat:e.RGBA_INTEGER,type:e.UNSIGNED_BYTE};case e.RGBA8I:return{internalFormat:t,textureFormat:e.RGBA_INTEGER,type:e.BYTE};case e.RGBA16UI:return{internalFormat:t,textureFormat:e.RGBA_INTEGER,type:e.UNSIGNED_SHORT};case e.RGBA16I:return{internalFormat:t,textureFormat:e.RGBA_INTEGER,type:e.SHORT};case e.RGBA32UI:return{internalFormat:t,textureFormat:e.RGBA_INTEGER,type:e.UNSIGNED_INT};case e.RGBA32I:return{internalFormat:t,textureFormat:e.RGBA_INTEGER,type:e.INT};case e.RGB10_A2UI:return{internalFormat:t,textureFormat:e.RGBA_INTEGER,type:e.UNSIGNED_INT_2_10_10_10_REV};case e.RGB8:case e.RGB565:case e.SRGB8:return{internalFormat:t,textureFormat:e.RGB,type:e.UNSIGNED_BYTE};case e.RGB8_SNORM:return{internalFormat:t,textureFormat:e.RGB,type:e.BYTE};case e.RGB16F:case e.R11F_G11F_B10F:case e.RGB9_E5:return{internalFormat:t,textureFormat:e.RGB,type:e.HALF_FLOAT};case e.RGB32F:return{internalFormat:t,textureFormat:e.RGB,type:e.FLOAT};case e.RGB8UI:return{internalFormat:t,textureFormat:e.RGB_INTEGER,type:e.UNSIGNED_BYTE};case e.RGB8I:return{internalFormat:t,textureFormat:e.RGB_INTEGER,type:e.BYTE};case e.RGB16UI:return{internalFormat:t,textureFormat:e.RGB_INTEGER,type:e.UNSIGNED_SHORT};case e.RGB16I:return{internalFormat:t,textureFormat:e.RGB_INTEGER,type:e.SHORT};case e.RGB32UI:return{internalFormat:t,textureFormat:e.RGB_INTEGER,type:e.UNSIGNED_INT};case e.RGB32I:return{internalFormat:t,textureFormat:e.RGB_INTEGER,type:e.INT};case e.DEPTH_COMPONENT16:return{internalFormat:t,textureFormat:e.DEPTH_COMPONENT,type:e.UNSIGNED_SHORT};case e.DEPTH_COMPONENT24:return{internalFormat:t,textureFormat:e.DEPTH_COMPONENT,type:e.UNSIGNED_INT};case e.DEPTH_COMPONENT32F:return{internalFormat:t,textureFormat:e.DEPTH_COMPONENT,type:e.FLOAT};case e.DEPTH24_STENCIL8:return{internalFormat:t,textureFormat:e.DEPTH_STENCIL,type:e.UNSIGNED_INT_24_8};case e.DEPTH32F_STENCIL8:return{internalFormat:t,textureFormat:e.DEPTH_STENCIL,type:e.FLOAT_32_UNSIGNED_INT_24_8_REV};case e.DEPTH_COMPONENT:return Bt(e,e.DEPTH_COMPONENT24);case e.DEPTH_STENCIL:return Bt(e,e.DEPTH24_STENCIL8);case e.RGBA:case e.RGB:case e.LUMINANCE_ALPHA:case e.LUMINANCE:case e.ALPHA:return{internalFormat:t,textureFormat:t,type:e.UNSIGNED_BYTE};default:throw new Error("Attempted to create polyfill with unsupported format.")}};class Ot{constructor(){this._hasRunDeferredInitialize=!1,this._media=null}initialize(e,t){this.session=e,t&&(this.context=t),this.blendTextureSourceAlpha=!0}destroy(){this._colorTextures=[],this._depthStencilTextures=[]}addEventListener(e,t,r){}dispatchEvent(e){return!1}removeEventListener(e,t,r){}getContext(){return this.context}getTextureType(){throw new Error("Unimplemented")}get colorTextures(){return this._colorTextures}get depthStencilTextures(){return this._depthStencilTextures}get colorTexturesMeta(){return this._texturesMeta}get media(){return this.isMediaLayer()||console.warn("Attempted to retrieve media from a non-media layer"),this._media}determineLayoutAttribute(e,t,r){if(!(t instanceof WebGL2RenderingContext)&&e===Lt["texture-array"])throw new TypeError;if(r===Ct.mono)return r;if(r===Ct.default){if(this.session.internalViews&&1===this.session.internalViews.length)return Ct.mono;if(e===Lt["texture-array"])return r}return r===Ct.default||r===Ct.stereo?Ct["stereo-left-right"]:r}isMediaLayer(){return null!==this._media}_deferredInitialize(){}initializeIfNeeded(){this._hasRunDeferredInitialize||(this._hasRunDeferredInitialize=!0,this._deferredInitialize())}_allocateColorTexturesInternal(e,t){let r=this.session.internalViews;if(r&&0!==r.length){if(this.initializeIfNeeded(),this.layout===Ct.mono){if(e===Lt["texture-array"]){const r=this._createNewColorTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.colorFormat);return this._texturesMeta=[r],void(this._colorTextures=[r.texture])}{const r=this._createNewColorTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.colorFormat);return this._texturesMeta=[r],void(this._colorTextures=[r.texture])}}if(this.layout===Ct.stereo){if(e===Lt["texture-array"]){const r=this._createNewColorTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.colorFormat,2);return this._texturesMeta=[r],void(this._colorTextures=[r.texture])}{const r=this._createNewColorTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.colorFormat),i=this._createNewColorTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.colorFormat);return this._texturesMeta=[r,i],void(this._colorTextures=[r.texture,i.texture])}}if(this.layout===Ct["stereo-left-right"]){const r=this._createNewColorTexture(2*t.viewPixelWidth,t.viewPixelHeight,e,t.colorFormat);return this._texturesMeta=[r],void(this._colorTextures=[r.texture])}if(this.layout===Ct["stereo-top-bottom"]){const r=this._createNewColorTexture(t.viewPixelWidth,2*t.viewPixelHeight,e,t.colorFormat);return this._texturesMeta=[r],void(this._colorTextures=[r.texture])}}else console.warn("We can't allocate color textures without views")}_allocateDepthStencilTexturesInternal(e,t){if(t.depthFormat){if(this._getSupportedDepthFormats().indexOf(t.depthFormat)<0)throw new Error("Depth format provided is not supported in non-projection layers.");if(t.mipLevels<1)throw new Error("Invalid miplevel. Miplevel needs to be >= 1");if(this.layout===Ct.mono){if(e===Lt["texture-array"]){const r=this._createNewDepthStencilTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.depthFormat);return void(this._depthStencilTextures=[r.texture])}{const r=this._createNewColorTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.depthFormat);return void(this._depthStencilTextures=[r.texture])}}if(this.layout===Ct.stereo){if(e===Lt["texture-array"]){const r=this._createNewDepthStencilTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.depthFormat,2);return void(this._depthStencilTextures=[r.texture])}{const r=this._createNewDepthStencilTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.depthFormat),i=this._createNewDepthStencilTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.depthFormat);return void(this._depthStencilTextures=[r.texture,i.texture])}}if(this.layout===Ct["stereo-left-right"]){const r=this._createNewDepthStencilTexture(2*t.viewPixelWidth,t.viewPixelHeight,e,t.depthFormat);return void(this._depthStencilTextures=[r.texture])}if(this.layout===Ct["stereo-top-bottom"]){const r=this._createNewDepthStencilTexture(t.viewPixelWidth,2*t.viewPixelHeight,e,t.depthFormat);return void(this._depthStencilTextures=[r.texture])}}else this._depthStencilTextures=[]}_createNewColorTexture(e,t,r,i,s=1){return this._createGenericPolyfillTexture(r,e,t,i,0,s)}_createNewDepthStencilTexture(e,t,r,i,s=1){return this._createGenericPolyfillTexture(r,e,t,i,0,s)}_createGenericPolyfillTexture(e,t,r,i,s=0,a=1){if(e===Lt["texture-array"]&&a<=1&&console.warn("creating a texture array with a single layer..."),e===Lt["texture-array"]&&this.context instanceof WebGLRenderingContext)throw new Error("WebGL 1 does not support texture array");const n=this._getAutoSampleCount(),o=n>1;let h=this.context.createTexture(),l={width:t,height:r,layers:a,type:e,textureFormat:i,texture:h,_msaaFramebuffer:null,_resolveFramebuffer:null,_autoAntialiasing:o,_samples:n},u=i,c=this.context.UNSIGNED_BYTE;if(this.context instanceof WebGL2RenderingContext){const e=Bt(this.context,i);u=e.internalFormat,i=e.textureFormat,c=e.type}else i===this.context.DEPTH_COMPONENT&&(c=this.context.UNSIGNED_INT),i===this.context.DEPTH_STENCIL&&(c=this.context.UNSIGNED_INT_24_8_WEBGL);if(e===Lt["texture-array"]&&this.context instanceof WebGL2RenderingContext){console.warn("texture-array layers are supported...questionably in the polyfill at the moment. Use at your own risk.");const e=this.context.getParameter(this.context.TEXTURE_BINDING_2D_ARRAY);this.context.bindTexture(this.context.TEXTURE_2D_ARRAY,h),this._getSupportedDepthFormats().indexOf(i)>=0?this.context.texStorage3D(this.context.TEXTURE_2D_ARRAY,1,u,t,r,a):this.context.texImage3D(this.context.TEXTURE_2D_ARRAY,0,u,t,r,a,0,i,c,null),this.context.bindTexture(this.context.TEXTURE_2D_ARRAY,e)}else{const e=this.context.getParameter(this.context.TEXTURE_BINDING_2D);this.context.bindTexture(this.context.TEXTURE_2D,h),this.context.texImage2D(this.context.TEXTURE_2D,0,u,t,r,0,i,c,null),this.context.bindTexture(this.context.TEXTURE_2D,e)}if(o&&this.context instanceof WebGL2RenderingContext){if(!(this._getSupportedDepthFormats().indexOf(i)>=0))try{this._createAutoMSAAFramebuffers(l,t,r,u),console.log(`Auto-enabled ${n}x MSAA for layer texture (${t}x${r})`)}catch(e){console.warn("Failed to create MSAA framebuffers, falling back to non-AA:",e),l._autoAntialiasing=!1,l._samples=1}}return l}_getSupportedDepthFormats(){const e=[];return this.context instanceof WebGLRenderingContext&&!this.context.getExtension("WEBGL_depth_texture")||(e.push(this.context.DEPTH_COMPONENT,this.context.DEPTH_STENCIL),this.context instanceof WebGL2RenderingContext&&e.push(this.context.DEPTH_COMPONENT24,this.context.DEPTH24_STENCIL8)),e}_shouldAutoEnableAntialiasing(){if(void 0!==window.IWER)return!0;if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent))return!1;if(!(this.context instanceof WebGL2RenderingContext))return!1;return this.context.getParameter(this.context.MAX_SAMPLES)>1}_getAutoSampleCount(){if(!this._shouldAutoEnableAntialiasing())return 1;const e=this.context.getParameter(this.context.MAX_SAMPLES);return Math.min(e,4)}_createAutoMSAAFramebuffers(e,t,r,i,s){const a=this.context,n=a.createRenderbuffer();a.bindRenderbuffer(a.RENDERBUFFER,n),a.renderbufferStorageMultisample(a.RENDERBUFFER,e._samples,i,t,r);let o=null;s&&(o=a.createRenderbuffer(),a.bindRenderbuffer(a.RENDERBUFFER,o),a.renderbufferStorageMultisample(a.RENDERBUFFER,e._samples,s,t,r));const h=a.createFramebuffer();a.bindFramebuffer(a.FRAMEBUFFER,h),a.framebufferRenderbuffer(a.FRAMEBUFFER,a.COLOR_ATTACHMENT0,a.RENDERBUFFER,n),o&&a.framebufferRenderbuffer(a.FRAMEBUFFER,a.DEPTH_ATTACHMENT,a.RENDERBUFFER,o);const l=a.createFramebuffer();a.bindFramebuffer(a.FRAMEBUFFER,l),e.type===Lt["texture-array"]?a.framebufferTextureLayer(a.FRAMEBUFFER,a.COLOR_ATTACHMENT0,e.texture,0,0):a.framebufferTexture2D(a.FRAMEBUFFER,a.COLOR_ATTACHMENT0,a.TEXTURE_2D,e.texture,0),e._msaaFramebuffer=h,e._resolveFramebuffer=l,a.bindRenderbuffer(a.RENDERBUFFER,null),a.bindFramebuffer(a.FRAMEBUFFER,null)}}const Ut={colorFormat:6408,mipLevels:1,layout:Ct.mono,isStatic:!1,space:null,viewPixelHeight:0,viewPixelWidth:0,textureType:Lt.texture,radius:2,centralAngle:.78539,aspectRatio:2},Vt={layout:Ct.mono,invertStereo:!1,space:null,radius:2,centralAngle:.78539};class Xt extends Ot{constructor(e,t){super(),this._media=t??null,this.isMediaLayer()?this.init={...Vt,...e}:this.init={...Ut,...e},this.radius=this.init.radius,this.centralAngle=this.init.centralAngle,this.aspectRatio=this.init.aspectRatio,this.space=this.init.space,this.layout=this.init.layout;const r=Dt();this.init.transform?this.transform=new r.XRRigidTransform(e.transform.position,e.transform.orientation):this.transform=new r.XRRigidTransform({x:0,y:0,z:0,w:1}),this.isMediaLayer()||(this.isStatic=e.isStatic)}getTextureType(){return this.isMediaLayer()?Lt.texture:this.init.textureType}_deferredInitialize(){let e=this.determineLayoutAttribute(this.init.textureType,this.context,this.init.layout);this.layout=e,this.needsRedraw=!0}get colorTextures(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._colorTextures&&this._colorTextures.length||this._allocateColorTexturesInternal(this.getTextureType(),this.init),this._colorTextures}get depthStencilTextures(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._depthStencilTextures&&this._depthStencilTextures.length||this._allocateDepthStencilTexturesInternal(this.getTextureType(),this.init),this._depthStencilTextures}get colorTexturesMeta(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._colorTextures&&this._colorTextures.length||this._allocateColorTexturesInternal(this.getTextureType(),this.init),this._texturesMeta}get width(){return 2*this.radius*Math.PI*(this.centralAngle/(2*Math.PI))}get height(){return this.width/this.aspectRatio}}const Gt={colorFormat:6408,mipLevels:1,layout:Ct.mono,isStatic:!1,space:null,viewPixelHeight:0,viewPixelWidth:0,textureType:Lt.texture,radius:0,centralHorizontalAngle:6.28318,upperVerticalAngle:1.570795,lowerVerticalAngle:-1.570795},qt={space:null,layout:Ct.mono,invertStereo:!1,radius:0,centralHorizontalAngle:6.28318,upperVerticalAngle:1.570795,lowerVerticalAngle:-1.570795};class zt extends Ot{constructor(e,t){if(super(),this._media=t??null,this.isMediaLayer()?this.init={...qt,...e}:this.init={...Gt,...e},!Nt(this.init.space))throw new TypeError("Equirect layer's space needs to be an XRReferenceSpace");this.radius=this.init.radius,this.centralHorizontalAngle=this.init.centralHorizontalAngle,this.upperVerticalAngle=this.init.upperVerticalAngle,this.lowerVerticalAngle=this.init.lowerVerticalAngle,this.space=this.init.space,this.layout=this.init.layout;const r=Dt();e.transform?this.transform=new r.XRRigidTransform(e.transform.position,e.transform.orientation):this.transform=new r.XRRigidTransform({x:0,y:0,z:0,w:1}),this.isMediaLayer()||(this.isStatic=e.isStatic)}getTextureType(){return this.isMediaLayer()?Lt.texture:this.init.textureType}_deferredInitialize(){let e=this.determineLayoutAttribute(this.init.textureType,this.context,this.init.layout);this.layout=e,this.needsRedraw=!0}get colorTextures(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._colorTextures&&this._colorTextures.length||this._allocateColorTexturesInternal(this.getTextureType(),this.init),this._colorTextures}get depthStencilTextures(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._depthStencilTextures&&this._depthStencilTextures.length||this._allocateDepthStencilTexturesInternal(this.getTextureType(),this.init),this._depthStencilTextures}get colorTexturesMeta(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._colorTextures&&this._colorTextures.length||this._allocateColorTexturesInternal(this.getTextureType(),this.init),this._texturesMeta}}const Ht={colorFormat:6408,mipLevels:1,layout:Ct.mono,isStatic:!1,space:null,viewPixelHeight:0,viewPixelWidth:0,textureType:Lt.texture,width:1,height:1},kt={space:null,layout:Ct.mono,invertStereo:!1};class Wt extends Ot{constructor(e,t){super(),this._media=t??null,this.isMediaLayer()?this.init={...kt,...e}:this.init={...Ht,...e},this.width=this.init.width,this.height=this.init.height,this.space=this.init.space,this.layout=this.init.layout;const r=Dt();this.init.transform?this.transform=new r.XRRigidTransform(e.transform.position,e.transform.orientation):this.transform=new r.XRRigidTransform({x:0,y:0,z:0,w:1}),this.isMediaLayer()||(this.isStatic=e.isStatic)}getTextureType(){return this.isMediaLayer()?Lt.texture:this.init.textureType}_deferredInitialize(){let e=this.determineLayoutAttribute(this.init.textureType,this.context,this.init.layout);this.layout=e,this.needsRedraw=!0}get colorTextures(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._colorTextures&&this._colorTextures.length||this._allocateColorTexturesInternal(this.getTextureType(),this.init),this._colorTextures}get depthStencilTextures(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._depthStencilTextures&&this._depthStencilTextures.length||this._allocateDepthStencilTexturesInternal(this.getTextureType(),this.init),this._depthStencilTextures}get colorTexturesMeta(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._colorTextures&&this._colorTextures.length||this._allocateColorTexturesInternal(this.getTextureType(),this.init),this._texturesMeta}}class jt{constructor(e){if(this.session=e,this.session.ended)throw new Error("Session has ended")}createQuadLayer(e,t){if(this.session.ended)throw new Error("Session has ended");if(t.layout===Ct.default)throw new TypeError("Media Quad layer cannot be created with layout of default");let r=this.calculateAspectRatio(e,t.layout);void 0===t.width&&void 0===t.height&&(t.width=1),void 0===t.height&&(t.height=t.width/r),void 0===t.width&&(t.width=t.height/r);let i=new Wt(t,e);return i.needsRedraw=!1,i.initialize(this.session),i}createCylinderLayer(e,t){if(this.session.ended)throw new Error("Session has ended");if(t.layout===Ct.default)throw new TypeError("Media Cylinder layer cannot be created with layout of default");let r=this.calculateAspectRatio(e,t.layout);void 0===t.aspectRatio&&(t.aspectRatio=r);let i=new Xt(t,e);return i.needsRedraw=!1,i.initialize(this.session),i}createEquirectLayer(e,t){if(this.session.ended)throw new Error("Session has ended");if(t.layout===Ct.default)throw new TypeError("Media Equirect layer cannot be created with layout of default");if(!Nt(t.space))throw new Error("Media Equirect layer's space must be of type XRReferenceSpace");let r=new zt(t,e);return r.needsRedraw=!1,r.initialize(this.session),r}calculateAspectRatio(e,t){let r=e.videoWidth,i=e.videoHeight;return t===Ct["stereo-left-right"]&&(r/=2),t===Ct["stereo-top-bottom"]&&(i/=2),r/i}}const Yt={textureType:Lt.texture,colorFormat:6408,depthFormat:6402,scaleFactor:1.5};class Qt extends Ot{constructor(e=Yt){super(),this.init={...Yt,...e}}initialize(e,t){super.initialize(e,t),this.initializeIfNeeded();let r=e.getBaseLayer();this.textureWidth=r.framebufferWidth*this.init.scaleFactor,this.textureHeight=r.framebufferHeight*this.init.scaleFactor}_allocateProjectionColorTextures(){let e=[],t=[];const r=()=>{e=[];for(let r of t)e.push(r.texture)};let i=this.session,s=i.internalViews;if(!s||0===s.length)return void console.warn("We can't allocate color textures without views");let a,n=i.getBaseLayer(),o=s.length,h=n.framebufferHeight*this.init.scaleFactor;if(a=this.init.textureType===Lt["texture-array"]?n.framebufferWidth*this.init.scaleFactor:n.framebufferWidth*this.init.scaleFactor/s.length,this.layout===Ct.mono||this.layout===Ct.default){if(this.init.textureType===Lt["texture-array"]){let e=this._createNewColorTexture(a,h,Lt["texture-array"],this.init.colorFormat,o);t=[e]}else for(let e of s){let e=this._createNewColorTexture(a,h,Lt.texture,this.init.colorFormat);t.push(e)}return r(),this._colorTexturesMeta=t,void(this._colorTextures=e)}if(this.layout===Ct["stereo-left-right"]){let e=this._createNewColorTexture(a*o,h,this.init.textureType,this.init.colorFormat);t=[e]}else if(this.layout===Ct["stereo-top-bottom"]){let e=this._createNewColorTexture(a,h*o,this.init.textureType,this.init.colorFormat);t=[e]}r(),this._colorTexturesMeta=t,this._colorTextures=e}_allocateProjectionDepthStencilTextures(){let e=this.session,t=e.internalViews;if(!t||0===t.length)return;if(0===this.init.depthFormat)return void(this._depthStencilTextures=[]);if(this.context instanceof WebGLRenderingContext){if(!this.context.getExtension("WEBGL_depth_texture"))return void(this._depthStencilTextures=[])}let r=[],i=[];const s=()=>{r=[];for(let e of i)r.push(e.texture)};this.initializeIfNeeded();let a,n=e.getBaseLayer(),o=t.length,h=n.framebufferHeight*this.init.scaleFactor;if(a=this.init.textureType===Lt["texture-array"]?n.framebufferWidth*this.init.scaleFactor:n.framebufferWidth*this.init.scaleFactor/t.length,this.layout===Ct.mono||this.layout===Ct.default){if(this.init.textureType===Lt["texture-array"]){let e=this._createNewDepthStencilTexture(a,h,this.init.textureType,this.init.depthFormat,o);i=[e]}else for(let e of t){let e=this._createNewDepthStencilTexture(a,h,this.init.textureType,this.init.depthFormat);i.push(e)}return s(),void(this._depthStencilTextures=r)}if(this.layout===Ct["stereo-left-right"]){let e=this._createNewDepthStencilTexture(a*o,h,this.init.textureType,this.init.depthFormat);i=[e]}else if(this.layout===Ct["stereo-top-bottom"]){let e=this._createNewDepthStencilTexture(a,h*o,this.init.textureType,this.init.depthFormat);i=[e]}s(),this._depthStencilTextures=r}get colorTextures(){return this._colorTextures&&this._colorTextures.length||this._allocateProjectionColorTextures(),this._colorTextures}get depthStencilTextures(){return void 0===this._depthStencilTextures&&this._allocateProjectionDepthStencilTextures(),this._depthStencilTextures||[]}get colorTexturesMeta(){return this._colorTextures&&this._colorTextures.length||this._allocateProjectionColorTextures(),this._colorTexturesMeta}getTextureType(){return this.init.textureType}_deferredInitialize(){this.isStatic=!1,this.ignoreDepthValues=!1,this.fixedFoveation=0;let e=this.determineLayoutAttribute(this.init.textureType,this.context,Ct.default);this.layout=e,this.needsRedraw=!0;let t=this.determineMaximumScaleFactor(),r=Math.min(this.init.scaleFactor,t);this.init.scaleFactor;let i=r;this.init.scaleFactor=i}determineMaximumScaleFactor(){let e=this.session.getBaseLayer(this.context),t=e.framebufferWidth,r=e.framebufferHeight;this.layout===Ct["stereo-left-right"]&&(t*=2),this.layout===Ct["stereo-top-bottom"]&&(r*=2);let i=Math.max(t,r);return this.context.getParameter(this.context.MAX_TEXTURE_SIZE)/i}}const $t=(e,t,r,i,s)=>{let a=0,n=0,o=t.width,h=t.height;r===Ct["stereo-left-right"]?(a=t.width*i/s,o=t.width/s):r===Ct["stereo-top-bottom"]&&(n=t.height*i/s,h=t.height/s),e.x=a,e.y=n,e.width=o,e.height=h},Kt=(e,t,r)=>{var i=e.createShader(r);if(e.shaderSource(i,t),e.compileShader(i),!e.getShaderParameter(i,e.COMPILE_STATUS))throw"could not compile shader:"+e.getShaderInfoLog(i);return i},Jt=(e,t,r)=>{const i=e.createProgram(),s=Kt(e,t,e.VERTEX_SHADER),a=Kt(e,r,e.FRAGMENT_SHADER);if(e.attachShader(i,s),e.attachShader(i,a),e.deleteShader(s),e.deleteShader(a),e.linkProgram(i),!e.getProgramParameter(i,e.LINK_STATUS))throw"program failed to link:"+e.getProgramInfoLog(i);return i},Zt=e=>{if(e instanceof WebGL2RenderingContext)return e;const t=e.getExtension("OES_vertex_array_object");if(!t)throw new Error("Cannot use VAOs.");return{VERTEX_ARRAY_BINDING:t.VERTEX_ARRAY_BINDING_OES,bindVertexArray:t.bindVertexArrayOES.bind(t),createVertexArray:t.createVertexArrayOES.bind(t),deleteVertexArray:t.deleteVertexArrayOES.bind(t),isVertexArray:t.isVertexArrayOES.bind(t)}},er=e=>e,tr=er`
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).IWER={})}(this,(function(e){"use strict";var t=1e-6,r="undefined"!=typeof Float32Array?Float32Array:Array;function i(){var e=new r(16);return r!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0),e[0]=1,e[5]=1,e[10]=1,e[15]=1,e}function s(e){var t=new r(16);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function a(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function n(e,t){var r=t[0],i=t[1],s=t[2],a=t[3],n=t[4],o=t[5],h=t[6],l=t[7],c=t[8],u=t[9],d=t[10],p=t[11],f=t[12],m=t[13],x=t[14],g=t[15],y=r*o-i*n,v=r*h-s*n,T=r*l-a*n,w=i*h-s*o,S=i*l-a*o,R=s*l-a*h,E=c*m-u*f,_=c*x-d*f,b=c*g-p*f,M=u*x-d*m,A=u*g-p*m,P=d*g-p*x,F=y*P-v*A+T*M+w*b-S*_+R*E;return F?(F=1/F,e[0]=(o*P-h*A+l*M)*F,e[1]=(s*A-i*P-a*M)*F,e[2]=(m*R-x*S+g*w)*F,e[3]=(d*S-u*R-p*w)*F,e[4]=(h*b-n*P-l*_)*F,e[5]=(r*P-s*b+a*_)*F,e[6]=(x*T-f*R-g*v)*F,e[7]=(c*R-d*T+p*v)*F,e[8]=(n*A-o*b+l*E)*F,e[9]=(i*b-r*A-a*E)*F,e[10]=(f*S-m*T+g*y)*F,e[11]=(u*T-c*S-p*y)*F,e[12]=(o*_-n*M-h*E)*F,e[13]=(r*M-i*_+s*E)*F,e[14]=(m*v-f*w-x*y)*F,e[15]=(c*w-u*v+d*y)*F,e):null}function o(e,t,r){var i=t[0],s=t[1],a=t[2],n=t[3],o=t[4],h=t[5],l=t[6],c=t[7],u=t[8],d=t[9],p=t[10],f=t[11],m=t[12],x=t[13],g=t[14],y=t[15],v=r[0],T=r[1],w=r[2],S=r[3];return e[0]=v*i+T*o+w*u+S*m,e[1]=v*s+T*h+w*d+S*x,e[2]=v*a+T*l+w*p+S*g,e[3]=v*n+T*c+w*f+S*y,v=r[4],T=r[5],w=r[6],S=r[7],e[4]=v*i+T*o+w*u+S*m,e[5]=v*s+T*h+w*d+S*x,e[6]=v*a+T*l+w*p+S*g,e[7]=v*n+T*c+w*f+S*y,v=r[8],T=r[9],w=r[10],S=r[11],e[8]=v*i+T*o+w*u+S*m,e[9]=v*s+T*h+w*d+S*x,e[10]=v*a+T*l+w*p+S*g,e[11]=v*n+T*c+w*f+S*y,v=r[12],T=r[13],w=r[14],S=r[15],e[12]=v*i+T*o+w*u+S*m,e[13]=v*s+T*h+w*d+S*x,e[14]=v*a+T*l+w*p+S*g,e[15]=v*n+T*c+w*f+S*y,e}function h(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e}function l(e,r,i){var s,a,n,o=i[0],h=i[1],l=i[2],c=Math.sqrt(o*o+h*h+l*l);return c<t?null:(o*=c=1/c,h*=c,l*=c,s=Math.sin(r),n=1-(a=Math.cos(r)),e[0]=o*o*n+a,e[1]=h*o*n+l*s,e[2]=l*o*n-h*s,e[3]=0,e[4]=o*h*n-l*s,e[5]=h*h*n+a,e[6]=l*h*n+o*s,e[7]=0,e[8]=o*l*n+h*s,e[9]=h*l*n-o*s,e[10]=l*l*n+a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e)}function c(e,t,r){var i=t[0],s=t[1],a=t[2],n=t[3],o=i+i,h=s+s,l=a+a,c=i*o,u=i*h,d=i*l,p=s*h,f=s*l,m=a*l,x=n*o,g=n*h,y=n*l;return e[0]=1-(p+m),e[1]=u+y,e[2]=d-g,e[3]=0,e[4]=u-y,e[5]=1-(c+m),e[6]=f+x,e[7]=0,e[8]=d+g,e[9]=f-x,e[10]=1-(c+p),e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function u(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function d(e,t){var r=t[0],i=t[1],s=t[2],a=t[4],n=t[5],o=t[6],h=t[8],l=t[9],c=t[10];return e[0]=Math.sqrt(r*r+i*i+s*s),e[1]=Math.sqrt(a*a+n*n+o*o),e[2]=Math.sqrt(h*h+l*l+c*c),e}function p(e,t){var i=new r(3);d(i,t);var s=1/i[0],a=1/i[1],n=1/i[2],o=t[0]*s,h=t[1]*a,l=t[2]*n,c=t[4]*s,u=t[5]*a,p=t[6]*n,f=t[8]*s,m=t[9]*a,x=t[10]*n,g=o+u+x,y=0;return g>0?(y=2*Math.sqrt(g+1),e[3]=.25*y,e[0]=(p-m)/y,e[1]=(f-l)/y,e[2]=(h-c)/y):o>u&&o>x?(y=2*Math.sqrt(1+o-u-x),e[3]=(p-m)/y,e[0]=.25*y,e[1]=(h+c)/y,e[2]=(f+l)/y):u>x?(y=2*Math.sqrt(1+u-o-x),e[3]=(f-l)/y,e[0]=(h+c)/y,e[1]=.25*y,e[2]=(p+m)/y):(y=2*Math.sqrt(1+x-o-u),e[3]=(h-c)/y,e[0]=(f+l)/y,e[1]=(p+m)/y,e[2]=.25*y),e}var f=function(e,t,r,i,s){var a=1/Math.tan(t/2);if(e[0]=a/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,null!=s&&s!==1/0){var n=1/(i-s);e[10]=(s+i)*n,e[14]=2*s*i*n}else e[10]=-1,e[14]=-2*i;return e};function m(){var e=new r(3);return r!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function x(e,t,i){var s=new r(3);return s[0]=e,s[1]=t,s[2]=i,s}function g(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function y(e,t,r,i){return e[0]=t,e[1]=r,e[2]=i,e}function v(e,t){var r=t[0],i=t[1],s=t[2],a=r*r+i*i+s*s;return a>0&&(a=1/Math.sqrt(a)),e[0]=t[0]*a,e[1]=t[1]*a,e[2]=t[2]*a,e}function T(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function w(e,t,r){var i=t[0],s=t[1],a=t[2],n=r[0],o=r[1],h=r[2];return e[0]=s*h-a*o,e[1]=a*n-i*h,e[2]=i*o-s*n,e}function S(e,t,r,i){var s=t[0],a=t[1],n=t[2];return e[0]=s+i*(r[0]-s),e[1]=a+i*(r[1]-a),e[2]=n+i*(r[2]-n),e}function R(){var e=new r(4);return r!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0,e[3]=0),e}function E(e,t,r,i,s){return e[0]=t,e[1]=r,e[2]=i,e[3]=s,e}function _(e,t,r){var i=t[0],s=t[1],a=t[2],n=t[3];return e[0]=r[0]*i+r[4]*s+r[8]*a+r[12]*n,e[1]=r[1]*i+r[5]*s+r[9]*a+r[13]*n,e[2]=r[2]*i+r[6]*s+r[10]*a+r[14]*n,e[3]=r[3]*i+r[7]*s+r[11]*a+r[15]*n,e}function b(){var e=new r(4);return r!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function M(e,t,r){r*=.5;var i=Math.sin(r);return e[0]=i*t[0],e[1]=i*t[1],e[2]=i*t[2],e[3]=Math.cos(r),e}function A(e,r,i,s){var a,n,o,h,l,c=r[0],u=r[1],d=r[2],p=r[3],f=i[0],m=i[1],x=i[2],g=i[3];return(n=c*f+u*m+d*x+p*g)<0&&(n=-n,f=-f,m=-m,x=-x,g=-g),1-n>t?(a=Math.acos(n),o=Math.sin(a),h=Math.sin((1-s)*a)/o,l=Math.sin(s*a)/o):(h=1-s,l=s),e[0]=h*c+l*f,e[1]=h*u+l*m,e[2]=h*d+l*x,e[3]=h*p+l*g,e}m(),function(){var e=R()}();var P,F=function(e,t,i,s){var a=new r(4);return a[0]=e,a[1]=t,a[2]=i,a[3]=s,a},I=function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e},L=E,C=function(e,t){var r=t[0],i=t[1],s=t[2],a=t[3],n=r*r+i*i+s*s+a*a;return n>0&&(n=1/Math.sqrt(n)),e[0]=r*n,e[1]=i*n,e[2]=s*n,e[3]=a*n,e};m(),x(1,0,0),x(0,1,0),b(),b(),P=new r(9),r!=Float32Array&&(P[1]=0,P[2]=0,P[3]=0,P[5]=0,P[6]=0,P[7]=0),P[0]=1,P[4]=1,P[8]=1;const N=Symbol("@iwer/action-player"),D=Symbol("@iwer/action-recorder"),O=Symbol("@iwer/xr-anchor"),B=Symbol("@iwer/xr-controller"),V=Symbol("@iwer/xr-device"),U=Symbol("@iwer/xr-hand-input"),X=Symbol("@iwer/xr-tracked-input"),G=Symbol("@iwer/xr-frame"),q=Symbol("@iwer/gamepad"),z=Symbol("@iwer/xr-system"),H=Symbol("@iwer/xr-input-source"),k=Symbol("@iwer/xr-webgl-layer"),j=Symbol("@iwer/xr-mesh"),W=Symbol("@iwer/xr-plane"),Y=Symbol("@iwer/xr-joint-pose"),Q=Symbol("@iwer/xr-pose"),K=Symbol("@iwer/xr-viewer-pose"),$=Symbol("@iwer/xr-rigid-transform"),J=Symbol("@iwer/xr-render-state"),Z=Symbol("@iwer/xr-session"),ee=Symbol("@iwer/xr-joint-space"),te=Symbol("@iwer/xr-reference-space"),re=Symbol("@iwer/xr-space"),ie=Symbol("@iwer/xr-view"),se=Symbol("@iwer/xr-viewport"),ae=Symbol("@iwer/xr-ray"),ne=Symbol("@iwer/xr-hit-test");class oe extends EventTarget{constructor(e,t){super(),this[re]={parentSpace:e,offsetMatrix:t?s(t):i(),emulated:!0}}}class he extends oe{constructor(){super(void 0,i())}}class le{static updateOffsetPosition(e,t){h(e[re].offsetMatrix,t)}static updateOffsetQuaternion(e,t){const r=e[re].offsetMatrix,i=m();u(i,r),c(r,t,i)}static updateOffsetMatrix(e,t){a(e[re].offsetMatrix,t)}static calculateGlobalOffsetMatrix(e,t=i()){return o(t,e[re].parentSpace?le.calculateGlobalOffsetMatrix(e[re].parentSpace):i(),e[re].offsetMatrix),t}}class ce{constructor(e=0,t=0,r=0){this.vec3=x(e,t,r),this.tempVec3=m()}get x(){return this.vec3[0]}set x(e){this.vec3[0]=e}get y(){return this.vec3[1]}set y(e){this.vec3[1]=e}get z(){return this.vec3[2]}set z(e){this.vec3[2]=e}set(e,t,r){return y(this.vec3,e,t,r),this}clone(){return new ce(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}normalize(){return g(this.tempVec3,this.vec3),v(this.vec3,this.tempVec3),this}add(e){return g(this.tempVec3,this.vec3),function(e,t,r){e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2]}(this.vec3,this.tempVec3,e.vec3),this}applyQuaternion(e){return g(this.tempVec3,this.vec3),function(e,t,r){var i=r[0],s=r[1],a=r[2],n=r[3],o=t[0],h=t[1],l=t[2],c=s*l-a*h,u=a*o-i*l,d=i*h-s*o;c+=c,u+=u,d+=d,e[0]=o+n*c+s*d-a*u,e[1]=h+n*u+a*c-i*d,e[2]=l+n*d+i*u-s*c}(this.vec3,this.tempVec3,e.quat),this}}class ue{constructor(e=0,t=0,r=0,i=1){this.quat=F(e,t,r,i),this.tempQuat=b()}get x(){return this.quat[0]}set x(e){this.quat[0]=e}get y(){return this.quat[1]}set y(e){this.quat[1]=e}get z(){return this.quat[2]}set z(e){this.quat[2]=e}get w(){return this.quat[3]}set w(e){this.quat[3]=e}set(e,t,r,i){return L(this.quat,e,t,r,i),this}clone(){return new ue(this.x,this.y,this.z,this.w)}copy(e){return L(this.quat,e.x,e.y,e.z,e.w),this}normalize(){return I(this.tempQuat,this.quat),C(this.quat,this.tempQuat),this}invert(){return I(this.tempQuat,this.quat),function(e,t){e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3]}(this.quat,this.tempQuat),this}multiply(e){return I(this.tempQuat,this.quat),function(e,t,r){var i=t[0],s=t[1],a=t[2],n=t[3],o=r[0],h=r[1],l=r[2],c=r[3];e[0]=i*c+n*o+s*l-a*h,e[1]=s*c+n*h+a*o-i*l,e[2]=a*c+n*l+i*h-s*o,e[3]=n*c-i*o-s*h-a*l}(this.quat,this.tempQuat,e.quat),this}setFromAxisAngle(e,t){return M(this.quat,e.vec3,t),this}}var de,pe,fe;!function(e){e.None="",e.Standard="standard",e.XRStandard="xr-standard"}(de||(de={}));class me{constructor(e,t){this[q]={type:e,eventTrigger:t,pressed:!1,touched:!1,value:0,lastFrameValue:0,pendingValue:null}}get pressed(){return"manual"===this[q].type?this[q].pressed:this[q].value>0}get touched(){return"manual"===this[q].type?this[q].touched:this[q].touched||this.pressed}get value(){return this[q].value}}class xe{constructor(){this.pressed=!1,this.touched=!1,this.value=0}}class ge{constructor(e,t="",r=-1){this[q]={id:t,index:r,connected:!1,timestamp:performance.now(),mapping:e.mapping,buttonsMap:{},buttonsSequence:[],axesMap:{},axesSequence:[],hapticActuators:[]},e.buttons.forEach((e=>{var t;null===e?this[q].buttonsSequence.push(null):(this[q].buttonsSequence.push(e.id),this[q].buttonsMap[e.id]=new me(e.type,null!==(t=e.eventTrigger)&&void 0!==t?t:null))})),e.axes.forEach((e=>{null===e?this[q].axesSequence.push(null):(this[q].axesSequence.push(e.id+e.type),this[q].axesMap[e.id]||(this[q].axesMap[e.id]={x:0,y:0}))}))}get id(){return this[q].id}get index(){return this[q].index}get connected(){return this[q].connected}get timestamp(){return this[q].timestamp}get mapping(){return this[q].mapping}get axes(){const e=[];return this[q].axesSequence.forEach((t=>{if(null===t)e.push(null);else{const r=t.substring(0,t.length-6),i=t.substring(t.length-6);e.push("y-axis"===i?this[q].axesMap[r].y:this[q].axesMap[r].x)}})),e}get buttons(){return this[q].buttonsSequence.map((e=>null===e?new xe:this[q].buttonsMap[e]))}get hapticActuators(){return this[q].hapticActuators}get vibrationActuator(){return null}}!function(e){e.None="none",e.Left="left",e.Right="right"}(pe||(pe={})),function(e){e.Gaze="gaze",e.TrackedPointer="tracked-pointer",e.Screen="screen",e.TransientPointer="transient-pointer"}(fe||(fe={}));class ye extends Array{}class ve{constructor(e,t,r,i,s,a,n){this[H]={handedness:e,targetRayMode:t,targetRaySpace:i,gripSpace:a,profiles:r,gamepad:s,hand:n}}get handedness(){return this[H].handedness}get targetRayMode(){return this[H].targetRayMode}get targetRaySpace(){return this[H].targetRaySpace}get gripSpace(){return this[H].gripSpace}get profiles(){return this[H].profiles}get gamepad(){return this[H].gamepad}get hand(){return this[H].hand}}class Te extends Event{constructor(e,t){if(super(e,t),!t.frame)throw new Error("XRInputSourceEventInit.frame is required");if(!t.inputSource)throw new Error("XRInputSourceEventInit.inputSource is required");this.frame=t.frame,this.inputSource=t.inputSource}}const we={[pe.Left]:{position:new ce(-.25,1.5,-.4),quaternion:new ue},[pe.Right]:{position:new ce(.25,1.5,-.4),quaternion:new ue},[pe.None]:{position:new ce(.25,1.5,-.4),quaternion:new ue}};class Se{constructor(e){this[X]={inputSource:e,position:we[e.handedness].position.clone(),quaternion:we[e.handedness].quaternion.clone(),connected:!0,lastFrameConnected:!1,inputSourceChanged:!0}}get position(){return this[X].position}get quaternion(){return this[X].quaternion}get inputSource(){return this[X].inputSource}get connected(){return this[X].connected}set connected(e){this[X].connected=e,this[X].inputSource.gamepad[q].connected=e}onFrameStart(e){c(this[X].inputSource.targetRaySpace[re].offsetMatrix,this[X].quaternion.quat,this[X].position.vec3);const t=e.session;this[X].inputSource.gamepad.buttons.forEach((r=>{r instanceof me&&(r[q].lastFrameValue=r[q].value,null!=r[q].pendingValue&&(r[q].value=r[q].pendingValue,r[q].pendingValue=null),null!=r[q].eventTrigger&&(0===r[q].lastFrameValue&&r[q].value>0?(t.dispatchEvent(new Te(r[q].eventTrigger,{frame:e,inputSource:this[X].inputSource})),t.dispatchEvent(new Te(r[q].eventTrigger+"start",{frame:e,inputSource:this[X].inputSource}))):r[q].lastFrameValue>0&&0===r[q].value&&t.dispatchEvent(new Te(r[q].eventTrigger+"end",{frame:e,inputSource:this[X].inputSource}))))})),this[X].inputSourceChanged=this.connected!==this[X].lastFrameConnected,this[X].lastFrameConnected=this.connected}}class Re extends Se{constructor(e,t,r){if(!e.layout[t])throw new DOMException("Handedness not supported","InvalidStateError");const i=new oe(r),s=e.layout[t].gripOffsetMatrix?new oe(i,e.layout[t].gripOffsetMatrix):void 0,a=[e.profileId,...e.fallbackProfileIds];super(new ve(t,fe.TrackedPointer,a,i,new ge(e.layout[t].gamepad),s)),this[B]={profileId:e.profileId,gamepadConfig:e.layout[t].gamepad}}get gamepadConfig(){return this[B].gamepadConfig}get profileId(){return this[B].profileId}updateButtonValue(e,t){if(t>1||t<0)return void console.warn(`Out-of-range value ${t} provided for button ${e}.`);const r=this[X].inputSource.gamepad[q].buttonsMap[e];if(r){if("binary"===r[q].type&&1!=t&&0!=t)return void console.warn(`Non-binary value ${t} provided for binary button ${e}.`);r[q].pendingValue=t}else console.warn(`Current controller does not have button ${e}.`)}updateButtonTouch(e,t){const r=this[X].inputSource.gamepad[q].buttonsMap[e];r?r[q].touched=t:console.warn(`Current controller does not have button ${e}.`)}updateAxis(e,t,r){if(r>1||r<-1)return void console.warn(`Out-of-range value ${r} provided for ${e} axes.`);const i=this[X].inputSource.gamepad[q].axesMap[e];i?"x-axis"===t?i.x=r:"y-axis"===t&&(i.y=r):console.warn(`Current controller does not have ${e} axes.`)}updateAxes(e,t,r){if(t>1||t<-1||r>1||r<-1)return void console.warn(`Out-of-range value x:${t}, y:${r} provided for ${e} axes.`);const i=this[X].inputSource.gamepad[q].axesMap[e];i?(i.x=t,i.y=r):console.warn(`Current controller does not have ${e} axes.`)}}class Ee{constructor(e,t,r,i,s){this[j]={nativeMesh:e,frame:void 0,meshSpace:t,vertices:r,indices:i,lastChangedTime:performance.now(),semanticLabel:s}}get meshSpace(){return this[j].meshSpace}get vertices(){return this[j].vertices}get indices(){return this[j].indices}get lastChangedTime(){return this[j].lastChangedTime}get semanticLabel(){return this[j].semanticLabel}}class _e extends Set{}var be,Me;e.XRSemanticLabels=void 0,(be=e.XRSemanticLabels||(e.XRSemanticLabels={})).Desk="desk",be.Couch="couch",be.Floor="floor",be.Ceiling="ceiling",be.Wall="wall",be.Door="door",be.Window="window",be.Table="table",be.Shelf="shelf",be.Bed="bed",be.Screen="screen",be.Lamp="lamp",be.Plant="plant",be.WallArt="wall art",be.GlobalMesh="global mesh",be.Other="other",function(e){e.Horizontal="horizontal",e.Vertical="vertical"}(Me||(Me={}));const Ae={[e.XRSemanticLabels.Desk]:Me.Horizontal,[e.XRSemanticLabels.Couch]:Me.Horizontal,[e.XRSemanticLabels.Floor]:Me.Horizontal,[e.XRSemanticLabels.Ceiling]:Me.Horizontal,[e.XRSemanticLabels.Wall]:Me.Vertical,[e.XRSemanticLabels.Door]:Me.Vertical,[e.XRSemanticLabels.Window]:Me.Vertical,[e.XRSemanticLabels.Table]:Me.Horizontal,[e.XRSemanticLabels.Shelf]:Me.Horizontal,[e.XRSemanticLabels.Bed]:Me.Horizontal,[e.XRSemanticLabels.Screen]:Me.Horizontal,[e.XRSemanticLabels.Lamp]:Me.Horizontal,[e.XRSemanticLabels.Plant]:Me.Horizontal,[e.XRSemanticLabels.WallArt]:Me.Vertical};class Pe{constructor(e,t,r,i){this[W]={nativePlane:e,frame:void 0,planeSpace:t,polygon:r,lastChangedTime:performance.now(),semanticLabel:i,orientation:i?Ae[i]:void 0}}get planeSpace(){return this[W].planeSpace}get polygon(){return this[W].polygon}get orientation(){return this[W].orientation}get lastChangedTime(){return this[W].lastChangedTime}get semanticLabel(){return this[W].semanticLabel}}class Fe extends Set{}class Ie{constructor(e,t){this[O]={anchorSpace:e,session:t,deleted:!1},t[Z].trackedAnchors.add(this)}get anchorSpace(){if(this[O].deleted)throw new DOMException("XRAnchor has already been deleted.","InvalidStateError");return this[O].anchorSpace}requestPersistentHandle(){return new Promise(((e,t)=>{if(this[O].deleted)t(new DOMException("XRAnchor has already been deleted.","InvalidStateError"));else{const t=this[O].session[Z].persistentAnchors;for(const[r,i]of t.entries())if(i===this)return void e(r);const r=crypto.randomUUID();Ne.createPersistentAnchor(this[O].session,this,r),e(r)}}))}delete(){this[O].deleted||(this[O].anchorSpace=null,this[O].deleted=!0,this[O].session[Z].trackedAnchors.delete(this))}}class Le extends Set{}const Ce="@immersive-web-emulation-runtime/persistent-anchors";class Ne{static recoverPersistentAnchorsFromStorage(e){const t=JSON.parse(localStorage.getItem(Ce)||"{}");Object.entries(t).forEach((([t,r])=>{const i=e[Z].device[V].globalSpace,s=new oe(i,r),a=new Ie(s,e);e[Z].persistentAnchors.set(t,a)}))}static createPersistentAnchor(e,t,r){e[Z].trackedAnchors.add(t),e[Z].persistentAnchors.set(r,t);const i=JSON.parse(localStorage.getItem(Ce)||"{}");i[r]=Array.from(t[O].anchorSpace[re].offsetMatrix),localStorage.setItem(Ce,JSON.stringify(i))}}class De{constructor(e,t){const r=x(0,0,0),s=b();this[$]={matrix:i(),position:e?x(e.x,e.y,e.z):r,orientation:t?C(b(),F(t.x,t.y,t.z,t.w)):s,inverse:null},this.updateMatrix()}updateMatrix(){c(this[$].matrix,this[$].orientation,this[$].position)}get matrix(){return this[$].matrix}get position(){const e=this[$].position;return new DOMPointReadOnly(e[0],e[1],e[2],1)}get orientation(){const e=this[$].orientation;return new DOMPointReadOnly(e[0],e[1],e[2],e[3])}get inverse(){if(!this[$].inverse){const e=i();if(!n(e,this[$].matrix))throw new Error("Matrix is not invertible.");let t=m();u(t,e);let r=b();p(r,e),this[$].inverse=new De(new DOMPointReadOnly(t[0],t[1],t[2],1),new DOMPointReadOnly(r[0],r[1],r[2],r[3])),this[$].inverse[$].inverse=this}return this[$].inverse}}class Oe{constructor(e=0,t=0,r=0,i=1){this.x=e,this.y=t,this.z=r,this.w=i}}class Be{constructor(e,t){const r={x:0,y:0,z:0,w:1},i={x:0,y:0,z:-1,w:0};if(e instanceof De){const t=e.matrix,s=E(R(),r.x,r.y,r.z,r.w),a=E(R(),i.x,i.y,i.z,i.w);_(s,s,t),_(a,a,t),r.x=s[0],r.y=s[1],r.z=s[2],r.w=s[3],i.x=a[0],i.y=a[1],i.z=a[2],i.w=a[3]}else if(e&&(r.x=e.x,r.y=e.y,r.z=e.z,r.w=e.w),t){if(0===t.x&&0===t.y&&0===t.z||0!==t.w)throw new DOMException("Invalid direction value to construct XRRay","TypeError");i.x=t.x,i.y=t.y,i.z=t.z,i.w=t.w}const s=Math.sqrt(i.x*i.x+i.y*i.y+i.z*i.z)||1;i.x=i.x/s,i.y=i.y/s,i.z=i.z/s,this[ae]={origin:new Oe(r.x,r.y,r.z,r.w),direction:new Oe(i.x,i.y,i.z,i.w),matrix:null}}get origin(){return this[ae].origin}get direction(){return this[ae].direction}get matrix(){if(this[ae].matrix)return this[ae].matrix;const e=y(m(),0,0,-1),t=y(m(),this[ae].origin.x,this[ae].origin.y,this[ae].origin.z),r=y(m(),this[ae].direction.x,this[ae].direction.y,this[ae].direction.z),s=w(m(),r,e),a=T(r,e),n=i();a>-1&&a<1?l(n,Math.acos(a),s):-1===a?l(n,Math.acos(a),y(m(),1,0,0)):function(e){e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1}(n);const c=h(i(),t),u=o(i(),c,n);return this[ae].matrix=new Float32Array(u),this[ae].matrix}}class Ve{constructor(e,t){var r;this[ne]={session:e,space:t.space,offsetRay:null!==(r=t.offsetRay)&&void 0!==r?r:new Be}}cancel(){this[ne].session[Z].hitTestSources.delete(this)}}class Ue{constructor(e,t){this[ne]={frame:e,offsetSpace:t}}getPose(e){return this[ne].frame.getPose(this[ne].offsetSpace,e)}createAnchor(){return this[ne].frame.createAnchor(new De,this[ne].offsetSpace)}}class Xe extends Event{constructor(e,t){if(super(e,t),!t.session)throw new Error("XRInputSourcesChangeEventInit.session is required");if(!t.added)throw new Error("XRInputSourcesChangeEventInit.added is required");if(!t.removed)throw new Error("XRInputSourcesChangeEventInit.removed is required");this.session=t.session,this.added=t.added,this.removed=t.removed}}var Ge,qe,ze;!function(e){e.Viewer="viewer",e.Local="local",e.LocalFloor="local-floor",e.BoundedFloor="bounded-floor",e.Unbounded="unbounded"}(qe||(qe={}));class He extends oe{constructor(e,t,r){super(t,r),this[Ge]={type:null,onreset:()=>{}},this[te].type=e}get onreset(){var e;return null!==(e=this[te].onreset)&&void 0!==e?e:()=>{}}set onreset(e){this[te].onreset&&this.removeEventListener("reset",this[te].onreset),this[te].onreset=e,e&&this.addEventListener("reset",e)}getOffsetReferenceSpace(e){return new He(this[te].type,this,e)}}Ge=te;class ke{constructor(e={},t){this[J]={depthNear:e.depthNear||(null==t?void 0:t.depthNear)||.1,depthFar:e.depthFar||(null==t?void 0:t.depthFar)||1e3,inlineVerticalFieldOfView:e.inlineVerticalFieldOfView||(null==t?void 0:t.inlineVerticalFieldOfView)||null,baseLayer:e.baseLayer||(null==t?void 0:t.baseLayer)||null}}get depthNear(){return this[J].depthNear}get depthFar(){return this[J].depthFar}get inlineVerticalFieldOfView(){return this[J].inlineVerticalFieldOfView}get baseLayer(){return this[J].baseLayer}}class je extends Event{constructor(e,t){if(super(e,t),!t.session)throw new Error("XRSessionEventInit.session is required");this.session=t.session}}!function(e){e.None="none",e.Left="left",e.Right="right"}(ze||(ze={}));class We{constructor(e,t,r,i){this[ie]={eye:e,projectionMatrix:t,transform:r,recommendedViewportScale:null,requestedViewportScale:1,session:i}}get eye(){return this[ie].eye}get projectionMatrix(){return this[ie].projectionMatrix}get transform(){return this[ie].transform}get recommendedViewportScale(){return this[ie].recommendedViewportScale}requestViewportScale(e){null===e||e<=0||e>1?console.warn("Invalid scale value. Scale must be > 0 and <= 1."):this[ie].requestedViewportScale=e}}class Ye{constructor(e,t=!1,r=void 0,i=void 0){this[Q]={transform:e,emulatedPosition:t,linearVelocity:r,angularVelocity:i}}get transform(){return this[Q].transform}get emulatedPosition(){return this[Q].emulatedPosition}get linearVelocity(){return this[Q].linearVelocity}get angularVelocity(){return this[Q].angularVelocity}}class Qe extends Ye{constructor(e,t,r=!1,i=void 0,s=void 0){super(e,r,i,s),this[Y]={radius:t}}get radius(){return this[Y].radius}}class Ke extends Ye{constructor(e,t,r=!1,i=void 0,s=void 0){super(e,r,i,s),this[K]={views:Object.freeze(t)}}get views(){return this[K].views}}const $e=i(),Je=i(),Ze=i(),et=(e,t,r)=>{le.calculateGlobalOffsetMatrix(t,$e),le.calculateGlobalOffsetMatrix(r,Je),n(Ze,Je),o(e,Ze,$e)};class tt{constructor(e,t,r,s,a){this[G]={session:e,id:t,active:r,animationFrame:s,predictedDisplayTime:a,tempMat4:i(),detectedPlanes:new Fe,detectedMeshes:new _e,trackedAnchors:e[Z].frameTrackedAnchors,hitTestResultsMap:new Map}}get session(){return this[G].session}get predictedDisplayTime(){return this[G].predictedDisplayTime}getPose(e,t){if(!this[G].active)throw new DOMException("XRFrame access outside the callback that produced it is invalid.","InvalidStateError");et(this[G].tempMat4,e,t);const r=m();u(r,this[G].tempMat4);const i=b();return p(i,this[G].tempMat4),new Ye(new De({x:r[0],y:r[1],z:r[2],w:1},{x:i[0],y:i[1],z:i[2],w:i[3]}),e[re].emulated)}getViewerPose(e){if(!this[G].animationFrame)throw new DOMException("getViewerPose can only be called on XRFrame objects passed to XRSession.requestAnimationFrame callbacks.","InvalidStateError");const t=this[G].session,r=t[Z].device,i=this.getPose(r.viewerSpace,e),s="inline"===t[Z].mode?[ze.None]:[ze.Left,ze.Right],a=[];return s.forEach((i=>{const s=r.viewSpaces[i],n=this.getPose(s,e),o=t[Z].getProjectionMatrix(i),h=new We(i,new Float32Array(o),n.transform,t);a.push(h)})),new Ke(i.transform,a,!1)}getJointPose(e,t){const r=this.getPose(e,t),i=e[ee].radius;return new Qe(r.transform,i,!1)}fillJointRadii(e,t){if(e=Array.from(e),!this[G].active)throw new DOMException("XRFrame access outside the callback that produced it is invalid.","InvalidStateError");if(e.length>t.length)throw new DOMException("The length of jointSpaces is larger than the number of elements in radii","TypeError");let r=!0;for(let i=0;i<e.length;i++)e[i][ee].radius?t[i]=e[i][ee].radius:(t[i]=NaN,r=!1);return r}fillPoses(e,t,r){if(e=Array.from(e),!this[G].active)throw new DOMException("XRFrame access outside the callback that produced it is invalid.","InvalidStateError");if(16*e.length>r.length)throw new DOMException("The length of spaces multiplied by 16 is larger than the number of elements in transforms","TypeError");return e.forEach(((e,i)=>{et(this[G].tempMat4,e,t);for(let e=0;e<16;e++)r[16*i+e]=this[G].tempMat4[e]})),!0}get detectedPlanes(){if(!this[G].active)throw new DOMException("XRFrame access outside the callback that produced it is invalid.","InvalidStateError");return this[G].detectedPlanes}get detectedMeshes(){if(!this[G].active)throw new DOMException("XRFrame access outside the callback that produced it is invalid.","InvalidStateError");return this[G].detectedMeshes}get trackedAnchors(){if(!this[G].active)throw new DOMException("XRFrame access outside the callback that produced it is invalid.","InvalidStateError");return this[G].trackedAnchors}createAnchor(e,t){return new Promise(((r,i)=>{if(this[G].active){const s=this[G].session[Z].device[V].globalSpace,a=new oe(t,e.matrix),n=le.calculateGlobalOffsetMatrix(a),o=new oe(s,n),h=new Ie(o,this[G].session);this[G].session[Z].trackedAnchors.add(h),this[G].session[Z].newAnchors.set(h,{resolve:r,reject:i})}else i(new DOMException("XRFrame access outside the callback that produced it is invalid.","InvalidStateError"))}))}getHitTestResults(e){if(this[G].active){if(this[G].hitTestResultsMap.has(e))return[...this[G].hitTestResultsMap.get(e)];throw new DOMException("Requested hit test results are not available for current frame.","InvalidStateError")}throw new DOMException("XRFrame access outside the callback that produced it is invalid.","InvalidStateError")}}var rt,it,st;!function(e){e.Opaque="opaque",e.AlphaBlend="alpha-blend",e.Additive="additive"}(rt||(rt={})),function(e){e.ScreenSpace="screen-space",e.WorldSpace="world-space"}(it||(it={}));class at extends EventTarget{constructor(e,t,r){super(),this[Z]={device:e,mode:t,renderState:new ke,pendingRenderState:null,enabledFeatures:r,isSystemKeyboardSupported:!1,ended:!1,projectionMatrices:{[ze.Left]:i(),[ze.Right]:i(),[ze.None]:i()},getProjectionMatrix:e=>this[Z].projectionMatrices[e],referenceSpaceIsSupported:e=>{if(!this[Z].enabledFeatures.includes(e))return!1;switch(e){case qe.Viewer:return!0;case qe.Local:case qe.LocalFloor:case qe.BoundedFloor:case qe.Unbounded:return"inline"!=this[Z].mode}},frameHandle:0,frameCallbacks:[],currentFrameCallbacks:null,onDeviceFrame:()=>{if(this[Z].ended)return;this[Z].deviceFrameHandle=globalThis.requestAnimationFrame(this[Z].onDeviceFrame),null!=this[Z].pendingRenderState&&(this[Z].renderState=this[Z].pendingRenderState,this[Z].pendingRenderState=null,this[Z].device[V].onBaseLayerSet(this[Z].renderState.baseLayer));const e=this[Z].renderState.baseLayer;if(null===e)return;const t=e.context,r=t.canvas;if("inline"!=this[Z].mode){const e=t.getParameter(t.COLOR_CLEAR_VALUE),r=t.getParameter(t.DEPTH_CLEAR_VALUE),i=t.getParameter(t.STENCIL_CLEAR_VALUE);t.clearColor(0,0,0,0),t.clearDepth(1),t.clearStencil(0),t.clear(t.DEPTH_BUFFER_BIT|t.COLOR_BUFFER_BIT|t.STENCIL_BUFFER_BIT),t.clearColor(e[0],e[1],e[2],e[3]),t.clearDepth(r),t.clearStencil(i)}const{depthNear:i,depthFar:s}=this[Z].renderState,{width:n,height:o}=r;if("inline"!==this[Z].mode){const e=n*(this[Z].device.stereoEnabled?.5:1)/o;f(this[Z].projectionMatrices[ze.Left],this[Z].device.fovy,e,i,s),a(this[Z].projectionMatrices[ze.Right],this[Z].projectionMatrices[ze.Left])}else{const e=n/o;f(this[Z].projectionMatrices[ze.None],this[Z].renderState.inlineVerticalFieldOfView,e,i,s)}const h=new tt(this,this[Z].frameHandle,!0,!0,performance.now()),l=performance.now(),c=this[Z].device[V].devui;if(c&&c.render(l),"immersive-ar"===this[Z].mode){const e=this[Z].device[V].sem;e&&e.render(l)}this[Z].enabledFeatures.includes("anchors")&&this[Z].updateTrackedAnchors(),this[Z].enabledFeatures.includes("plane-detection")&&this[Z].updateTrackedPlanes(h),this[Z].enabledFeatures.includes("mesh-detection")&&this[Z].updateTrackedMeshes(h),this[Z].enabledFeatures.includes("hit-test")&&this[Z].computeHitTestResults(h),this[Z].device[V].onFrameStart(h),this[Z].updateActiveInputSources();const u=this[Z].currentFrameCallbacks=this[Z].frameCallbacks;this[Z].frameCallbacks=[];const d=performance.now();for(let e=0;e<u.length;e++)try{u[e].cancelled||u[e].callback(d,h)}catch(e){console.error(e)}this[Z].currentFrameCallbacks=null,h[G].active=!1},nominalFrameRate:e.internalNominalFrameRate,referenceSpaces:[],inputSourceArray:[],activeInputSources:[],updateActiveInputSources:()=>{const e=this[Z].enabledFeatures.includes("hand-tracking"),t=this[Z].activeInputSources,r=this[Z].device.inputSources.filter((t=>!t.hand||e)),i=r.filter((e=>!t.includes(e))),s=t.filter((e=>!r.includes(e)));this[Z].activeInputSources=r,(i.length>0||s.length>0)&&this.dispatchEvent(new Xe("inputsourceschange",{session:this,added:i,removed:s}))},trackedAnchors:new Le,persistentAnchors:new Map,newAnchors:new Map,frameTrackedAnchors:new Le,updateTrackedAnchors:()=>{this[Z].enabledFeatures.includes("anchors")&&(this[Z].frameTrackedAnchors.clear(),Array.from(this[Z].trackedAnchors).forEach((e=>{if(e[O].deleted){if(this[Z].trackedAnchors.delete(e),this[Z].newAnchors.has(e)){const{reject:t}=this[Z].newAnchors.get(e);t(new DOMException("Anchor is no longer tracked","InvalidStateError"))}}else if(this[Z].frameTrackedAnchors.add(e),this[Z].newAnchors.has(e)){const{resolve:t}=this[Z].newAnchors.get(e);t(e),this[Z].newAnchors.delete(e)}})))},trackedPlanes:new Map,updateTrackedPlanes:e=>{const t=this[Z].device[V].sem;if(!t)return;Array.from(this[Z].trackedPlanes.keys()).forEach((e=>{t.trackedPlanes.has(e)||this[Z].trackedPlanes.delete(e)})),t.trackedPlanes.forEach((t=>{let r=this[Z].trackedPlanes.get(t);if(!r){const e=new oe(this[Z].device[V].globalSpace,t.transform.matrix);r=new Pe(t,e,t.polygon,t.semanticLabel),this[Z].trackedPlanes.set(t,r)}r[W].lastChangedTime=e.predictedDisplayTime,r[W].frame=e,e[G].detectedPlanes.add(r)}))},trackedMeshes:new Map,updateTrackedMeshes:e=>{const t=this[Z].device[V].sem;if(!t)return;Array.from(this[Z].trackedMeshes.keys()).forEach((e=>{t.trackedMeshes.has(e)||this[Z].trackedMeshes.delete(e)})),t.trackedMeshes.forEach((t=>{let r=this[Z].trackedMeshes.get(t);if(!r){const e=new oe(this[Z].device[V].globalSpace,t.transform.matrix);r=new Ee(t,e,t.vertices,t.indices,t.semanticLabel),this[Z].trackedMeshes.set(t,r)}r[j].lastChangedTime=e.predictedDisplayTime,r[j].frame=e,e[G].detectedMeshes.add(r)}))},hitTestSources:new Set,computeHitTestResults:e=>{const t=this[Z].device[V].sem;if(!t)return;const r=this[Z].device[V].globalSpace;this[Z].hitTestSources.forEach((s=>{const a=s[ne].space,n=le.calculateGlobalOffsetMatrix(a),h=s[ne].offsetRay.matrix,l=i();o(l,n,h);const c=[];t.computeHitTestResults(l).forEach((t=>{const i=new oe(r,t),s=new Ue(e,i);c.push(s)})),e[G].hitTestResultsMap.set(s,c)}))},onend:null,oninputsourceschange:null,onselect:null,onselectstart:null,onselectend:null,onsqueeze:null,onsqueezestart:null,onsqueezeend:null,onvisibilitychange:null,onframeratechange:null},Ne.recoverPersistentAnchorsFromStorage(this),this[Z].onDeviceFrame()}get visibilityState(){return this[Z].device.visibilityState}get frameRate(){return this[Z].nominalFrameRate}get supportedFrameRates(){return new Float32Array(this[Z].device.supportedFrameRates)}get renderState(){return this[Z].renderState}get inputSources(){return this[Z].inputSourceArray.length=0,this[Z].ended||"inline"===this[Z].mode||this[Z].inputSourceArray.push(...this[Z].activeInputSources),this[Z].inputSourceArray}get enabledFeatures(){return this[Z].enabledFeatures}get isSystemKeyboardSupported(){return this[Z].isSystemKeyboardSupported}get environmentBlendMode(){var e;return null!==(e=this[Z].device[V].environmentBlendModes[this[Z].mode])&&void 0!==e?e:rt.Opaque}get interactionMode(){return this[Z].device[V].interactionMode}updateRenderState(e={}){var t,r,i,s;if(this[Z].ended)throw new DOMException("XRSession has already ended.","InvalidStateError");if(e.baseLayer&&e.baseLayer[k].session!==this)throw new DOMException("Base layer was created by a different XRSession","InvalidStateError");if(null!=e.inlineVerticalFieldOfView&&"inline"!==this[Z].mode)throw new DOMException("InlineVerticalFieldOfView must not be set for an immersive session","InvalidStateError");const a={baseLayer:e.baseLayer||(null===(t=this[Z].pendingRenderState)||void 0===t?void 0:t.baseLayer)||void 0,depthFar:e.depthFar||(null===(r=this[Z].pendingRenderState)||void 0===r?void 0:r.depthFar)||void 0,depthNear:e.depthNear||(null===(i=this[Z].pendingRenderState)||void 0===i?void 0:i.depthNear)||void 0,inlineVerticalFieldOfView:e.inlineVerticalFieldOfView||(null===(s=this[Z].pendingRenderState)||void 0===s?void 0:s.inlineVerticalFieldOfView)||void 0};this[Z].pendingRenderState=new ke(a,this[Z].renderState)}async updateTargetFrameRate(e){return new Promise(((t,r)=>{this[Z].ended?r(new DOMException("XRSession has already ended.","InvalidStateError")):this[Z].device.supportedFrameRates.includes(e)?(this[Z].nominalFrameRate===e?console.log("Requested frame rate is the same as the current nominal frame rate, no update made"):(this[Z].nominalFrameRate=e,this.dispatchEvent(new je("frameratechange",{session:this})),console.log(`Nominal frame rate updated to ${e}`)),t()):r(new DOMException("Requested frame rate not supported.","InvalidStateError"))}))}async requestReferenceSpace(e){return new Promise(((t,r)=>{if(this[Z].ended||!this[Z].referenceSpaceIsSupported(e))return void r(new DOMException("The requested reference space type is not supported.","NotSupportedError"));let i;switch(e){case qe.Viewer:i=this[Z].device.viewerSpace;break;case qe.Local:i=new He(e,this[Z].device[V].globalSpace,this[Z].device.viewerSpace[re].offsetMatrix);break;case qe.LocalFloor:case qe.BoundedFloor:case qe.Unbounded:i=new He(e,this[Z].device[V].globalSpace)}this[Z].referenceSpaces.push(i),t(i)}))}requestAnimationFrame(e){if(this[Z].ended)return 0;const t=++this[Z].frameHandle;return this[Z].frameCallbacks.push({handle:t,callback:e,cancelled:!1}),t}cancelAnimationFrame(e){let t=this[Z].frameCallbacks,r=t.findIndex((t=>t&&t.handle===e));r>-1&&(t[r].cancelled=!0,t.splice(r,1)),t=this[Z].currentFrameCallbacks,t&&(r=t.findIndex((t=>t&&t.handle===e)),r>-1&&(t[r].cancelled=!0))}async end(){return new Promise(((e,t)=>{this[Z].ended||null===this[Z].deviceFrameHandle?t(new DOMException("XRSession has already ended.","InvalidStateError")):(globalThis.cancelAnimationFrame(this[Z].deviceFrameHandle),this[Z].device[V].onSessionEnd(),this.dispatchEvent(new je("end",{session:this})),e())}))}get persistentAnchors(){return Array.from(this[Z].persistentAnchors.keys())}restorePersistentAnchor(e){return new Promise(((t,r)=>{if(this[Z].persistentAnchors.has(e))if(this[Z].ended)r(new DOMException("XRSession has already ended.","InvalidStateError"));else{const i=this[Z].persistentAnchors.get(e);this[Z].newAnchors.has(i)?r(new DOMException(`Multiple concurrent attempts detected to restore the anchor with UUID: ${e}.`,"InvalidStateError")):(this[Z].trackedAnchors.add(i),this[Z].newAnchors.set(i,{resolve:t,reject:r}))}else r(new DOMException(`Persistent anchor with uuid ${e} not found.`,"InvalidStateError"))}))}deletePersistentAnchor(e){return new Promise(((t,r)=>{if(this[Z].persistentAnchors.has(e)){const r=this[Z].persistentAnchors.get(e);this[Z].persistentAnchors.delete(e),r.delete(),t(void 0)}else r(new DOMException(`Persistent anchor with uuid ${e} not found.`,"InvalidStateError"))}))}requestHitTestSource(e){return new Promise(((t,r)=>{if(this[Z].enabledFeatures.includes("hit-test"))if(this[Z].ended)r(new DOMException("XRSession has already ended.","InvalidStateError"));else if(this[Z].device[V].sem){const r=new Ve(this,e);this[Z].hitTestSources.add(r),t(r)}else r(new DOMException("Synthethic Environment Module required for emulating hit-test","OperationError"));else r(new DOMException('WebXR feature "hit-test" is not supported by current session',"NotSupportedError"))}))}get onend(){var e;return null!==(e=this[Z].onend)&&void 0!==e?e:()=>{}}set onend(e){this[Z].onend&&this.removeEventListener("end",this[Z].onend),this[Z].onend=e,e&&this.addEventListener("end",e)}get oninputsourceschange(){var e;return null!==(e=this[Z].oninputsourceschange)&&void 0!==e?e:()=>{}}set oninputsourceschange(e){this[Z].oninputsourceschange&&this.removeEventListener("inputsourceschange",this[Z].oninputsourceschange),this[Z].oninputsourceschange=e,e&&this.addEventListener("inputsourceschange",e)}get onselect(){var e;return null!==(e=this[Z].onselect)&&void 0!==e?e:()=>{}}set onselect(e){this[Z].onselect&&this.removeEventListener("select",this[Z].onselect),this[Z].onselect=e,e&&this.addEventListener("select",e)}get onselectstart(){var e;return null!==(e=this[Z].onselectstart)&&void 0!==e?e:()=>{}}set onselectstart(e){this[Z].onselectstart&&this.removeEventListener("selectstart",this[Z].onselectstart),this[Z].onselectstart=e,e&&this.addEventListener("selectstart",e)}get onselectend(){var e;return null!==(e=this[Z].onselectend)&&void 0!==e?e:()=>{}}set onselectend(e){this[Z].onselectend&&this.removeEventListener("selectend",this[Z].onselectend),this[Z].onselectend=e,e&&this.addEventListener("selectend",e)}get onsqueeze(){var e;return null!==(e=this[Z].onsqueeze)&&void 0!==e?e:()=>{}}set onsqueeze(e){this[Z].onsqueeze&&this.removeEventListener("squeeze",this[Z].onsqueeze),this[Z].onsqueeze=e,e&&this.addEventListener("squeeze",e)}get onsqueezestart(){var e;return null!==(e=this[Z].onsqueezestart)&&void 0!==e?e:()=>{}}set onsqueezestart(e){this[Z].onsqueezestart&&this.removeEventListener("squeezestart",this[Z].onsqueezestart),this[Z].onsqueezestart=e,e&&this.addEventListener("squeezestart",e)}get onsqueezeend(){var e;return null!==(e=this[Z].onsqueezeend)&&void 0!==e?e:()=>{}}set onsqueezeend(e){this[Z].onsqueezeend&&this.removeEventListener("squeezeend",this[Z].onsqueezeend),this[Z].onsqueezeend=e,e&&this.addEventListener("squeezeend",e)}get onvisibilitychange(){var e;return null!==(e=this[Z].onvisibilitychange)&&void 0!==e?e:()=>{}}set onvisibilitychange(e){this[Z].onvisibilitychange&&this.removeEventListener("visibilitychange",this[Z].onvisibilitychange),this[Z].onvisibilitychange=e,e&&this.addEventListener("visibilitychange",e)}get onframeratechange(){var e;return null!==(e=this[Z].onframeratechange)&&void 0!==e?e:()=>{}}set onframeratechange(e){this[Z].onframeratechange&&this.removeEventListener("frameratechange",this[Z].onframeratechange),this[Z].onframeratechange=e,e&&this.addEventListener("frameratechange",e)}}!function(e){e.Wrist="wrist",e.ThumbMetacarpal="thumb-metacarpal",e.ThumbPhalanxProximal="thumb-phalanx-proximal",e.ThumbPhalanxDistal="thumb-phalanx-distal",e.ThumbTip="thumb-tip",e.IndexFingerMetacarpal="index-finger-metacarpal",e.IndexFingerPhalanxProximal="index-finger-phalanx-proximal",e.IndexFingerPhalanxIntermediate="index-finger-phalanx-intermediate",e.IndexFingerPhalanxDistal="index-finger-phalanx-distal",e.IndexFingerTip="index-finger-tip",e.MiddleFingerMetacarpal="middle-finger-metacarpal",e.MiddleFingerPhalanxProximal="middle-finger-phalanx-proximal",e.MiddleFingerPhalanxIntermediate="middle-finger-phalanx-intermediate",e.MiddleFingerPhalanxDistal="middle-finger-phalanx-distal",e.MiddleFingerTip="middle-finger-tip",e.RingFingerMetacarpal="ring-finger-metacarpal",e.RingFingerPhalanxProximal="ring-finger-phalanx-proximal",e.RingFingerPhalanxIntermediate="ring-finger-phalanx-intermediate",e.RingFingerPhalanxDistal="ring-finger-phalanx-distal",e.RingFingerTip="ring-finger-tip",e.PinkyFingerMetacarpal="pinky-finger-metacarpal",e.PinkyFingerPhalanxProximal="pinky-finger-phalanx-proximal",e.PinkyFingerPhalanxIntermediate="pinky-finger-phalanx-intermediate",e.PinkyFingerPhalanxDistal="pinky-finger-phalanx-distal",e.PinkyFingerTip="pinky-finger-tip"}(st||(st={}));class nt extends Map{}class ot extends oe{constructor(e,t,r){super(t,r),this[ee]={jointName:e,radius:0}}get jointName(){return this[ee].jointName}}const ht={profileId:"oculus-hand",fallbackProfileIds:["generic-hand","generic-hand-select","generic-trigger"],poses:{default:{jointTransforms:{wrist:{offsetMatrix:[.9616971015930176,-.13805118203163147,.2368120402097702,0,.0005348679260350764,.8648636937141418,.5020061135292053,0,-.2741127610206604,-.48265108466148376,.8318111300468445,0,-.04913589730858803,.0021463718730956316,.11701996624469757,1],radius:.021460847929120064},"thumb-metacarpal":{offsetMatrix:[-.07536252588033676,-.9959676265716553,-.04867160692811012,0,.5877083539962769,-.08379616588354111,.8047218918800354,0,-.8055551648139954,.032041035592556,.5916536450386047,0,-.010643752291798592,.0006936835707165301,.08736639469861984,1],radius:.019382517784833908},"thumb-phalanx-proximal":{offsetMatrix:[.1374533325433731,-.9904957413673401,.004982374142855406,0,.5534393787384033,.08097179979085922,.8289443850517273,0,-.8214688897132874,-.11118389666080475,.559309184551239,0,.015547193586826324,-.0003480653394944966,.0681300163269043,1],radius:.01228295173496008},"thumb-phalanx-distal":{offsetMatrix:[-.04659227654337883,-.9974699020385742,-.05369402840733528,0,.6812446117401123,-.07104194164276123,.728600800037384,0,-.7305715084075928,-.002631746232509613,.6828309893608093,0,.04330715537071228,.003409178927540779,.0492292083799839,1],radius:.009768804535269737},"thumb-tip":{offsetMatrix:[-.04659227654337883,-.9974699020385742,-.05369402840733528,0,.6812446117401123,-.07104194164276123,.728600800037384,0,-.7305715084075928,-.002631746232509613,.6828309893608093,0,.062003348022699356,.004069602582603693,.03322213143110275,1],radius:.008768804371356964},"index-finger-metacarpal":{offsetMatrix:[.9616971015930176,-.13805118203163147,.2368120402097702,0,.0005348679260350764,.8648636937141418,.5020061135292053,0,-.2741127610206604,-.48265108466148376,.8318111300468445,0,-.02009812369942665,.008770795539021492,.08660387247800827,1],radius:.021228281781077385},"index-finger-phalanx-proximal":{offsetMatrix:[.9001791477203369,-.2598813474178314,.3494834005832672,0,.06073702871799469,.8695210218429565,.490146666765213,0,-.4312632381916046,-.41999316215515137,.7985095381736755,0,-.00017739279428496957,.03890012577176094,.039073407649993896,1],radius:.010295259766280651},"index-finger-phalanx-intermediate":{offsetMatrix:[.9082008600234985,-.20898112654685974,.36262574791908264,0,.11045389622449875,.9553793668746948,.27395179867744446,0,-.40369608998298645,-.20874978601932526,.8907597661018372,0,.01617925800383091,.05482936650514603,.008788082748651505,1],radius:.00853810179978609},"index-finger-phalanx-distal":{offsetMatrix:[.9309692978858948,-.16783711314201355,.32423174381256104,0,.1080828532576561,.9749603867530823,.1943446695804596,0,-.34873148798942566,-.14588497579097748,.9257990717887878,0,.02599053829908371,.059902746230363846,-.012860597111284733,1],radius:.007636196445673704},"index-finger-tip":{offsetMatrix:[.9309692978858948,-.16783711314201355,.32423174381256104,0,.1080828532576561,.9749603867530823,.1943446695804596,0,-.34873148798942566,-.14588497579097748,.9257990717887878,0,.03362493962049484,.06421422213315964,-.033461250364780426,1],radius:.006636196281760931},"middle-finger-metacarpal":{offsetMatrix:[.9616971015930176,-.13805118203163147,.2368120402097702,0,.0005348679260350764,.8648636937141418,.5020061135292053,0,-.2741127610206604,-.48265108466148376,.8318111300468445,0,-.03627845644950867,.011579737067222595,.08550142496824265,1],radius:.021231964230537415},"middle-finger-phalanx-proximal":{offsetMatrix:[.9876697659492493,-.06786545366048813,.1410750150680542,0,-.015095947310328484,.855663537979126,.5173118710517883,0,-.15582047402858734,-.5130629539489746,.8440889716148376,0,-.021259509027004242,.04587256908416748,.03659208118915558,1],radius:.01117393933236599},"middle-finger-phalanx-intermediate":{offsetMatrix:[.988391637802124,-.04354291781783104,.14555205404758453,0,.008894841186702251,.9729899168014526,.23067504167556763,0,-.15166506171226501,-.22670257091522217,.9620829224586487,0,-.014570588245987892,.06789684295654297,.0003578895702958107,1],radius:.008030958473682404},"middle-finger-phalanx-distal":{offsetMatrix:[.9853697419166565,.044260796159505844,.16458062827587128,0,-.0757969319820404,.9787378311157227,.19059516489505768,0,-.1526455283164978,-.20028135180473328,.9677740931510925,0,-.010392282158136368,.07414241135120392,-.026147106662392616,1],radius:.007629410829395056},"middle-finger-tip":{offsetMatrix:[.9853697419166565,.044260796159505844,.16458062827587128,0,-.0757969319820404,.9787378311157227,.19059516489505768,0,-.1526455283164978,-.20028135180473328,.9677740931510925,0,-.0069718430750072,.08024183660745621,-.05014154314994812,1],radius:.006629410665482283},"ring-finger-metacarpal":{offsetMatrix:[.9616971015930176,-.13805118203163147,.2368120402097702,0,.0005348679260350764,.8648636937141418,.5020061135292053,0,-.2741127610206604,-.48265108466148376,.8318111300468445,0,-.05402477830648422,.015797706320881844,.08152295649051666,1],radius:.019088275730609894},"ring-finger-phalanx-proximal":{offsetMatrix:[.9940828680992126,.05735103040933609,.09224652498960495,0,-.10022822767496109,.8116500377655029,.5754809379577637,0,-.041867565363645554,-.5813214182853699,.8125960826873779,0,-.041623555123806,.04171867296099663,.03582974523305893,1],radius:.00992213748395443},"ring-finger-phalanx-intermediate":{offsetMatrix:[.9843675494194031,.12044742703437805,.12850022315979004,0,-.15629759430885315,.9337108135223389,.3221098482608795,0,-.08118485659360886,-.3371586799621582,.937940776348114,0,-.039990875869989395,.06438793987035751,.004141641780734062,1],radius:.007611672393977642},"ring-finger-phalanx-distal":{offsetMatrix:[.9748351573944092,.11857274919748306,.18877571821212769,0,-.15575434267520905,.9681083559989929,.19623035192489624,0,-.15948788821697235,-.22069483995437622,.9622148275375366,0,-.03783353418111801,.07334739714860916,-.020782606676220894,1],radius:.007231088820844889},"ring-finger-tip":{offsetMatrix:[.9748351573944092,.11857274919748306,.18877571821212769,0,-.15575434267520905,.9681083559989929,.19623035192489624,0,-.15948788821697235,-.22069483995437622,.9622148275375366,0,-.03445569798350334,.0802423357963562,-.04392268508672714,1],radius:.0062310886569321156},"pinky-finger-metacarpal":{offsetMatrix:[.9181402921676636,.35625091195106506,.17350243031978607,0,-.39615097641944885,.8352503180503845,.38134080171585083,0,-.009065053425729275,-.41885748505592346,.9080066680908203,0,-.06191859766840935,.013620133511722088,.07850203663110733,1],radius:.01808827556669712},"pinky-finger-phalanx-proximal":{offsetMatrix:[.9714386463165283,.236698180437088,-.016745081171393394,0,-.18462024629116058,.7982627749443054,.5733163952827454,0,.14906984567642212,-.5538501739501953,.8191629648208618,0,-.061502378433942795,.032741155475378036,.03705105185508728,1],radius:.008483353070914745},"pinky-finger-phalanx-intermediate":{offsetMatrix:[.9337416291236877,.35620439052581787,-.03527557849884033,0,-.33203884959220886,.8987522721290588,.28634607791900635,0,.13370157778263092,-.2556603252887726,.9574766755104065,0,-.06608185172080994,.049755651503801346,.011886020191013813,1],radius:.0067641944624483585},"pinky-finger-phalanx-distal":{offsetMatrix:[.9419984817504883,.3303581774234772,.059175245463848114,0,-.33483216166496277,.9130291938781738,.23294763267040253,0,.02292730286717415,-.2392500638961792,.970687210559845,0,-.0687975287437439,.054948460310697556,-.007561664097011089,1],radius:.0064259846694767475},"pinky-finger-tip":{offsetMatrix:[.9419984817504883,.3303581774234772,.059175245463848114,0,-.33483216166496277,.9130291938781738,.23294763267040253,0,.02292730286717415,-.2392500638961792,.970687210559845,0,-.06947512179613113,.0613851435482502,-.028543535619974136,1],radius:.005425984505563974}},gripOffsetMatrix:[-.0005348679260350764,-.8648636937141418,-.5020061135292053,0,-.2741127908229828,-.48265108466148376,.8318111896514893,0,-.9616971015930176,.13805119693279266,-.2368120402097702,0,-.02878567762672901,.0017147823236882687,.04536811262369156,1]},pinch:{jointTransforms:{wrist:{offsetMatrix:[.9060805439949036,-.1844543218612671,.3807799518108368,0,-.08027800172567368,.8086723685264587,.5827555656433105,0,-.4154181182384491,-.5585917234420776,.7179155349731445,0,-.06867414712905884,-.009423808194696903,.10627774149179459,1],radius:.021460847929120064},"thumb-metacarpal":{offsetMatrix:[-.5012241005897522,-.8650535345077515,-.0213695727288723,0,.7415963411331177,-.4421543478965759,.5045139193534851,0,-.44587990641593933,.23702676594257355,.8631392121315002,0,-.032122574746608734,-.01196830440312624,.07194234430789948,1],radius:.019382517784833908},"thumb-phalanx-proximal":{offsetMatrix:[-.3175753057003021,-.9460570216178894,-.06419729441404343,0,.8958902955055237,-.32153913378715515,.30658137798309326,0,-.3106854259967804,.03984907269477844,.9496771097183228,0,-.017625702545046806,-.01967475935816765,.04387917369604111,1],radius:.01228295173496008},"thumb-phalanx-distal":{offsetMatrix:[-.4944636821746826,-.8691971898078918,.001086252392269671,0,.8307800889015198,-.4722411036491394,.2946045398712158,0,-.25555649399757385,.14657381176948547,.9556186199188232,0,-.007126678712666035,-.021021386608481407,.011786630377173424,1],radius:.009768804535269737},"thumb-tip":{offsetMatrix:[-.4944636821746826,-.8691971898078918,.001086252392269671,0,.8307800889015198,-.4722411036491394,.2946045398712158,0,-.25555649399757385,.14657381176948547,.9556186199188232,0,.0003423091256991029,-.024528030306100845,-.011410919018089771,1],radius:.008768804371356964},"index-finger-metacarpal":{offsetMatrix:[.9060805439949036,-.1844543218612671,.3807799518108368,0,-.08027800172567368,.8086723685264587,.5827555656433105,0,-.4154181182384491,-.5585917234420776,.7179155349731445,0,-.038037415593862534,-.0020236473064869642,.07626739144325256,1],radius:.021228281781077385},"index-finger-phalanx-proximal":{offsetMatrix:[.7986818552017212,-.35985732078552246,.48229536414146423,0,.538311243057251,.7854709625244141,-.30537736415863037,0,-.2689369022846222,.5035246014595032,.8210577368736267,0,-.006869405973702669,.033938243985176086,.04206443578004837,1],radius:.010295259766280651},"index-finger-phalanx-intermediate":{offsetMatrix:[.8285930156707764,-.32672837376594543,.4546217918395996,0,.5577570199966431,.4116027057170868,-.7207564115524292,0,.04836784675717354,.8507823944091797,.5232869386672974,0,.0033306588884443045,.014840902760624886,.010923954658210278,1],radius:.00853810179978609},"index-finger-phalanx-distal":{offsetMatrix:[.8412464261054993,-.35794928669929504,.4051857888698578,0,.5139996409416199,.29711154103279114,-.8046918511390686,0,.16765329241752625,.8852096796035767,.4339304566383362,0,.0021551470272243023,-.0058362227864563465,-.0017938464879989624,1],radius:.007636196445673704},"index-finger-tip":{offsetMatrix:[.8412464261054993,-.35794928669929504,.4051857888698578,0,.5139996409416199,.29711154103279114,-.8046918511390686,0,.16765329241752625,.8852096796035767,.4339304566383362,0,-.00131594471167773,-.025222131982445717,-.012442642822861671,1],radius:.006636196281760931},"middle-finger-metacarpal":{offsetMatrix:[.9060805439949036,-.1844543218612671,.3807799518108368,0,-.08027800172567368,.8086723685264587,.5827555656433105,0,-.4154181182384491,-.5585917234420776,.7179155349731445,0,-.05395089089870453,.003063359996303916,.07402937114238739,1],radius:.021231964230537415},"middle-finger-phalanx-proximal":{offsetMatrix:[.9187911748886108,-.1530158370733261,.36387869715690613,0,.038666240870952606,.9522662162780762,.302808940410614,0,-.3928440511226654,-.26414817571640015,.8808513283729553,0,-.02717282809317112,.04162866622209549,.03678669035434723,1],radius:.01117393933236599},"middle-finger-phalanx-intermediate":{offsetMatrix:[.9228746294975281,-.12856416404247284,.36300456523895264,0,.14524033665657043,.9892153143882751,-.01890045404434204,0,-.3566599190235138,.07016586512327194,.9315956234931946,0,-.01030921470373869,.05296773463487625,-.0010256498353555799,1],radius:.008030958473682404},"middle-finger-phalanx-distal":{offsetMatrix:[.9325166344642639,-.040404170751571655,.35885775089263916,0,.06836572289466858,.995502769947052,-.0655682161450386,0,-.3545948565006256,.08567725121974945,.9310863614082336,0,-.0004833847051486373,.05103470757603645,-.026690717786550522,1],radius:.007629410829395056},"middle-finger-tip":{offsetMatrix:[.9325166344642639,-.040404170751571655,.35885775089263916,0,.06836572289466858,.995502769947052,-.0655682161450386,0,-.3545948565006256,.08567725121974945,.9310863614082336,0,.008158999495208263,.05004044249653816,-.050120558589696884,1],radius:.006629410665482283},"ring-finger-metacarpal":{offsetMatrix:[.9060805439949036,-.1844543218612671,.3807799518108368,0,-.08027800172567368,.8086723685264587,.5827555656433105,0,-.4154181182384491,-.5585917234420776,.7179155349731445,0,-.06732909381389618,.007902119308710098,.07209732383489609,1],radius:.019088275730609894},"ring-finger-phalanx-proximal":{offsetMatrix:[.9391821026802063,-.027994679287075996,.34227466583251953,0,-.18282271921634674,.8029410243034363,.5673282742500305,0,-.2907087206840515,-.5954000353813171,.7489906549453735,0,-.047129884362220764,.03806127607822418,.032147664576768875,1],radius:.00992213748395443},"ring-finger-phalanx-intermediate":{offsetMatrix:[.9249380826950073,.03699534013867378,.3783116042613983,0,-.12898847460746765,.9667453765869141,.2208271026611328,0,-.3575615882873535,-.25304901599884033,.8989526629447937,0,-.03579339757561684,.06127955764532089,.002939916681498289,1],radius:.007611672393977642},"ring-finger-phalanx-distal":{offsetMatrix:[.9001164436340332,.03983335196971893,.4338230490684509,0,-.09662467986345291,.9892624020576477,.10964841395616531,0,-.4247973561286926,-.14061418175697327,.8943013548851013,0,-.026291755959391594,.06800390034914017,-.02094830758869648,1],radius:.007231088820844889},"ring-finger-tip":{offsetMatrix:[.9001164436340332,.03983335196971893,.4338230490684509,0,-.09662467986345291,.9892624020576477,.10964841395616531,0,-.4247973561286926,-.14061418175697327,.8943013548851013,0,-.016345610842108727,.07300511747598648,-.04263874143362045,1],radius:.0062310886569321156},"pinky-finger-metacarpal":{offsetMatrix:[.8769711852073669,.31462907791137695,.36322021484375,0,-.4506046175956726,.801031768321991,.39408499002456665,0,-.16696058213710785,-.5092697143554688,.8442559838294983,0,-.07460174709558487,.0062340241856873035,.06756893545389175,1],radius:.01808827556669712},"pinky-finger-phalanx-proximal":{offsetMatrix:[.9498357176780701,.1553308218717575,.2714462876319885,0,-.3019258379936218,.6817675232887268,.6663586497306824,0,-.08155745267868042,-.7148879170417786,.694466233253479,0,-.06697750836610794,.029482364654541016,.02902858518064022,1],radius:.008483353070914745},"pinky-finger-phalanx-intermediate":{offsetMatrix:[.9214097261428833,.27928245067596436,.2701927423477173,0,-.3670244514942169,.8538867831230164,.36901235580444336,0,-.12765564024448395,-.43917882442474365,.8892839550971985,0,-.06447203457355499,.05144399777054787,.0076942890882492065,1],radius:.0067641944624483585},"pinky-finger-phalanx-distal":{offsetMatrix:[.9038633704185486,.23618005216121674,.3567195236682892,0,-.3532794713973999,.8823202252388,.3109731376171112,0,-.24129553139209747,-.4070987403392792,.8809353709220886,0,-.06187915802001953,.060364335775375366,-.010368337854743004,1],radius:.0064259846694767475},"pinky-finger-tip":{offsetMatrix:[.9038633704185486,.23618005216121674,.3567195236682892,0,-.3532794713973999,.8823202252388,.3109731376171112,0,-.24129553139209747,-.4070987403392792,.8809353709220886,0,-.056796226650476456,.07042007893323898,-.02921444922685623,1],radius:.005425984505563974}},gripOffsetMatrix:[.08027800917625427,-.8086723685264587,-.5827556252479553,0,-.4154181480407715,-.5585916638374329,.7179154753684998,0,-.9060805439949036,.1844543218612671,-.3807799518108368,0,-.038054611533880234,-.002910431008785963,.03720742464065552,1]},point:{jointTransforms:{wrist:{offsetMatrix:[.9340395331382751,-.13936476409435272,.32885703444480896,0,-.005510995630174875,.914999783039093,.40341612696647644,0,-.3571262061595917,-.37861889600753784,.8538784384727478,0,-.05789132043719292,.01670890860259533,.11183350533246994,1],radius:.021460847929120064},"thumb-metacarpal":{offsetMatrix:[.02145560085773468,-.9978390336036682,.0621047280728817,0,.41311800479888916,.06541631370782852,.9083252549171448,0,-.9104245901107788,.006167683284729719,.4136286973953247,0,-.016488194465637207,.012708572670817375,.08862338215112686,1],radius:.019382517784833908},"thumb-phalanx-proximal":{offsetMatrix:[.21270370483398438,-.966137707233429,.14606566727161407,0,.49890995025634766,.2359165996313095,.8339261412620544,0,-.8401462435722351,-.10450579971075058,.5321959853172302,0,.013112368993461132,.012508046813309193,.07517509907484055,1],radius:.01228295173496008},"thumb-phalanx-distal":{offsetMatrix:[.01653280481696129,-.9986647963523865,.048943229019641876,0,.26313456892967224,.051570065319538116,.9633802771568298,0,-.9646173715591431,-.0030490627977997065,.26363563537597656,0,.04150351136922836,.016039609909057617,.05719054117798805,1],radius:.009768804535269737},"thumb-tip":{offsetMatrix:[.01653280481696129,-.9986647963523865,.048943229019641876,0,.26313456892967224,.051570065319538116,.9633802771568298,0,-.9646173715591431,-.0030490627977997065,.26363563537597656,0,.06548332422971725,.01683700829744339,.0516640841960907,1],radius:.008768804371356964},"index-finger-metacarpal":{offsetMatrix:[.9340395331382751,-.13936476409435272,.32885703444480896,0,-.005510995630174875,.914999783039093,.40341612696647644,0,-.3571262061595917,-.37861889600753784,.8538784384727478,0,-.02592567168176174,.019982583820819855,.08479326963424683,1],radius:.021228281781077385},"index-finger-phalanx-proximal":{offsetMatrix:[.9063700437545776,-.21756279468536377,.3621589243412018,0,.0970839336514473,.9415287375450134,.3226419687271118,0,-.41117796301841736,-.2572731077671051,.8744958639144897,0,-.0015709538711234927,.043078210204839706,.034657616168260574,1],radius:.010295259766280651},"index-finger-phalanx-intermediate":{offsetMatrix:[.9159826040267944,-.1651475727558136,.36565208435058594,0,.09755707532167435,.9756820797920227,.1962820291519165,0,-.3891757130622864,-.14411886036396027,.9098196625709534,0,.014023927971720695,.052835866808891296,.0014903299743309617,1],radius:.00853810179978609},"index-finger-phalanx-distal":{offsetMatrix:[.9378057718276978,-.12329639494419098,.3245268166065216,0,.032558172941207886,.9619227051734924,.2713746726512909,0,-.3456292748451233,-.2439306229352951,.9061115384101868,0,.023482320830225945,.05633850023150444,-.020621655508875847,1],radius:.007636196445673704},"index-finger-tip":{offsetMatrix:[.9378057718276978,-.12329639494419098,.3245268166065216,0,.032558172941207886,.9619227051734924,.2713746726512909,0,-.3456292748451233,-.2439306229352951,.9061115384101868,0,.03096788562834263,.06281610578298569,-.040703095495700836,1],radius:.006636196281760931},"middle-finger-metacarpal":{offsetMatrix:[.9340395331382751,-.13936476409435272,.32885703444480896,0,-.005510995630174875,.914999783039093,.40341612696647644,0,-.3571262061595917,-.37861889600753784,.8538784384727478,0,-.04184452444314957,.022474845871329308,.08177298307418823,1],radius:.021231964230537415},"middle-finger-phalanx-proximal":{offsetMatrix:[.9720265865325928,-.08313076198101044,.21966552734375,0,.20477405190467834,.7580050826072693,-.6192700862884521,0,-.11502730846405029,.6469289064407349,.7538246512413025,0,-.022107340395450592,.05035499855875969,.02970452979207039,1],radius:.01117393933236599},"middle-finger-phalanx-intermediate":{offsetMatrix:[.9779140949249268,-.07129573822021484,.19646917283535004,0,.1287083923816681,-.5352076292037964,-.8348574042320251,0,.1646735966205597,.8417060971260071,-.5142109394073486,0,-.017169542610645294,.022584279999136925,-.00265491777099669,1],radius:.008030958473682404},"middle-finger-phalanx-distal":{offsetMatrix:[.9774913787841797,-.19657190144062042,.07661263644695282,0,-.1924918293952942,-.9796126484870911,-.05749811604619026,0,.08635343611240387,.041456472128629684,-.995401918888092,0,-.02170622907578945,-.0006043742760084569,.011511396616697311,1],radius:.007629410829395056},"middle-finger-tip":{offsetMatrix:[.9774913787841797,-.19657190144062042,.07661263644695282,0,-.1924918293952942,-.9796126484870911,-.05749811604619026,0,.08635343611240387,.041456472128629684,-.995401918888092,0,-.02438267692923546,-.0026927536819130182,.03627248480916023,1],radius:.006629410665482283},"ring-finger-metacarpal":{offsetMatrix:[.9340395331382751,-.13936476409435272,.32885703444480896,0,-.005510995630174875,.914999783039093,.40341612696647644,0,-.3571262061595917,-.37861889600753784,.8538784384727478,0,-.05944233387708664,.0264605600386858,.07478221505880356,1],radius:.019088275730609894},"ring-finger-phalanx-proximal":{offsetMatrix:[.9842101335525513,.024470895528793335,.1753024309873581,0,.12200043350458145,.6237703561782837,-.7720272541046143,0,-.12824076414108276,.7812241315841675,.610936164855957,0,-.04249368980526924,.0467497780919075,.027722163125872612,1],radius:.00992213748395443},"ring-finger-phalanx-intermediate":{offsetMatrix:[.9941774606704712,.05949164181947708,.08983955532312393,0,.10504482686519623,-.7208291888237,-.6851072907447815,0,.024001073092222214,.6905553936958313,-.7228817939758301,0,-.0374927744269371,.016285063698887825,.0038980208337306976,1],radius:.007611672393977642},"ring-finger-phalanx-distal":{offsetMatrix:[.9995742440223694,.01638498157262802,.02412819117307663,0,.007813597097992897,-.9474818110466003,.31971633434295654,0,.028100071474909782,-.31939181685447693,-.9472070932388306,0,-.038130562752485275,-.0020653479732573032,.02310742810368538,1],radius:.007231088820844889},"ring-finger-tip":{offsetMatrix:[.9995742440223694,.01638498157262802,.02412819117307663,0,.007813597097992897,-.9474818110466003,.31971633434295654,0,.028100071474909782,-.31939181685447693,-.9472070932388306,0,-.0390593595802784,.004176302347332239,.0466572530567646,1],radius:.0062310886569321156},"pinky-finger-metacarpal":{offsetMatrix:[.9147363901138306,.3458845317363739,.20885537564754486,0,-.3923271894454956,.8839452862739563,.2544005811214447,0,-.09662359952926636,-.3146490156650543,.9442773461341858,0,-.06715242564678192,.024195827543735504,.07137546688318253,1],radius:.01808827556669712},"pinky-finger-phalanx-proximal":{offsetMatrix:[.9613109827041626,.22439135611057281,.15977802872657776,0,.01002211682498455,.5511574745178223,-.8343409299850464,0,-.27528178691864014,.8036624789237976,.5275853276252747,0,-.06273911893367767,.038559623062610626,.028268879279494286,1],radius:.008483353070914745},"pinky-finger-phalanx-intermediate":{offsetMatrix:[.9820972084999084,.18811029195785522,-.00995189044624567,0,.14063723385334015,-.7673450708389282,-.6256227493286133,0,-.12532226741313934,.6130226850509644,-.7800630927085876,0,-.05428232625126839,.013870777562260628,.012061242014169693,1],radius:.0067641944624483585},"pinky-finger-phalanx-distal":{offsetMatrix:[.9744614362716675,.20454788208007812,-.09265263378620148,0,.22429193556308746,-.9065253138542175,.35764020681381226,0,-.010836843401193619,-.3692878782749176,-.9292529225349426,0,-.05173685774207115,.0014194445684552193,.02790539152920246,1],radius:.0064259846694767475},"pinky-finger-tip":{offsetMatrix:[.9744614362716675,.20454788208007812,-.09265263378620148,0,.22429193556308746,-.9065253138542175,.35764020681381226,0,-.010836843401193619,-.3692878782749176,-.9292529225349426,0,-.05098633095622063,.008463085629045963,.048688892275094986,1],radius:.005425984505563974}},gripOffsetMatrix:[.005510995630174875,-.9149997234344482,-.40341615676879883,0,-.3571262061595917,-.37861889600753784,.8538784384727478,0,-.9340395331382751,.13936474919319153,-.32885703444480896,0,-.031803809106349945,.007837686687707901,.04313928261399269,1]}}},lt={mapping:de.None,buttons:[{id:"pinch",type:"analog",eventTrigger:"select"}],axes:[]},ct=m(),ut=b(),dt=m(),pt=m(),ft=b(),mt=m(),xt=m(),gt=b(),yt=m(),vt=(e,t,r,i)=>(u(ct,t),p(ut,t),d(dt,t),u(pt,r),p(ft,r),d(mt,r),S(xt,ct,pt,i),A(gt,ut,ft,i),S(yt,dt,mt,i),function(e,t,r,i){var s=t[0],a=t[1],n=t[2],o=t[3],h=s+s,l=a+a,c=n+n,u=s*h,d=s*l,p=s*c,f=a*l,m=a*c,x=n*c,g=o*h,y=o*l,v=o*c,T=i[0],w=i[1],S=i[2];e[0]=(1-(f+x))*T,e[1]=(d+v)*T,e[2]=(p-y)*T,e[3]=0,e[4]=(d-v)*w,e[5]=(1-(u+x))*w,e[6]=(m+g)*w,e[7]=0,e[8]=(p+y)*S,e[9]=(m-g)*S,e[10]=(1-(u+f))*S,e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1}(e,gt,xt,yt),e),Tt=[1,-1,-1,0,-1,1,1,0,-1,1,1,0,-1,1,1,1];class wt extends Se{constructor(e,t,r){if(t!==pe.Left&&t!==pe.Right)throw new DOMException('handedness for XRHandInput must be either "left" or "right"',"InvalidStateError");if(!e.poses.default||!e.poses.pinch)throw new DOMException('"default" and "pinch" hand pose configs are required',"InvalidStateError");const i=new oe(r),s=new oe(i),a=[e.profileId,...e.fallbackProfileIds],n=new nt;Object.values(st).forEach((e=>{n.set(e,new ot(e,i))}));super(new ve(t,fe.TrackedPointer,a,i,new ge(lt),s,n)),this[U]={poseId:"default",poses:e.poses},this.updateHandPose()}get poseId(){return this[U].poseId}set poseId(e){this[U].poses[e]?this[U].poseId=e:console.warn(`Pose config ${e} not found`)}updateHandPose(){const e=this[U].poses[this[U].poseId],t=this[U].poses.pinch;Object.values(st).forEach((r=>{const i=e.jointTransforms[r].offsetMatrix,s=t.jointTransforms[r].offsetMatrix,a=this.inputSource.hand.get(r);vt(a[re].offsetMatrix,i,s,this.pinchValue),this.inputSource.handedness===pe.Right&&(e=>{for(let t=0;t<16;t++)e[t]*=Tt[t]})(a[re].offsetMatrix),a[ee].radius=(1-this.pinchValue)*e.jointTransforms[r].radius+this.pinchValue*t.jointTransforms[r].radius})),e.gripOffsetMatrix&&t.gripOffsetMatrix&&vt(this.inputSource.gripSpace[re].offsetMatrix,e.gripOffsetMatrix,t.gripOffsetMatrix,this.pinchValue)}get pinchValue(){return this[X].inputSource.gamepad[q].buttonsMap.pinch.value}updatePinchValue(e){if(e>1||e<0)return void console.warn(`Out-of-range value ${e} provided for pinch`);this[X].inputSource.gamepad[q].buttonsMap.pinch[q].pendingValue=e}onFrameStart(e){super.onFrameStart(e),this.updateHandPose()}}class St extends EventTarget{}const Rt={antialias:!0,depth:!0,stencil:!1,alpha:!0,ignoreDepthValues:!1,framebufferScaleFactor:1};class Et extends St{constructor(e,t,r={}){if(super(),e[Z].ended)throw new DOMException("Session has ended","InvalidStateError");const i={...Rt,...r};this[k]={session:e,context:t,antialias:i.antialias}}get context(){return this[k].context}get antialias(){return this[k].antialias}get ignoreDepthValues(){return!0}get framebuffer(){return null}get framebufferWidth(){return this[k].context.drawingBufferWidth}get framebufferHeight(){return this[k].context.drawingBufferHeight}getViewport(e){if(e[ie].session!==this[k].session)throw new DOMException("View's session differs from Layer's session","InvalidStateError");return this[k].session[Z].device[V].getViewport(this,e)}static getNativeFramebufferScaleFactor(e){if(!(e instanceof at))throw new TypeError("getNativeFramebufferScaleFactor must be passed a session.");return e[Z].ended?0:1}}class _t{constructor(e,t,r){const{schema:i,frames:s}=t;if(!s||!i||0===s.length)throw new DOMException("wrong recording format","NotSupportedError");const a=new He(qe.Viewer,e),n={[ze.Left]:new oe(a),[ze.Right]:new oe(a),[ze.None]:new oe(a)};this[N]={refSpace:e,inputSources:new Map,inputSchemas:new Map,frames:s,recordedFramePointer:0,startingTimeStamp:s[0][0],endingTimeStamp:s[s.length-1][0],playbackTime:s[0][0],playing:!1,viewerSpace:a,viewSpaces:n,vec3:m(),quat:b()},h(this[N].viewSpaces[ze.Left][re].offsetMatrix,x(-r/2,0,0)),h(this[N].viewSpaces[ze.Right][re].offsetMatrix,x(r/2,0,0)),i.forEach((t=>{const r=t[0],i=t[1];let s;if(i.hasGamepad){const e=[];for(let t=0;t<i.numButtons;t++)e.push({id:t.toString(),type:"manual"});const t=[];for(let e=0;e<i.numAxes;e++)t.push({id:e.toString(),type:"manual"});s=new ge({mapping:i.mapping,buttons:e,axes:t})}const a=new oe(e);let n;i.hasHand&&(n=new nt,Object.values(st).forEach((e=>{n.set(e,new ot(e,a))})));const o=new ve(i.handedness,i.targetRayMode,i.profiles,a,s,i.hasGrip?new oe(e):void 0,i.hasHand?n:void 0);this[N].inputSources.set(r,{active:!1,source:o}),this[N].inputSchemas.set(r,i)}))}play(){this[N].recordedFramePointer=0,this[N].playbackTime=this[N].startingTimeStamp,this[N].playing=!0,this[N].actualTimeStamp=performance.now()}stop(){this[N].playing=!1}get playing(){return this[N].playing}get viewerSpace(){return this[N].viewerSpace}get viewSpaces(){return this[N].viewSpaces}get inputSources(){return Array.from(this[N].inputSources.values()).filter((e=>e.active)).map((e=>e.source))}playFrame(){const e=performance.now(),t=e-this[N].actualTimeStamp;if(this[N].actualTimeStamp=e,this[N].playbackTime+=t,this[N].playbackTime>this[N].endingTimeStamp)return void this.stop();for(;this[N].frames[this[N].recordedFramePointer+1][0]<this[N].playbackTime;)this[N].recordedFramePointer++;const r=this[N].frames[this[N].recordedFramePointer],i=this[N].frames[this[N].recordedFramePointer+1],s=(this[N].playbackTime-r[0])/(i[0]-r[0]);this.updateXRSpaceFromMergedFrames(this[N].viewerSpace,r.slice(1,8),i.slice(1,8),s);const a=new Map;for(let e=8;e<r.length;e++){const{index:t,inputData:i}=this.processRawInputData(r[e]);a.set(t,i)}const n=new Map;for(let e=8;e<i.length;e++){const{index:t,inputData:r}=this.processRawInputData(i[e]);n.set(t,r)}this[N].inputSources.forEach((e=>{e.active=!1})),n.forEach(((e,t)=>{this[N].inputSources.get(t).active=!0;const r=this[N].inputSources.get(t).source,i=this[N].inputSchemas.get(t);this.updateInputSource(r,i,a.has(t)?a.get(t):e,e,s)}))}updateInputSource(e,t,r,i,s){if(this.updateXRSpaceFromMergedFrames(e.targetRaySpace,r.targetRayTransform,i.targetRayTransform,s),t.hasGrip&&this.updateXRSpaceFromMergedFrames(e.gripSpace,r.gripTransform,i.gripTransform,s),t.hasHand)for(let a=0;a<25;a++){const n=r.handTransforms.slice(8*a,8*a+7),o=i.handTransforms.slice(8*a,8*a+7),h=r.handTransforms[8*a+7],l=i.handTransforms[8*a+7],c=e.hand.get(t.jointSequence[a]);this.updateXRSpaceFromMergedFrames(c,n,o,s),c[ee].radius=(l-h)*s+h}if(t.hasGamepad){const t=e.gamepad;i.buttons.forEach(((e,i)=>{const a=t.buttons[i];a[q].pressed=1===e[0],a[q].touched=1===e[1];const n=r.buttons[i][2],o=e[2];a[q].value=(o-n)*s+n})),i.axes.forEach(((e,i)=>{const a=r.axes[i];t[q].axesMap[i.toString()].x=(e-a)*s+a}))}}updateXRSpaceFromMergedFrames(e,t,r,i){const s=x(t[0],t[1],t[2]),a=F(t[3],t[4],t[5],t[6]),n=x(r[0],r[1],r[2]),o=F(r[3],r[4],r[5],r[6]);S(this[N].vec3,s,n,i),A(this[N].quat,a,o,i),c(e[re].offsetMatrix,this[N].quat,this[N].vec3)}processRawInputData(e){const t=e[0],r=this[N].inputSchemas.get(t),i={targetRayTransform:e.slice(1,8)};let s=8;if(r.hasGrip&&(i.gripTransform=e[s++]),r.hasHand&&(i.handTransforms=e[s++]),r.hasGamepad){const t=e[s];i.buttons=t.slice(0,r.numButtons),i.axes=t.slice(r.numButtons)}return{index:t,inputData:i}}}const bt="2.1.1";class Mt extends Event{constructor(e,t){if(super(e,t),!t.referenceSpace)throw new Error("XRReferenceSpaceEventInit.referenceSpace is required");this.referenceSpace=t.referenceSpace,this.transform=t.transform}}class At extends EventTarget{constructor(e){super(),this[z]={device:e,grantSession:({resolve:e,reject:t,mode:r,options:i})=>{if(this[z].activeSession)return void t(new DOMException("An active XRSession already exists.","InvalidStateError"));const{requiredFeatures:s=[],optionalFeatures:a=[]}=i,{supportedFeatures:n}=this[z].device;if(!s.every((e=>n.includes(e))))return void t(new Error("One or more required features are not supported by the device."));const o=a.filter((e=>n.includes(e))),h=Array.from(new Set([...s,...o,"viewer","local"])),l=new at(this[z].device,r,h);this[z].activeSession=l,l.addEventListener("end",(()=>{this[z].activeSession=void 0})),e(l)}}}isSessionSupported(e){return new Promise(((t,r)=>{t("inline"===e||this[z].device.supportedSessionModes.includes(e))}))}requestSession(e,t={}){return new Promise(((r,i)=>{this.isSessionSupported(e).then((s=>{if(!s)return void i(new DOMException("The requested XRSession mode is not supported.","NotSupportedError"));const a={resolve:r,reject:i,mode:e,options:t};this[z].grantSession(a)})).catch(i)}))}offerSession(e,t={}){return new Promise(((r,i)=>{this.isSessionSupported(e).then((s=>{s?this[z].offeredSessionConfig={resolve:r,reject:i,mode:e,options:t}:i(new DOMException("The requested XRSession mode is not supported.","NotSupportedError"))})).catch(i)}))}}class Pt{constructor(e,t,r,i){this[se]={x:e,y:t,width:r,height:i}}get x(){return this[se].x}get y(){return this[se].y}get width(){return this[se].width}get height(){return this[se].height}}
2
+ /**
3
+ * @license
4
+ * webxr-layers-polyfill
5
+ * Version 1.1.0
6
+ * Copyright (c) 2021 Facebook, Inc. and its affiliates.
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+ /**
20
+ * @license
21
+ * gl-matrix
22
+ * Version 3.4.3
23
+ * Copyright (c) 2015-2021, Brandon Jones, Colin MacKenzie IV.
24
+ *
25
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
26
+ * of this software and associated documentation files (the "Software"), to deal
27
+ * in the Software without restriction, including without limitation the rights
28
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
29
+ * copies of the Software, and to permit persons to whom the Software is
30
+ * furnished to do so, subject to the following conditions:
31
+ *
32
+ * The above copyright notice and this permission notice shall be included in
33
+ * all copies or substantial portions of the Software.
34
+ *
35
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
36
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
37
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
38
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
39
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
40
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
41
+ * THE SOFTWARE.
42
+ */var Ft,It;!function(e){e.texture="texture",e["texture-array"]="texture-array"}(Ft||(Ft={})),function(e){e.default="default",e.mono="mono",e.stereo="stereo",e["stereo-left-right"]="stereo-left-right",e["stereo-top-bottom"]="stereo-top-bottom"}(It||(It={}));const Lt=e=>e&&"function"==typeof e.getOffsetReferenceSpace,Ct=()=>"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},Nt=(e,t)=>{switch(t){case e.RGBA8:case e.RGB5_A1:case e.RGBA4:case e.SRGB8_ALPHA8:return{internalFormat:t,textureFormat:e.RGBA,type:e.UNSIGNED_BYTE};case e.RGBA8_SNORM:return{internalFormat:t,textureFormat:e.RGBA,type:e.BYTE};case e.RGB10_A2:return{internalFormat:t,textureFormat:e.RGBA,type:e.UNSIGNED_INT_2_10_10_10_REV};case e.RGBA16F:return{internalFormat:t,textureFormat:e.RGBA,type:e.HALF_FLOAT};case e.RGBA32F:return{internalFormat:t,textureFormat:e.RGBA,type:e.FLOAT};case e.RGBA8UI:return{internalFormat:t,textureFormat:e.RGBA_INTEGER,type:e.UNSIGNED_BYTE};case e.RGBA8I:return{internalFormat:t,textureFormat:e.RGBA_INTEGER,type:e.BYTE};case e.RGBA16UI:return{internalFormat:t,textureFormat:e.RGBA_INTEGER,type:e.UNSIGNED_SHORT};case e.RGBA16I:return{internalFormat:t,textureFormat:e.RGBA_INTEGER,type:e.SHORT};case e.RGBA32UI:return{internalFormat:t,textureFormat:e.RGBA_INTEGER,type:e.UNSIGNED_INT};case e.RGBA32I:return{internalFormat:t,textureFormat:e.RGBA_INTEGER,type:e.INT};case e.RGB10_A2UI:return{internalFormat:t,textureFormat:e.RGBA_INTEGER,type:e.UNSIGNED_INT_2_10_10_10_REV};case e.RGB8:case e.RGB565:case e.SRGB8:return{internalFormat:t,textureFormat:e.RGB,type:e.UNSIGNED_BYTE};case e.RGB8_SNORM:return{internalFormat:t,textureFormat:e.RGB,type:e.BYTE};case e.RGB16F:case e.R11F_G11F_B10F:case e.RGB9_E5:return{internalFormat:t,textureFormat:e.RGB,type:e.HALF_FLOAT};case e.RGB32F:return{internalFormat:t,textureFormat:e.RGB,type:e.FLOAT};case e.RGB8UI:return{internalFormat:t,textureFormat:e.RGB_INTEGER,type:e.UNSIGNED_BYTE};case e.RGB8I:return{internalFormat:t,textureFormat:e.RGB_INTEGER,type:e.BYTE};case e.RGB16UI:return{internalFormat:t,textureFormat:e.RGB_INTEGER,type:e.UNSIGNED_SHORT};case e.RGB16I:return{internalFormat:t,textureFormat:e.RGB_INTEGER,type:e.SHORT};case e.RGB32UI:return{internalFormat:t,textureFormat:e.RGB_INTEGER,type:e.UNSIGNED_INT};case e.RGB32I:return{internalFormat:t,textureFormat:e.RGB_INTEGER,type:e.INT};case e.DEPTH_COMPONENT16:return{internalFormat:t,textureFormat:e.DEPTH_COMPONENT,type:e.UNSIGNED_SHORT};case e.DEPTH_COMPONENT24:return{internalFormat:t,textureFormat:e.DEPTH_COMPONENT,type:e.UNSIGNED_INT};case e.DEPTH_COMPONENT32F:return{internalFormat:t,textureFormat:e.DEPTH_COMPONENT,type:e.FLOAT};case e.DEPTH24_STENCIL8:return{internalFormat:t,textureFormat:e.DEPTH_STENCIL,type:e.UNSIGNED_INT_24_8};case e.DEPTH32F_STENCIL8:return{internalFormat:t,textureFormat:e.DEPTH_STENCIL,type:e.FLOAT_32_UNSIGNED_INT_24_8_REV};case e.DEPTH_COMPONENT:return Nt(e,e.DEPTH_COMPONENT24);case e.DEPTH_STENCIL:return Nt(e,e.DEPTH24_STENCIL8);case e.RGBA:case e.RGB:case e.LUMINANCE_ALPHA:case e.LUMINANCE:case e.ALPHA:return{internalFormat:t,textureFormat:t,type:e.UNSIGNED_BYTE};default:throw new Error("Attempted to create polyfill with unsupported format.")}};class Dt{constructor(){this._hasRunDeferredInitialize=!1,this._media=null}initialize(e,t){this.session=e,t&&(this.context=t),this.blendTextureSourceAlpha=!0}destroy(){this._colorTextures=[],this._depthStencilTextures=[]}addEventListener(e,t,r){}dispatchEvent(e){return!1}removeEventListener(e,t,r){}getContext(){return this.context}getTextureType(){throw new Error("Unimplemented")}get colorTextures(){return this._colorTextures}get depthStencilTextures(){return this._depthStencilTextures}get colorTexturesMeta(){return this._texturesMeta}get media(){return this.isMediaLayer()||console.warn("Attempted to retrieve media from a non-media layer"),this._media}determineLayoutAttribute(e,t,r){if(!(t instanceof WebGL2RenderingContext)&&e===Ft["texture-array"])throw new TypeError;if(r===It.mono)return r;if(r===It.default){if(this.session.internalViews&&1===this.session.internalViews.length)return It.mono;if(e===Ft["texture-array"])return r}return r===It.default||r===It.stereo?It["stereo-left-right"]:r}isMediaLayer(){return null!==this._media}_deferredInitialize(){}initializeIfNeeded(){this._hasRunDeferredInitialize||(this._hasRunDeferredInitialize=!0,this._deferredInitialize())}_allocateColorTexturesInternal(e,t){let r=this.session.internalViews;if(r&&0!==r.length){if(this.initializeIfNeeded(),this.layout===It.mono){if(e===Ft["texture-array"]){const r=this._createNewColorTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.colorFormat);return this._texturesMeta=[r],void(this._colorTextures=[r.texture])}{const r=this._createNewColorTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.colorFormat);return this._texturesMeta=[r],void(this._colorTextures=[r.texture])}}if(this.layout===It.stereo){if(e===Ft["texture-array"]){const r=this._createNewColorTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.colorFormat,2);return this._texturesMeta=[r],void(this._colorTextures=[r.texture])}{const r=this._createNewColorTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.colorFormat),i=this._createNewColorTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.colorFormat);return this._texturesMeta=[r,i],void(this._colorTextures=[r.texture,i.texture])}}if(this.layout===It["stereo-left-right"]){const r=this._createNewColorTexture(2*t.viewPixelWidth,t.viewPixelHeight,e,t.colorFormat);return this._texturesMeta=[r],void(this._colorTextures=[r.texture])}if(this.layout===It["stereo-top-bottom"]){const r=this._createNewColorTexture(t.viewPixelWidth,2*t.viewPixelHeight,e,t.colorFormat);return this._texturesMeta=[r],void(this._colorTextures=[r.texture])}}else console.warn("We can't allocate color textures without views")}_allocateDepthStencilTexturesInternal(e,t){if(t.depthFormat){if(this._getSupportedDepthFormats().indexOf(t.depthFormat)<0)throw new Error("Depth format provided is not supported in non-projection layers.");if(t.mipLevels<1)throw new Error("Invalid miplevel. Miplevel needs to be >= 1");if(this.layout===It.mono){if(e===Ft["texture-array"]){const r=this._createNewDepthStencilTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.depthFormat);return void(this._depthStencilTextures=[r.texture])}{const r=this._createNewColorTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.depthFormat);return void(this._depthStencilTextures=[r.texture])}}if(this.layout===It.stereo){if(e===Ft["texture-array"]){const r=this._createNewDepthStencilTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.depthFormat,2);return void(this._depthStencilTextures=[r.texture])}{const r=this._createNewDepthStencilTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.depthFormat),i=this._createNewDepthStencilTexture(t.viewPixelWidth,t.viewPixelHeight,e,t.depthFormat);return void(this._depthStencilTextures=[r.texture,i.texture])}}if(this.layout!==It["stereo-left-right"])if(this.layout!==It["stereo-top-bottom"]);else{const r=this._createNewDepthStencilTexture(t.viewPixelWidth,2*t.viewPixelHeight,e,t.depthFormat);this._depthStencilTextures=[r.texture]}else{const r=this._createNewDepthStencilTexture(2*t.viewPixelWidth,t.viewPixelHeight,e,t.depthFormat);this._depthStencilTextures=[r.texture]}}else this._depthStencilTextures=[]}_createNewColorTexture(e,t,r,i,s=1){return this._createGenericPolyfillTexture(r,e,t,i,0,s)}_createNewDepthStencilTexture(e,t,r,i,s=1){return this._createGenericPolyfillTexture(r,e,t,i,0,s)}_createGenericPolyfillTexture(e,t,r,i,s=0,a=1){if(e===Ft["texture-array"]&&a<=1&&console.warn("creating a texture array with a single layer..."),e===Ft["texture-array"]&&this.context instanceof WebGLRenderingContext)throw new Error("WebGL 1 does not support texture array");let n=this.context.createTexture(),o={width:t,height:r,layers:a,type:e,textureFormat:i,texture:n},h=i,l=this.context.UNSIGNED_BYTE;if(this.context instanceof WebGL2RenderingContext){const e=Nt(this.context,i);h=e.internalFormat,i=e.textureFormat,l=e.type}else i===this.context.DEPTH_COMPONENT&&(l=this.context.UNSIGNED_INT),i===this.context.DEPTH_STENCIL&&(l=this.context.UNSIGNED_INT_24_8_WEBGL);if(e===Ft["texture-array"]&&this.context instanceof WebGL2RenderingContext){console.warn("texture-array layers are supported...questionably in the polyfill at the moment. Use at your own risk.");const e=this.context.getParameter(this.context.TEXTURE_BINDING_2D_ARRAY);this.context.bindTexture(this.context.TEXTURE_2D_ARRAY,n),this._getSupportedDepthFormats().indexOf(i)>=0?this.context.texStorage3D(this.context.TEXTURE_2D_ARRAY,1,h,t,r,a):this.context.texImage3D(this.context.TEXTURE_2D_ARRAY,0,h,t,r,a,0,i,l,null),this.context.bindTexture(this.context.TEXTURE_2D_ARRAY,e)}else{const e=this.context.getParameter(this.context.TEXTURE_BINDING_2D);this.context.bindTexture(this.context.TEXTURE_2D,n),this.context.texImage2D(this.context.TEXTURE_2D,0,h,t,r,0,i,l,null),this.context.bindTexture(this.context.TEXTURE_2D,e)}return o}_getSupportedDepthFormats(){const e=[];return this.context instanceof WebGLRenderingContext&&!this.context.getExtension("WEBGL_depth_texture")||(e.push(this.context.DEPTH_COMPONENT,this.context.DEPTH_STENCIL),this.context instanceof WebGL2RenderingContext&&e.push(this.context.DEPTH_COMPONENT24,this.context.DEPTH24_STENCIL8)),e}}const Ot={colorFormat:6408,mipLevels:1,layout:It.mono,isStatic:!1,space:null,viewPixelHeight:0,viewPixelWidth:0,textureType:Ft.texture,radius:2,centralAngle:.78539,aspectRatio:2},Bt={layout:It.mono,invertStereo:!1,space:null,radius:2,centralAngle:.78539};class Vt extends Dt{constructor(e,t){super(),this._media=null!=t?t:null,this.isMediaLayer()?this.init=Object.assign(Object.assign({},Bt),e):this.init=Object.assign(Object.assign({},Ot),e),this.radius=this.init.radius,this.centralAngle=this.init.centralAngle,this.aspectRatio=this.init.aspectRatio,this.space=this.init.space,this.layout=this.init.layout;const r=Ct();this.init.transform?this.transform=new r.XRRigidTransform(e.transform.position,e.transform.orientation):this.transform=new r.XRRigidTransform({x:0,y:0,z:0,w:1}),this.isMediaLayer()||(this.isStatic=e.isStatic)}getTextureType(){return this.isMediaLayer()?Ft.texture:this.init.textureType}_deferredInitialize(){let e=this.determineLayoutAttribute(this.init.textureType,this.context,this.init.layout);this.layout=e,this.needsRedraw=!0}get colorTextures(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._colorTextures&&this._colorTextures.length||this._allocateColorTexturesInternal(this.getTextureType(),this.init),this._colorTextures}get depthStencilTextures(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._depthStencilTextures&&this._depthStencilTextures.length||this._allocateDepthStencilTexturesInternal(this.getTextureType(),this.init),this._depthStencilTextures}get colorTexturesMeta(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._colorTextures&&this._colorTextures.length||this._allocateColorTexturesInternal(this.getTextureType(),this.init),this._texturesMeta}get width(){return 2*this.radius*Math.PI*(this.centralAngle/(2*Math.PI))}get height(){return this.width/this.aspectRatio}}const Ut={colorFormat:6408,mipLevels:1,layout:It.mono,isStatic:!1,space:null,viewPixelHeight:0,viewPixelWidth:0,textureType:Ft.texture,radius:0,centralHorizontalAngle:6.28318,upperVerticalAngle:1.570795,lowerVerticalAngle:-1.570795},Xt={space:null,layout:It.mono,invertStereo:!1,radius:0,centralHorizontalAngle:6.28318,upperVerticalAngle:1.570795,lowerVerticalAngle:-1.570795};class Gt extends Dt{constructor(e,t){if(super(),this._media=null!=t?t:null,this.isMediaLayer()?this.init=Object.assign(Object.assign({},Xt),e):this.init=Object.assign(Object.assign({},Ut),e),!Lt(this.init.space))throw new TypeError("Equirect layer's space needs to be an XRReferenceSpace");this.radius=this.init.radius,this.centralHorizontalAngle=this.init.centralHorizontalAngle,this.upperVerticalAngle=this.init.upperVerticalAngle,this.lowerVerticalAngle=this.init.lowerVerticalAngle,this.space=this.init.space,this.layout=this.init.layout;const r=Ct();e.transform?this.transform=new r.XRRigidTransform(e.transform.position,e.transform.orientation):this.transform=new r.XRRigidTransform({x:0,y:0,z:0,w:1}),this.isMediaLayer()||(this.isStatic=e.isStatic)}getTextureType(){return this.isMediaLayer()?Ft.texture:this.init.textureType}_deferredInitialize(){let e=this.determineLayoutAttribute(this.init.textureType,this.context,this.init.layout);this.layout=e,this.needsRedraw=!0}get colorTextures(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._colorTextures&&this._colorTextures.length||this._allocateColorTexturesInternal(this.getTextureType(),this.init),this._colorTextures}get depthStencilTextures(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._depthStencilTextures&&this._depthStencilTextures.length||this._allocateDepthStencilTexturesInternal(this.getTextureType(),this.init),this._depthStencilTextures}get colorTexturesMeta(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._colorTextures&&this._colorTextures.length||this._allocateColorTexturesInternal(this.getTextureType(),this.init),this._texturesMeta}}const qt={colorFormat:6408,mipLevels:1,layout:It.mono,isStatic:!1,space:null,viewPixelHeight:0,viewPixelWidth:0,textureType:Ft.texture,width:1,height:1},zt={space:null,layout:It.mono,invertStereo:!1};class Ht extends Dt{constructor(e,t){super(),this._media=null!=t?t:null,this.isMediaLayer()?this.init=Object.assign(Object.assign({},zt),e):this.init=Object.assign(Object.assign({},qt),e),this.width=this.init.width,this.height=this.init.height,this.space=this.init.space,this.layout=this.init.layout;const r=Ct();this.init.transform?this.transform=new r.XRRigidTransform(e.transform.position,e.transform.orientation):this.transform=new r.XRRigidTransform({x:0,y:0,z:0,w:1}),this.isMediaLayer()||(this.isStatic=e.isStatic)}getTextureType(){return this.isMediaLayer()?Ft.texture:this.init.textureType}_deferredInitialize(){let e=this.determineLayoutAttribute(this.init.textureType,this.context,this.init.layout);this.layout=e,this.needsRedraw=!0}get colorTextures(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._colorTextures&&this._colorTextures.length||this._allocateColorTexturesInternal(this.getTextureType(),this.init),this._colorTextures}get depthStencilTextures(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._depthStencilTextures&&this._depthStencilTextures.length||this._allocateDepthStencilTexturesInternal(this.getTextureType(),this.init),this._depthStencilTextures}get colorTexturesMeta(){if(this.isMediaLayer())throw new Error("Media layers do not have associated textures");return this._colorTextures&&this._colorTextures.length||this._allocateColorTexturesInternal(this.getTextureType(),this.init),this._texturesMeta}}class kt{constructor(e){if(this.session=e,this.session.ended)throw new Error("Session has ended")}createQuadLayer(e,t){if(this.session.ended)throw new Error("Session has ended");if(t.layout===It.default)throw new TypeError("Media Quad layer cannot be created with layout of default");let r=this.calculateAspectRatio(e,t.layout);void 0===t.width&&void 0===t.height&&(t.width=1),void 0===t.height&&(t.height=t.width/r),void 0===t.width&&(t.width=t.height/r);let i=new Ht(t,e);return i.needsRedraw=!1,i.initialize(this.session),i}createCylinderLayer(e,t){if(this.session.ended)throw new Error("Session has ended");if(t.layout===It.default)throw new TypeError("Media Cylinder layer cannot be created with layout of default");let r=this.calculateAspectRatio(e,t.layout);void 0===t.aspectRatio&&(t.aspectRatio=r);let i=new Vt(t,e);return i.needsRedraw=!1,i.initialize(this.session),i}createEquirectLayer(e,t){if(this.session.ended)throw new Error("Session has ended");if(t.layout===It.default)throw new TypeError("Media Equirect layer cannot be created with layout of default");if(!Lt(t.space))throw new Error("Media Equirect layer's space must be of type XRReferenceSpace");let r=new Gt(t,e);return r.needsRedraw=!1,r.initialize(this.session),r}calculateAspectRatio(e,t){let r=e.videoWidth,i=e.videoHeight;return t===It["stereo-left-right"]&&(r/=2),t===It["stereo-top-bottom"]&&(i/=2),r/i}}const jt={textureType:Ft.texture,colorFormat:6408,depthFormat:6402,scaleFactor:1};class Wt extends Dt{constructor(e=jt){super(),this.init=Object.assign(Object.assign({},jt),e)}initialize(e,t){super.initialize(e,t),this.initializeIfNeeded();let r=e.getBaseLayer();this.textureWidth=r.framebufferWidth*this.init.scaleFactor,this.textureHeight=r.framebufferHeight*this.init.scaleFactor}_allocateProjectionColorTextures(){let e=[],t=[];const r=()=>{e=[];for(let r of t)e.push(r.texture)};let i=this.session,s=i.internalViews;if(!s||0===s.length)return void console.warn("We can't allocate color textures without views");let a=i.getBaseLayer(),n=s.length,o=a.framebufferWidth*this.init.scaleFactor/s.length,h=a.framebufferHeight*this.init.scaleFactor;if(this.layout===It.mono||this.layout===It.default){if(this.init.textureType===Ft["texture-array"]){let e=this._createNewColorTexture(o,h,Ft["texture-array"],this.init.colorFormat,n);t=[e]}else for(let e of s){let e=this._createNewColorTexture(o,h,Ft.texture,this.init.colorFormat);t.push(e)}return r(),this._colorTexturesMeta=t,void(this._colorTextures=e)}if(this.layout===It["stereo-left-right"]){let e=this._createNewColorTexture(o*n,h,this.init.textureType,this.init.colorFormat);t=[e]}else if(this.layout===It["stereo-top-bottom"]){let e=this._createNewColorTexture(o,h*n,this.init.textureType,this.init.colorFormat);t=[e]}r(),this._colorTexturesMeta=t,this._colorTextures=e}_allocateProjectionDepthStencilTextures(){let e=this.session,t=e.internalViews;if(!t||0===t.length)return;if(0===this.init.depthFormat)return void(this._depthStencilTextures=[]);if(this.context instanceof WebGLRenderingContext){if(!this.context.getExtension("WEBGL_depth_texture"))return void(this._depthStencilTextures=[])}let r=[],i=[];const s=()=>{r=[];for(let e of i)r.push(e.texture)};this.initializeIfNeeded();let a=e.getBaseLayer(),n=t.length,o=a.framebufferWidth*this.init.scaleFactor/t.length,h=a.framebufferHeight*this.init.scaleFactor;if(this.layout===It.mono||this.layout===It.default){if(this.init.textureType===Ft["texture-array"]){let e=this._createNewDepthStencilTexture(o,h,this.init.textureType,this.init.depthFormat,n);i=[e]}else for(let e of t){let e=this._createNewDepthStencilTexture(o,h,this.init.textureType,this.init.depthFormat);i.push(e)}return s(),void(this._depthStencilTextures=r)}if(this.layout===It["stereo-left-right"]){let e=this._createNewDepthStencilTexture(o*n,h,this.init.textureType,this.init.depthFormat);i=[e]}else if(this.layout===It["stereo-top-bottom"]){let e=this._createNewDepthStencilTexture(o,h*n,this.init.textureType,this.init.depthFormat);i=[e]}s(),this._depthStencilTextures=r}get colorTextures(){return this._colorTextures&&this._colorTextures.length||this._allocateProjectionColorTextures(),this._colorTextures}get depthStencilTextures(){return void 0===this._depthStencilTextures&&this._allocateProjectionDepthStencilTextures(),this._depthStencilTextures||[]}get colorTexturesMeta(){return this._colorTextures&&this._colorTextures.length||this._allocateProjectionColorTextures(),this._colorTexturesMeta}getTextureType(){return this.init.textureType}_deferredInitialize(){this.isStatic=!1,this.ignoreDepthValues=!1,this.fixedFoveation=0;let e=this.determineLayoutAttribute(this.init.textureType,this.context,It.default);this.layout=e,this.needsRedraw=!0;let t=this.determineMaximumScaleFactor(),r=Math.min(this.init.scaleFactor,t);this.init.scaleFactor=r}determineMaximumScaleFactor(){let e=this.session.getBaseLayer(this.context),t=e.framebufferWidth,r=e.framebufferHeight;this.layout===It["stereo-left-right"]&&(t*=2),this.layout===It["stereo-top-bottom"]&&(r*=2);let i=Math.max(t,r);return this.context.getParameter(this.context.MAX_TEXTURE_SIZE)/i}}const Yt=(e,t,r,i,s)=>{let a=0,n=0,o=t.width,h=t.height;r===It["stereo-left-right"]?(a=t.width*i/s,o=t.width/s):r===It["stereo-top-bottom"]&&(n=t.height*i/s,h=t.height/s),e.x=a,e.y=n,e.width=o,e.height=h},Qt=(e,t,r)=>{var i=e.createShader(r);if(e.shaderSource(i,t),e.compileShader(i),!e.getShaderParameter(i,e.COMPILE_STATUS))throw"could not compile shader:"+e.getShaderInfoLog(i);return i},Kt=(e,t,r)=>{const i=e.createProgram(),s=Qt(e,t,e.VERTEX_SHADER),a=Qt(e,r,e.FRAGMENT_SHADER);if(e.attachShader(i,s),e.attachShader(i,a),e.deleteShader(s),e.deleteShader(a),e.linkProgram(i),!e.getProgramParameter(i,e.LINK_STATUS))throw"program failed to link:"+e.getProgramInfoLog(i);return i},$t=e=>{if(e instanceof WebGL2RenderingContext)return e;const t=e.getExtension("OES_vertex_array_object");if(!t)throw new Error("Cannot use VAOs.");return{VERTEX_ARRAY_BINDING:t.VERTEX_ARRAY_BINDING_OES,bindVertexArray:t.bindVertexArrayOES.bind(t),createVertexArray:t.createVertexArrayOES.bind(t),deleteVertexArray:t.deleteVertexArrayOES.bind(t),isVertexArray:t.isVertexArrayOES.bind(t)}},Jt=e=>e,Zt=Jt`
2
43
  attribute vec2 a_position;
3
44
  attribute vec2 a_texCoord;
4
45
 
@@ -20,7 +61,7 @@ void main() {
20
61
  // The GPU will interpolate this value between points.
21
62
  v_texCoord = a_texCoord;
22
63
  }
23
- `,rr=er`
64
+ `,er=Jt`
24
65
  precision mediump float;
25
66
 
26
67
  // our texture
@@ -33,7 +74,7 @@ void main() {
33
74
  vec4 tex = texture2D(u_image, v_texCoord);
34
75
  gl_FragColor = vec4(tex.rgb, tex.a);
35
76
  }
36
- `;class ir{constructor(e,t){this.gl=t,this.layer=e,this.program=Jt(this.gl,tr,rr),this.programInfo={attribLocations:{a_position:this.gl.getAttribLocation(this.program,"a_position"),a_texCoord:this.gl.getAttribLocation(this.program,"a_texCoord")}},this._createVAOs()}render(e){let t=this.gl,r=e.getBaseLayer();t.viewport(0,0,r.framebufferWidth,r.framebufferHeight);const i=this.layer.getTextureType(),s=t.getParameter(t.TEXTURE_BINDING_2D),a=t.getParameter(t.ACTIVE_TEXTURE);if(i!==Lt.texture)throw new Error("Created a texture projection renderer instead of a texture-array projection renderer for a texture-array layer.\nThis is probably an error with the polyfill itself; please file an issue on Github if you run into this.");t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,this.layer.colorTextures[0]),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST);for(let i of e.internalViews){let e=r.getViewport(i);t.viewport(e.x,e.y,e.width,e.height),this._shouldUseStereoTexturePoints()?this._renderInternalStereo(i):this._renderInternal()}t.activeTexture(a),t.bindTexture(t.TEXTURE_2D,s)}_renderInternal(){let e=this.gl;const t=e.getParameter(e.CURRENT_PROGRAM);e.useProgram(this.program),this.vaoGl.bindVertexArray(this.vao);var r=e.TRIANGLES;e.drawArrays(r,0,6),this.vaoGl.bindVertexArray(null),e.useProgram(t)}_renderInternalStereo(e){if("none"===e.eye)return this._renderInternal();let t=this.gl;this.vaoGl.bindVertexArray(this.vao);const r=t.getParameter(t.CURRENT_PROGRAM);t.useProgram(this.program),this._setStereoTextureBuffer("right"===e.eye?1:0);var i=t.TRIANGLES;t.drawArrays(i,0,6),this.vaoGl.bindVertexArray(null),t.useProgram(r)}_createVAOs(){this._createTextureUVs();let e=this.gl;this.vaoGl=Zt(e);let t=e.createBuffer();this.vao=this.vaoGl.createVertexArray(),this.vaoGl.bindVertexArray(this.vao),e.enableVertexAttribArray(this.programInfo.attribLocations.a_position),e.bindBuffer(e.ARRAY_BUFFER,t),((e,t,r,i,s)=>{var a=t,n=t+i,o=r,h=r+s;e.bufferData(e.ARRAY_BUFFER,new Float32Array([a,o,n,o,a,h,a,h,n,o,n,h]),e.DYNAMIC_DRAW)})(e,0,0,1,1);let r=e.FLOAT,i=!1;e.vertexAttribPointer(this.programInfo.attribLocations.a_position,2,r,i,0,0),this.texcoordBuffer=e.createBuffer(),e.enableVertexAttribArray(this.programInfo.attribLocations.a_texCoord),e.bindBuffer(e.ARRAY_BUFFER,this.texcoordBuffer),e.bufferData(e.ARRAY_BUFFER,this.texturePoints,e.DYNAMIC_DRAW),e.vertexAttribPointer(this.programInfo.attribLocations.a_texCoord,2,r,i,0,0),this.vaoGl.bindVertexArray(null),e.bindBuffer(e.ARRAY_BUFFER,null)}_setStereoTextureBuffer(e){let t=this.gl;t.enableVertexAttribArray(this.programInfo.attribLocations.a_texCoord),t.bindBuffer(t.ARRAY_BUFFER,this.texcoordBuffer),t.bufferData(t.ARRAY_BUFFER,this.stereoTexturePoints[e],t.STATIC_DRAW);var r=t.FLOAT;t.vertexAttribPointer(this.programInfo.attribLocations.a_texCoord,2,r,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,null)}_createTextureUVs(){this.texturePoints=new Float32Array([0,0,1,0,0,1,0,1,1,0,1,1]);const e={x:0,y:0,width:1,height:1};this._shouldUseStereoTexturePoints()&&(this.stereoTexturePoints=[],$t(e,this.layer.colorTexturesMeta[0],this.layer.layout,0,2),this.stereoTexturePoints[0]=this._offsetTextureUVsByRect(this.layer.colorTexturesMeta[0],this.texturePoints,e),$t(e,this.layer.colorTexturesMeta[0],this.layer.layout,1,2),this.stereoTexturePoints[1]=this._offsetTextureUVsByRect(this.layer.colorTexturesMeta[0],this.texturePoints,e))}_offsetTextureUVsByRect(e,t,r){const i=(r=r??{x:0,y:0,width:e.width,height:e.height}).x/e.width,s=r.y/e.height,a=r.width/e.width,n=r.height/e.height,o=[];for(let e=0;e<t.length;e+=2){let r=t[e]*a+i,h=t[e+1]*n+s;o[e]=r,o[e+1]=h}return new Float32Array(o)}_shouldUseStereoTexturePoints(){return this.layer.layout===Ct["stereo-left-right"]||this.layer.layout===Ct["stereo-top-bottom"]}}const sr=er`#version 300 es
77
+ `;class tr{constructor(e,t){this.gl=t,this.layer=e,this.program=Kt(this.gl,Zt,er),this.programInfo={attribLocations:{a_position:this.gl.getAttribLocation(this.program,"a_position"),a_texCoord:this.gl.getAttribLocation(this.program,"a_texCoord")}},this._createVAOs()}render(e){let t=this.gl,r=e.getBaseLayer();t.viewport(0,0,r.framebufferWidth,r.framebufferHeight);const i=this.layer.getTextureType(),s=t.getParameter(t.TEXTURE_BINDING_2D),a=t.getParameter(t.ACTIVE_TEXTURE);if(i!==Ft.texture)throw new Error("Created a texture projection renderer instead of a texture-array projection renderer for a texture-array layer.\nThis is probably an error with the polyfill itself; please file an issue on Github if you run into this.");t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,this.layer.colorTextures[0]),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST);for(let i of e.internalViews){let e=r.getViewport(i);t.viewport(e.x,e.y,e.width,e.height),this._shouldUseStereoTexturePoints()?this._renderInternalStereo(i):this._renderInternal()}t.activeTexture(a),t.bindTexture(t.TEXTURE_2D,s)}_renderInternal(){let e=this.gl;const t=e.getParameter(e.CURRENT_PROGRAM);e.useProgram(this.program),this.vaoGl.bindVertexArray(this.vao);var r=e.TRIANGLES;e.drawArrays(r,0,6),this.vaoGl.bindVertexArray(null),e.useProgram(t)}_renderInternalStereo(e){if("none"===e.eye)return this._renderInternal();let t=this.gl;this.vaoGl.bindVertexArray(this.vao);const r=t.getParameter(t.CURRENT_PROGRAM);t.useProgram(this.program),this._setStereoTextureBuffer("right"===e.eye?1:0);var i=t.TRIANGLES;t.drawArrays(i,0,6),this.vaoGl.bindVertexArray(null),t.useProgram(r)}_createVAOs(){this._createTextureUVs();let e=this.gl;this.vaoGl=$t(e);let t=e.createBuffer();this.vao=this.vaoGl.createVertexArray(),this.vaoGl.bindVertexArray(this.vao),e.enableVertexAttribArray(this.programInfo.attribLocations.a_position),e.bindBuffer(e.ARRAY_BUFFER,t),((e,t,r,i,s)=>{var a=t,n=t+i,o=r,h=r+s;e.bufferData(e.ARRAY_BUFFER,new Float32Array([a,o,n,o,a,h,a,h,n,o,n,h]),e.DYNAMIC_DRAW)})(e,0,0,1,1);let r=e.FLOAT;e.vertexAttribPointer(this.programInfo.attribLocations.a_position,2,r,false,0,0),this.texcoordBuffer=e.createBuffer(),e.enableVertexAttribArray(this.programInfo.attribLocations.a_texCoord),e.bindBuffer(e.ARRAY_BUFFER,this.texcoordBuffer),e.bufferData(e.ARRAY_BUFFER,this.texturePoints,e.DYNAMIC_DRAW),e.vertexAttribPointer(this.programInfo.attribLocations.a_texCoord,2,r,false,0,0),this.vaoGl.bindVertexArray(null),e.bindBuffer(e.ARRAY_BUFFER,null)}_setStereoTextureBuffer(e){let t=this.gl;t.enableVertexAttribArray(this.programInfo.attribLocations.a_texCoord),t.bindBuffer(t.ARRAY_BUFFER,this.texcoordBuffer),t.bufferData(t.ARRAY_BUFFER,this.stereoTexturePoints[e],t.STATIC_DRAW);var r=t.FLOAT;t.vertexAttribPointer(this.programInfo.attribLocations.a_texCoord,2,r,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,null)}_createTextureUVs(){this.texturePoints=new Float32Array([0,0,1,0,0,1,0,1,1,0,1,1]);const e={x:0,y:0,width:1,height:1};this._shouldUseStereoTexturePoints()&&(this.stereoTexturePoints=[],Yt(e,this.layer.colorTexturesMeta[0],this.layer.layout,0,2),this.stereoTexturePoints[0]=this._offsetTextureUVsByRect(this.layer.colorTexturesMeta[0],this.texturePoints,e),Yt(e,this.layer.colorTexturesMeta[0],this.layer.layout,1,2),this.stereoTexturePoints[1]=this._offsetTextureUVsByRect(this.layer.colorTexturesMeta[0],this.texturePoints,e))}_offsetTextureUVsByRect(e,t,r){const i=(r=null!=r?r:{x:0,y:0,width:e.width,height:e.height}).x/e.width,s=r.y/e.height,a=r.width/e.width,n=r.height/e.height,o=[];for(let e=0;e<t.length;e+=2){let r=t[e]*a+i,h=t[e+1]*n+s;o[e]=r,o[e+1]=h}return new Float32Array(o)}_shouldUseStereoTexturePoints(){return this.layer.layout===It["stereo-left-right"]||this.layer.layout===It["stereo-top-bottom"]}}const rr=Jt`#version 300 es
37
78
 
38
79
  in vec2 a_position;
39
80
  in vec2 a_texCoord;
@@ -56,7 +97,7 @@ void main() {
56
97
  // The GPU will interpolate this value between points.
57
98
  v_texCoord = a_texCoord;
58
99
  }
59
- `,ar=er`#version 300 es
100
+ `,ir=Jt`#version 300 es
60
101
  precision mediump float;
61
102
  precision mediump int;
62
103
  precision mediump sampler2DArray;
@@ -73,7 +114,7 @@ void main() {
73
114
  fragColor = vec4(tex.rgb, tex.a);
74
115
  }
75
116
 
76
- `;class nr extends ir{constructor(e,t){super(e,t),this.program=Jt(this.gl,sr,ar),this._createVAOs(),this.u_layerInfo=this.gl.getUniformLocation(this.program,"u_layer")}render(e){let t=this.gl;if(this.layer.getTextureType()===Lt.texture)throw new Error("Using texture array projection renderer on a layer without texture array.");let r=e.getBaseLayer();const i=t.getParameter(t.TEXTURE_BINDING_2D_ARRAY);t.bindTexture(t.TEXTURE_2D_ARRAY,this.layer.colorTextures[0]),t.texParameteri(t.TEXTURE_2D_ARRAY,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D_ARRAY,t.TEXTURE_MIN_FILTER,t.LINEAR);for(let i of e.internalViews){let s=e.getViewIndex(i),a=r.getViewport(i);t.viewport(a.x,a.y,a.width,a.height),this._renderInternal(s)}t.bindTexture(t.TEXTURE_2D_ARRAY,i)}_renderInternal(e=0){let t=this.gl;const r=t.getParameter(t.CURRENT_PROGRAM);t.useProgram(this.program),t.bindVertexArray(this.vao),t.uniform1i(this.u_layerInfo,e);var i=t.TRIANGLES;t.drawArrays(i,0,6),t.bindVertexArray(null),t.useProgram(r)}}const or=(e,t)=>e.getTextureType()===Lt["texture-array"]&&t instanceof WebGL2RenderingContext?new nr(e,t):new ir(e,t),hr=e=>e,lr=hr`
117
+ `;class sr extends tr{constructor(e,t){super(e,t),this.program=Kt(this.gl,rr,ir),this._createVAOs(),this.u_layerInfo=this.gl.getUniformLocation(this.program,"u_layer")}render(e){let t=this.gl;if(this.layer.getTextureType()===Ft.texture)throw new Error("Using texture array projection renderer on a layer without texture array.");let r=e.getBaseLayer();const i=t.getParameter(t.TEXTURE_BINDING_2D_ARRAY);t.bindTexture(t.TEXTURE_2D_ARRAY,this.layer.colorTextures[0]),t.texParameteri(t.TEXTURE_2D_ARRAY,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D_ARRAY,t.TEXTURE_MIN_FILTER,t.LINEAR);for(let i of e.internalViews){let s=e.getViewIndex(i),a=r.getViewport(i);t.viewport(a.x,a.y,a.width,a.height),this._renderInternal(s)}t.bindTexture(t.TEXTURE_2D_ARRAY,i)}_renderInternal(e=0){let t=this.gl;const r=t.getParameter(t.CURRENT_PROGRAM);t.useProgram(this.program),t.bindVertexArray(this.vao),t.uniform1i(this.u_layerInfo,e);var i=t.TRIANGLES;t.drawArrays(i,0,6),t.bindVertexArray(null),t.useProgram(r)}}const ar=(e,t)=>e.getTextureType()===Ft["texture-array"]&&t instanceof WebGL2RenderingContext?new sr(e,t):new tr(e,t);var nr="undefined"!=typeof Float32Array?Float32Array:Array;function or(){var e=new nr(16);return nr!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0),e[0]=1,e[5]=1,e[10]=1,e[15]=1,e}function hr(e,t,r){var i=t[0],s=t[1],a=t[2],n=t[3],o=t[4],h=t[5],l=t[6],c=t[7],u=t[8],d=t[9],p=t[10],f=t[11],m=t[12],x=t[13],g=t[14],y=t[15],v=r[0],T=r[1],w=r[2],S=r[3];return e[0]=v*i+T*o+w*u+S*m,e[1]=v*s+T*h+w*d+S*x,e[2]=v*a+T*l+w*p+S*g,e[3]=v*n+T*c+w*f+S*y,v=r[4],T=r[5],w=r[6],S=r[7],e[4]=v*i+T*o+w*u+S*m,e[5]=v*s+T*h+w*d+S*x,e[6]=v*a+T*l+w*p+S*g,e[7]=v*n+T*c+w*f+S*y,v=r[8],T=r[9],w=r[10],S=r[11],e[8]=v*i+T*o+w*u+S*m,e[9]=v*s+T*h+w*d+S*x,e[10]=v*a+T*l+w*p+S*g,e[11]=v*n+T*c+w*f+S*y,v=r[12],T=r[13],w=r[14],S=r[15],e[12]=v*i+T*o+w*u+S*m,e[13]=v*s+T*h+w*d+S*x,e[14]=v*a+T*l+w*p+S*g,e[15]=v*n+T*c+w*f+S*y,e}function lr(e,t){var r=t[0],i=t[1],s=t[2],a=t[3],n=r+r,o=i+i,h=s+s,l=r*n,c=i*n,u=i*o,d=s*n,p=s*o,f=s*h,m=a*n,x=a*o,g=a*h;return e[0]=1-u-f,e[1]=c+g,e[2]=d-x,e[3]=0,e[4]=c-g,e[5]=1-l-f,e[6]=p+m,e[7]=0,e[8]=d+x,e[9]=p-m,e[10]=1-l-u,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function cr(){var e=new nr(2);return nr!=Float32Array&&(e[0]=0,e[1]=0),e}Math.hypot||(Math.hypot=function(){for(var e=0,t=arguments.length;t--;)e+=arguments[t]*arguments[t];return Math.sqrt(e)}),function(){var e=cr()}();const ur=e=>e,dr=ur`
77
118
  attribute vec4 a_position;
78
119
  attribute vec2 a_texCoord;
79
120
 
@@ -90,7 +131,7 @@ void main() {
90
131
  // The GPU will interpolate this value between points.
91
132
  v_texCoord = a_texCoord;
92
133
  }
93
- `,ur=hr`
134
+ `,pr=ur`
94
135
  precision mediump float;
95
136
 
96
137
  // our texture
@@ -104,7 +145,7 @@ void main() {
104
145
  gl_FragColor = vec4(tex.rgb, tex.a);
105
146
  // gl_FragColor = vec4(1.0, 0, 0, 1.0);
106
147
  }
107
- `,cr=hr`#version 300 es
148
+ `,fr=ur`#version 300 es
108
149
 
109
150
  in vec4 a_position;
110
151
  in vec2 a_texCoord;
@@ -122,7 +163,7 @@ void main() {
122
163
  // The GPU will interpolate this value between points.
123
164
  v_texCoord = a_texCoord;
124
165
  }
125
- `,dr=hr`#version 300 es
166
+ `,mr=ur`#version 300 es
126
167
  precision mediump float;
127
168
  precision mediump int;
128
169
  precision mediump sampler2DArray;
@@ -139,7 +180,7 @@ void main() {
139
180
  fragColor = vec4(tex.rgb, tex.a);
140
181
  }
141
182
 
142
- `;class pr{constructor(e,t){this.usesTextureArrayShaders=!1,this.savedVaoState={vao:null,arrayBuffer:null},this.hasMipmap=!1,this.gl=t,this.layer=e;let r=this.gl;this.transformMatrix=i(),t instanceof WebGL2RenderingContext&&this.layer.getTextureType()===Lt["texture-array"]&&(this.usesTextureArrayShaders=!0),this.usesTextureArrayShaders?this.program=Jt(r,cr,dr):this.program=Jt(r,lr,ur),this.programInfo={attribLocations:{a_position:r.getAttribLocation(this.program,"a_position"),a_texCoord:r.getAttribLocation(this.program,"a_texCoord")},uniformLocations:{u_matrix:r.getUniformLocation(this.program,"u_matrix"),u_projectionMatrix:r.getUniformLocation(this.program,"u_projectionMatrix")}},this.usesTextureArrayShaders&&(this.programInfo.uniformLocations.u_layer=r.getUniformLocation(this.program,"u_layer"))}saveVaoState(){this.savedVaoState.vao=this.gl.getParameter(this.vaoGl.VERTEX_ARRAY_BINDING),this.savedVaoState.arrayBuffer=this.gl.getParameter(this.gl.ARRAY_BUFFER_BINDING)}restoreVaoState(){this.vaoGl.bindVertexArray(this.savedVaoState.vao),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.savedVaoState.arrayBuffer),this.savedVaoState.vao=this.savedVaoState.arrayBuffer=null}initialize(){let e=this.gl;if(this.layer.isMediaLayer()){this.mediaTexture=e.createTexture(),this.mediaTexturePolyfill={texture:this.mediaTexture,textureFormat:e.RGBA,width:this.layer.media.videoWidth,height:this.layer.media.videoHeight,type:Lt.texture};const t=e.getParameter(e.TEXTURE_BINDING_2D);e.bindTexture(e.TEXTURE_2D,this.mediaTexture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,this.layer.media.videoWidth,this.layer.media.videoHeight,0,e.RGBA,e.UNSIGNED_BYTE,null),e.bindTexture(e.TEXTURE_2D,t)}this._createVAOs()}render(e,t){this.saveVaoState();let r=this.gl,i=e.getBaseLayer(),s=t.getViewerPose(e.getReferenceSpace());const a=r.getParameter(r.ACTIVE_TEXTURE);for(let n of s.views){let s=i.getViewport(n);if(r.viewport(s.x,s.y,s.width,s.height),r.activeTexture(r.TEXTURE0),this.usesTextureArrayShaders){if(r instanceof WebGLRenderingContext)throw new Error("This should never happen; texture-arrays only supported on WebGL2.");if(this.layer.isMediaLayer())throw new Error("This should never happen. Media layers should never be created with texture-array");const i=r.getParameter(r.TEXTURE_BINDING_2D_ARRAY);r.bindTexture(r.TEXTURE_2D_ARRAY,this.layer.colorTextures[0]),this.layer.isStatic?(!0===this.layer.needsRedraw&&r.generateMipmap(r.TEXTURE_2D_ARRAY),this.hasMipmap=!0):this.hasMipmap=this.layer.mipLevels>0,r.texParameteri(r.TEXTURE_2D_ARRAY,r.TEXTURE_MAG_FILTER,this.hasMipmap?r.LINEAR_MIPMAP_LINEAR:r.LINEAR),r.texParameteri(r.TEXTURE_2D_ARRAY,r.TEXTURE_MIN_FILTER,this.hasMipmap?r.LINEAR_MIPMAP_LINEAR:r.LINEAR);let s=0;if(this.layer.layout===Ct.stereo&&"right"===n.eye)s=1;this._shouldUseStereoTexturePoints()?this._renderInternalStereo(e,t,n,s):this._renderInternal(e,t,n,s),r.activeTexture(a),r.bindTexture(r.TEXTURE_2D_ARRAY,i)}else{const i=r.getParameter(r.TEXTURE_BINDING_2D);if(this.layer.isMediaLayer())r.bindTexture(r.TEXTURE_2D,this.mediaTexture),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,!0),r.texSubImage2D(r.TEXTURE_2D,0,0,0,this.layer.media.videoWidth,this.layer.media.videoHeight,r.RGBA,r.UNSIGNED_BYTE,this.layer.media);else if(this.layer.layout===Ct.stereo)if("right"===n.eye)r.bindTexture(r.TEXTURE_2D,this.layer.colorTextures[1]);else r.bindTexture(r.TEXTURE_2D,this.layer.colorTextures[0]);else r.bindTexture(r.TEXTURE_2D,this.layer.colorTextures[0]);this.layer.isStatic?(!0===this.layer.needsRedraw&&r.generateMipmap(r.TEXTURE_2D),this.hasMipmap=!0):this.hasMipmap=this.layer.mipLevels>0,r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,this.hasMipmap?r.LINEAR_MIPMAP_LINEAR:r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,this.hasMipmap?r.LINEAR_MIPMAP_LINEAR:r.LINEAR),this._shouldUseStereoTexturePoints()?this._renderInternalStereo(e,t,n):this._renderInternal(e,t,n),r.activeTexture(a),r.bindTexture(r.TEXTURE_2D,i)}}this.restoreVaoState()}createPositionPoints(){return new Float32Array([])}createTextureUVs(){return new Float32Array([])}_offsetTextureUVsByRect(e,t,r){const i=(r=r??{x:0,y:0,width:e.width,height:e.height}).x/e.width,s=r.y/e.height,a=r.width/e.width,n=r.height/e.height,o=[];for(let e=0;e<t.length;e+=2){let r=t[e]*a+i,h=t[e+1]*n+s;o[e]=r,o[e+1]=h}return new Float32Array(o)}_shouldUseStereoTexturePoints(){return this.layer.layout===Ct["stereo-left-right"]||this.layer.layout===Ct["stereo-top-bottom"]}_setStereoTextureBuffer(e){let t=this.gl;t.enableVertexAttribArray(this.programInfo.attribLocations.a_texCoord),t.bindBuffer(t.ARRAY_BUFFER,this.texcoordBuffer),t.bufferData(t.ARRAY_BUFFER,this.stereoTexturePoints[e],t.STATIC_DRAW);var r=t.FLOAT;t.vertexAttribPointer(this.programInfo.attribLocations.a_texCoord,2,r,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,null)}_recalculateVertices(){this.positionPoints=this.createPositionPoints(),this.texturePoints=this.createTextureUVs();const e={x:0,y:0,width:1,height:1};if(this._shouldUseStereoTexturePoints()){if(this.stereoTexturePoints=[],this.layer.isMediaLayer())return $t(e,this.mediaTexturePolyfill,this.layer.layout,0,2),this.stereoTexturePoints[0]=this._offsetTextureUVsByRect(this.mediaTexturePolyfill,this.texturePoints,e),$t(e,this.mediaTexturePolyfill,this.layer.layout,1,2),this.stereoTexturePoints[1]=this._offsetTextureUVsByRect(this.mediaTexturePolyfill,this.texturePoints,e),void(this.layer.layout===Ct["stereo-top-bottom"]&&([this.stereoTexturePoints[0],this.stereoTexturePoints[1]]=[this.stereoTexturePoints[1],this.stereoTexturePoints[0]]));$t(e,this.layer.colorTexturesMeta[0],this.layer.layout,0,2),this.stereoTexturePoints[0]=this._offsetTextureUVsByRect(this.layer.colorTexturesMeta[0],this.texturePoints,e),$t(e,this.layer.colorTexturesMeta[0],this.layer.layout,1,2),this.stereoTexturePoints[1]=this._offsetTextureUVsByRect(this.layer.colorTexturesMeta[0],this.texturePoints,e),this.layer.layout===Ct["stereo-top-bottom"]&&([this.stereoTexturePoints[0],this.stereoTexturePoints[1]]=[this.stereoTexturePoints[1],this.stereoTexturePoints[0]])}}_createVAOs(){this._recalculateVertices();let e=this.gl;this.vaoGl=Zt(e),this.saveVaoState();let t=e.createBuffer();this.vao=this.vaoGl.createVertexArray(),this.vaoGl.bindVertexArray(this.vao),e.enableVertexAttribArray(this.programInfo.attribLocations.a_position),e.bindBuffer(e.ARRAY_BUFFER,t);const r=this.positionPoints;e.bufferData(e.ARRAY_BUFFER,r,e.STATIC_DRAW);var i=3,s=e.FLOAT,a=!1,n=0,o=0;e.vertexAttribPointer(this.programInfo.attribLocations.a_position,i,s,a,n,o),e.enableVertexAttribArray(this.programInfo.attribLocations.a_texCoord),this.texcoordBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,this.texcoordBuffer),e.bufferData(e.ARRAY_BUFFER,this.texturePoints,e.STATIC_DRAW);i=2,s=e.FLOAT,a=!1,n=0,o=0;e.vertexAttribPointer(this.programInfo.attribLocations.a_texCoord,i,s,a,n,o),this.restoreVaoState()}_renderInternal(e,t,r,i){let s=this.gl;const a=s.getParameter(s.CURRENT_PROGRAM);s.useProgram(this.program),this.vaoGl.bindVertexArray(this.vao),this.usesTextureArrayShaders&&s.uniform1i(this.programInfo.uniformLocations.u_layer,i),this._setTransformMatrix(e,t,r),s.uniformMatrix4fv(this.programInfo.uniformLocations.u_matrix,!1,this.transformMatrix),s.uniformMatrix4fv(this.programInfo.uniformLocations.u_projectionMatrix,!1,r.projectionMatrix);var n=s.TRIANGLES,o=this.positionPoints.length/3;s.drawArrays(n,0,o),this.vaoGl.bindVertexArray(null),s.useProgram(a)}_renderInternalStereo(e,t,r,i){if("none"===r.eye)return this._renderInternal(e,t,r);let s=this.gl;this.vaoGl.bindVertexArray(this.vao);const a=s.getParameter(s.CURRENT_PROGRAM);s.useProgram(this.program),this._setStereoTextureBuffer("right"===r.eye?1:0),this.usesTextureArrayShaders&&s.uniform1i(this.programInfo.uniformLocations.u_layer,i),this._setTransformMatrix(e,t,r),s.uniformMatrix4fv(this.programInfo.uniformLocations.u_matrix,!1,this.transformMatrix),s.uniformMatrix4fv(this.programInfo.uniformLocations.u_projectionMatrix,!1,r.projectionMatrix);var n=s.TRIANGLES,o=this.positionPoints.length/3;s.drawArrays(n,0,o),this.vaoGl.bindVertexArray(null),s.useProgram(a)}_setTransformMatrix(e,t,r){let i=t.getPose(this.layer.space,e.getReferenceSpace());o(this.transformMatrix,i.transform.matrix,this.layer.transform.matrix),o(this.transformMatrix,r.transform.inverse.matrix,this.transformMatrix)}}class fr extends pr{constructor(e,t){super(e,t),this.initialize()}createPositionPoints(){const e=this.layer.width,t=this.layer.height;return new Float32Array([-e,-t,0,e,-t,0,-e,t,0,-e,t,0,e,-t,0,e,t,0])}createTextureUVs(){return new Float32Array([0,0,1,0,0,1,0,1,1,0,1,1])}}class mr extends pr{constructor(e,t){super(e,t),this.segments=16,this.initialize()}createPositionPoints(){const e=[],t=this.layer.centralAngle,r=this.layer.height,i=this.layer.radius,s=t/this.segments,a=Math.PI/2-t/2,n=[],o=D();o[0]=i*Math.cos(a),o[1]=-i*Math.sin(a),n.push(o);for(let e=0;e<this.segments;e++){const t=D();t[0]=i*Math.cos(a+s*(e+1)),t[1]=-i*Math.sin(a+s*(e+1)),n.push(t)}n.reverse();for(let t=0;t<this.segments;t++){const i=n[t],s=n[t+1];e.push(i[0],-r/2,i[1]),e.push(s[0],-r/2,s[1]),e.push(i[0],r/2,i[1]),e.push(i[0],r/2,i[1]),e.push(s[0],-r/2,s[1]),e.push(s[0],r/2,s[1])}return new Float32Array(e)}createTextureUVs(){let e=[];const t=1/this.segments;for(let r=0;r<this.segments;r++){let i=t*r,s=t*(r+1);e.push(i,0),e.push(s,0),e.push(i,1),e.push(i,1),e.push(s,0),e.push(s,1)}return new Float32Array(e)}}class xr extends pr{constructor(e,t){super(e,t),this.segmentsPerAxis=40,this.initialize()}createPositionPoints(){const e=[];let t=this.layer.radius;0===t&&(t=25),t>25&&(t=25);const r=this.layer.centralHorizontalAngle,i=this.layer.upperVerticalAngle+Math.PI/2,s=this.layer.lowerVerticalAngle+Math.PI/2,a=Math.PI/2-r/2,n=a+r,o=s-i,h=n-a,l=[];for(let e=0;e<=this.segmentsPerAxis;e++)for(let r=0;r<=this.segmentsPerAxis;r++){let s=t,a=n-h*(r/this.segmentsPerAxis),u=o*(e/this.segmentsPerAxis)+i;const c=Math.cos(a)*Math.sin(u),d=Math.cos(u),p=-Math.sin(a)*Math.sin(u);l.push([s*c,s*d,s*p])}const u=this.segmentsPerAxis+1;for(let t=0;t<this.segmentsPerAxis;t++)for(let r=0;r<this.segmentsPerAxis;r++)e.push(...l[r*u+t]),e.push(...l[r*u+t+1]),e.push(...l[(r+1)*u+t]),e.push(...l[(r+1)*u+t]),e.push(...l[r*u+t+1]),e.push(...l[(r+1)*u+t+1]);return new Float32Array(e)}createTextureUVs(){const e=[],t=[];for(let e=0;e<=this.segmentsPerAxis;e++)for(let r=0;r<=this.segmentsPerAxis;r++){const i=r/this.segmentsPerAxis,s=e/this.segmentsPerAxis;t.push([i,s])}const r=this.segmentsPerAxis+1;for(let i=0;i<this.segmentsPerAxis;i++)for(let s=0;s<this.segmentsPerAxis;s++)e.push(...t[s*r+i]),e.push(...t[s*r+i+1]),e.push(...t[(s+1)*r+i]),e.push(...t[(s+1)*r+i]),e.push(...t[s*r+i+1]),e.push(...t[(s+1)*r+i+1]);return new Float32Array(e)}}const gr={colorFormat:6408,mipLevels:1,layout:Ct.mono,isStatic:!1,space:null,viewPixelHeight:0,viewPixelWidth:0};class yr extends Ot{constructor(e=gr){if(super(),!Nt(e.space))throw new TypeError("XRCubeLayer's space needs to be an XRReferenceSpace");switch(this.init={...gr,...e},this.space=this.init.space,this.isStatic=this.init.isStatic,this.init.orientation?this.orientation=DOMPointReadOnly.fromPoint(this.init.orientation):this.orientation=new DOMPointReadOnly,this.init.layout){case Ct.default:case Ct["stereo-left-right"]:case Ct["stereo-top-bottom"]:throw new TypeError("Invalid layout format for XRCubeLayer")}this.layout=this.init.layout,this.needsRedraw=!0}initialize(e,t){super.initialize(e,t),this._allocateColorTexturesInternal(),this._allocateDepthStencilTexturesInternal()}_allocateColorTexturesInternal(){if(this._colorTextures=[],this._texturesMeta=[],this.layout===Ct.mono){const e=this._createCubeColorTexture();return this._texturesMeta.push(e),void this._colorTextures.push(e.texture)}{const e=this._createCubeColorTexture(),t=this._createCubeColorTexture();return this._texturesMeta.push(e,t),void this._colorTextures.push(e.texture,t.texture)}}_allocateDepthStencilTexturesInternal(){if(this._depthStencilTextures=[],this.init.depthFormat){if(this.context instanceof WebGLRenderingContext){if(!this.context.getExtension("WEBGL_depth_texture"))throw new TypeError("Depth textures not supported in the current context")}if(this.layout===Ct.mono){const e=this._createCubeDepthTexture();return void this._depthStencilTextures.push(e.texture)}{const e=this._createCubeDepthTexture(),t=this._createCubeDepthTexture();return void this._depthStencilTextures.push(e.texture,t.texture)}}}_createCubeColorTexture(){let e=this.context.createTexture(),t={width:this.init.viewPixelWidth,height:this.init.viewPixelHeight,layers:1,type:Lt.texture,textureFormat:this.init.colorFormat,texture:e};const r=this.context.getParameter(this.context.TEXTURE_BINDING_CUBE_MAP);this.context.bindTexture(this.context.TEXTURE_CUBE_MAP,e);for(let e=0;e<6;e++)this.context.texImage2D(this.context.TEXTURE_CUBE_MAP_POSITIVE_X+e,0,t.textureFormat,t.width,t.height,0,t.textureFormat,this.context.UNSIGNED_BYTE,null);return this.context.bindTexture(this.context.TEXTURE_CUBE_MAP,r),t}_createCubeDepthTexture(){let e=this.context.createTexture(),t={width:this.init.viewPixelWidth,height:this.init.viewPixelHeight,layers:1,type:Lt.texture,textureFormat:this.init.depthFormat,texture:e};const r=this.context.getParameter(this.context.TEXTURE_BINDING_CUBE_MAP);this.context.bindTexture(this.context.TEXTURE_CUBE_MAP,e);let i=this.init.depthFormat;this.context instanceof WebGL2RenderingContext&&(i===this.context.DEPTH_COMPONENT&&(i=this.context.DEPTH_COMPONENT24),i===this.context.DEPTH_STENCIL&&(i=this.context.DEPTH24_STENCIL8));for(let e=0;e<6;e++)this.context.texImage2D(this.context.TEXTURE_CUBE_MAP_POSITIVE_X+e,0,i,t.width,t.height,0,t.textureFormat,this.context.UNSIGNED_INT,null);return this.context.bindTexture(this.context.TEXTURE_CUBE_MAP,r),t}getTextureType(){return Lt.texture}}const vr=e=>e,Tr=vr`
183
+ `;class xr{constructor(e,t){this.usesTextureArrayShaders=!1,this.savedVaoState={vao:null,arrayBuffer:null},this.hasMipmap=!1,this.gl=t,this.layer=e;let r=this.gl;this.transformMatrix=or(),t instanceof WebGL2RenderingContext&&this.layer.getTextureType()===Ft["texture-array"]&&(this.usesTextureArrayShaders=!0),this.usesTextureArrayShaders?this.program=Kt(r,fr,mr):this.program=Kt(r,dr,pr),this.programInfo={attribLocations:{a_position:r.getAttribLocation(this.program,"a_position"),a_texCoord:r.getAttribLocation(this.program,"a_texCoord")},uniformLocations:{u_matrix:r.getUniformLocation(this.program,"u_matrix"),u_projectionMatrix:r.getUniformLocation(this.program,"u_projectionMatrix")}},this.usesTextureArrayShaders&&(this.programInfo.uniformLocations.u_layer=r.getUniformLocation(this.program,"u_layer"))}saveVaoState(){this.savedVaoState.vao=this.gl.getParameter(this.vaoGl.VERTEX_ARRAY_BINDING),this.savedVaoState.arrayBuffer=this.gl.getParameter(this.gl.ARRAY_BUFFER_BINDING)}restoreVaoState(){this.vaoGl.bindVertexArray(this.savedVaoState.vao),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.savedVaoState.arrayBuffer),this.savedVaoState.vao=this.savedVaoState.arrayBuffer=null}initialize(){let e=this.gl;if(this.layer.isMediaLayer()){this.mediaTexture=e.createTexture(),this.mediaTexturePolyfill={texture:this.mediaTexture,textureFormat:e.RGBA,width:this.layer.media.videoWidth,height:this.layer.media.videoHeight,type:Ft.texture};const t=e.getParameter(e.TEXTURE_BINDING_2D);e.bindTexture(e.TEXTURE_2D,this.mediaTexture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,this.layer.media.videoWidth,this.layer.media.videoHeight,0,e.RGBA,e.UNSIGNED_BYTE,null),e.bindTexture(e.TEXTURE_2D,t)}this._createVAOs()}render(e,t){this.saveVaoState();let r=this.gl,i=e.getBaseLayer(),s=t.getViewerPose(e.getReferenceSpace());const a=r.getParameter(r.ACTIVE_TEXTURE);for(let n of s.views){let s=i.getViewport(n);if(r.viewport(s.x,s.y,s.width,s.height),r.activeTexture(r.TEXTURE0),this.usesTextureArrayShaders){if(r instanceof WebGLRenderingContext)throw new Error("This should never happen; texture-arrays only supported on WebGL2.");if(this.layer.isMediaLayer())throw new Error("This should never happen. Media layers should never be created with texture-array");const i=r.getParameter(r.TEXTURE_BINDING_2D_ARRAY);r.bindTexture(r.TEXTURE_2D_ARRAY,this.layer.colorTextures[0]),this.layer.isStatic?(!0===this.layer.needsRedraw&&r.generateMipmap(r.TEXTURE_2D_ARRAY),this.hasMipmap=!0):this.hasMipmap=this.layer.mipLevels>0,r.texParameteri(r.TEXTURE_2D_ARRAY,r.TEXTURE_MAG_FILTER,this.hasMipmap?r.LINEAR_MIPMAP_LINEAR:r.LINEAR),r.texParameteri(r.TEXTURE_2D_ARRAY,r.TEXTURE_MIN_FILTER,this.hasMipmap?r.LINEAR_MIPMAP_LINEAR:r.LINEAR);let s=0;if(this.layer.layout===It.stereo&&"right"===n.eye)s=1;this._shouldUseStereoTexturePoints()?this._renderInternalStereo(e,t,n,s):this._renderInternal(e,t,n,s),r.activeTexture(a),r.bindTexture(r.TEXTURE_2D_ARRAY,i)}else{const i=r.getParameter(r.TEXTURE_BINDING_2D);if(this.layer.isMediaLayer())r.bindTexture(r.TEXTURE_2D,this.mediaTexture),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,!0),r.texSubImage2D(r.TEXTURE_2D,0,0,0,this.layer.media.videoWidth,this.layer.media.videoHeight,r.RGBA,r.UNSIGNED_BYTE,this.layer.media);else if(this.layer.layout===It.stereo)if("right"===n.eye)r.bindTexture(r.TEXTURE_2D,this.layer.colorTextures[1]);else r.bindTexture(r.TEXTURE_2D,this.layer.colorTextures[0]);else r.bindTexture(r.TEXTURE_2D,this.layer.colorTextures[0]);this.layer.isStatic?(!0===this.layer.needsRedraw&&r.generateMipmap(r.TEXTURE_2D),this.hasMipmap=!0):this.hasMipmap=this.layer.mipLevels>0,r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,this.hasMipmap?r.LINEAR_MIPMAP_LINEAR:r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,this.hasMipmap?r.LINEAR_MIPMAP_LINEAR:r.LINEAR),this._shouldUseStereoTexturePoints()?this._renderInternalStereo(e,t,n):this._renderInternal(e,t,n),r.activeTexture(a),r.bindTexture(r.TEXTURE_2D,i)}}this.restoreVaoState()}createPositionPoints(){return new Float32Array([])}createTextureUVs(){return new Float32Array([])}_offsetTextureUVsByRect(e,t,r){const i=(r=null!=r?r:{x:0,y:0,width:e.width,height:e.height}).x/e.width,s=r.y/e.height,a=r.width/e.width,n=r.height/e.height,o=[];for(let e=0;e<t.length;e+=2){let r=t[e]*a+i,h=t[e+1]*n+s;o[e]=r,o[e+1]=h}return new Float32Array(o)}_shouldUseStereoTexturePoints(){return this.layer.layout===It["stereo-left-right"]||this.layer.layout===It["stereo-top-bottom"]}_setStereoTextureBuffer(e){let t=this.gl;t.enableVertexAttribArray(this.programInfo.attribLocations.a_texCoord),t.bindBuffer(t.ARRAY_BUFFER,this.texcoordBuffer),t.bufferData(t.ARRAY_BUFFER,this.stereoTexturePoints[e],t.STATIC_DRAW);var r=t.FLOAT;t.vertexAttribPointer(this.programInfo.attribLocations.a_texCoord,2,r,!1,0,0),t.bindBuffer(t.ARRAY_BUFFER,null)}_recalculateVertices(){this.positionPoints=this.createPositionPoints(),this.texturePoints=this.createTextureUVs();const e={x:0,y:0,width:1,height:1};if(this._shouldUseStereoTexturePoints()){if(this.stereoTexturePoints=[],this.layer.isMediaLayer())return Yt(e,this.mediaTexturePolyfill,this.layer.layout,0,2),this.stereoTexturePoints[0]=this._offsetTextureUVsByRect(this.mediaTexturePolyfill,this.texturePoints,e),Yt(e,this.mediaTexturePolyfill,this.layer.layout,1,2),this.stereoTexturePoints[1]=this._offsetTextureUVsByRect(this.mediaTexturePolyfill,this.texturePoints,e),void(this.layer.layout===It["stereo-top-bottom"]&&([this.stereoTexturePoints[0],this.stereoTexturePoints[1]]=[this.stereoTexturePoints[1],this.stereoTexturePoints[0]]));Yt(e,this.layer.colorTexturesMeta[0],this.layer.layout,0,2),this.stereoTexturePoints[0]=this._offsetTextureUVsByRect(this.layer.colorTexturesMeta[0],this.texturePoints,e),Yt(e,this.layer.colorTexturesMeta[0],this.layer.layout,1,2),this.stereoTexturePoints[1]=this._offsetTextureUVsByRect(this.layer.colorTexturesMeta[0],this.texturePoints,e),this.layer.layout===It["stereo-top-bottom"]&&([this.stereoTexturePoints[0],this.stereoTexturePoints[1]]=[this.stereoTexturePoints[1],this.stereoTexturePoints[0]])}}_createVAOs(){this._recalculateVertices();let e=this.gl;this.vaoGl=$t(e),this.saveVaoState();let t=e.createBuffer();this.vao=this.vaoGl.createVertexArray(),this.vaoGl.bindVertexArray(this.vao),e.enableVertexAttribArray(this.programInfo.attribLocations.a_position),e.bindBuffer(e.ARRAY_BUFFER,t);const r=this.positionPoints;e.bufferData(e.ARRAY_BUFFER,r,e.STATIC_DRAW);var i=3,s=e.FLOAT,a=!1,n=0,o=0;e.vertexAttribPointer(this.programInfo.attribLocations.a_position,i,s,a,n,o),e.enableVertexAttribArray(this.programInfo.attribLocations.a_texCoord),this.texcoordBuffer=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,this.texcoordBuffer),e.bufferData(e.ARRAY_BUFFER,this.texturePoints,e.STATIC_DRAW);i=2,s=e.FLOAT,a=!1,n=0,o=0;e.vertexAttribPointer(this.programInfo.attribLocations.a_texCoord,i,s,a,n,o),this.restoreVaoState()}_renderInternal(e,t,r,i){let s=this.gl;const a=s.getParameter(s.CURRENT_PROGRAM);s.useProgram(this.program),this.vaoGl.bindVertexArray(this.vao),this.usesTextureArrayShaders&&s.uniform1i(this.programInfo.uniformLocations.u_layer,i),this._setTransformMatrix(e,t,r),s.uniformMatrix4fv(this.programInfo.uniformLocations.u_matrix,!1,this.transformMatrix),s.uniformMatrix4fv(this.programInfo.uniformLocations.u_projectionMatrix,!1,r.projectionMatrix);var n=s.TRIANGLES,o=this.positionPoints.length/3;s.drawArrays(n,0,o),this.vaoGl.bindVertexArray(null),s.useProgram(a)}_renderInternalStereo(e,t,r,i){if("none"===r.eye)return this._renderInternal(e,t,r);let s=this.gl;this.vaoGl.bindVertexArray(this.vao);const a=s.getParameter(s.CURRENT_PROGRAM);s.useProgram(this.program),this._setStereoTextureBuffer("right"===r.eye?1:0),this.usesTextureArrayShaders&&s.uniform1i(this.programInfo.uniformLocations.u_layer,i),this._setTransformMatrix(e,t,r),s.uniformMatrix4fv(this.programInfo.uniformLocations.u_matrix,!1,this.transformMatrix),s.uniformMatrix4fv(this.programInfo.uniformLocations.u_projectionMatrix,!1,r.projectionMatrix);var n=s.TRIANGLES,o=this.positionPoints.length/3;s.drawArrays(n,0,o),this.vaoGl.bindVertexArray(null),s.useProgram(a)}_setTransformMatrix(e,t,r){let i=t.getPose(this.layer.space,e.getReferenceSpace());hr(this.transformMatrix,i.transform.matrix,this.layer.transform.matrix),hr(this.transformMatrix,r.transform.inverse.matrix,this.transformMatrix)}}class gr extends xr{constructor(e,t){super(e,t),this.initialize()}createPositionPoints(){const e=this.layer.width,t=this.layer.height;return new Float32Array([-e,-t,0,e,-t,0,-e,t,0,-e,t,0,e,-t,0,e,t,0])}createTextureUVs(){return new Float32Array([0,0,1,0,0,1,0,1,1,0,1,1])}}class yr extends xr{constructor(e,t){super(e,t),this.segments=16,this.initialize()}createPositionPoints(){const e=[],t=this.layer.centralAngle,r=this.layer.height,i=this.layer.radius,s=t/this.segments,a=Math.PI/2-t/2,n=[],o=cr();o[0]=i*Math.cos(a),o[1]=-i*Math.sin(a),n.push(o);for(let e=0;e<this.segments;e++){const t=cr();t[0]=i*Math.cos(a+s*(e+1)),t[1]=-i*Math.sin(a+s*(e+1)),n.push(t)}n.reverse();for(let t=0;t<this.segments;t++){const i=n[t],s=n[t+1];e.push(i[0],-r/2,i[1]),e.push(s[0],-r/2,s[1]),e.push(i[0],r/2,i[1]),e.push(i[0],r/2,i[1]),e.push(s[0],-r/2,s[1]),e.push(s[0],r/2,s[1])}return new Float32Array(e)}createTextureUVs(){let e=[];const t=1/this.segments;for(let r=0;r<this.segments;r++){let i=t*r,s=t*(r+1);e.push(i,0),e.push(s,0),e.push(i,1),e.push(i,1),e.push(s,0),e.push(s,1)}return new Float32Array(e)}}class vr extends xr{constructor(e,t){super(e,t),this.segmentsPerAxis=40,this.initialize()}createPositionPoints(){const e=[];let t=this.layer.radius;0===t&&(t=25),t>25&&(t=25);const r=this.layer.centralHorizontalAngle,i=this.layer.upperVerticalAngle+Math.PI/2,s=this.layer.lowerVerticalAngle+Math.PI/2,a=Math.PI/2-r/2,n=a+r,o=s-i,h=n-a,l=[];for(let e=0;e<=this.segmentsPerAxis;e++)for(let r=0;r<=this.segmentsPerAxis;r++){let s=t,a=n-h*(r/this.segmentsPerAxis),c=o*(e/this.segmentsPerAxis)+i;const u=Math.cos(a)*Math.sin(c),d=Math.cos(c),p=-Math.sin(a)*Math.sin(c);l.push([s*u,s*d,s*p])}const c=this.segmentsPerAxis+1;for(let t=0;t<this.segmentsPerAxis;t++)for(let r=0;r<this.segmentsPerAxis;r++)e.push(...l[r*c+t]),e.push(...l[r*c+t+1]),e.push(...l[(r+1)*c+t]),e.push(...l[(r+1)*c+t]),e.push(...l[r*c+t+1]),e.push(...l[(r+1)*c+t+1]);return new Float32Array(e)}createTextureUVs(){const e=[],t=[];for(let e=0;e<=this.segmentsPerAxis;e++)for(let r=0;r<=this.segmentsPerAxis;r++){const i=r/this.segmentsPerAxis,s=e/this.segmentsPerAxis;t.push([i,s])}const r=this.segmentsPerAxis+1;for(let i=0;i<this.segmentsPerAxis;i++)for(let s=0;s<this.segmentsPerAxis;s++)e.push(...t[s*r+i]),e.push(...t[s*r+i+1]),e.push(...t[(s+1)*r+i]),e.push(...t[(s+1)*r+i]),e.push(...t[s*r+i+1]),e.push(...t[(s+1)*r+i+1]);return new Float32Array(e)}}const Tr={colorFormat:6408,mipLevels:1,layout:It.mono,isStatic:!1,space:null,viewPixelHeight:0,viewPixelWidth:0};class wr extends Dt{constructor(e=Tr){if(super(),!Lt(e.space))throw new TypeError("XRCubeLayer's space needs to be an XRReferenceSpace");switch(this.init=Object.assign(Object.assign({},Tr),e),this.space=this.init.space,this.isStatic=this.init.isStatic,this.init.orientation?this.orientation=DOMPointReadOnly.fromPoint(this.init.orientation):this.orientation=new DOMPointReadOnly,this.init.layout){case It.default:case It["stereo-left-right"]:case It["stereo-top-bottom"]:throw new TypeError("Invalid layout format for XRCubeLayer")}this.layout=this.init.layout,this.needsRedraw=!0}initialize(e,t){super.initialize(e,t),this._allocateColorTexturesInternal(),this._allocateDepthStencilTexturesInternal()}_allocateColorTexturesInternal(){if(this._colorTextures=[],this._texturesMeta=[],this.layout===It.mono){const e=this._createCubeColorTexture();return this._texturesMeta.push(e),void this._colorTextures.push(e.texture)}{const e=this._createCubeColorTexture(),t=this._createCubeColorTexture();return this._texturesMeta.push(e,t),void this._colorTextures.push(e.texture,t.texture)}}_allocateDepthStencilTexturesInternal(){if(this._depthStencilTextures=[],this.init.depthFormat){if(this.context instanceof WebGLRenderingContext){if(!this.context.getExtension("WEBGL_depth_texture"))throw new TypeError("Depth textures not supported in the current context")}if(this.layout!==It.mono){const e=this._createCubeDepthTexture(),t=this._createCubeDepthTexture();return void this._depthStencilTextures.push(e.texture,t.texture)}{const e=this._createCubeDepthTexture();this._depthStencilTextures.push(e.texture)}}}_createCubeColorTexture(){let e=this.context.createTexture(),t={width:this.init.viewPixelWidth,height:this.init.viewPixelHeight,layers:1,type:Ft.texture,textureFormat:this.init.colorFormat,texture:e};const r=this.context.getParameter(this.context.TEXTURE_BINDING_CUBE_MAP);this.context.bindTexture(this.context.TEXTURE_CUBE_MAP,e);for(let e=0;e<6;e++)this.context.texImage2D(this.context.TEXTURE_CUBE_MAP_POSITIVE_X+e,0,t.textureFormat,t.width,t.height,0,t.textureFormat,this.context.UNSIGNED_BYTE,null);return this.context.bindTexture(this.context.TEXTURE_CUBE_MAP,r),t}_createCubeDepthTexture(){let e=this.context.createTexture(),t={width:this.init.viewPixelWidth,height:this.init.viewPixelHeight,layers:1,type:Ft.texture,textureFormat:this.init.depthFormat,texture:e};const r=this.context.getParameter(this.context.TEXTURE_BINDING_CUBE_MAP);this.context.bindTexture(this.context.TEXTURE_CUBE_MAP,e);let i=this.init.depthFormat;this.context instanceof WebGL2RenderingContext&&(i===this.context.DEPTH_COMPONENT&&(i=this.context.DEPTH_COMPONENT24),i===this.context.DEPTH_STENCIL&&(i=this.context.DEPTH24_STENCIL8));for(let e=0;e<6;e++)this.context.texImage2D(this.context.TEXTURE_CUBE_MAP_POSITIVE_X+e,0,i,t.width,t.height,0,t.textureFormat,this.context.UNSIGNED_INT,null);return this.context.bindTexture(this.context.TEXTURE_CUBE_MAP,r),t}getTextureType(){return Ft.texture}}const Sr=e=>e,Rr=Sr`
143
184
  attribute vec4 a_position;
144
185
  uniform mat4 u_projectionMatrix;
145
186
  uniform mat4 u_matrix;
@@ -150,7 +191,7 @@ void main() {
150
191
 
151
192
  v_normal = normalize(a_position.xyz);
152
193
  }
153
- `,Rr=vr`
194
+ `,Er=Sr`
154
195
  precision mediump float;
155
196
 
156
197
  varying vec3 v_normal;
@@ -160,4 +201,4 @@ uniform samplerCube u_texture;
160
201
  void main() {
161
202
  gl_FragColor = textureCube(u_texture, normalize(v_normal));
162
203
  }
163
- `;class wr{constructor(e,t){this.savedVaoState={vao:null,arrayBuffer:null},this.hasMipmap=!1,this.layer=e,this.gl=t,this.transformMatrix=i(),this.program=Jt(t,Tr,Rr),this.programInfo={attribLocations:{a_position:t.getAttribLocation(this.program,"a_position")},uniformLocations:{u_matrix:t.getUniformLocation(this.program,"u_matrix"),u_texture:t.getUniformLocation(this.program,"u_texture"),u_projectionMatrix:t.getUniformLocation(this.program,"u_projectionMatrix")}},this._createVAOs()}saveVaoState(){this.savedVaoState.vao=this.gl.getParameter(this.vaoGl.VERTEX_ARRAY_BINDING),this.savedVaoState.arrayBuffer=this.gl.getParameter(this.gl.ARRAY_BUFFER_BINDING)}restoreVaoState(){this.vaoGl.bindVertexArray(this.savedVaoState.vao),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.savedVaoState.arrayBuffer),this.savedVaoState.vao=this.savedVaoState.arrayBuffer=null}render(e,t){this.saveVaoState();let r=this.gl,i=e.getBaseLayer(),s=t.getViewerPose(e.getReferenceSpace());const a=r.getParameter(r.ACTIVE_TEXTURE);for(let e of s.views){let t=i.getViewport(e);r.viewport(t.x,t.y,t.width,t.height),r.activeTexture(r.TEXTURE0);const s=r.getParameter(r.TEXTURE_BINDING_CUBE_MAP);if(this.layer.layout===Ct.stereo){const t="right"===e.eye?1:0;r.bindTexture(r.TEXTURE_CUBE_MAP,this.layer.colorTextures[t])}else r.bindTexture(r.TEXTURE_CUBE_MAP,this.layer.colorTextures[0]);this.layer.isStatic?(!0===this.layer.needsRedraw&&r.generateMipmap(r.TEXTURE_CUBE_MAP),this.hasMipmap=!0):this.hasMipmap=this.layer.mipLevels>0,r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_MAG_FILTER,this.hasMipmap?r.LINEAR_MIPMAP_LINEAR:r.LINEAR),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_MIN_FILTER,this.hasMipmap?r.LINEAR_MIPMAP_LINEAR:r.LINEAR),this._renderInternal(this.layer.orientation,e),r.activeTexture(a),r.bindTexture(r.TEXTURE_CUBE_MAP,s)}this.restoreVaoState()}createPositionPoints(){const e=.5;return new Float32Array([-e,-e,-e,-e,e,-e,e,-e,-e,-e,e,-e,e,e,-e,e,-e,-e,-e,-e,e,e,-e,e,-e,e,e,-e,e,e,e,-e,e,e,e,e,-e,e,-e,-e,e,e,e,e,-e,-e,e,e,e,e,e,e,e,-e,-e,-e,-e,e,-e,-e,-e,-e,e,-e,-e,e,e,-e,-e,e,-e,e,-e,-e,-e,-e,-e,e,-e,e,-e,-e,-e,e,-e,e,e,-e,e,-e,e,-e,-e,e,e,-e,e,-e,e,e,-e,e,e,e,-e,e,e,e])}_renderInternal(e,t){let r=this.gl;const s=r.getParameter(r.CURRENT_PROGRAM);r.useProgram(this.program),this.vaoGl.bindVertexArray(this.vao),f(this.transformMatrix,[e.x,e.y,e.z,e.w]),this._poseOrientationMatrix||(this._poseOrientationMatrix=i()),f(this._poseOrientationMatrix,[t.transform.inverse.orientation.x,t.transform.inverse.orientation.y,t.transform.inverse.orientation.z,t.transform.inverse.orientation.w]),o(this.transformMatrix,this.transformMatrix,this._poseOrientationMatrix),r.uniformMatrix4fv(this.programInfo.uniformLocations.u_matrix,!1,this.transformMatrix),r.uniformMatrix4fv(this.programInfo.uniformLocations.u_projectionMatrix,!1,t.projectionMatrix),r.uniform1i(this.programInfo.uniformLocations.u_texture,0);var a=r.TRIANGLES,n=this.positionPoints.length/3;r.drawArrays(a,0,n),this.vaoGl.bindVertexArray(null),r.useProgram(s)}_recalculateVertices(){this.positionPoints=this.createPositionPoints()}_createVAOs(){this._recalculateVertices();let e=this.gl;this.vaoGl=Zt(e),this.saveVaoState();let t=e.createBuffer();this.vao=this.vaoGl.createVertexArray(),this.vaoGl.bindVertexArray(this.vao),e.enableVertexAttribArray(this.programInfo.attribLocations.a_position),e.bindBuffer(e.ARRAY_BUFFER,t);const r=this.positionPoints;e.bufferData(e.ARRAY_BUFFER,r,e.STATIC_DRAW);var i=e.FLOAT;e.vertexAttribPointer(this.programInfo.attribLocations.a_position,3,i,!1,0,0),this.restoreVaoState()}}class Er{constructor(){this.mode="inline",this.layers=[],this.views=[],this.initializedViews=!1,this.isPolyfillActive=!1,this.taskQueue=[]}requestAnimationFrame(e){this.injectedFrameCallback||(this.injectedFrameCallback=(t,r)=>{let i=this.context;if(!this.initializedViews&&this.referenceSpace){let e=r.getViewerPose(this.referenceSpace);e&&(this.views=e.views,this.initializedViews=!0)}if(this.isPolyfillActive&&this.initializedViews){this.tempFramebuffer||(this.tempFramebuffer=i.createFramebuffer()),i.bindFramebuffer(i.FRAMEBUFFER,this.tempFramebuffer);const e=i.getParameter(i.COLOR_CLEAR_VALUE),t=i.getParameter(i.FRAMEBUFFER_BINDING);i.clearColor(0,0,0,0);for(let e of this.layers)if(e instanceof Qt&&e.colorTextures&&e.colorTexturesMeta&&0!==e.colorTextures.length)for(let t=0;t<e.colorTextures.length;t++){let r=e.colorTexturesMeta[t].type,s=e.colorTexturesMeta[t];r===Lt["texture-array"]||(s._autoAntialiasing&&s._msaaFramebuffer?(i.bindFramebuffer(i.FRAMEBUFFER,s._msaaFramebuffer),i.clear(i.COLOR_BUFFER_BIT|i.DEPTH_BUFFER_BIT)):(i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,e.colorTextures[t],0),e.depthStencilTextures&&t<e.depthStencilTextures.length?i.framebufferTexture2D(i.FRAMEBUFFER,i.DEPTH_ATTACHMENT,i.TEXTURE_2D,e.depthStencilTextures[t],0):i.framebufferTexture2D(i.FRAMEBUFFER,i.DEPTH_ATTACHMENT,i.TEXTURE_2D,null,0),i.clear(i.COLOR_BUFFER_BIT|i.DEPTH_BUFFER_BIT)))}i.bindFramebuffer(i.FRAMEBUFFER,t),i.clearColor(e[0],e[1],e[2],e[3])}if(e(t,r),this.isPolyfillActive&&this.initializedViews&&this._autoResolveMSAAFramebuffers(),this.isPolyfillActive&&this.initializedViews){let e=i.isEnabled(i.BLEND),t=i.isEnabled(i.DEPTH_TEST),s=i.isEnabled(i.CULL_FACE);const a=i.getParameter(i.FRAMEBUFFER_BINDING),n=i.getParameter(i.COLOR_CLEAR_VALUE);i.bindFramebuffer(i.FRAMEBUFFER,this.getBaseLayer().framebuffer),i.clear(i.COLOR_BUFFER_BIT|i.DEPTH_BUFFER_BIT),i.clearColor(n[0],n[1],n[2],n[3]),i.enable(i.BLEND),i.disable(i.DEPTH_TEST),i.disable(i.CULL_FACE);let o=i.getParameter(i.BLEND_SRC_RGB),h=i.getParameter(i.BLEND_SRC_ALPHA),l=i.getParameter(i.BLEND_DST_RGB),u=i.getParameter(i.BLEND_DST_ALPHA);i.blendFunc(i.SRC_ALPHA,i.ONE_MINUS_SRC_ALPHA);for(let e of this.layers)if(this.renderers||(this.renderers=new WeakMap),e instanceof Qt){this.renderers.has(e)||this.renderers.set(e,or(e,this.context));this.renderers.get(e).render(this)}else if(e instanceof Wt){this.renderers.has(e)||this.renderers.set(e,new fr(e,this.context));this.renderers.get(e).render(this,r)}else if(e instanceof Xt){this.renderers.has(e)||this.renderers.set(e,new mr(e,this.context));this.renderers.get(e).render(this,r)}else if(e instanceof zt){this.renderers.has(e)||this.renderers.set(e,new xr(e,this.context));this.renderers.get(e).render(this,r)}else if(e instanceof yr){this.renderers.has(e)||this.renderers.set(e,new wr(e,this.context));this.renderers.get(e).render(this,r)}else{const t=e;if(null===t.framebuffer)continue;i instanceof WebGL2RenderingContext?(i.bindFramebuffer(i.READ_FRAMEBUFFER,t.framebuffer),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,this.getBaseLayer().framebuffer),i.blitFramebuffer(0,0,t.framebufferWidth,t.framebufferHeight,0,0,this.getBaseLayer().framebufferWidth,this.getBaseLayer().framebufferHeight,i.COLOR_BUFFER_BIT|i.DEPTH_BUFFER_BIT,i.LINEAR)):console.warn("GL blitFramebuffer is not supported on WebGL1, so XRWebGLLayers may not show up properly when polyfilled.")}for(e||i.disable(i.BLEND),t&&i.enable(i.DEPTH_TEST),s&&i.enable(i.CULL_FACE),i.blendFuncSeparate(o,l,h,u),i.bindFramebuffer(i.FRAMEBUFFER,a);this.taskQueue.length>0;){this.taskQueue.shift()()}}}),this._requestAnimationFrame(this.injectedFrameCallback)}updateRenderState(e){if(this.existingBaseLayer=e.baseLayer,e.layers&&(this.layers=e.layers),this.activeRenderState||this.createActiveRenderState(),this.activeRenderState={...this.activeRenderState,...e},!e.layers)return void this._updateRenderState(e);let t,r=Object.assign({},e);delete r.layers;for(let i of this.layers)if(i instanceof Ot){t=i.getContext();break}if(!t&&!this.context){console.log("No existing context! Have the session make one");const s=document.createElement("canvas");if(t=s.getContext("webgl2",{xrCompatible:!0}),t||(t=s.getContext("webgl",{xrCompatible:!0})),!t)throw new Error("No webGL support detected.");function a(){t.canvas.width=t.canvas.clientWidth*window.devicePixelRatio,t.canvas.height=t.canvas.clientHeight*window.devicePixelRatio}document.body.appendChild(t.canvas),window.addEventListener("resize",a),a()}this.createInternalLayer(t),this.isPolyfillActive=!0,this._updateRenderState({...r,baseLayer:this.internalLayer})}initializeSession(e){this.mode=e,this.requestReferenceSpace("local").then(e=>{this.referenceSpace=e}).catch(e=>{}),this.requestReferenceSpace("viewer").then(e=>{this.viewerSpace=e})}getBaseLayer(e){return this.internalLayer||this.existingBaseLayer||!e||this.createInternalLayer(e),this.internalLayer||this.existingBaseLayer}getReferenceSpace(){return this.referenceSpace?this.referenceSpace:this.viewerSpace}getViewerSpace(){return this.viewerSpace}queueTask(e){this.taskQueue.push(e)}get renderState(){return this.activeRenderState||this.createActiveRenderState(),this.activeRenderState}get internalViews(){return this.views}getViewIndex(e){for(let t=0;t<this.views.length;t++){let r=this.views[t];if(e.eye===r.eye&&e.recommendedViewportScale===r.recommendedViewportScale)return t}return-1}createInternalLayer(e){if(!e&&this.internalLayer)return this.internalLayer;if(e===this.context&&this.internalLayer)return this.internalLayer;const t=Dt();return this.internalLayer=new t.XRWebGLLayer(this,e),this.setContext(e),this.internalLayer}setContext(e){this.context=e,this.tempFramebuffer=e.createFramebuffer(),this.renderers=new WeakMap}createActiveRenderState(){const e=Dt();let t=Object.getOwnPropertyNames(e.XRRenderState.prototype);const r={};for(let e of t)r[e]=this._renderState[e];r.layers=[],this.activeRenderState=r}_autoResolveMSAAFramebuffers(){const e=this.context;if(e&&e instanceof WebGL2RenderingContext){for(let t of this.layers)if(t instanceof Ot&&t.colorTexturesMeta)for(let r of t.colorTexturesMeta)if(r._autoAntialiasing&&r._msaaFramebuffer&&r._resolveFramebuffer)try{e.bindFramebuffer(e.READ_FRAMEBUFFER,r._msaaFramebuffer),e.bindFramebuffer(e.DRAW_FRAMEBUFFER,r._resolveFramebuffer),e.blitFramebuffer(0,0,r.width,r.height,0,0,r.width,r.height,e.COLOR_BUFFER_BIT,e.NEAREST)}catch(e){console.warn("Failed to resolve MSAA framebuffer:",e)}e.bindFramebuffer(e.READ_FRAMEBUFFER,null),e.bindFramebuffer(e.DRAW_FRAMEBUFFER,null)}}}class Sr{constructor(){this.viewport={x:0,y:0,width:0,height:0}}}class _r{constructor(e,t){this.session=e,this.context=t,this.subImageCache=new br}createProjectionLayer(e=Yt){const t=new Qt(e);if(this.session.ended)throw new Error("Session has ended");if(this.context.isContextLost())throw new Error("context is lost");return t.initialize(this.session,this.context),t}createQuadLayer(e=Ht){if(this.session.ended)throw new Error("Session has ended");if(this.context.isContextLost())throw new Error("context is lost");if(e.layout===Ct.default)throw new TypeError("Trying to create a quad layer with default layout");const t=new Wt(e);return t.initialize(this.session,this.context),t}createCylinderLayer(e=Ut){if(this.session.ended)throw new Error("Session has ended");if(this.context.isContextLost())throw new Error("context is lost");if(e.layout===Ct.default)throw new TypeError("Cylinder Layer cannot have a default layout");const t=new Xt(e);return t.initialize(this.session,this.context),t}createEquirectLayer(e=Gt){if(this.session.ended)throw new Error("Session has ended");if(this.context.isContextLost())throw new Error("context is lost");if(e.layout===Ct.default)throw new TypeError("Equirect Layer cannot have a default layout");if(!Nt(e.space))throw new TypeError("Equirect layer requires an XRReferenceSpace");let t=new zt(e);return t.initialize(this.session,this.context),t}createCubeLayer(e){if(this.session.ended)throw new Error("Session has ended");if(this.context.isContextLost())throw new Error("context is lost");if(!(this.context instanceof WebGL2RenderingContext))throw new Error("XRCubeLayer only work on WebGL2");if(!Nt(e.space))throw new TypeError("XRCubeLayer requires a space of type XRReferenceSpace");let t=new yr(e);return t.initialize(this.session,this.context),t}getSubImage(e,t,r="none"){if(e.isStatic&&!1===e.needsRedraw)throw new Error("Invalid state for subimage creation");let i=this.subImageCache.tryGetCachedSubImage(this.context,e,r);if(i)return i;let s=new Sr;if(e instanceof Qt)throw new TypeError;if(e.layout===Ct.default)throw new TypeError;if(!this.validateStateofSubImageCreation(e,t))throw new Error("Invalid state for subimage creation");let a=0;if(e.layout===Ct.stereo){if("none"===r)throw new TypeError;"right"===r&&(a=1)}e.getTextureType()===Lt["texture-array"]?s.imageIndex=a:s.imageIndex=0;let n=0;e.getTextureType()===Lt.texture?(s.colorTexture=e.colorTextures[a],n=a):(s.colorTexture=e.colorTextures[0],n=0),s.colorTexture&&"object"==typeof s.colorTexture&&(s.colorTexture.isWebGLMultiviewRenderTarget=e.getTextureType()===Lt["texture-array"]),e.depthStencilTextures&&e.depthStencilTextures.length?e.getTextureType()===Lt.texture?s.depthStencilTexture=e.depthStencilTextures[a]:s.depthStencilTexture=e.depthStencilTextures[0]:s.depthStencilTexture=null,s.depthStencilTexture&&"object"==typeof s.depthStencilTexture&&(s.depthStencilTexture.isWebGLMultiviewRenderTarget=e.getTextureType()===Lt["texture-array"]);const o=e.colorTexturesMeta[n];s.textureWidth=o.width,s.textureHeight=o.height;let h=1;return e.layout!==Ct["stereo-left-right"]&&e.layout!==Ct["stereo-top-bottom"]||(h=2),$t(s.viewport,o,e.layout,a,h),this.session.queueTask(()=>{e.needsRedraw=!1}),this.subImageCache.cacheSubImage(s,this.context,e,r),s}getViewSubImage(e,t){let r=this.subImageCache.tryGetCachedViewSubImage(this.context,e,t);if(r)return r;let i=new Sr,s=this.session;if(!s.internalViews||!s.internalViews.length){console.warn("getViewSubImage called before views are available, returning placeholder"),i.imageIndex=0;const e={isWebGLMultiviewRenderTarget:!1},t={isWebGLMultiviewRenderTarget:!1};return i.colorTexture=e,i.depthStencilTexture=t,i.textureWidth=1024,i.textureHeight=1024,i.viewport={x:0,y:0,width:1024,height:1024},i}let a=s.getViewIndex(t),n=0;e.getTextureType()===Lt["texture-array"]?i.imageIndex=a:i.imageIndex=0,e.layout===Ct.default&&e.getTextureType()===Lt.texture?(i.colorTexture=e.colorTextures[a],n=a):(i.colorTexture=e.colorTextures[0],n=0);const o=e.colorTexturesMeta[n];return o._autoAntialiasing&&o._msaaFramebuffer&&(i.framebuffer=o._msaaFramebuffer,i._needsResolve=!0,i._resolveFromFramebuffer=o._msaaFramebuffer,i._resolveToFramebuffer=o._resolveFramebuffer,i._textureMeta=o),i.colorTexture&&"object"==typeof i.colorTexture&&(i.colorTexture.isWebGLMultiviewRenderTarget=e.getTextureType()===Lt["texture-array"]),0===e.depthStencilTextures.length?i.depthStencilTexture=null:e.layout===Ct.default&&e.getTextureType()===Lt.texture?i.depthStencilTexture=e.depthStencilTextures[a]:i.depthStencilTexture=e.depthStencilTextures[0],i.depthStencilTexture&&"object"==typeof i.depthStencilTexture&&(i.depthStencilTexture.isWebGLMultiviewRenderTarget=e.getTextureType()===Lt["texture-array"]),i.textureWidth=e.colorTexturesMeta[n].width,i.textureHeight=e.colorTexturesMeta[n].height,$t(i.viewport,e.colorTexturesMeta[n],e.layout,a,s.internalViews.length),e.needsRedraw=!1,this.subImageCache.cacheViewSubImage(i,this.context,e,t),i}validateStateofSubImageCreation(e,t){return t.session===e.session&&(this.session===e.session&&(this.context===e.context&&(!(!e.colorTextures||!e.colorTextures.length)&&(!e.isStatic||!1!==e.needsRedraw))))}}class br{constructor(){this.cache=new Map,this.viewCache=new Map}cacheSubImage(e,t,r,i){let s=new Map;s.set(i,e);let a=new Map;a.set(r,s),this.cache.set(t,a)}tryGetCachedSubImage(e,t,r){return this.cache.get(e)?.get(t)?.get(r)}cacheViewSubImage(e,t,r,i){let s=new Map;s.set(i,e);let a=new Map;a.set(r,s),this.viewCache.set(t,a)}tryGetCachedViewSubImage(e,t,r){return this.viewCache.get(e)?.get(t)?.get(r)}}let Ar=class{constructor(){this.injected=!1;const e=Dt();this._injectPolyfill(e)}_injectPolyfill(e){if(!("xr"in e.navigator))throw new Error("WebXR Layers polyfill requires WebXR support.");!0===this.injected&&console.warn("Polyfill has already been injected..."),(e=>!!e.navigator.xr&&!(!e.XRMediaBinding||!e.XRWebGLBinding))(e)||(this._polyfillRequiredLayersFeature(e),this._polyfillXRSession(e),e.XRWebGLBinding=_r,e.XRMediaBinding=jt,this.injected=!0,console.log("Injected Layers Polyfill"))}_polyfillXRSession(e){e.XRSession.prototype._updateRenderState=e.XRSession.prototype.updateRenderState,e.XRSession.prototype._requestAnimationFrame=e.XRSession.prototype.requestAnimationFrame;let t=Object.getOwnPropertyDescriptor(e.XRSession.prototype,"renderState");t&&Object.defineProperty(e.XRSession.prototype,"_renderState",t);let r=Object.getOwnPropertyDescriptor(Er.prototype,"renderState");r&&Object.defineProperty(e.XRSession.prototype,"renderState",r);let i=Object.getOwnPropertyNames(Er.prototype);for(let t of i){let r=Object.getOwnPropertyDescriptor(Er.prototype,t);r&&Object.defineProperty(e.XRSession.prototype,t,r)}}_polyfillRequiredLayersFeature(e){const t=e.navigator.xr.requestSession;Object.defineProperty(e.navigator.xr,"requestSessionInternal",{writable:!0}),e.navigator.xr.requestSessionInternal=t;Object.defineProperty(e.navigator.xr,"requestSession",{writable:!0}),e.navigator.xr.requestSession=(t,r)=>{const i=(r,i)=>e.navigator.xr.requestSessionInternal(r,i).then(e=>{Object.assign(e,new Er);let r=e;return r.initializeSession(t),Promise.resolve(r)});if("immersive-vr"!==t)return i(t,r);if(!r)return i(t,r);if(r.requiredFeatures&&r.requiredFeatures.indexOf("layers")>-1){const e={...r},s=[...r.requiredFeatures],a=s.indexOf("layers");return s.splice(a,1),e.requiredFeatures=s,i(t,e)}return i(t,r)}}};const Mr={ipd:.063,fovy:Math.PI/2,headsetPosition:new de(0,1.6,0),headsetQuaternion:new pe,stereoEnabled:!1};const Fr={mapping:fe.XRStandard,buttons:[{id:"trigger",type:"analog",eventTrigger:"select"},{id:"squeeze",type:"analog",eventTrigger:"squeeze"},null,{id:"thumbstick",type:"binary"},{id:"x-button",type:"binary"},{id:"y-button",type:"binary"},{id:"thumbrest",type:"binary"}],axes:[null,null,{id:"thumbstick",type:"x-axis"},{id:"thumbstick",type:"y-axis"}]},Pr={mapping:fe.XRStandard,buttons:[{id:"trigger",type:"analog",eventTrigger:"select"},{id:"squeeze",type:"analog",eventTrigger:"squeeze"},null,{id:"thumbstick",type:"binary"},{id:"a-button",type:"binary"},{id:"b-button",type:"binary"},{id:"thumbrest",type:"binary"}],axes:[null,null,{id:"thumbstick",type:"x-axis"},{id:"thumbstick",type:"y-axis"}]},Ir={profileId:"oculus-touch-v3",fallbackProfileIds:["oculus-touch","generic-trigger-squeeze-thumbstick"],layout:{left:{gamepad:Fr,gripOffsetMatrix:[.9925461411476135,2.0823669899527886e-8,-.12186937034130096,0,.08617465198040009,.7071067094802856,.701836109161377,0,.08617466688156128,-.7071067690849304,.7018360495567322,0,-.003979838453233242,-.015857907012104988,.04964181408286095,1],numHapticActuators:1},right:{gamepad:Pr,gripOffsetMatrix:[.9925461411476135,-8.329467959811154e-8,.12186941504478455,0,-.08617465943098068,.7071066498756409,.7018361687660217,0,-.08617471158504486,-.7071068286895752,.7018359303474426,0,.003979798872023821,-.015857888385653496,.049641866236925125,1],numHapticActuators:1}}},Lr={profileId:"meta-quest-touch-pro",fallbackProfileIds:["oculus-touch-v2","oculus-touch","generic-trigger-squeeze-thumbstick"],layout:{left:{gamepad:Fr,gripOffsetMatrix:[.9925461411476135,-1.5779937356796836e-8,-.12186935544013977,0,.08617467433214188,.7071067094802856,.701836109161377,0,.0861746296286583,-.7071067690849304,.7018360495567322,0,-.003979836590588093,-.015857847407460213,.049641840159893036,1],numHapticActuators:3},right:{gamepad:Pr,gripOffsetMatrix:[.9925461411476135,9267653311439972e-26,.12186937034130096,0,-.08617467433214188,.7071067094802856,.7018361687660217,0,-.08617464452981949,-.7071067690849304,.7018360495567322,0,.003979847766458988,-.01585782691836357,.04964186251163483,1],numHapticActuators:3}}},Cr={profileId:"meta-quest-touch-plus",fallbackProfileIds:["oculus-touch-v3","oculus-touch","generic-trigger-squeeze-thumbstick"],layout:{left:{gamepad:Fr,gripOffsetMatrix:[.9925461411476135,1.0736208366779465e-8,-.12186933308839798,0,.08617459982633591,.70710688829422,.7018360495567322,0,.08617466688156128,-.7071067094802856,.7018362283706665,0,-.003979803062975407,-.015857873484492302,.04964187368750572,1],numHapticActuators:1},right:{gamepad:Pr,gripOffsetMatrix:[.9925461411476135,-2.6238110351073374e-8,.12186934053897858,0,-.0861746147274971,.7071067690849304,.7018360495567322,0,-.08617465943098068,-.7071067094802856,.701836109161377,0,.003979838453233242,-.015857869759202003,.04964182525873184,1],numHapticActuators:1}}},Nr={name:"Oculus Quest 1",controllerConfig:{profileId:"oculus-touch-v2",fallbackProfileIds:["oculus-touch","generic-trigger-squeeze-thumbstick"],layout:{left:{gamepad:Fr,gripOffsetMatrix:[.9925461411476135,4.673031295254759e-9,-.12186938524246216,0,.08617470413446426,.7071065306663513,.7018362283706665,0,.0861746296286583,-.70710688829422,.7018358707427979,0,-.003979847766458988,-.01585787907242775,.04964185878634453,1],numHapticActuators:1},right:{gamepad:Pr,gripOffsetMatrix:[.9925461411476135,3.688163374704345e-8,.12186937034130096,0,-.08617469668388367,.7071066498756409,.7018361687660217,0,-.0861746147274971,-.7071068286895752,.7018359899520874,0,.003979853354394436,-.01585787907242775,.04964182525873184,1],numHapticActuators:1}}},supportedSessionModes:["inline","immersive-vr","immersive-ar"],supportedFeatures:["viewer","local","local-floor","bounded-floor","unbounded","anchors","plane-detection","hand-tracking"],supportedFrameRates:[72,80,90],isSystemKeyboardSupported:!0,internalNominalFrameRate:72,environmentBlendModes:{"immersive-vr":st.Opaque,"immersive-ar":st.AlphaBlend},interactionMode:at.WorldSpace,userAgent:"Mozilla/5.0 (X11; Linux x86_64; Quest 1) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/33.0.0.x.x.x Chrome/126.0.6478.122 VR Safari/537.36"},Dr={name:"Meta Quest 2",controllerConfig:Ir,supportedSessionModes:["inline","immersive-vr","immersive-ar"],supportedFeatures:["viewer","local","local-floor","bounded-floor","unbounded","anchors","plane-detection","mesh-detection","hit-test","hand-tracking"],supportedFrameRates:[72,80,90,120],isSystemKeyboardSupported:!0,internalNominalFrameRate:72,environmentBlendModes:{"immersive-vr":st.Opaque,"immersive-ar":st.AlphaBlend},interactionMode:at.WorldSpace,userAgent:"Mozilla/5.0 (X11; Linux x86_64; Quest 2) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/33.0.0.x.x.x Chrome/126.0.6478.122 VR Safari/537.36"},Br={name:"Meta Quest Pro",controllerConfig:Lr,supportedSessionModes:["inline","immersive-vr","immersive-ar"],supportedFeatures:["viewer","local","local-floor","bounded-floor","unbounded","anchors","plane-detection","mesh-detection","hit-test","hand-tracking"],supportedFrameRates:[72,80,90,120],isSystemKeyboardSupported:!0,internalNominalFrameRate:90,environmentBlendModes:{"immersive-vr":st.Opaque,"immersive-ar":st.AlphaBlend},interactionMode:at.WorldSpace,userAgent:"Mozilla/5.0 (X11; Linux x86_64; Quest Pro) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/33.0.0.x.x.x Chrome/126.0.6478.122 VR Safari/537.36"},Or={name:"Meta Quest 3",controllerConfig:Cr,supportedSessionModes:["inline","immersive-vr","immersive-ar"],supportedFeatures:["viewer","local","local-floor","bounded-floor","unbounded","anchors","plane-detection","mesh-detection","hit-test","hand-tracking","depth-sensing"],supportedFrameRates:[72,80,90,120],isSystemKeyboardSupported:!0,internalNominalFrameRate:90,environmentBlendModes:{"immersive-vr":st.Opaque,"immersive-ar":st.AlphaBlend},interactionMode:at.WorldSpace,userAgent:"Mozilla/5.0 (X11; Linux x86_64; Quest 3) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/33.0.0.x.x.x Chrome/126.0.6478.122 VR Safari/537.36"},Ur=e=>{const t=[];return e.forEach(e=>{t.push(parseFloat(e.toFixed(3)))}),t};e.ActionRecorder=class{constructor(e,t){this[O]={session:e,refSpace:t,inputMap:new Map,schemaMap:new Map,compressedFrames:[],jointRadii:new Float32Array(25),jointTransforms:new Float32Array(400)}}recordFrame(e){var t;const r=performance.now(),i=null===(t=e.getViewerPose(this[O].refSpace))||void 0===t?void 0:t.transform.matrix;if(!i)return;const s={timeStamp:r,position:c(x(),i),quaternion:p(A(),i),inputFrames:[]};this[O].session.inputSources.forEach(t=>{var r,i;if(!this[O].inputMap.has(t)){const e={handedness:t.handedness,targetRayMode:t.targetRayMode,profiles:t.profiles,hasGrip:null!=t.gripSpace,hasHand:null!=t.hand,hasGamepad:null!=t.gamepad};e.hasHand&&(e.jointSequence=Array.from(t.hand.values()).map(e=>e.jointName)),e.hasGamepad&&(e.mapping=t.gamepad.mapping,e.numButtons=t.gamepad.buttons.length,e.numAxes=t.gamepad.axes.length);const r=this[O].inputMap.size;this[O].inputMap.set(t,r),this[O].schemaMap.set(r,e)}const a=this[O].inputMap.get(t),n=this[O].schemaMap.get(a),o=null===(r=e.getPose(t.targetRaySpace,this[O].refSpace))||void 0===r?void 0:r.transform.matrix;if(o){const r={index:a,targetRayTransform:{position:c(x(),o),quaternion:p(A(),o)}};if(n.hasGrip){const s=null===(i=e.getPose(t.gripSpace,this[O].refSpace))||void 0===i?void 0:i.transform.matrix;if(s){const e=c(x(),s),t=p(A(),s);r.gripTransform={position:e,quaternion:t}}}if(n.hasHand){const i=Array.from(t.hand.values());let s=!0;if(s&&(s=e.fillPoses(i,t.targetRaySpace,this[O].jointTransforms)),s&&(s=e.fillJointRadii(i,this[O].jointRadii)),s){const e={};for(let t=0;t<25;t++){const r=this[O].jointTransforms.slice(16*t,16*(t+1)),s=this[O].jointRadii[t],a=c(x(),r),n=p(A(),r);e[i[t].jointName]={position:a,quaternion:n,radius:s}}r.hand=e}}if(n.hasGamepad){const e={buttons:t.gamepad.buttons.map(e=>e?[e.pressed?1:0,e.touched?1:0,e.value]:null),axes:Array.from(t.gamepad.axes)};r.gamepad=e}s.inputFrames.push(r)}}),this[O].compressedFrames.push(this.compressActionFrame(s))}compressActionFrame(e){const t=[Math.round(10*e.timeStamp)/10,...Ur(e.position),...Ur(e.quaternion)];return e.inputFrames.forEach(e=>{const r=e.index,i=this[O].schemaMap.get(r),s=[r,...Ur(e.targetRayTransform.position),...Ur(e.targetRayTransform.quaternion)];if(i.hasGrip&&s.push([...Ur(e.gripTransform.position),...Ur(e.gripTransform.quaternion)]),i.hasHand){const t=[];Object.values(e.hand).forEach(({position:e,quaternion:r,radius:i})=>{t.push(...Ur(e),...Ur(r),parseFloat(i.toFixed(3)))}),s.push(t)}i.hasGamepad&&s.push([...e.gamepad.buttons,...e.gamepad.axes]),t.push(s)}),t}log(){const e={schema:Array.from(this[O].schemaMap.entries()),frames:this[O].compressedFrames};console.log(JSON.stringify(e))}},e.NativeMesh=class{constructor(e,t,r,i){this.transform=e,this.vertices=t,this.indices=r,this.semanticLabel=i}},e.NativePlane=class{constructor(e,t,r){this.transform=e,this.polygon=t,this.semanticLabel=r}},e.P_ACTION_PLAYER=B,e.P_ACTION_RECORDER=O,e.P_ANCHOR=U,e.P_CONTROLLER=V,e.P_DEVICE=X,e.P_FRAME=z,e.P_GAMEPAD=H,e.P_HAND_INPUT=G,e.P_HIT_TEST=he,e.P_INPUT_SOURCE=W,e.P_JOINT_POSE=$,e.P_JOINT_SPACE=re,e.P_MESH=Y,e.P_PLANE=Q,e.P_POSE=K,e.P_RAY=oe,e.P_REF_SPACE=ie,e.P_RENDER_STATE=ee,e.P_RIGID_TRANSFORM=Z,e.P_SESSION=te,e.P_SPACE=se,e.P_SYSTEM=k,e.P_TRACKED_INPUT=q,e.P_VIEW=ae,e.P_VIEWER_POSE=J,e.P_VIEWPORT=ne,e.P_WEBGL_LAYER=j,e.XRAnchor=Ce,e.XRAnchorSet=Ne,e.XRDevice=class{constructor(e,t={}){var r,s,a,n,o,l;this.version=Mt;const c=new ue,d=new We(He.Viewer,c),p={[ke.Left]:new le(d),[ke.Right]:new le(d),[ke.None]:new le(d)},f=e.controllerConfig,m={};f&&Object.values(me).forEach(e=>{f.layout[e]&&(m[e]=new _e(f,e,c))});const x={[me.Left]:new Et(ut,me.Left,c),[me.Right]:new Et(ut,me.Right,c)},y=null!==(r=t.canvasContainer)&&void 0!==r?r:document.createElement("div");y.dataset.webxr_runtime=`Immersive Web Emulation Runtime v${Mt}`,y.style.position="fixed",y.style.width="100%",y.style.height="100%",y.style.top="0",y.style.left="0",y.style.display="flex",y.style.justifyContent="center",y.style.alignItems="center",y.style.overflow="hidden",y.style.zIndex="999",this[X]={name:e.name,supportedSessionModes:e.supportedSessionModes,supportedFeatures:e.supportedFeatures,supportedFrameRates:e.supportedFrameRates,isSystemKeyboardSupported:e.isSystemKeyboardSupported,internalNominalFrameRate:e.internalNominalFrameRate,environmentBlendModes:e.environmentBlendModes,interactionMode:e.interactionMode,userAgent:e.userAgent,position:null!==(s=t.headsetPosition)&&void 0!==s?s:Mr.headsetPosition.clone(),quaternion:null!==(a=t.headsetQuaternion)&&void 0!==a?a:Mr.headsetQuaternion.clone(),stereoEnabled:null!==(n=t.stereoEnabled)&&void 0!==n?n:Mr.stereoEnabled,ipd:null!==(o=t.ipd)&&void 0!==o?o:Mr.ipd,fovy:null!==(l=t.fovy)&&void 0!==l?l:Mr.fovy,controllers:m,hands:x,primaryInputMode:"controller",pendingReferenceSpaceReset:!1,visibilityState:"visible",pendingVisibilityState:null,xrSystem:null,matrix:i(),globalSpace:c,viewerSpace:d,viewSpaces:p,canvasContainer:y,getViewport:(e,t)=>{const r=e.context.canvas,{width:i,height:s}=r;switch(t.eye){case ke.None:return new It(0,0,i,s);case ke.Left:return new It(0,0,this[X].stereoEnabled?i/2:i,s);case ke.Right:return new It(i/2,0,this[X].stereoEnabled?i/2:0,s)}},updateViews:()=>{u(this[X].viewerSpace[se].offsetMatrix,this[X].quaternion.quat,this[X].position.vec3),h(this[X].viewSpaces[ke.Left][se].offsetMatrix,g(-this[X].ipd/2,0,0)),h(this[X].viewSpaces[ke.Right][se].offsetMatrix,g(this[X].ipd/2,0,0))},onBaseLayerSet:e=>{if(!e)return;const t=e.context.canvas;if(t.parentElement!==this[X].canvasContainer){const e=this[X].devui;if(e){const{devUICanvas:t,devUIContainer:r}=e;t.style.zIndex=3..toString(),r.style.zIndex=4..toString(),this[X].canvasContainer.appendChild(e.devUICanvas),this[X].canvasContainer.appendChild(e.devUIContainer)}const r=this[X].sem;r&&(r.environmentCanvas.style.zIndex=1..toString(),this[X].canvasContainer.appendChild(r.environmentCanvas)),this[X].canvasData={canvas:t,parent:t.parentElement,width:t.width,height:t.height,zIndex:t.style.zIndex},t.style.zIndex=2..toString(),this[X].canvasContainer.appendChild(t),document.body.appendChild(this[X].canvasContainer)}t.width=window.innerWidth,t.height=window.innerHeight},onSessionEnd:()=>{if(this[X].canvasData){const{canvas:e,parent:t,width:r,height:i,zIndex:s}=this[X].canvasData;e.width=r,e.height=i,e.style.zIndex=s,t?t.appendChild(e):this[X].canvasContainer.removeChild(e);const a=this[X].devui;a&&(this[X].canvasContainer.removeChild(a.devUICanvas),this[X].canvasContainer.removeChild(a.devUIContainer));const n=this[X].sem;n&&this[X].canvasContainer.removeChild(n.environmentCanvas),document.body.removeChild(this[X].canvasContainer),this[X].canvasData=void 0,window.dispatchEvent(new Event("resize"))}},onFrameStart:e=>{var t;if(null===(t=this[X].actionPlayer)||void 0===t?void 0:t.playing)this[X].actionPlayer.playFrame();else{const t=e.session;this[X].updateViews(),this[X].pendingVisibilityState&&(this[X].visibilityState=this[X].pendingVisibilityState,this[X].pendingVisibilityState=null,t.dispatchEvent(new Ye("visibilitychange",{session:t}))),"visible"===this[X].visibilityState&&this.activeInputs.forEach(t=>{t.onFrameStart(e)}),this[X].pendingReferenceSpaceReset&&(t[te].referenceSpaces.forEach(e=>{switch(e[ie].type){case He.Local:case He.LocalFloor:case He.BoundedFloor:case He.Unbounded:e.dispatchEvent(new Ft("reset",{referenceSpace:e}))}}),this[X].pendingReferenceSpaceReset=!1)}this[X].updateViews()}},this[X].updateViews()}installRuntime(e){var t;const r=null!==(t=null==e?void 0:e.globalObject)&&void 0!==t?t:globalThis,i=null==e?void 0:e.polyfillLayers;Object.defineProperty(WebGL2RenderingContext.prototype,"makeXRCompatible",{value:function(){return new Promise((e,t)=>{e(!0)})},configurable:!0}),this[X].xrSystem=new Pt(this),Object.defineProperty(globalThis.navigator,"xr",{value:this[X].xrSystem,configurable:!0}),Object.defineProperty(navigator,"userAgent",{value:this[X].userAgent,writable:!1,configurable:!1,enumerable:!0}),r.XRSystem=Pt,r.XRSession=ot,r.XRRenderState=je,r.XRFrame=it,r.XRSpace=le,r.XRReferenceSpace=We,r.XRJointSpace=lt,r.XRView=Qe,r.XRViewport=It,r.XRRigidTransform=Oe,r.XRPose=$e,r.XRViewerPose=Je,r.XRJointPose=Ke,r.XRInputSource=Re,r.XRInputSourceArray=Te,r.XRHand=ht,r.XRLayer=St,r.XRWebGLLayer=bt,r.XRSessionEvent=Ye,r.XRInputSourceEvent=we,r.XRInputSourcesChangeEvent=qe,r.XRReferenceSpaceEvent=Ft,i?new Ar:(r.XRMediaBinding=void 0,r.XRWebGLBinding=void 0)}installDevUI(e){this[X].devui=new e(this)}installSEM(e){this[X].sem=new e(this)}get supportedSessionModes(){return this[X].supportedSessionModes}get supportedFeatures(){return this[X].supportedFeatures}get supportedFrameRates(){return this[X].supportedFrameRates}get isSystemKeyboardSupported(){return this[X].isSystemKeyboardSupported}get internalNominalFrameRate(){return this[X].internalNominalFrameRate}get stereoEnabled(){return this[X].stereoEnabled}set stereoEnabled(e){this[X].stereoEnabled=e}get ipd(){return this[X].ipd}set ipd(e){this[X].ipd=e}get fovy(){return this[X].fovy}set fovy(e){this[X].fovy=e}get position(){return this[X].position}get quaternion(){return this[X].quaternion}get viewerSpace(){var e;return(null===(e=this[X].actionPlayer)||void 0===e?void 0:e.playing)?this[X].actionPlayer.viewerSpace:this[X].viewerSpace}get viewSpaces(){var e;return(null===(e=this[X].actionPlayer)||void 0===e?void 0:e.playing)?this[X].actionPlayer.viewSpaces:this[X].viewSpaces}get controllers(){return this[X].controllers}get hands(){return this[X].hands}get primaryInputMode(){return this[X].primaryInputMode}set primaryInputMode(e){"controller"===e||"hand"===e?this[X].primaryInputMode=e:console.warn('primary input mode can only be "controller" or "hand"')}get activeInputs(){if("visible"!==this[X].visibilityState)return[];return("controller"===this[X].primaryInputMode?Object.values(this[X].controllers):Object.values(this[X].hands)).filter(e=>e.connected)}get inputSources(){var e;return(null===(e=this[X].actionPlayer)||void 0===e?void 0:e.playing)?this[X].actionPlayer.inputSources:this.activeInputs.map(e=>e.inputSource)}get canvasContainer(){return this[X].canvasContainer}get canvasDimensions(){if(this[X].canvasData){const{width:e,height:t}=this[X].canvasData.canvas;return{width:e,height:t}}}get activeSession(){var e;return null===(e=this[X].xrSystem)||void 0===e?void 0:e[k].activeSession}get sessionOffered(){var e;return Boolean(null===(e=this[X].xrSystem)||void 0===e?void 0:e[k].offeredSessionConfig)}get name(){return this[X].name}grantOfferedSession(){var e;const t=null===(e=this[X].xrSystem)||void 0===e?void 0:e[k];t&&t.offeredSessionConfig&&(t.grantSession(t.offeredSessionConfig),t.offeredSessionConfig=void 0)}recenter(){const e=new de(-this.position.x,0,-this.position.z),t=new de(0,0,-1).applyQuaternion(this.quaternion);t.y=0,t.normalize();const r=Math.atan2(t.x,-t.z),i=(new pe).setFromAxisAngle(new de(0,1,0),r);this.position.add(e),this.quaternion.multiply(i),[...Object.values(this[X].controllers),...Object.values(this[X].hands)].forEach(t=>{t.position.add(e),t.quaternion.multiply(i),t.position.applyQuaternion(i)}),this[X].pendingReferenceSpaceReset=!0}get visibilityState(){return this[X].visibilityState}updateVisibilityState(e){if(!Object.values(["visible","visible-blurred","hidden"]).includes(e))throw new DOMException("Invalid XRVisibilityState value","NotSupportedError");e!==this[X].visibilityState&&(this[X].pendingVisibilityState=e)}createActionPlayer(e,t){return this[X].actionPlayer=new At(e,t,this[X].ipd),this[X].actionPlayer}get devui(){return this[X].devui}get sem(){return this[X].sem}},e.XRFrame=it,e.XRHand=ht,e.XRInputSource=Re,e.XRInputSourceArray=Te,e.XRInputSourceEvent=we,e.XRInputSourcesChangeEvent=qe,e.XRJointPose=Ke,e.XRJointSpace=lt,e.XRLayer=St,e.XRMesh=be,e.XRMeshSet=Ae,e.XRPlane=Ie,e.XRPlaneSet=Le,e.XRPose=$e,e.XRRay=Ve,e.XRReferenceSpace=We,e.XRReferenceSpaceEvent=Ft,e.XRRenderState=je,e.XRRigidTransform=Oe,e.XRSession=ot,e.XRSessionEvent=Ye,e.XRSpace=le,e.XRSystem=Pt,e.XRView=Qe,e.XRViewerPose=Je,e.XRViewport=It,e.XRWebGLLayer=bt,e.metaQuest2=Dr,e.metaQuest3=Or,e.metaQuestPro=Br,e.oculusQuest1=Nr,Object.defineProperty(e,"__esModule",{value:!0})});
204
+ `;class _r{constructor(e,t){this.savedVaoState={vao:null,arrayBuffer:null},this.hasMipmap=!1,this.layer=e,this.gl=t,this.transformMatrix=or(),this.program=Kt(t,Rr,Er),this.programInfo={attribLocations:{a_position:t.getAttribLocation(this.program,"a_position")},uniformLocations:{u_matrix:t.getUniformLocation(this.program,"u_matrix"),u_texture:t.getUniformLocation(this.program,"u_texture"),u_projectionMatrix:t.getUniformLocation(this.program,"u_projectionMatrix")}},this._createVAOs()}saveVaoState(){this.savedVaoState.vao=this.gl.getParameter(this.vaoGl.VERTEX_ARRAY_BINDING),this.savedVaoState.arrayBuffer=this.gl.getParameter(this.gl.ARRAY_BUFFER_BINDING)}restoreVaoState(){this.vaoGl.bindVertexArray(this.savedVaoState.vao),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.savedVaoState.arrayBuffer),this.savedVaoState.vao=this.savedVaoState.arrayBuffer=null}render(e,t){this.saveVaoState();let r=this.gl,i=e.getBaseLayer(),s=t.getViewerPose(e.getReferenceSpace());const a=r.getParameter(r.ACTIVE_TEXTURE);for(let e of s.views){let t=i.getViewport(e);r.viewport(t.x,t.y,t.width,t.height),r.activeTexture(r.TEXTURE0);const s=r.getParameter(r.TEXTURE_BINDING_CUBE_MAP);if(this.layer.layout===It.stereo){const t="right"===e.eye?1:0;r.bindTexture(r.TEXTURE_CUBE_MAP,this.layer.colorTextures[t])}else r.bindTexture(r.TEXTURE_CUBE_MAP,this.layer.colorTextures[0]);this.layer.isStatic?(!0===this.layer.needsRedraw&&r.generateMipmap(r.TEXTURE_CUBE_MAP),this.hasMipmap=!0):this.hasMipmap=this.layer.mipLevels>0,r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_MAG_FILTER,this.hasMipmap?r.LINEAR_MIPMAP_LINEAR:r.LINEAR),r.texParameteri(r.TEXTURE_CUBE_MAP,r.TEXTURE_MIN_FILTER,this.hasMipmap?r.LINEAR_MIPMAP_LINEAR:r.LINEAR),this._renderInternal(this.layer.orientation,e),r.activeTexture(a),r.bindTexture(r.TEXTURE_CUBE_MAP,s)}this.restoreVaoState()}createPositionPoints(){const e=.5;return new Float32Array([-e,-e,-e,-e,e,-e,e,-e,-e,-e,e,-e,e,e,-e,e,-e,-e,-e,-e,e,e,-e,e,-e,e,e,-e,e,e,e,-e,e,e,e,e,-e,e,-e,-e,e,e,e,e,-e,-e,e,e,e,e,e,e,e,-e,-e,-e,-e,e,-e,-e,-e,-e,e,-e,-e,e,e,-e,-e,e,-e,e,-e,-e,-e,-e,-e,e,-e,e,-e,-e,-e,e,-e,e,e,-e,e,-e,e,-e,-e,e,e,-e,e,-e,e,e,-e,e,e,e,-e,e,e,e])}_renderInternal(e,t){let r=this.gl;const i=r.getParameter(r.CURRENT_PROGRAM);r.useProgram(this.program),this.vaoGl.bindVertexArray(this.vao),lr(this.transformMatrix,[e.x,e.y,e.z,e.w]),this._poseOrientationMatrix||(this._poseOrientationMatrix=or()),lr(this._poseOrientationMatrix,[t.transform.inverse.orientation.x,t.transform.inverse.orientation.y,t.transform.inverse.orientation.z,t.transform.inverse.orientation.w]),hr(this.transformMatrix,this.transformMatrix,this._poseOrientationMatrix),r.uniformMatrix4fv(this.programInfo.uniformLocations.u_matrix,!1,this.transformMatrix),r.uniformMatrix4fv(this.programInfo.uniformLocations.u_projectionMatrix,!1,t.projectionMatrix),r.uniform1i(this.programInfo.uniformLocations.u_texture,0);var s=r.TRIANGLES,a=this.positionPoints.length/3;r.drawArrays(s,0,a),this.vaoGl.bindVertexArray(null),r.useProgram(i)}_recalculateVertices(){this.positionPoints=this.createPositionPoints()}_createVAOs(){this._recalculateVertices();let e=this.gl;this.vaoGl=$t(e),this.saveVaoState();let t=e.createBuffer();this.vao=this.vaoGl.createVertexArray(),this.vaoGl.bindVertexArray(this.vao),e.enableVertexAttribArray(this.programInfo.attribLocations.a_position),e.bindBuffer(e.ARRAY_BUFFER,t);const r=this.positionPoints;e.bufferData(e.ARRAY_BUFFER,r,e.STATIC_DRAW);var i=e.FLOAT;e.vertexAttribPointer(this.programInfo.attribLocations.a_position,3,i,!1,0,0),this.restoreVaoState()}}class br{constructor(){this.mode="inline",this.layers=[],this.views=[],this.initializedViews=!1,this.isPolyfillActive=!1,this.taskQueue=[]}requestAnimationFrame(e){this.injectedFrameCallback||(this.injectedFrameCallback=(t,r)=>{let i=this.context;if(!this.initializedViews&&this.referenceSpace){let e=r.getViewerPose(this.referenceSpace);e&&(this.views=e.views,this.initializedViews=!0)}if(this.isPolyfillActive&&this.initializedViews){this.tempFramebuffer||(this.tempFramebuffer=i.createFramebuffer()),i.bindFramebuffer(i.FRAMEBUFFER,this.tempFramebuffer);const e=i.getParameter(i.COLOR_CLEAR_VALUE),t=i.getParameter(i.FRAMEBUFFER_BINDING);i.clearColor(0,0,0,0);for(let e of this.layers)if(e instanceof Wt)for(let t=0;t<e.colorTextures.length;t++){e.colorTexturesMeta[t].type===Ft["texture-array"]||(i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,e.colorTextures[t],0),e.depthStencilTextures&&t<e.depthStencilTextures.length?i.framebufferTexture2D(i.FRAMEBUFFER,i.DEPTH_ATTACHMENT,i.TEXTURE_2D,e.depthStencilTextures[t],0):i.framebufferTexture2D(i.FRAMEBUFFER,i.DEPTH_ATTACHMENT,i.TEXTURE_2D,null,0),i.clear(i.COLOR_BUFFER_BIT|i.DEPTH_BUFFER_BIT))}i.bindFramebuffer(i.FRAMEBUFFER,t),i.clearColor(e[0],e[1],e[2],e[3])}if(e(t,r),this.isPolyfillActive&&this.initializedViews){let e=i.isEnabled(i.BLEND),t=i.isEnabled(i.DEPTH_TEST),s=i.isEnabled(i.CULL_FACE);const a=i.getParameter(i.FRAMEBUFFER_BINDING),n=i.getParameter(i.COLOR_CLEAR_VALUE);i.bindFramebuffer(i.FRAMEBUFFER,this.getBaseLayer().framebuffer),i.clear(i.COLOR_BUFFER_BIT|i.DEPTH_BUFFER_BIT),i.clearColor(n[0],n[1],n[2],n[3]),i.enable(i.BLEND),i.disable(i.DEPTH_TEST),i.disable(i.CULL_FACE);let o=i.getParameter(i.BLEND_SRC_RGB),h=i.getParameter(i.BLEND_SRC_ALPHA),l=i.getParameter(i.BLEND_DST_RGB),c=i.getParameter(i.BLEND_DST_ALPHA);i.blendFunc(i.SRC_ALPHA,i.ONE_MINUS_SRC_ALPHA);for(let e of this.layers)if(this.renderers||(this.renderers=new WeakMap),e instanceof Wt){this.renderers.has(e)||this.renderers.set(e,ar(e,this.context));this.renderers.get(e).render(this)}else if(e instanceof Ht){this.renderers.has(e)||this.renderers.set(e,new gr(e,this.context));this.renderers.get(e).render(this,r)}else if(e instanceof Vt){this.renderers.has(e)||this.renderers.set(e,new yr(e,this.context));this.renderers.get(e).render(this,r)}else if(e instanceof Gt){this.renderers.has(e)||this.renderers.set(e,new vr(e,this.context));this.renderers.get(e).render(this,r)}else if(e instanceof wr){this.renderers.has(e)||this.renderers.set(e,new _r(e,this.context));this.renderers.get(e).render(this,r)}else{const t=e;if(null===t.framebuffer)continue;i instanceof WebGL2RenderingContext?(i.bindFramebuffer(i.READ_FRAMEBUFFER,t.framebuffer),i.bindFramebuffer(i.DRAW_FRAMEBUFFER,this.getBaseLayer().framebuffer),i.blitFramebuffer(0,0,t.framebufferWidth,t.framebufferHeight,0,0,this.getBaseLayer().framebufferWidth,this.getBaseLayer().framebufferHeight,i.COLOR_BUFFER_BIT|i.DEPTH_BUFFER_BIT,i.LINEAR)):console.warn("GL blitFramebuffer is not supported on WebGL1, so XRWebGLLayers may not show up properly when polyfilled.")}for(e||i.disable(i.BLEND),t&&i.enable(i.DEPTH_TEST),s&&i.enable(i.CULL_FACE),i.blendFuncSeparate(o,l,h,c),i.bindFramebuffer(i.FRAMEBUFFER,a);this.taskQueue.length>0;){this.taskQueue.shift()()}}}),this._requestAnimationFrame(this.injectedFrameCallback)}updateRenderState(e){if(this.existingBaseLayer=e.baseLayer,e.layers&&(this.layers=e.layers),this.activeRenderState||this.createActiveRenderState(),this.activeRenderState=Object.assign(Object.assign({},this.activeRenderState),e),!e.layers)return void this._updateRenderState(e);let t,r=Object.assign({},e);delete r.layers;for(let i of this.layers)if(i instanceof Dt){t=i.getContext();break}if(!t&&!this.context){console.log("No existing context! Have the session make one");const s=document.createElement("canvas");if(t=s.getContext("webgl2",{xrCompatible:!0}),t||(t=s.getContext("webgl",{xrCompatible:!0})),!t)throw new Error("No webGL support detected.");function a(){t.canvas.width=t.canvas.clientWidth*window.devicePixelRatio,t.canvas.height=t.canvas.clientHeight*window.devicePixelRatio}document.body.appendChild(t.canvas),window.addEventListener("resize",a),a()}this.createInternalLayer(t),this.isPolyfillActive=!0,this._updateRenderState(Object.assign(Object.assign({},r),{baseLayer:this.internalLayer}))}initializeSession(e){this.mode=e,this.requestReferenceSpace("local").then((e=>{this.referenceSpace=e})).catch((e=>{})),this.requestReferenceSpace("viewer").then((e=>{this.viewerSpace=e}))}getBaseLayer(e){return this.internalLayer||this.existingBaseLayer||!e||this.createInternalLayer(e),this.internalLayer||this.existingBaseLayer}getReferenceSpace(){return this.referenceSpace?this.referenceSpace:this.viewerSpace}getViewerSpace(){return this.viewerSpace}queueTask(e){this.taskQueue.push(e)}get renderState(){return this.activeRenderState||this.createActiveRenderState(),this.activeRenderState}get internalViews(){return this.views}getViewIndex(e){for(let t=0;t<this.views.length;t++){let r=this.views[t];if(e.eye===r.eye&&e.recommendedViewportScale===r.recommendedViewportScale)return t}return-1}createInternalLayer(e){if(!e&&this.internalLayer)return this.internalLayer;if(e===this.context&&this.internalLayer)return this.internalLayer;const t=Ct();return this.internalLayer=new t.XRWebGLLayer(this,e),this.setContext(e),this.internalLayer}setContext(e){this.context=e,this.tempFramebuffer=e.createFramebuffer(),this.renderers=new WeakMap}createActiveRenderState(){const e=Ct();let t=Object.getOwnPropertyNames(e.XRRenderState.prototype);const r={};for(let e of t)r[e]=this._renderState[e];r.layers=[],this.activeRenderState=r}}class Mr{constructor(){this.viewport={x:0,y:0,width:0,height:0}}}class Ar{constructor(e,t){this.session=e,this.context=t,this.subImageCache=new Pr}createProjectionLayer(e=jt){const t=new Wt(e);if(this.session.ended)throw new Error("Session has ended");if(this.context.isContextLost())throw new Error("context is lost");return t.initialize(this.session,this.context),t}createQuadLayer(e=qt){if(this.session.ended)throw new Error("Session has ended");if(this.context.isContextLost())throw new Error("context is lost");if(e.layout===It.default)throw new TypeError("Trying to create a quad layer with default layout");const t=new Ht(e);return t.initialize(this.session,this.context),t}createCylinderLayer(e=Ot){if(this.session.ended)throw new Error("Session has ended");if(this.context.isContextLost())throw new Error("context is lost");if(e.layout===It.default)throw new TypeError("Cylinder Layer cannot have a default layout");const t=new Vt(e);return t.initialize(this.session,this.context),t}createEquirectLayer(e=Ut){if(this.session.ended)throw new Error("Session has ended");if(this.context.isContextLost())throw new Error("context is lost");if(e.layout===It.default)throw new TypeError("Equirect Layer cannot have a default layout");if(!Lt(e.space))throw new TypeError("Equirect layer requires an XRReferenceSpace");let t=new Gt(e);return t.initialize(this.session,this.context),t}createCubeLayer(e){if(this.session.ended)throw new Error("Session has ended");if(this.context.isContextLost())throw new Error("context is lost");if(!(this.context instanceof WebGL2RenderingContext))throw new Error("XRCubeLayer only work on WebGL2");if(!Lt(e.space))throw new TypeError("XRCubeLayer requires a space of type XRReferenceSpace");let t=new wr(e);return t.initialize(this.session,this.context),t}getSubImage(e,t,r="none"){if(e.isStatic&&!1===e.needsRedraw)throw new Error("Invalid state for subimage creation");let i=this.subImageCache.tryGetCachedSubImage(this.context,e,r);if(i)return i;let s=new Mr;if(e instanceof Wt)throw new TypeError;if(e.layout===It.default)throw new TypeError;if(!this.validateStateofSubImageCreation(e,t))throw new Error("Invalid state for subimage creation");let a=0;if(e.layout===It.stereo){if("none"===r)throw new TypeError;"right"===r&&(a=1)}e.getTextureType()===Ft["texture-array"]?s.imageIndex=a:s.imageIndex=0;let n=0;e.getTextureType()===Ft.texture?(s.colorTexture=e.colorTextures[a],n=a):(s.colorTexture=e.colorTextures[0],n=0),e.depthStencilTextures&&e.depthStencilTextures.length?e.getTextureType()===Ft.texture?s.depthStencilTexture=e.depthStencilTextures[a]:s.depthStencilTexture=e.depthStencilTextures[0]:s.depthStencilTexture=null;const o=e.colorTexturesMeta[n];s.textureWidth=o.width,s.textureHeight=o.height;let h=1;return e.layout!==It["stereo-left-right"]&&e.layout!==It["stereo-top-bottom"]||(h=2),Yt(s.viewport,o,e.layout,a,h),this.session.queueTask((()=>{e.needsRedraw=!1})),this.subImageCache.cacheSubImage(s,this.context,e,r),s}getViewSubImage(e,t){let r=this.subImageCache.tryGetCachedViewSubImage(this.context,e,t);if(r)return r;let i=new Mr,s=this.session;if(!s.internalViews||!s.internalViews.length)return console.warn("Tried to get view sub image before we have any views"),i;let a=s.getViewIndex(t),n=0;return e.getTextureType()===Ft["texture-array"]?i.imageIndex=a:i.imageIndex=0,e.layout===It.default&&e.getTextureType()===Ft.texture?(i.colorTexture=e.colorTextures[a],n=a):(i.colorTexture=e.colorTextures[0],n=0),0===e.depthStencilTextures.length?i.depthStencilTexture=null:e.layout===It.default&&e.getTextureType()===Ft.texture?i.depthStencilTexture=e.depthStencilTextures[a]:i.depthStencilTexture=e.depthStencilTextures[0],i.textureWidth=e.colorTexturesMeta[n].width,i.textureHeight=e.colorTexturesMeta[n].height,Yt(i.viewport,e.colorTexturesMeta[n],e.layout,a,s.internalViews.length),e.needsRedraw=!1,this.subImageCache.cacheViewSubImage(i,this.context,e,t),i}validateStateofSubImageCreation(e,t){return t.session===e.session&&(this.session===e.session&&(this.context===e.context&&(!(!e.colorTextures||!e.colorTextures.length)&&(!e.isStatic||!1!==e.needsRedraw))))}}class Pr{constructor(){this.cache=new Map,this.viewCache=new Map}cacheSubImage(e,t,r,i){let s=new Map;s.set(i,e);let a=new Map;a.set(r,s),this.cache.set(t,a)}tryGetCachedSubImage(e,t,r){var i,s;return null===(s=null===(i=this.cache.get(e))||void 0===i?void 0:i.get(t))||void 0===s?void 0:s.get(r)}cacheViewSubImage(e,t,r,i){let s=new Map;s.set(i,e);let a=new Map;a.set(r,s),this.viewCache.set(t,a)}tryGetCachedViewSubImage(e,t,r){var i,s;return null===(s=null===(i=this.viewCache.get(e))||void 0===i?void 0:i.get(t))||void 0===s?void 0:s.get(r)}}class Fr{constructor(){this.injected=!1;const e=Ct();this._injectPolyfill(e)}_injectPolyfill(e){if(!("xr"in e.navigator))throw new Error("WebXR Layers polyfill requires WebXR support.");!0===this.injected&&console.warn("Polyfill has already been injected..."),(e=>!!e.navigator.xr&&!(!e.XRMediaBinding||!e.XRWebGLBinding))(e)||(this._polyfillRequiredLayersFeature(e),this._polyfillXRSession(e),e.XRWebGLBinding=Ar,e.XRMediaBinding=kt,this.injected=!0,console.log("Injected Layers Polyfill"))}_polyfillXRSession(e){e.XRSession.prototype._updateRenderState=e.XRSession.prototype.updateRenderState,e.XRSession.prototype._requestAnimationFrame=e.XRSession.prototype.requestAnimationFrame;let t=Object.getOwnPropertyDescriptor(e.XRSession.prototype,"renderState");Object.defineProperty(e.XRSession.prototype,"_renderState",t);let r=Object.getOwnPropertyDescriptor(br.prototype,"renderState");Object.defineProperty(e.XRSession.prototype,"renderState",r);let i=Object.getOwnPropertyNames(br.prototype);for(let t of i){let r=Object.getOwnPropertyDescriptor(br.prototype,t);Object.defineProperty(e.XRSession.prototype,t,r)}}_polyfillRequiredLayersFeature(e){const t=e.navigator.xr.requestSession;Object.defineProperty(e.navigator.xr,"requestSessionInternal",{writable:!0}),e.navigator.xr.requestSessionInternal=t;Object.defineProperty(e.navigator.xr,"requestSession",{writable:!0}),e.navigator.xr.requestSession=(t,r)=>{const i=(r,i)=>e.navigator.xr.requestSessionInternal(r,i).then((e=>{Object.assign(e,new br);let r=e;return r.initializeSession(t),Promise.resolve(r)}));if("immersive-vr"!==t)return i(t,r);if(!r)return i(t,r);if(r.requiredFeatures&&r.requiredFeatures.indexOf("layers")>-1){const e=Object.assign({},r),s=[...r.requiredFeatures],a=s.indexOf("layers");return s.splice(a,1),e.requiredFeatures=s,i(t,e)}return i(t,r)}}}const Ir={ipd:.063,fovy:Math.PI/2,headsetPosition:new ce(0,1.6,0),headsetQuaternion:new ue,stereoEnabled:!1};const Lr={mapping:de.XRStandard,buttons:[{id:"trigger",type:"analog",eventTrigger:"select"},{id:"squeeze",type:"analog",eventTrigger:"squeeze"},null,{id:"thumbstick",type:"binary"},{id:"x-button",type:"binary"},{id:"y-button",type:"binary"},{id:"thumbrest",type:"binary"}],axes:[null,null,{id:"thumbstick",type:"x-axis"},{id:"thumbstick",type:"y-axis"}]},Cr={mapping:de.XRStandard,buttons:[{id:"trigger",type:"analog",eventTrigger:"select"},{id:"squeeze",type:"analog",eventTrigger:"squeeze"},null,{id:"thumbstick",type:"binary"},{id:"a-button",type:"binary"},{id:"b-button",type:"binary"},{id:"thumbrest",type:"binary"}],axes:[null,null,{id:"thumbstick",type:"x-axis"},{id:"thumbstick",type:"y-axis"}]},Nr={profileId:"oculus-touch-v3",fallbackProfileIds:["oculus-touch","generic-trigger-squeeze-thumbstick"],layout:{left:{gamepad:Lr,gripOffsetMatrix:[.9925461411476135,2.0823669899527886e-8,-.12186937034130096,0,.08617465198040009,.7071067094802856,.701836109161377,0,.08617466688156128,-.7071067690849304,.7018360495567322,0,-.003979838453233242,-.015857907012104988,.04964181408286095,1],numHapticActuators:1},right:{gamepad:Cr,gripOffsetMatrix:[.9925461411476135,-8.329467959811154e-8,.12186941504478455,0,-.08617465943098068,.7071066498756409,.7018361687660217,0,-.08617471158504486,-.7071068286895752,.7018359303474426,0,.003979798872023821,-.015857888385653496,.049641866236925125,1],numHapticActuators:1}}},Dr={profileId:"meta-quest-touch-pro",fallbackProfileIds:["oculus-touch-v2","oculus-touch","generic-trigger-squeeze-thumbstick"],layout:{left:{gamepad:Lr,gripOffsetMatrix:[.9925461411476135,-1.5779937356796836e-8,-.12186935544013977,0,.08617467433214188,.7071067094802856,.701836109161377,0,.0861746296286583,-.7071067690849304,.7018360495567322,0,-.003979836590588093,-.015857847407460213,.049641840159893036,1],numHapticActuators:3},right:{gamepad:Cr,gripOffsetMatrix:[.9925461411476135,9267653311439972e-26,.12186937034130096,0,-.08617467433214188,.7071067094802856,.7018361687660217,0,-.08617464452981949,-.7071067690849304,.7018360495567322,0,.003979847766458988,-.01585782691836357,.04964186251163483,1],numHapticActuators:3}}},Or={profileId:"meta-quest-touch-plus",fallbackProfileIds:["oculus-touch-v3","oculus-touch","generic-trigger-squeeze-thumbstick"],layout:{left:{gamepad:Lr,gripOffsetMatrix:[.9925461411476135,1.0736208366779465e-8,-.12186933308839798,0,.08617459982633591,.70710688829422,.7018360495567322,0,.08617466688156128,-.7071067094802856,.7018362283706665,0,-.003979803062975407,-.015857873484492302,.04964187368750572,1],numHapticActuators:1},right:{gamepad:Cr,gripOffsetMatrix:[.9925461411476135,-2.6238110351073374e-8,.12186934053897858,0,-.0861746147274971,.7071067690849304,.7018360495567322,0,-.08617465943098068,-.7071067094802856,.701836109161377,0,.003979838453233242,-.015857869759202003,.04964182525873184,1],numHapticActuators:1}}},Br={name:"Oculus Quest 1",controllerConfig:{profileId:"oculus-touch-v2",fallbackProfileIds:["oculus-touch","generic-trigger-squeeze-thumbstick"],layout:{left:{gamepad:Lr,gripOffsetMatrix:[.9925461411476135,4.673031295254759e-9,-.12186938524246216,0,.08617470413446426,.7071065306663513,.7018362283706665,0,.0861746296286583,-.70710688829422,.7018358707427979,0,-.003979847766458988,-.01585787907242775,.04964185878634453,1],numHapticActuators:1},right:{gamepad:Cr,gripOffsetMatrix:[.9925461411476135,3.688163374704345e-8,.12186937034130096,0,-.08617469668388367,.7071066498756409,.7018361687660217,0,-.0861746147274971,-.7071068286895752,.7018359899520874,0,.003979853354394436,-.01585787907242775,.04964182525873184,1],numHapticActuators:1}}},supportedSessionModes:["inline","immersive-vr","immersive-ar"],supportedFeatures:["viewer","local","local-floor","bounded-floor","unbounded","anchors","plane-detection","hand-tracking"],supportedFrameRates:[72,80,90],isSystemKeyboardSupported:!0,internalNominalFrameRate:72,environmentBlendModes:{"immersive-vr":rt.Opaque,"immersive-ar":rt.AlphaBlend},interactionMode:it.WorldSpace,userAgent:"Mozilla/5.0 (X11; Linux x86_64; Quest 1) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/33.0.0.x.x.x Chrome/126.0.6478.122 VR Safari/537.36"},Vr={name:"Meta Quest 2",controllerConfig:Nr,supportedSessionModes:["inline","immersive-vr","immersive-ar"],supportedFeatures:["viewer","local","local-floor","bounded-floor","unbounded","anchors","plane-detection","mesh-detection","hit-test","hand-tracking"],supportedFrameRates:[72,80,90,120],isSystemKeyboardSupported:!0,internalNominalFrameRate:72,environmentBlendModes:{"immersive-vr":rt.Opaque,"immersive-ar":rt.AlphaBlend},interactionMode:it.WorldSpace,userAgent:"Mozilla/5.0 (X11; Linux x86_64; Quest 2) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/33.0.0.x.x.x Chrome/126.0.6478.122 VR Safari/537.36"},Ur={name:"Meta Quest Pro",controllerConfig:Dr,supportedSessionModes:["inline","immersive-vr","immersive-ar"],supportedFeatures:["viewer","local","local-floor","bounded-floor","unbounded","anchors","plane-detection","mesh-detection","hit-test","hand-tracking"],supportedFrameRates:[72,80,90,120],isSystemKeyboardSupported:!0,internalNominalFrameRate:90,environmentBlendModes:{"immersive-vr":rt.Opaque,"immersive-ar":rt.AlphaBlend},interactionMode:it.WorldSpace,userAgent:"Mozilla/5.0 (X11; Linux x86_64; Quest Pro) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/33.0.0.x.x.x Chrome/126.0.6478.122 VR Safari/537.36"},Xr={name:"Meta Quest 3",controllerConfig:Or,supportedSessionModes:["inline","immersive-vr","immersive-ar"],supportedFeatures:["viewer","local","local-floor","bounded-floor","unbounded","anchors","plane-detection","mesh-detection","hit-test","hand-tracking","depth-sensing"],supportedFrameRates:[72,80,90,120],isSystemKeyboardSupported:!0,internalNominalFrameRate:90,environmentBlendModes:{"immersive-vr":rt.Opaque,"immersive-ar":rt.AlphaBlend},interactionMode:it.WorldSpace,userAgent:"Mozilla/5.0 (X11; Linux x86_64; Quest 3) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/33.0.0.x.x.x Chrome/126.0.6478.122 VR Safari/537.36"},Gr=e=>{const t=[];return Array.from(e).forEach((e=>{t.push(parseFloat(e.toFixed(3)))})),t};e.ActionRecorder=class{constructor(e,t){this[D]={session:e,refSpace:t,inputMap:new Map,schemaMap:new Map,compressedFrames:[],jointRadii:new Float32Array(25),jointTransforms:new Float32Array(400)}}recordFrame(e){var t;const r=performance.now(),i=null===(t=e.getViewerPose(this[D].refSpace))||void 0===t?void 0:t.transform.matrix;if(!i)return;const s={timeStamp:r,position:u(m(),i),quaternion:p(b(),i),inputFrames:[]};this[D].session.inputSources.forEach((t=>{var r,i;if(!this[D].inputMap.has(t)){const e={handedness:t.handedness,targetRayMode:t.targetRayMode,profiles:t.profiles,hasGrip:null!=t.gripSpace,hasHand:null!=t.hand,hasGamepad:null!=t.gamepad};e.hasHand&&(e.jointSequence=Array.from(t.hand.values()).map((e=>e.jointName))),e.hasGamepad&&(e.mapping=t.gamepad.mapping,e.numButtons=t.gamepad.buttons.length,e.numAxes=t.gamepad.axes.length);const r=this[D].inputMap.size;this[D].inputMap.set(t,r),this[D].schemaMap.set(r,e)}const a=this[D].inputMap.get(t),n=this[D].schemaMap.get(a),o=null===(r=e.getPose(t.targetRaySpace,this[D].refSpace))||void 0===r?void 0:r.transform.matrix;if(o){const r={index:a,targetRayTransform:{position:u(m(),o),quaternion:p(b(),o)}};if(n.hasGrip){const s=null===(i=e.getPose(t.gripSpace,this[D].refSpace))||void 0===i?void 0:i.transform.matrix;if(s){const e=u(m(),s),t=p(b(),s);r.gripTransform={position:e,quaternion:t}}}if(n.hasHand){const i=Array.from(t.hand.values());let s=!0;if(s&&(s=e.fillPoses(i,t.targetRaySpace,this[D].jointTransforms)),s&&(s=e.fillJointRadii(i,this[D].jointRadii)),s){const e={};for(let t=0;t<25;t++){const r=this[D].jointTransforms.slice(16*t,16*(t+1)),s=this[D].jointRadii[t],a=u(m(),r),n=p(b(),r);e[i[t].jointName]={position:a,quaternion:n,radius:s}}r.hand=e}}if(n.hasGamepad){const e={buttons:t.gamepad.buttons.map((e=>e?[e.pressed?1:0,e.touched?1:0,e.value]:null)),axes:Array.from(t.gamepad.axes)};r.gamepad=e}s.inputFrames.push(r)}})),this[D].compressedFrames.push(this.compressActionFrame(s))}compressActionFrame(e){const t=[Math.round(10*e.timeStamp)/10,...Gr(e.position),...Gr(e.quaternion)];return e.inputFrames.forEach((e=>{const r=e.index,i=this[D].schemaMap.get(r),s=[r,...Gr(e.targetRayTransform.position),...Gr(e.targetRayTransform.quaternion)];if(i.hasGrip&&s.push([...Gr(e.gripTransform.position),...Gr(e.gripTransform.quaternion)]),i.hasHand){const t=[];Object.values(e.hand).forEach((({position:e,quaternion:r,radius:i})=>{t.push(...Gr(e),...Gr(r),parseFloat(i.toFixed(3)))})),s.push(t)}i.hasGamepad&&s.push([...e.gamepad.buttons,...e.gamepad.axes]),t.push(s)})),t}log(){const e={schema:Array.from(this[D].schemaMap.entries()),frames:this[D].compressedFrames};console.log(JSON.stringify(e))}},e.NativeMesh=class{constructor(e,t,r,i){this.transform=e,this.vertices=t,this.indices=r,this.semanticLabel=i}},e.NativePlane=class{constructor(e,t,r){this.transform=e,this.polygon=t,this.semanticLabel=r}},e.P_ACTION_PLAYER=N,e.P_ACTION_RECORDER=D,e.P_ANCHOR=O,e.P_CONTROLLER=B,e.P_DEVICE=V,e.P_FRAME=G,e.P_GAMEPAD=q,e.P_HAND_INPUT=U,e.P_HIT_TEST=ne,e.P_INPUT_SOURCE=H,e.P_JOINT_POSE=Y,e.P_JOINT_SPACE=ee,e.P_MESH=j,e.P_PLANE=W,e.P_POSE=Q,e.P_RAY=ae,e.P_REF_SPACE=te,e.P_RENDER_STATE=J,e.P_RIGID_TRANSFORM=$,e.P_SESSION=Z,e.P_SPACE=re,e.P_SYSTEM=z,e.P_TRACKED_INPUT=X,e.P_VIEW=ie,e.P_VIEWER_POSE=K,e.P_VIEWPORT=se,e.P_WEBGL_LAYER=k,e.XRAnchor=Ie,e.XRAnchorSet=Le,e.XRDevice=class{constructor(e,t={}){var r,s,a,n,o,l;this.version=bt;const u=new he,d=new He(qe.Viewer,u),p={[ze.Left]:new oe(d),[ze.Right]:new oe(d),[ze.None]:new oe(d)},f=e.controllerConfig,m={};f&&Object.values(pe).forEach((e=>{f.layout[e]&&(m[e]=new Re(f,e,u))}));const g={[pe.Left]:new wt(ht,pe.Left,u),[pe.Right]:new wt(ht,pe.Right,u)},y=null!==(r=t.canvasContainer)&&void 0!==r?r:document.createElement("div");y.dataset.webxr_runtime=`Immersive Web Emulation Runtime v${bt}`,y.style.position="fixed",y.style.width="100%",y.style.height="100%",y.style.top="0",y.style.left="0",y.style.display="flex",y.style.justifyContent="center",y.style.alignItems="center",y.style.overflow="hidden",y.style.zIndex="999",this[V]={name:e.name,supportedSessionModes:e.supportedSessionModes,supportedFeatures:e.supportedFeatures,supportedFrameRates:e.supportedFrameRates,isSystemKeyboardSupported:e.isSystemKeyboardSupported,internalNominalFrameRate:e.internalNominalFrameRate,environmentBlendModes:e.environmentBlendModes,interactionMode:e.interactionMode,userAgent:e.userAgent,position:null!==(s=t.headsetPosition)&&void 0!==s?s:Ir.headsetPosition.clone(),quaternion:null!==(a=t.headsetQuaternion)&&void 0!==a?a:Ir.headsetQuaternion.clone(),stereoEnabled:null!==(n=t.stereoEnabled)&&void 0!==n?n:Ir.stereoEnabled,ipd:null!==(o=t.ipd)&&void 0!==o?o:Ir.ipd,fovy:null!==(l=t.fovy)&&void 0!==l?l:Ir.fovy,controllers:m,hands:g,primaryInputMode:"controller",pendingReferenceSpaceReset:!1,visibilityState:"visible",pendingVisibilityState:null,xrSystem:null,matrix:i(),globalSpace:u,viewerSpace:d,viewSpaces:p,canvasContainer:y,getViewport:(e,t)=>{const r=e.context.canvas,{width:i,height:s}=r;switch(t.eye){case ze.None:return new Pt(0,0,i,s);case ze.Left:return new Pt(0,0,this[V].stereoEnabled?i/2:i,s);case ze.Right:return new Pt(i/2,0,this[V].stereoEnabled?i/2:0,s)}},updateViews:()=>{c(this[V].viewerSpace[re].offsetMatrix,this[V].quaternion.quat,this[V].position.vec3),h(this[V].viewSpaces[ze.Left][re].offsetMatrix,x(-this[V].ipd/2,0,0)),h(this[V].viewSpaces[ze.Right][re].offsetMatrix,x(this[V].ipd/2,0,0))},onBaseLayerSet:e=>{if(!e)return;const t=e.context.canvas;if(t.parentElement!==this[V].canvasContainer){const e=this[V].devui;if(e){const{devUICanvas:t,devUIContainer:r}=e;t.style.zIndex=3..toString(),r.style.zIndex=4..toString(),this[V].canvasContainer.appendChild(e.devUICanvas),this[V].canvasContainer.appendChild(e.devUIContainer)}const r=this[V].sem;r&&(r.environmentCanvas.style.zIndex=1..toString(),this[V].canvasContainer.appendChild(r.environmentCanvas)),this[V].canvasData={canvas:t,parent:t.parentElement,width:t.width,height:t.height,zIndex:t.style.zIndex},t.style.zIndex=2..toString(),this[V].canvasContainer.appendChild(t),document.body.appendChild(this[V].canvasContainer)}t.width=window.innerWidth,t.height=window.innerHeight},onSessionEnd:()=>{if(this[V].canvasData){const{canvas:e,parent:t,width:r,height:i,zIndex:s}=this[V].canvasData;e.width=r,e.height=i,e.style.zIndex=s,t?t.appendChild(e):this[V].canvasContainer.removeChild(e);const a=this[V].devui;a&&(this[V].canvasContainer.removeChild(a.devUICanvas),this[V].canvasContainer.removeChild(a.devUIContainer));const n=this[V].sem;n&&this[V].canvasContainer.removeChild(n.environmentCanvas),document.body.removeChild(this[V].canvasContainer),this[V].canvasData=void 0,window.dispatchEvent(new Event("resize"))}},onFrameStart:e=>{var t;if(null===(t=this[V].actionPlayer)||void 0===t?void 0:t.playing)this[V].actionPlayer.playFrame();else{const t=e.session;this[V].updateViews(),this[V].pendingVisibilityState&&(this[V].visibilityState=this[V].pendingVisibilityState,this[V].pendingVisibilityState=null,t.dispatchEvent(new je("visibilitychange",{session:t}))),"visible"===this[V].visibilityState&&this.activeInputs.forEach((t=>{t.onFrameStart(e)})),this[V].pendingReferenceSpaceReset&&(t[Z].referenceSpaces.forEach((e=>{switch(e[te].type){case qe.Local:case qe.LocalFloor:case qe.BoundedFloor:case qe.Unbounded:e.dispatchEvent(new Mt("reset",{referenceSpace:e}))}})),this[V].pendingReferenceSpaceReset=!1)}this[V].updateViews()}},this[V].updateViews()}installRuntime(e){var t;const r=null!==(t=null==e?void 0:e.globalObject)&&void 0!==t?t:globalThis,i=null==e?void 0:e.polyfillLayers;Object.defineProperty(WebGL2RenderingContext.prototype,"makeXRCompatible",{value:function(){return new Promise(((e,t)=>{e(!0)}))},configurable:!0}),this[V].xrSystem=new At(this),Object.defineProperty(globalThis.navigator,"xr",{value:this[V].xrSystem,configurable:!0}),Object.defineProperty(navigator,"userAgent",{value:this[V].userAgent,writable:!1,configurable:!1,enumerable:!0}),r.XRSystem=At,r.XRSession=at,r.XRRenderState=ke,r.XRFrame=tt,r.XRSpace=oe,r.XRReferenceSpace=He,r.XRJointSpace=ot,r.XRView=We,r.XRViewport=Pt,r.XRRigidTransform=De,r.XRPose=Ye,r.XRViewerPose=Ke,r.XRJointPose=Qe,r.XRInputSource=ve,r.XRInputSourceArray=ye,r.XRHand=nt,r.XRLayer=St,r.XRWebGLLayer=Et,r.XRSessionEvent=je,r.XRInputSourceEvent=Te,r.XRInputSourcesChangeEvent=Xe,r.XRReferenceSpaceEvent=Mt,i?new Fr:(r.XRMediaBinding=void 0,r.XRWebGLBinding=void 0)}installDevUI(e){this[V].devui=new e(this)}installSEM(e){this[V].sem=new e(this)}get supportedSessionModes(){return this[V].supportedSessionModes}get supportedFeatures(){return this[V].supportedFeatures}get supportedFrameRates(){return this[V].supportedFrameRates}get isSystemKeyboardSupported(){return this[V].isSystemKeyboardSupported}get internalNominalFrameRate(){return this[V].internalNominalFrameRate}get stereoEnabled(){return this[V].stereoEnabled}set stereoEnabled(e){this[V].stereoEnabled=e}get ipd(){return this[V].ipd}set ipd(e){this[V].ipd=e}get fovy(){return this[V].fovy}set fovy(e){this[V].fovy=e}get position(){return this[V].position}get quaternion(){return this[V].quaternion}get viewerSpace(){var e;return(null===(e=this[V].actionPlayer)||void 0===e?void 0:e.playing)?this[V].actionPlayer.viewerSpace:this[V].viewerSpace}get viewSpaces(){var e;return(null===(e=this[V].actionPlayer)||void 0===e?void 0:e.playing)?this[V].actionPlayer.viewSpaces:this[V].viewSpaces}get controllers(){return this[V].controllers}get hands(){return this[V].hands}get primaryInputMode(){return this[V].primaryInputMode}set primaryInputMode(e){"controller"===e||"hand"===e?this[V].primaryInputMode=e:console.warn('primary input mode can only be "controller" or "hand"')}get activeInputs(){if("visible"!==this[V].visibilityState)return[];return("controller"===this[V].primaryInputMode?Object.values(this[V].controllers):Object.values(this[V].hands)).filter((e=>e.connected))}get inputSources(){var e;return(null===(e=this[V].actionPlayer)||void 0===e?void 0:e.playing)?this[V].actionPlayer.inputSources:this.activeInputs.map((e=>e.inputSource))}get canvasContainer(){return this[V].canvasContainer}get canvasDimensions(){if(this[V].canvasData){const{width:e,height:t}=this[V].canvasData.canvas;return{width:e,height:t}}}get activeSession(){var e;return null===(e=this[V].xrSystem)||void 0===e?void 0:e[z].activeSession}get sessionOffered(){var e;return Boolean(null===(e=this[V].xrSystem)||void 0===e?void 0:e[z].offeredSessionConfig)}get name(){return this[V].name}grantOfferedSession(){const e=this[V].xrSystem,t=null==e?void 0:e[z];if(t&&t.offeredSessionConfig){const{resolve:r,reject:i,mode:s,options:a}=t.offeredSessionConfig;t.offeredSessionConfig=void 0,e.requestSession(s,a).then(r).catch(i)}}recenter(){const e=new ce(-this.position.x,0,-this.position.z),t=new ce(0,0,-1).applyQuaternion(this.quaternion);t.y=0,t.normalize();const r=Math.atan2(t.x,-t.z),i=(new ue).setFromAxisAngle(new ce(0,1,0),r);this.position.add(e),this.quaternion.multiply(i),[...Object.values(this[V].controllers),...Object.values(this[V].hands)].forEach((t=>{t.position.add(e),t.quaternion.multiply(i),t.position.applyQuaternion(i)})),this[V].pendingReferenceSpaceReset=!0}get visibilityState(){return this[V].visibilityState}updateVisibilityState(e){if(!Object.values(["visible","visible-blurred","hidden"]).includes(e))throw new DOMException("Invalid XRVisibilityState value","NotSupportedError");e!==this[V].visibilityState&&(this[V].pendingVisibilityState=e)}createActionPlayer(e,t){return this[V].actionPlayer=new _t(e,t,this[V].ipd),this[V].actionPlayer}get devui(){return this[V].devui}get sem(){return this[V].sem}},e.XRFrame=tt,e.XRHand=nt,e.XRInputSource=ve,e.XRInputSourceArray=ye,e.XRInputSourceEvent=Te,e.XRInputSourcesChangeEvent=Xe,e.XRJointPose=Qe,e.XRJointSpace=ot,e.XRLayer=St,e.XRMesh=Ee,e.XRMeshSet=_e,e.XRPlane=Pe,e.XRPlaneSet=Fe,e.XRPose=Ye,e.XRRay=Be,e.XRReferenceSpace=He,e.XRReferenceSpaceEvent=Mt,e.XRRenderState=ke,e.XRRigidTransform=De,e.XRSession=at,e.XRSessionEvent=je,e.XRSpace=oe,e.XRSystem=At,e.XRView=We,e.XRViewerPose=Ke,e.XRViewport=Pt,e.XRWebGLLayer=Et,e.metaQuest2=Vr,e.metaQuest3=Xr,e.metaQuestPro=Ur,e.oculusQuest1=Br,Object.defineProperty(e,"__esModule",{value:!0})}));