<!DOCTYPEhtml>
<html>
<head>
<title>VRDisplay GetFrameData</title>
<meta name="timeout" content="long"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="VRSimulationDriver.js"></script>
<script src="WebVRHelpers.js"></script>
<script src="requestPresent.js"></script>
<script src="runVRTest.js"></script>
</head>
<body id="body">
<canvas id="webglCanvas"></canvas>
<script> "use strict"; var vrDisplay; var vrRAF; varcanvas = document.getElementById('webglCanvas');
function startTest() {
promise_test((test) => {
return attachVRDisplay(test).then(() => {
VRSimulationDriver.SetEyeResolution(1332, 1586);
VRSimulationDriver.SetEyeParameter("left", -0.029, 0, 0, 41.65, 35.57, 48.00, 43.97);
VRSimulationDriver.SetEyeParameter("right", 0.029, 0, 0, 41.65, 43.97, 48.00, 35.57); var poseOrient = new Float32Array([-0.188, -0.007, 0.045, -0.980]); var posePos = new Float32Array([-0.161, 0.076, -0.250]); var poseAngVel = new Float32Array([0.008, -0.002, -0.006]); var poseAngAcc = new Float32Array([3.404, -1.469, -5.901]); var poseLinVel = new Float32Array([0.001, -0.003, -0.002]); var poseLinAcc = new Float32Array([0.007, 0.068, -0.052]);
VRSimulationDriver.SetVRDisplayPose(posePos, poseLinVel, poseLinAcc,
poseOrient, poseAngVel, poseAngAcc);
VRSimulationDriver.UpdateVRDisplay();
}).then(() => {
return promise_test((test) => {
return setupVRDisplay(test).then(() => {
return WebVRHelpers.RequestPresentOnVRDisplay(vrDisplay,
[{ source: canvas }]);
}).then(() => {
assert_true(vrDisplay.isPresenting, "vrDisplay.isPresenting must be true if requestPresent is fulfilled.");
assert_equals(vrDisplay.getLayers().length, 1, "vrDisplay.getLayers() should return one layer.");
verifyFrameData();
})
}, "WebVR requestPresent fulfilled");
})
}, "Finish setting up VR test data.");
function verifyFrameData() {
async_test(function (test) {
navigator.getVRDisplays().then((displays) => {
assert_equals(displays.length, 1, "displays.length must be one after attach.");
vrDisplay = displays[0];
vrDisplay.requestAnimationFrame(callback);
function callback() { var frameData1 = new VRFrameData();
vrDisplay.getFrameData(frameData1);
// We insert a new frame to confirm we still can get
// the same data as the last getter.
insertNewFrameData();
var frameData2 = new VRFrameData();
vrDisplay.getFrameData(frameData2);
assert_equals(frameData1.timestamp, frameData2.timestamp, "frameData.timestamp at a frame should be equal.");
assert_true(checkValueInFloat32Array(frameData1.leftProjectionMatrix,
frameData2.leftProjectionMatrix), "frameData.leftProjectionMatrix at a frame should be equal.");
assert_true(checkValueInFloat32Array(frameData1.leftViewMatrix,
frameData2.leftViewMatrix), "frameData.leftViewMatrix at a frame should be equal.");
assert_true(checkValueInFloat32Array(frameData1.rightProjectionMatrix,
frameData2.rightProjectionMatrix), "frameData.rightProjectionMatrix at a frame should be equal.");
assert_true(checkValueInFloat32Array(frameData1.rightViewMatrix,
frameData2.rightViewMatrix), "frameData.rightViewMatrix at a frame should be equal.");
var pose1 = frameData1.pose; var pose2 = frameData2.pose;
assert_true(checkValueInFloat32Array(pose1.position,
pose2.position), "pose.position at a frame should be equal.");
assert_true(checkValueInFloat32Array(pose1.linearVelocity,
pose2.linearVelocity), "pose.linearVelocity at a frame should be equal.");
assert_true(checkValueInFloat32Array(pose1.linearAcceleration,
pose2.linearAcceleration), "pose.linearAcceleration at a frame should be equal.");
assert_true(checkValueInFloat32Array(pose1.orientation,
pose2.orientation), "pose.orientation at a frame should be equal.");
assert_true(checkValueInFloat32Array(pose1.angularVelocity,
pose2.angularVelocity), "pose.angularVelocity at a frame should be equal.");
assert_true(checkValueInFloat32Array(pose1.angularAcceleration,
pose2.angularAcceleration), "pose.angularAcceleration at a frame should be equal.");
test.done();
}
});
}, "WebVR returns the same frameData within a frame fulfilled");
}
function insertNewFrameData() { var poseOrient = new Float32Array([-0.208, -0.017, 0.055, -0.930]); var posePos = new Float32Array([-0.261, 0.036, -0.150]); var poseAngVel = new Float32Array([0.018, -0.001, -0.003]); var poseAngAcc = new Float32Array([1.504, -1.339, -4.901]); var poseLinVel = new Float32Array([0.002, -0.001, -0.003]); var poseLinAcc = new Float32Array([0.017, 0.061, -0.022]);
VRSimulationDriver.SetVRDisplayPose(posePos, poseLinVel, poseLinAcc,
poseOrient, poseAngVel, poseAngAcc);
VRSimulationDriver.UpdateVRDisplay();
}
function checkValueInFloat32Array(array1, array2) {
if (array1.length != array2.length) {
return false;
} var index = 0;
while (index < array2.length) {
if (array1[index] != array2[index]) {
return false;
}
++index;
}
return true;
}
}
runVRTest(startTest);
</script>
</body>
</html>
Messung V0.5
¤ Dauer der Verarbeitung: 0.22 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.