mirror of
https://github.com/servo/servo.git
synced 2025-07-10 08:53:41 +01:00
59 lines
2.3 KiB
HTML
59 lines
2.3 KiB
HTML
<!DOCTYPE html>
|
|
<body>
|
|
<script src=/resources/testharness.js></script>
|
|
<script src=/resources/testharnessreport.js></script>
|
|
<script src="resources/webxr_util.js"></script>
|
|
<canvas></canvas>
|
|
<script>
|
|
xr_promise_test(
|
|
"Ensure that XRPresentationContexts are properly transfered between session",
|
|
(t) => {
|
|
return XRTest.simulateDeviceConnection({ supportsImmersive:false })
|
|
.then( (controller) => {
|
|
return Promise.all([
|
|
navigator.xr.requestSession('inline'),
|
|
navigator.xr.requestSession('inline')
|
|
]).then((sessions) => {
|
|
t.step(() => {
|
|
assert_not_equals(sessions[0], null);
|
|
assert_not_equals(sessions[1], null);
|
|
});
|
|
|
|
const webglCanvas = document.getElementsByTagName('canvas')[0];
|
|
let gl = webglCanvas.getContext('webgl', {xrCompatible: true});
|
|
let outputContext = getOutputContext();
|
|
|
|
sessions[0].updateRenderState({
|
|
baseLayer: new XRWebGLLayer(sessions[0], gl),
|
|
outputContext: outputContext
|
|
});
|
|
|
|
return new Promise((resolve, reject) => {
|
|
sessions[0].requestAnimationFrame((time, xrFrame) => {
|
|
sessions[1].updateRenderState({
|
|
baseLayer: new XRWebGLLayer(sessions[1], gl),
|
|
outputContext: outputContext
|
|
});
|
|
|
|
t.step(() => {
|
|
// outputContext reassignment should not happen until the next frame is processed.
|
|
assert_equals(sessions[0].renderState.outputContext, outputContext);
|
|
assert_equals(sessions[1].renderState.outputContext, null);
|
|
});
|
|
|
|
sessions[1].requestAnimationFrame((time, xrFrame) => {
|
|
t.step(() => {
|
|
// Ensure the outputContext was properly reassigned from one context to the other.
|
|
assert_equals(sessions[0].renderState.outputContext, null);
|
|
assert_equals(sessions[1].renderState.outputContext, outputContext);
|
|
});
|
|
|
|
resolve();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
</script>
|
|
</body>
|