blob: 377b2129176e7090efbca662da4cd5b38d24a2d4 [file] [log] [blame]
<!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_single_view.js"></script>
<script src="../../webxr/resources/webxr_test_asserts.js"></script>
<script>
let testName = "Test XRFrame.fillPoses";
let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE_WITH_HAND_TRACKING;
let testFunction = function(session, fakeDeviceController, t, sessionObjects) {
let input_source = fakeDeviceController.simulateInputSourceConnection({
handedness: "none",
targetRayMode: "tracked-pointer",
pointerOrigin: VALID_POINTER_TRANSFORM,
profiles: [],
handJoints: VALID_HAND_JOINTS,
});
return session.requestReferenceSpace('local')
.then((referenceSpace) => new Promise((resolve) => {
function onFrame(time, xrFrame) {
assert_not_equals(session.inputSources.length, 0);
let hand = session.inputSources[0].hand
assert_not_equals(hand, null);
const floatsPerTransform = 16;
assert_throws_js(TypeError, function() {
let transformsArrayWithWrongSize = new Float32Array(JOINT_COUNT * floatsPerTransform - 1);
xrFrame.fillPoses(hand.values(), transformsArrayWithWrongSize);
});
let transforms = new Float32Array(JOINT_COUNT * floatsPerTransform);
let allValid = xrFrame.fillPoses(hand.values(), referenceSpace, transforms);
assert_true(allValid);
for (var i = 0; i < JOINT_COUNT; ++i) {
let transformStartIndex = i * floatsPerTransform;
for (var j = 0; j < floatsPerTransform; ++j) {
assert_approx_equals(transforms[transformStartIndex + j], VALID_POSE_MATRIX[j], FLOAT_EPSILON);
}
}
resolve();
}
session.requestAnimationFrame(onFrame);
}));
};
xr_session_promise_test(
testName, testFunction, fakeDeviceInitParams, 'immersive-vr', { optionalFeatures: ["hand-tracking"] });
</script>