Morgan Villedieu 6 роки тому
батько
коміт
f8648ce40b
1 змінених файлів з 156 додано та 122 видалено
  1. 156 122
      examples/js/vr/HelioWebXRPolyfill.js

+ 156 - 122
examples/js/vr/HelioWebXRPolyfill.js

@@ -2,132 +2,166 @@
  * @author mvilledieu / http://github.com/mvilledieu
  */
 
-if (/(Helio)/g.test(navigator.userAgent) && "xr" in navigator) {
-  console.log("Helio WebXR Polyfill", navigator.xr);
+if ( /(Helio)/g.test( navigator.userAgent ) && "xr" in navigator ) {
 
-  // WebXRManager - XR.supportSession() Polyfill - WebVR.js line 147
+	console.log( "Helio WebXR Polyfill (Lumin 0.96.0)", navigator.xr );
 
-  if (
-    "supportsSession" in navigator.xr === false &&
+	// WebXRManager - XR.supportSession() Polyfill - WebVR.js line 147
+
+	if (
+		"supportsSession" in navigator.xr === false &&
     "supportsSessionMode" in navigator.xr
-  ) {
-    navigator.xr.supportsSession = navigator.xr.supportsSessionMode;
-  }
+	) {
+
+		navigator.xr.supportsSession = navigator.xr.supportsSessionMode;
+
+	}
+
+	if ( "requestSession" in navigator.xr ) {
+
+		const tempRequestSession = navigator.xr.requestSession.bind( navigator.xr );
+
+		navigator.xr.requestSession = function ( sessionType ) {
+
+			return new Promise( ( resolve, reject ) => {
+
+				tempRequestSession( {
+					mode: sessionType
+				} )
+					.then( function ( session ) {
+
+						// WebXRManager - xrFrame.getPose() Polyfill - line 279
+
+						const tempRequestAnimationFrame = session.requestAnimationFrame.bind(
+							session
+						);
+
+						session.requestAnimationFrame = function ( callback ) {
+
+							return tempRequestAnimationFrame( function ( time, frame ) {
+
+								// WebXRManager - xrFrame.getViewerPose() Polyfill - line 279
+								// Transforms view.viewMatrix to view.transform.inverse.matrix
+
+								const tempGetViewerPose = frame.getViewerPose.bind( frame );
+
+								frame.getViewerPose = function ( referenceSpace ) {
+
+									const pose = tempGetViewerPose( referenceSpace );
+
+									pose.views.forEach( function ( view ) {
+
+										view.transform = {
+											inverse: {
+												matrix: view.viewMatrix
+											}
+										};
+
+									} );
+
+									return pose;
+
+								};
+
+								// WebXRManager - xrFrame.getPose() Polyfill - line 259
+
+								frame.getPose = function ( targetRaySpace, referenceSpace ) {
+
+									const inputPose = frame.getInputPose(
+										targetRaySpace,
+										referenceSpace
+									);
+
+									inputPose.transform = {
+										matrix: inputPose.targetRay.transformMatrix
+									};
+
+									return inputPose;
+
+								};
+
+								callback( time, frame );
+
+							} );
+
+						};
+
+						// WebXRManager - xrFrame.getPose( inputSource.targetRaySpace, referenceSpace) Polyfill - line 279
+
+						const tempGetInputSources = session.getInputSources.bind( session );
+
+						session.getInputSources = function () {
+
+							const res = tempGetInputSources();
+
+							res.forEach( xrInputSource => {
+
+								Object.defineProperty( xrInputSource, "targetRaySpace", {
+									get: function () {
+
+										return xrInputSource;
+
+									}
+								} );
+
+							} );
+
+							return res;
+
+						};
+
+						// WebXRManager - xrSession.getInputSources() Polyfill Line 132 - 136
+
+						session.inputSources = Object.defineProperty(
+							session,
+							"inputSources",
+							{
+								get: session.getInputSources
+							}
+						);
+
+						// WebXRManager - xrSession.updateRenderState() Polyfill Line 129
+
+						session.updateRenderState = function ( { baseLayer } ) {
+
+							session.baseLayer = baseLayer;
+
+							// WebXRManager - xrSession.renderState.baseLayer Polyfill Line 219
+
+							session.renderState = {
+								baseLayer: baseLayer
+							};
+
+						};
+
+						// WebXRManager - xrSession.requestReferenceSpace() Polyfill Line 130
+
+						const tempRequestReferenceSpace = session.requestReferenceSpace.bind(
+							session
+						);
+
+						session.requestReferenceSpace = function () {
+
+							return tempRequestReferenceSpace( {
+								type: "stationary",
+								subtype: "floor-level"
+							} );
+
+						};
+
+						resolve( session );
+
+					} )
+					.catch( function ( error ) {
+
+						return reject( error );
+
+					} );
+
+			} );
 
-  if ("requestSession" in navigator.xr) {
-    const tempRequestSession = navigator.xr.requestSession.bind(navigator.xr);
+		};
 
-    navigator.xr.requestSession = function(sessionType) {
-      return new Promise((resolve, reject) => {
-        tempRequestSession({
-          mode: sessionType
-        })
-          .then(function(session) {
-            // WebXRManager - xrFrame.getPose() Polyfill - line 279
+	}
 
-            const tempRequestAnimationFrame = session.requestAnimationFrame.bind(
-              session
-            );
-
-            session.requestAnimationFrame = function(callback) {
-              return tempRequestAnimationFrame(function(time, frame) {
-                // WebXRManager - xrFrame.getViewerPose() Polyfill - line 279
-                // Transforms view.viewMatrix to view.transform.inverse.matrix
-
-                const tempGetViewerPose = frame.getViewerPose.bind(frame);
-
-                frame.getViewerPose = function(referenceSpace) {
-                  const pose = tempGetViewerPose(referenceSpace);
-
-                  pose.views.forEach(function(view) {
-                    view.transform = {
-                      inverse: {
-                        matrix: view.viewMatrix
-                      }
-                    };
-                  });
-
-                  return pose;
-                };
-
-                // WebXRManager - xrFrame.getPose() Polyfill - line 259
-
-                frame.getPose = function(targetRaySpace, referenceSpace) {
-                  const inputPose = frame.getInputPose(
-                    targetRaySpace,
-                    referenceSpace
-                  );
-
-                  inputPose.transform = {
-                    matrix: inputPose.targetRay.transformMatrix
-                  };
-
-                  return inputPose;
-                };
-
-                callback(time, frame);
-              });
-            };
-
-            // WebXRManager - xrFrame.getPose( inputSource.targetRaySpace, referenceSpace) Polyfill - line 279
-
-            const tempGetInputSources = session.getInputSources.bind(session);
-
-            session.getInputSources = function() {
-              const res = tempGetInputSources();
-
-              res.forEach(xrInputSource => {
-                Object.defineProperty(xrInputSource, "targetRaySpace", {
-                  get: function() {
-                    return xrInputSource;
-                  }
-                });
-              });
-
-              return res;
-            };
-
-            // WebXRManager - xrSession.getInputSources() Polyfill Line 132 - 136
-
-            session.inputSources = Object.defineProperty(
-              session,
-              "inputSources",
-              {
-                get: session.getInputSources
-              }
-            );
-
-            // WebXRManager - xrSession.updateRenderState() Polyfill Line 129
-
-            session.updateRenderState = function({ baseLayer }) {
-              session.baseLayer = baseLayer;
-
-              // WebXRManager - xrSession.renderState.baseLayer Polyfill Line 219
-
-              session.renderState = {
-                baseLayer: baseLayer
-              };
-            };
-
-            // WebXRManager - xrSession.requestReferenceSpace() Polyfill Line 130
-
-            const tempRequestReferenceSpace = session.requestReferenceSpace.bind(
-              session
-            );
-
-            session.requestReferenceSpace = function() {
-              return tempRequestReferenceSpace({
-                type: "stationary",
-                subtype: "floor-level"
-              });
-            };
-
-            resolve(session);
-          })
-          .catch(function(error) {
-            return reject(error);
-          });
-      });
-    };
-  }
 }