mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
Make webxr test use async/await
This commit is contained in:
parent
8e783577d2
commit
167ea556ce
2 changed files with 750 additions and 2206 deletions
File diff suppressed because it is too large
Load diff
|
@ -8,54 +8,44 @@
|
||||||
<canvas id="canvas" width="640" height="480"></canvas>
|
<canvas id="canvas" width="640" height="480"></canvas>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
let session;
|
|
||||||
let mock;
|
|
||||||
let canvas = document.getElementById("canvas");
|
let canvas = document.getElementById("canvas");
|
||||||
let gl = canvas.getContext('webgl');
|
let gl = canvas.getContext('webgl');
|
||||||
|
promise_test(async function() {
|
||||||
|
let mock = await navigator.xr.test.simulateDeviceConnection({supportsImmersive: true});
|
||||||
|
mock.setViewerOrigin({position: [0.5, 0, 0, 1], orientation: [0, 0, 0, 1] });
|
||||||
|
mock.setViews(TEST_VIEWS);
|
||||||
|
let session = await navigator.xr.requestSession({mode: "immersive-vr"});
|
||||||
|
await session.updateRenderState({"baseLayer": new XRWebGLLayer(session, gl, {})});
|
||||||
|
let resolve;
|
||||||
|
|
||||||
promise_test(function() {
|
let frame = await new Promise(resolve => {
|
||||||
return navigator.xr.test.simulateDeviceConnection({supportsImmersive: true}).then((m) => {
|
session.requestAnimationFrame((time, frame) => resolve(frame));
|
||||||
mock = m;
|
});
|
||||||
mock.setViewerOrigin({position: [0.5, 0, 0, 1], orientation: [0, 0, 0, 1] });
|
|
||||||
mock.setViews(TEST_VIEWS);
|
let space = await session.requestReferenceSpace("local");
|
||||||
return navigator.xr.requestSession({mode: "immersive-vr"});
|
let pose = frame.getViewerPose(space);
|
||||||
})
|
for (view of pose.views) {
|
||||||
.then((s) => {
|
assert_matrix_approx_equals(view.projectionMatrix, VALID_PROJECTION_MATRIX, 0.001, "left projection matrix");
|
||||||
session = s;
|
|
||||||
return session.updateRenderState({"baseLayer": new XRWebGLLayer(session, gl, {})})
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
return new Promise(function(resolve, reject) {
|
|
||||||
session.requestAnimationFrame(function(time, frame) {
|
|
||||||
session.requestReferenceSpace("local").then((space) => {
|
|
||||||
let pose = frame.getViewerPose(space);
|
|
||||||
for (view of pose.views) {
|
|
||||||
assert_matrix_approx_equals(view.projectionMatrix, VALID_PROJECTION_MATRIX, 0.001, "left projection matrix");
|
|
||||||
|
|
||||||
if (view.eye == "left") {
|
if (view.eye == "left") {
|
||||||
assert_matrix_approx_equals(view.transform.matrix, [1,0,0,0, 0,1,0,0, 0,0,1,0, 0.4,0,0,1], 0.001, "left transform");
|
assert_matrix_approx_equals(view.transform.matrix, [1,0,0,0, 0,1,0,0, 0,0,1,0, 0.4,0,0,1], 0.001, "left transform");
|
||||||
let position = view.transform.position;
|
let position = view.transform.position;
|
||||||
assert_approx_equals(position.x, 0.4, 0.001, "left x value");
|
assert_approx_equals(position.x, 0.4, 0.001, "left x value");
|
||||||
assert_approx_equals(position.y, 0, 0.001, "left y value");
|
assert_approx_equals(position.y, 0, 0.001, "left y value");
|
||||||
assert_approx_equals(position.z, 0, 0.001, "left z value");
|
assert_approx_equals(position.z, 0, 0.001, "left z value");
|
||||||
assert_approx_equals(position.w, 1, 0.001, "left w value");
|
assert_approx_equals(position.w, 1, 0.001, "left w value");
|
||||||
} else if (view.eye == "right") {
|
} else if (view.eye == "right") {
|
||||||
assert_matrix_approx_equals(view.transform.matrix, [1,0,0,0, 0,1,0,0, 0,0,1,0, 0.6,0,0,1], 0.001, "right transform");
|
assert_matrix_approx_equals(view.transform.matrix, [1,0,0,0, 0,1,0,0, 0,0,1,0, 0.6,0,0,1], 0.001, "right transform");
|
||||||
let position = view.transform.position;
|
let position = view.transform.position;
|
||||||
assert_approx_equals(position.x, 0.6, 0.001, "left x value");
|
assert_approx_equals(position.x, 0.6, 0.001, "left x value");
|
||||||
assert_approx_equals(position.y, 0, 0.001, "left y value");
|
assert_approx_equals(position.y, 0, 0.001, "left y value");
|
||||||
assert_approx_equals(position.z, 0, 0.001, "left z value");
|
assert_approx_equals(position.z, 0, 0.001, "left z value");
|
||||||
assert_approx_equals(position.w, 1, 0.001, "left w value");
|
assert_approx_equals(position.w, 1, 0.001, "left w value");
|
||||||
} else {
|
} else {
|
||||||
reject("got unknown view");
|
throw "got unknown view";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
resolve();
|
|
||||||
}).catch((e) => reject(e));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue