Skip to content

Commit 4e93cd3

Browse files
author
Yi Huang
committed
Fix #17837
1 parent b6cb074 commit 4e93cd3

File tree

1 file changed

+108
-109
lines changed

1 file changed

+108
-109
lines changed

examples/js/vr/HelioWebXRPolyfill.js

Lines changed: 108 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -4,189 +4,188 @@
44

55
if ( /(Helio)/g.test( navigator.userAgent ) && "xr" in navigator ) {
66

7-
if ( 'isSessionSupported' in navigator.xr ) return;
7+
if ( 'isSessionSupported' in navigator.xr === false) {
88

9-
console.log( "Helio WebXR Polyfill (Lumin 0.97.0)" );
9+
console.log( "Helio WebXR Polyfill (Lumin 0.97.0)" );
1010

11-
const isHelio96 = navigator.userAgent.includes( "Chrome/73" );
11+
const isHelio96 = navigator.userAgent.includes( "Chrome/73" );
1212

13-
// WebXRManager - XR.supportSession() Polyfill - WebVR.js line 147
13+
// WebXRManager - XR.supportSession() Polyfill - WebVR.js line 147
1414

15-
if (
16-
"supportsSession" in navigator.xr === false &&
17-
"supportsSessionMode" in navigator.xr
18-
) {
15+
if (
16+
"supportsSession" in navigator.xr === false &&
17+
"supportsSessionMode" in navigator.xr
18+
) {
1919

20-
navigator.xr.supportsSession = function ( /*sessionType*/ ) {
20+
navigator.xr.supportsSession = function ( /*sessionType*/ ) {
2121

22-
// Force using immersive-ar
23-
return navigator.xr.supportsSessionMode( 'immersive-ar' );
22+
// Force using immersive-ar
23+
return navigator.xr.supportsSessionMode( 'immersive-ar' );
2424

25-
};
25+
};
2626

27-
}
27+
}
28+
if ( "requestSession" in navigator.xr ) {
2829

29-
if ( "requestSession" in navigator.xr ) {
30+
const tempRequestSession = navigator.xr.requestSession.bind( navigator.xr );
3031

31-
const tempRequestSession = navigator.xr.requestSession.bind( navigator.xr );
32+
navigator.xr.requestSession = function ( /*sessionType*/ ) {
3233

33-
navigator.xr.requestSession = function ( /*sessionType*/ ) {
34+
return new Promise( function ( resolve, reject ) {
3435

35-
return new Promise( function ( resolve, reject ) {
36+
const sessionType = ( isHelio96 ? {
37+
mode: 'immersive-ar' // Force using immersive-ar
38+
} : 'immersive-ar' );
3639

37-
const sessionType = ( isHelio96 ? {
38-
mode: 'immersive-ar' // Force using immersive-ar
39-
} : 'immersive-ar' );
40+
tempRequestSession( sessionType )
41+
.then( function ( session ) {
4042

41-
tempRequestSession( sessionType )
42-
.then( function ( session ) {
43+
// WebXRManager - xrFrame.getPose() Polyfill - line 279
4344

44-
// WebXRManager - xrFrame.getPose() Polyfill - line 279
45+
const tempRequestAnimationFrame = session.requestAnimationFrame.bind(
46+
session
47+
);
4548

46-
const tempRequestAnimationFrame = session.requestAnimationFrame.bind(
47-
session
48-
);
49+
session.requestAnimationFrame = function ( callback ) {
4950

50-
session.requestAnimationFrame = function ( callback ) {
51+
return tempRequestAnimationFrame( function ( time, frame ) {
5152

52-
return tempRequestAnimationFrame( function ( time, frame ) {
53+
// WebXRManager - xrFrame.getViewerPose() Polyfill - line 279
54+
// Transforms view.viewMatrix to view.transform.inverse.matrix
5355

54-
// WebXRManager - xrFrame.getViewerPose() Polyfill - line 279
55-
// Transforms view.viewMatrix to view.transform.inverse.matrix
56+
const tempGetViewerPose = frame.getViewerPose.bind( frame );
5657

57-
const tempGetViewerPose = frame.getViewerPose.bind( frame );
58+
frame.getViewerPose = function ( referenceSpace ) {
5859

59-
frame.getViewerPose = function ( referenceSpace ) {
60+
const pose = tempGetViewerPose( referenceSpace );
6061

61-
const pose = tempGetViewerPose( referenceSpace );
62+
pose.views.forEach( function ( view ) {
6263

63-
pose.views.forEach( function ( view ) {
64+
view.transform = {
65+
inverse: {
66+
matrix: view.viewMatrix
67+
}
68+
};
6469

65-
view.transform = {
66-
inverse: {
67-
matrix: view.viewMatrix
68-
}
69-
};
70+
} );
7071

71-
} );
72+
return pose;
7273

73-
return pose;
74+
};
7475

75-
};
76+
// WebXRManager - xrFrame.getPose() Polyfill - line 259
7677

77-
// WebXRManager - xrFrame.getPose() Polyfill - line 259
78+
const tempGetPose = ( isHelio96 ? null : frame.getPose.bind( frame ) );
7879

79-
const tempGetPose = ( isHelio96 ? null : frame.getPose.bind( frame ) );
80+
frame.getPose = function ( targetRaySpace, referenceSpace ) {
8081

81-
frame.getPose = function ( targetRaySpace, referenceSpace ) {
82+
if ( isHelio96 ) {
8283

83-
if ( isHelio96 ) {
84+
const inputPose = frame.getInputPose(
85+
targetRaySpace,
86+
referenceSpace
87+
);
8488

85-
const inputPose = frame.getInputPose(
86-
targetRaySpace,
87-
referenceSpace
88-
);
89+
inputPose.transform = {
90+
matrix: inputPose.targetRay.transformMatrix
91+
};
8992

90-
inputPose.transform = {
91-
matrix: inputPose.targetRay.transformMatrix
92-
};
93+
return inputPose;
9394

94-
return inputPose;
95+
} else {
9596

96-
} else {
97+
return tempGetPose( targetRaySpace.gripSpace, referenceSpace );
9798

98-
return tempGetPose( targetRaySpace.gripSpace, referenceSpace );
99+
}
99100

100-
}
101+
};
101102

102-
};
103+
callback( time, frame );
103104

104-
callback( time, frame );
105+
} );
105106

106-
} );
107+
};
107108

108-
};
109+
// WebXRManager - xrFrame.getPose( inputSource.targetRaySpace, referenceSpace) Polyfill - line 279
109110

110-
// WebXRManager - xrFrame.getPose( inputSource.targetRaySpace, referenceSpace) Polyfill - line 279
111+
const tempGetInputSources = session.getInputSources.bind( session );
111112

112-
const tempGetInputSources = session.getInputSources.bind( session );
113+
session.getInputSources = function () {
113114

114-
session.getInputSources = function () {
115+
const res = tempGetInputSources();
115116

116-
const res = tempGetInputSources();
117+
res.forEach( function ( xrInputSource ) {
117118

118-
res.forEach( function ( xrInputSource ) {
119+
Object.defineProperty( xrInputSource, "targetRaySpace", {
120+
get: function () {
119121

120-
Object.defineProperty( xrInputSource, "targetRaySpace", {
121-
get: function () {
122+
return xrInputSource;
122123

123-
return xrInputSource;
124+
}
125+
} );
124126

125-
}
126127
} );
127128

128-
} );
129+
return res;
129130

130-
return res;
131+
};
131132

132-
};
133+
// WebXRManager - xrSession.getInputSources() Polyfill Line 132 - 136
133134

134-
// WebXRManager - xrSession.getInputSources() Polyfill Line 132 - 136
135+
session.inputSources = Object.defineProperty(
136+
session,
137+
"inputSources",
138+
{
139+
get: session.getInputSources
140+
}
141+
);
135142

136-
session.inputSources = Object.defineProperty(
137-
session,
138-
"inputSources",
139-
{
140-
get: session.getInputSources
141-
}
142-
);
143+
// WebXRManager - xrSession.updateRenderState() Polyfill Line 129
143144

144-
// WebXRManager - xrSession.updateRenderState() Polyfill Line 129
145+
if ( isHelio96 ) {
145146

146-
if ( isHelio96 ) {
147+
session.updateRenderState = function ( { baseLayer } ) {
147148

148-
session.updateRenderState = function ( { baseLayer } ) {
149+
session.baseLayer = baseLayer;
149150

150-
session.baseLayer = baseLayer;
151+
// WebXRManager - xrSession.renderState.baseLayer Polyfill Line 219
151152

152-
// WebXRManager - xrSession.renderState.baseLayer Polyfill Line 219
153+
session.renderState = {
154+
baseLayer: baseLayer
155+
};
153156

154-
session.renderState = {
155-
baseLayer: baseLayer
156157
};
157158

158-
};
159-
160-
}
159+
}
161160

162-
// WebXRManager - xrSession.requestReferenceSpace() Polyfill Line 130
161+
// WebXRManager - xrSession.requestReferenceSpace() Polyfill Line 130
163162

164-
const tempRequestReferenceSpace = session.requestReferenceSpace.bind(
165-
session
166-
);
163+
const tempRequestReferenceSpace = session.requestReferenceSpace.bind(
164+
session
165+
);
167166

168-
session.requestReferenceSpace = function () {
167+
session.requestReferenceSpace = function () {
169168

170-
return tempRequestReferenceSpace( {
171-
type: "stationary",
172-
subtype: "floor-level"
173-
} );
169+
return tempRequestReferenceSpace( {
170+
type: "stationary",
171+
subtype: "floor-level"
172+
} );
174173

175-
};
174+
};
176175

177-
resolve( session );
176+
resolve( session );
178177

179-
} )
180-
.catch( function ( error ) {
178+
} )
179+
.catch( function ( error ) {
181180

182-
return reject( error );
181+
return reject( error );
183182

184-
} );
183+
} );
185184

186-
} );
185+
} );
187186

188-
};
187+
};
189188

189+
}
190190
}
191-
192191
}

0 commit comments

Comments
 (0)