mirror of
https://github.com/servo/servo.git
synced 2025-09-11 15:38:24 +01:00
Support for webxr layer management
This commit is contained in:
parent
af110ac21f
commit
349619ed2d
34 changed files with 949 additions and 642 deletions
|
@ -29,8 +29,8 @@ libservo = { path = "../../components/servo" }
|
|||
log = "0.4"
|
||||
servo-media = { git = "https://github.com/servo/media" }
|
||||
sparkle = "0.1"
|
||||
surfman = { git = "https://github.com/servo/surfman" }
|
||||
surfman-chains = { git = "https://github.com/asajeffrey/surfman-chains" }
|
||||
surfman = "0.3"
|
||||
surfman-chains = "0.4"
|
||||
surfman-chains-api = "0.2"
|
||||
|
||||
[build-dependencies]
|
||||
|
|
|
@ -12,7 +12,7 @@ ipc-channel = "0.14"
|
|||
libservo = { path = "../../../components/servo" }
|
||||
log = "0.4"
|
||||
servo-media = { git = "https://github.com/servo/media" }
|
||||
surfman = { version = "0.2", features = ["sm-angle-default"] }
|
||||
surfman = { version = "0.3", features = ["sm-angle-default"] }
|
||||
webxr = { git = "https://github.com/servo/webxr"}
|
||||
webxr-api = { git = "https://github.com/servo/webxr", features = ["ipc"] }
|
||||
|
||||
|
|
|
@ -15,7 +15,6 @@ pub use servo::script_traits::{MediaSessionActionType, MouseButton};
|
|||
|
||||
use getopts::Options;
|
||||
use ipc_channel::ipc::IpcSender;
|
||||
use servo::canvas::{SurfaceProviders, WebGlExecutor};
|
||||
use servo::compositing::windowing::{
|
||||
AnimationState, EmbedderCoordinates, EmbedderMethods, MouseWindowEvent, WindowEvent,
|
||||
WindowMethods,
|
||||
|
@ -794,8 +793,6 @@ impl EmbedderMethods for ServoEmbedderCallbacks {
|
|||
fn register_webxr(
|
||||
&mut self,
|
||||
registry: &mut webxr::MainThreadRegistry,
|
||||
executor: WebGlExecutor,
|
||||
surface_providers: SurfaceProviders,
|
||||
embedder_proxy: EmbedderProxy,
|
||||
) {
|
||||
use ipc_channel::ipc::{self, IpcReceiver};
|
||||
|
@ -806,16 +803,6 @@ impl EmbedderMethods for ServoEmbedderCallbacks {
|
|||
"UWP builds should not be initialized with a WebXR Discovery object"
|
||||
);
|
||||
|
||||
struct ProviderRegistration(SurfaceProviders);
|
||||
impl openxr::SurfaceProviderRegistration for ProviderRegistration {
|
||||
fn register(&self, id: webxr_api::SessionId, provider: servo::canvas::SurfaceProvider) {
|
||||
self.0.lock().unwrap().insert(id, provider);
|
||||
}
|
||||
fn clone(&self) -> Box<dyn openxr::SurfaceProviderRegistration> {
|
||||
Box::new(ProviderRegistration(self.0.clone()))
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
struct ContextMenuCallback(EmbedderProxy);
|
||||
|
||||
|
@ -854,22 +841,9 @@ impl EmbedderMethods for ServoEmbedderCallbacks {
|
|||
}
|
||||
}
|
||||
|
||||
struct GlThread(WebGlExecutor);
|
||||
impl openxr::GlThread for GlThread {
|
||||
fn execute(&self, runnable: Box<dyn FnOnce(&surfman::Device) + Send>) {
|
||||
let _ = self.0.send(runnable);
|
||||
}
|
||||
fn clone(&self) -> Box<dyn webxr::openxr::GlThread> {
|
||||
Box::new(GlThread(self.0.clone()))
|
||||
}
|
||||
}
|
||||
|
||||
if openxr::create_instance(false).is_ok() {
|
||||
let discovery = openxr::OpenXrDiscovery::new(
|
||||
Box::new(GlThread(executor)),
|
||||
Box::new(ProviderRegistration(surface_providers)),
|
||||
Box::new(ContextMenuCallback(embedder_proxy)),
|
||||
);
|
||||
let discovery =
|
||||
openxr::OpenXrDiscovery::new(Box::new(ContextMenuCallback(embedder_proxy)));
|
||||
registry.register(discovery);
|
||||
} else {
|
||||
let msg =
|
||||
|
@ -891,8 +865,6 @@ impl EmbedderMethods for ServoEmbedderCallbacks {
|
|||
fn register_webxr(
|
||||
&mut self,
|
||||
registry: &mut webxr::MainThreadRegistry,
|
||||
_executor: WebGlExecutor,
|
||||
_surface_provider_registration: SurfaceProviders,
|
||||
_embedder_proxy: EmbedderProxy,
|
||||
) {
|
||||
debug!("EmbedderMethods::register_xr");
|
||||
|
|
|
@ -18,7 +18,7 @@ env_logger = "0.7"
|
|||
lazy_static = "1"
|
||||
log = "0.4"
|
||||
simpleservo = { path = "../api" }
|
||||
surfman = "0.2"
|
||||
surfman = "0.3"
|
||||
|
||||
[target.'cfg(target_os = "windows")'.dependencies]
|
||||
libc = "0.2"
|
||||
|
|
|
@ -57,7 +57,7 @@ libservo = { path = "../../components/servo" }
|
|||
log = "0.4"
|
||||
servo-media = { git = "https://github.com/servo/media" }
|
||||
shellwords = "1.0.0"
|
||||
surfman = { version = "0.2", features = ["sm-winit", "sm-x11"] }
|
||||
surfman = { version = "0.3", features = ["sm-winit", "sm-x11"] }
|
||||
tinyfiledialogs = "3.0"
|
||||
webxr = { git = "https://github.com/servo/webxr", features = ["ipc", "glwindow", "headless"] }
|
||||
winit = "0.19"
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
//! Implements the global methods required by Servo (not window/gl/compositor related).
|
||||
|
||||
use crate::events_loop::EventsLoop;
|
||||
use servo::canvas::{SurfaceProviders, WebGlExecutor};
|
||||
use servo::compositing::windowing::EmbedderMethods;
|
||||
use servo::embedder_traits::{EmbedderProxy, EventLoopWaker};
|
||||
use servo::servo_config::pref;
|
||||
|
@ -38,8 +37,6 @@ impl EmbedderMethods for EmbedderCallbacks {
|
|||
fn register_webxr(
|
||||
&mut self,
|
||||
xr: &mut webxr::MainThreadRegistry,
|
||||
_executor: WebGlExecutor,
|
||||
_surface_provider_registration: SurfaceProviders,
|
||||
_embedder_proxy: EmbedderProxy,
|
||||
) {
|
||||
if pref!(dom.webxr.test) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue