xrSession_updateRenderState.https.html (2833B)
1 <!DOCTYPE html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <script src="../resources/webxr_util.js"></script> 5 <script src="../resources/webxr_test_constants.js"></script> 6 7 <script> 8 9 function testUpdateRenderState(xrSession, deviceController, t, { gl, glLayer }) { 10 return new Promise((resolve, reject) => { 11 const baseLayer = new XRWebGLLayer(xrSession, gl); 12 const singleLayer = [ 13 new XRWebGLLayer(xrSession, gl), 14 ]; 15 const multipleLayers = [ 16 new XRWebGLLayer(xrSession, gl), 17 new XRWebGLLayer(xrSession, gl) 18 ]; 19 const duplicateLayers = [ 20 baseLayer, 21 new XRWebGLLayer(xrSession, gl), 22 baseLayer 23 ]; 24 const layersFeatureEnabled = xrSession.enabledFeatures.includes('layers'); 25 26 t.step(() => { 27 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."); 28 }); 29 30 t.step(() => { 31 const updateRenderStateMultilayer = () => xrSession.updateRenderState({ layers: multipleLayers }); 32 if (layersFeatureEnabled) { 33 try { 34 updateRenderStateMultilayer(); 35 } catch (err) { 36 reject("XRSession should support render state with multiple layers if the layers feature is enabled."); 37 } 38 } else { 39 assert_throws_dom('NotSupportedError', updateRenderStateMultilayer, "XRSession should be able to updateRenderState with multiple layers only if the layers feature is enabled."); 40 } 41 }); 42 43 if (layersFeatureEnabled) { 44 t.step(() => { 45 assert_throws_js(TypeError, () => xrSession.updateRenderState({ layers: duplicateLayers }), "XRSession should throw a TypeError when updating render state with duplicate layers."); 46 }); 47 } 48 49 t.step(() => { 50 navigator.xr.requestSession('inline', {}).then((otherSession) => { 51 const otherSessionLayer = [ new XRWebGLLayer(otherSession, gl) ]; 52 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."); 53 resolve(); 54 }); 55 }); 56 }); 57 } 58 59 xr_session_promise_test("Ensure XRSession throws appropriate errors when updating render state without layers feature enabled", 60 testUpdateRenderState, TRACKED_IMMERSIVE_DEVICE, 'immersive-vr', {}); 61 62 xr_session_promise_test("Ensure XRSession throws appropriate errors when updating render state with layers feature enabled", 63 testUpdateRenderState, TRACKED_IMMERSIVE_DEVICE, 'immersive-vr', { requiredFeatures: ['layers'] }); 64 65 </script>