Added first-cut implementation of XR layers

This commit is contained in:
Alan Jeffrey 2020-04-08 17:35:20 -05:00
parent 7ae11588dc
commit fda8da0e9d
19 changed files with 585 additions and 15 deletions

View file

@ -14615,6 +14615,13 @@
{}
]
],
"layers.html": [
"31f4b6bd51cfcca47666331857bd2bbdf84d2f5e",
[
null,
{}
]
],
"obtain_frame.html": [
"74fda5bad43e8ea95552e65380e83952680e8469",
[

View file

@ -0,0 +1 @@
prefs: [dom.webxr.layers.enabled:true]

View file

@ -0,0 +1,54 @@
<html>
<head>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="./resources/webxr-util.js"></script>
</head>
<body>
<canvas id="canvas" width="640" height="480"></canvas>
<script>
let canvas = document.getElementById("canvas");
let gl = canvas.getContext('webgl');
promise_test(async function() {
let mock = await navigator.xr.test.simulateDeviceConnection({
supportsImmersive: true,
views: TEST_VIEWS,
viewerOrigin: {position: [0.5, 0.1, 0.1], orientation: [1, 0, 0, 1] }
});
let sessionPromise;
navigator.xr.test.simulateUserActivation(() => {
sessionPromise = navigator.xr.requestSession("immersive-vr");
});
let session = await sessionPromise;
let glLayerFactory = new XRWebGLBinding(session, gl);
let layer = new XRWebGLLayer(session, gl);
assert_class_string(glLayerFactory, "XRWebGLBinding", "glLayerFactory is an XRWebGLBinding object");
session.updateRenderState({ layers: [layer] });
await new Promise(resolve => {
session.requestAnimationFrame((time, frame) => resolve(frame));
});
assert_equals(session.renderState.baseLayer, null, "Setting layers shouldn't set baseLayer");
session.updateRenderState({ baseLayer: layer });
await new Promise(resolve => {
session.requestAnimationFrame((time, frame) => resolve(frame));
});
assert_equals(session.renderState.baseLayer, layer, "Setting baseLayer should set baseLayer");
session.updateRenderState({ layers: [layer] });
await new Promise(resolve => {
session.requestAnimationFrame((time, frame) => resolve(frame));
});
assert_equals(session.renderState.baseLayer, null, "Setting layers should unset baseLayer");
assert_throws_dom(
"InvalidStateError",
() => { session.updateRenderState({ layers: [layer], baseLayer: layer }); },
"Setting both baseLayer and layers should fail"
);
});
</script>
</body>
</html>