95 lines
4 KiB
HTML
95 lines
4 KiB
HTML
<!DOCTYPE html>
|
|
<body>
|
|
<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.js"></script>
|
|
|
|
<script>
|
|
let testName = "Test that getReflectionCubeMap returns or throws appropriately without a reflection map.";
|
|
|
|
let testFunction = (session, controller, t, sessionObjects) => new Promise((resolve) => {
|
|
let halfFloatExt = sessionObjects.gl.getExtension('OES_texture_half_float');
|
|
// The preferredReflectionFormat used below is set to "rgba16f" by default.
|
|
// This means half float textures must be supported in order to run this test
|
|
if (!halfFloatExt) {
|
|
resolve(session.end());
|
|
} else {
|
|
let debug = xr_debug.bind(this, 'testFunction');
|
|
let lightProbe1 = null;
|
|
let binding1 = new XRWebGLBinding(session, sessionObjects.gl);
|
|
|
|
// Request a default lightProbe
|
|
session.requestLightProbe({reflectionFormat: session.preferredReflectionFormat }).then((probe) => {
|
|
// Stash and end session.
|
|
lightProbe1 = probe;
|
|
|
|
debug("Querying first pair");
|
|
t.step(() => {
|
|
assert_equals(
|
|
binding1.getReflectionCubeMap(lightProbe1),
|
|
null,
|
|
"Active binding and light probe shouldn't throw when requesting cube map");
|
|
});
|
|
|
|
return session.end();
|
|
}).then(() => {
|
|
// Need to request a new session.
|
|
navigator.xr.test.simulateUserActivation( () => {
|
|
navigator.xr.requestSession('immersive-ar', { 'requiredFeatures': ['light-estimation'] })
|
|
.then((newSession) => {
|
|
let newBinding = new XRWebGLBinding(newSession, sessionObjects.gl);
|
|
newSession.requestLightProbe({ reflectionFormat: newSession.preferredReflectionFormat }).then((newProbe) => {
|
|
t.step(() => {
|
|
debug("Querying second pair");
|
|
assert_equals(
|
|
newBinding.getReflectionCubeMap(newProbe),
|
|
null,
|
|
"Newly created binding and light probe shouldn't throw");
|
|
|
|
debug("Querying old pair");
|
|
assert_throws_dom(
|
|
"InvalidStateError",
|
|
() => binding1.getReflectionCubeMap(lightProbe1),
|
|
"Binding created with an ended session should throw InvalidStateError");
|
|
debug("Querying mismatched pair");
|
|
assert_throws_dom(
|
|
"InvalidStateError",
|
|
() => newBinding.getReflectionCubeMap(lightProbe1),
|
|
"Querying binding with a probe with a different backing session should throw InvalidStateError");
|
|
});
|
|
debug("losing context");
|
|
|
|
// Trigger a context loss and verify that we are unable to get the reflectionCubeMap.
|
|
let lose_context_ext = sessionObjects.gl.getExtension('WEBGL_lose_context');
|
|
|
|
sessionObjects.gl.canvas.addEventListener('webglcontextlost', (ev) => {
|
|
ev.preventDefault();
|
|
|
|
t.step(() => {
|
|
assert_throws_dom(
|
|
"InvalidStateError",
|
|
() => newBinding.getReflectionCubeMap(newProbe),
|
|
"Querying for reflection cube map on a binding with context loss should throw InvalidStateError");
|
|
});
|
|
|
|
resolve(newSession.end());
|
|
});
|
|
|
|
lose_context_ext.loseContext();
|
|
}); // Request second light probe
|
|
}); // Request second session
|
|
}); // SimulateUserActivation
|
|
}); // .then on session end
|
|
} // halfFloatExt
|
|
}); // testFunction
|
|
|
|
xr_session_promise_test(
|
|
testName,
|
|
testFunction,
|
|
IMMERSIVE_AR_DEVICE,
|
|
'immersive-ar',
|
|
{'requiredFeatures': ['light-estimation']});
|
|
|
|
</script>
|
|
</body>
|