Auto merge of #27224 - asajeffrey:webxr-glwindow-spherical, r=Manishearth

Add support for webxr cubemap and spherical 360 rendering

<!-- Please describe your changes on the following line: -->

Part of rendering webxr content as 360 video

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes do not require tests because it's back-end rendering

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
This commit is contained in:
bors-servo 2020-07-09 16:10:06 -04:00 committed by GitHub
commit 714acb942c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 53 additions and 2 deletions

4
Cargo.lock generated
View file

@ -6778,7 +6778,7 @@ dependencies = [
[[package]]
name = "webxr"
version = "0.0.1"
source = "git+https://github.com/servo/webxr#88f287d639710dbc1a41c83600d947911b78480d"
source = "git+https://github.com/servo/webxr#de60f3ebe01b1e829393c980a6126924b5f60075"
dependencies = [
"android_injected_glue",
"bindgen",
@ -6801,7 +6801,7 @@ dependencies = [
[[package]]
name = "webxr-api"
version = "0.0.1"
source = "git+https://github.com/servo/webxr#88f287d639710dbc1a41c83600d947911b78480d"
source = "git+https://github.com/servo/webxr#de60f3ebe01b1e829393c980a6126924b5f60075"
dependencies = [
"euclid",
"ipc-channel",

View file

@ -272,6 +272,8 @@ mod gen {
left_right: bool,
#[serde(rename = "dom.webxr.glwindow.red-cyan")]
red_cyan: bool,
spherical: bool,
cubemap: bool,
},
hands: {
#[serde(default)]

View file

@ -105,6 +105,49 @@ impl XRViewerPose {
&to_base,
));
},
Views::Cubemap(front, left, right, top, bottom, back) => {
views.push(XRView::new(
global,
session,
&front,
XREye::None,
0,
&to_base,
));
views.push(XRView::new(
global,
session,
&left,
XREye::None,
1,
&to_base,
));
views.push(XRView::new(
global,
session,
&right,
XREye::None,
2,
&to_base,
));
views.push(XRView::new(global, session, &top, XREye::None, 3, &to_base));
views.push(XRView::new(
global,
session,
&bottom,
XREye::None,
4,
&to_base,
));
views.push(XRView::new(
global,
session,
&back,
XREye::None,
5,
&to_base,
));
},
};
let transform: RigidTransform3D<f32, Viewer, BaseSpace> =
to_base.pre_transform(&viewer_pose.transform);

View file

@ -684,6 +684,10 @@ impl webxr::glwindow::GlWindow for XRWindow {
webxr::glwindow::GlWindowMode::StereoRedCyan
} else if pref!(dom.webxr.glwindow.left_right) {
webxr::glwindow::GlWindowMode::StereoLeftRight
} else if pref!(dom.webxr.glwindow.spherical) {
webxr::glwindow::GlWindowMode::Spherical
} else if pref!(dom.webxr.glwindow.cubemap) {
webxr::glwindow::GlWindowMode::Cubemap
} else {
webxr::glwindow::GlWindowMode::Blit
}

View file

@ -34,9 +34,11 @@
"dom.webvr.test": false,
"dom.webvtt.enabled": false,
"dom.webxr.enabled": true,
"dom.webxr.glwindow.cubemap": false,
"dom.webxr.glwindow.enabled": true,
"dom.webxr.glwindow.left-right": false,
"dom.webxr.glwindow.red-cyan": false,
"dom.webxr.glwindow.spherical": false,
"dom.webxr.hands.enabled": false,
"dom.webxr.layers.enabled": false,
"dom.webxr.test": false,