xrWebGLBinding_createEquirectLayer.https.html (3077B)
1 <!doctype html> 2 <title>XRWebGLBinding::createEquirectLayer</title> 3 <link rel="help" href="https://immersive-web.github.io/layers/#dom-xrwebglbinding-createquadlayer"> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="../resources/webxr_util.js"></script> 7 <script src="../resources/webxr_test_constants.js"></script> 8 <script src="./xr_layer_promise_test.js"></script> 9 10 <canvas id="webgl-canvas"></canvas> 11 12 <script> 13 14 function testCreateEquirectLayer(xrSession, deviceController, t, { gl, xrBinding, xrSpace }) { 15 return new Promise((resolve, reject) => { 16 const valid_init = { 17 space: xrSpace, 18 viewPixelWidth: 1024, 19 viewPixelHeight: 1024 20 }; 21 22 t.step(() => { 23 // Check that create method clamps negative radius and angles according to spec. 24 let init_clamp_values = Object.assign({}, valid_init, { 25 radius: -2, 26 centralHorizontalAngle: -5, 27 upperVerticalAngle: -3, 28 lowerVerticalAngle: -3 29 }); 30 31 let layer = xrBinding.createEquirectLayer(init_clamp_values); 32 assert_equals(layer.radius, 0, "radius should be zero."); 33 assert_equals(layer.centralHorizontalAngle, 0, 34 "centralHorizontalAngle should be zero."); 35 assert_true( 36 Math.abs(layer.upperVerticalAngle + Math.PI / 2) < FLOAT_EPSILON, 37 "upperVerticalAngle should be -pi/2."); 38 assert_true( 39 Math.abs(layer.lowerVerticalAngle + Math.PI / 2) < FLOAT_EPSILON, 40 "lowerVerticalAngle should be -pi/2."); 41 }); 42 43 t.step(() => { 44 // Check that create method clamps negative radius and angles according to spec. 45 let init_clamp_values = Object.assign({}, valid_init, { 46 radius: 2, 47 centralHorizontalAngle: 7, 48 upperVerticalAngle: 3, 49 lowerVerticalAngle: 3 50 }); 51 52 let layer = xrBinding.createEquirectLayer(init_clamp_values); 53 assert_equals(layer.radius, 2, 54 "The radius value should be the same as provided to the init."); 55 assert_true( 56 Math.abs(layer.centralHorizontalAngle - 2 * Math.PI) < FLOAT_EPSILON, 57 "centralHorizontalAngle should not be greater than a 2*pi."); 58 assert_true( 59 Math.abs(layer.upperVerticalAngle - Math.PI / 2) < FLOAT_EPSILON, 60 "upperVerticalAngle should be pi/2."); 61 assert_true( 62 Math.abs(layer.lowerVerticalAngle - Math.PI / 2) < FLOAT_EPSILON, 63 "lowerVerticalAngle should be pi/2."); 64 }); 65 66 // Test that a valid init works. 67 t.step(() => { 68 const layer = xrBinding.createEquirectLayer(valid_init); 69 assert_true(layer instanceof XREquirectLayer, "Valid init parameters must create an XREquirectLayer."); 70 resolve(); 71 }); 72 }); 73 } 74 75 xr_layer_promise_test("Ensure XrWebGLBinding::createEquirectLayer throws the appropriate errors", 76 testCreateEquirectLayer, TRACKED_IMMERSIVE_DEVICE, 'immersive-vr', { requiredFeatures: ['layers'] }); 77 78 </script>