Support for ExternalVR implementation

This commit is contained in:
Paul Rouget 2019-02-05 05:20:26 +01:00
parent b7e9bab267
commit c055b74e13
11 changed files with 66 additions and 13 deletions

View file

@ -21,7 +21,7 @@ euclid = "0.19"
ipc-channel = "0.11"
log = "0.4"
msg = {path = "../msg"}
rust-webvr = {version = "0.9", features = ["openvr"]}
rust-webvr = {version = "0.9", features = ["openvr", "vrexternal"]}
script_traits = {path = "../script_traits"}
servo_config = {path = "../config"}
webvr_traits = {path = "../webvr_traits" }

View file

@ -9,3 +9,4 @@ extern crate log;
mod webvr_thread;
pub use crate::webvr_thread::{WebVRCompositorHandler, WebVRThread};
pub use rust_webvr::api::VRExternalShmemPtr;

View file

@ -2,6 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use crate::VRExternalShmemPtr;
use canvas_traits::webgl;
use crossbeam_channel::{unbounded, Receiver, Sender};
use euclid::Size2D;
@ -52,9 +53,13 @@ impl WebVRThread {
sender: IpcSender<WebVRMsg>,
constellation_chan: Sender<ConstellationMsg>,
vr_compositor_chan: WebVRCompositorSender,
webvr_shmem: Option<VRExternalShmemPtr>,
) -> WebVRThread {
let mut service = VRServiceManager::new();
service.register_defaults();
if let Some(ptr) = webvr_shmem {
service.register_vrexternal(ptr);
}
WebVRThread {
receiver: receiver,
sender: sender,
@ -69,6 +74,7 @@ impl WebVRThread {
pub fn spawn(
vr_compositor_chan: WebVRCompositorSender,
webvr_shmem: Option<VRExternalShmemPtr>,
) -> (IpcSender<WebVRMsg>, Sender<Sender<ConstellationMsg>>) {
let (sender, receiver) = ipc::channel().unwrap();
let (constellation_sender, constellation_receiver) = unbounded();
@ -82,6 +88,7 @@ impl WebVRThread {
sender_clone,
constellation_chan,
vr_compositor_chan,
webvr_shmem,
)
.start();
})
@ -157,7 +164,7 @@ impl WebVRThread {
) {
match self.access_check(pipeline, display_id) {
Ok(display) => sender
.send(Ok(display.borrow().inmediate_frame_data(near, far)))
.send(Ok(display.borrow().immediate_frame_data(near, far)))
.unwrap(),
Err(msg) => sender.send(Err(msg.into())).unwrap(),
}