xrWebGLLayer_viewports.https.html (2659B)
1 <!DOCTYPE html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <script src="resources/webxr_test_constants.js"></script> 5 <script src="resources/webxr_util.js"></script> 6 <script src="resources/webxr_test_asserts.js"></script> 7 8 <script> 9 10 let immersiveTestName = "XRWebGLLayer reports a valid viewports for immersive sessions"; 11 let inlineTestName = "XRWebGLLayer reports a valid viewports for inline sessions"; 12 13 let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE; 14 15 let testFunction = function(session, fakeDeviceController, t) { 16 return session.requestReferenceSpace('viewer') 17 .then((space) => new Promise((resolve) => { 18 function onFrame(time, xrFrame) { 19 let viewer_pose = xrFrame.getViewerPose(space); 20 21 let layer = xrFrame.session.renderState.baseLayer; 22 for (view of viewer_pose.views) { 23 let viewport = layer.getViewport(view); 24 25 t.step(() => { 26 // Ensure the returned object is an XRViewport object 27 assert_not_equals(viewport, null); 28 assert_true(viewport instanceof XRViewport); 29 30 // Ensure the viewport dimensions are valid 31 assert_greater_than_equal(viewport.x, 0); 32 assert_greater_than_equal(viewport.y, 0); 33 assert_greater_than_equal(viewport.width, 1); 34 assert_greater_than_equal(viewport.height, 1); 35 }); 36 37 // Ensure none of the viewports overlap 38 for (other of viewer_pose.views) { 39 if (view !== other) { 40 let otherport = layer.getViewport(other); 41 let no_overlap = (viewport.x + viewport.width <= otherport.x) || 42 (otherport.x + otherport.width <= viewport.x) || 43 (viewport.y + viewport.height <= otherport.y) || 44 (otherport.y + otherport.height <= viewport.y); 45 46 t.step(() => { 47 assert_true(no_overlap, "Overlap between viewport " + view.eye + " and " + other.eye); 48 }); 49 } 50 } 51 } 52 53 // Finished test. 54 resolve(); 55 } 56 57 session.requestAnimationFrame(onFrame); 58 })); 59 }; 60 61 xr_session_promise_test(immersiveTestName, testFunction, 62 fakeDeviceInitParams, 'immersive-vr'); 63 xr_session_promise_test(immersiveTestName + ' with secondary views requested', testFunction, 64 fakeDeviceInitParams, 'immersive-vr', {'optionalFeatures': ['secondary-views']}); 65 xr_session_promise_test(inlineTestName, testFunction, 66 fakeDeviceInitParams, 'inline'); 67 xr_session_promise_test(inlineTestName + ' with secondary views requested', testFunction, 68 fakeDeviceInitParams, 'inline', {'optionalFeatures': ['secondary-views']}); 69 </script>