Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/webxr_util.js"></script>
<script src="../resources/webxr_test_constants.js"></script>
<script>
function testUpdateRenderState(xrSession, deviceController, t, { gl, glLayer }) {
return new Promise((resolve, reject) => {
const baseLayer = new XRWebGLLayer(xrSession, gl);
const singleLayer = [
new XRWebGLLayer(xrSession, gl),
];
const multipleLayers = [
new XRWebGLLayer(xrSession, gl),
new XRWebGLLayer(xrSession, gl)
];
const duplicateLayers = [
baseLayer,
new XRWebGLLayer(xrSession, gl),
baseLayer
];
const layersFeatureEnabled = xrSession.enabledFeatures.includes('layers');
t.step(() => {
assert_throws_dom('NotSupportedError', () => xrSession.updateRenderState({ baseLayer, layers: singleLayer }), "XRSession should throw an error when updating render state with both a baseLayer and layers set.");
});
t.step(() => {
const updateRenderStateMultilayer = () => xrSession.updateRenderState({ layers: multipleLayers });
if (layersFeatureEnabled) {
try {
updateRenderStateMultilayer();
} catch (err) {
reject("XRSession should support render state with multiple layers if the layers feature is enabled.");
}
} else {
assert_throws_dom('NotSupportedError', updateRenderStateMultilayer, "XRSession should be able to updateRenderState with multiple layers only if the layers feature is enabled.");
}
});
if (layersFeatureEnabled) {
t.step(() => {
assert_throws_js(TypeError, () => xrSession.updateRenderState({ layers: duplicateLayers }), "XRSession should throw a TypeError when updating render state with duplicate layers.");
});
}
t.step(() => {
navigator.xr.requestSession('inline', {}).then((otherSession) => {
const otherSessionLayer = [ new XRWebGLLayer(otherSession, gl) ];
assert_throws_js(TypeError, () => xrSession.updateRenderState({ layers: otherSessionLayer }), "XRSession should throw a TypeError when updating render state with a layer created for a different session.");
resolve();
});
});
});
}
xr_session_promise_test("Ensure XRSession throws appropriate errors when updating render state without layers feature enabled",
testUpdateRenderState, TRACKED_IMMERSIVE_DEVICE, 'immersive-vr', {});
xr_session_promise_test("Ensure XRSession throws appropriate errors when updating render state with layers feature enabled",
testUpdateRenderState, TRACKED_IMMERSIVE_DEVICE, 'immersive-vr', { requiredFeatures: ['layers'] });
</script>