mirror of
https://github.com/servo/servo.git
synced 2025-08-06 22:15:33 +01:00
Added first-cut implementation of XR layers
This commit is contained in:
parent
7ae11588dc
commit
fda8da0e9d
19 changed files with 585 additions and 15 deletions
|
@ -14615,6 +14615,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"layers.html": [
|
||||
"31f4b6bd51cfcca47666331857bd2bbdf84d2f5e",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"obtain_frame.html": [
|
||||
"74fda5bad43e8ea95552e65380e83952680e8469",
|
||||
[
|
||||
|
|
1
tests/wpt/mozilla/meta/webxr/layers.html.ini
Normal file
1
tests/wpt/mozilla/meta/webxr/layers.html.ini
Normal file
|
@ -0,0 +1 @@
|
|||
prefs: [dom.webxr.layers.enabled:true]
|
54
tests/wpt/mozilla/tests/webxr/layers.html
Normal file
54
tests/wpt/mozilla/tests/webxr/layers.html
Normal 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>
|
Loading…
Add table
Add a link
Reference in a new issue