dont die if wayland server init fails
This commit is contained in:
@@ -335,7 +335,9 @@ pub fn openvr_run(show_by_default: bool, headless: bool) -> Result<(), BackendEr
|
|||||||
.for_each(|o| o.after_render(universe.clone(), &mut overlay_mgr, &app.gfx));
|
.for_each(|o| o.after_render(universe.clone(), &mut overlay_mgr, &app.gfx));
|
||||||
|
|
||||||
#[cfg(feature = "wayvr")]
|
#[cfg(feature = "wayvr")]
|
||||||
app.wayvr.borrow_mut().data.tick_finish()?;
|
if let Some(wayland_server) = app.wayland_server.as_ref() {
|
||||||
|
wayland_server.borrow_mut().data.tick_finish()?;
|
||||||
|
}
|
||||||
|
|
||||||
// chaperone
|
// chaperone
|
||||||
} // main_loop
|
} // main_loop
|
||||||
|
|||||||
@@ -459,7 +459,9 @@ pub fn openxr_run(show_by_default: bool, headless: bool) -> Result<(), BackendEr
|
|||||||
// End layer composition
|
// End layer composition
|
||||||
|
|
||||||
#[cfg(feature = "wayvr")]
|
#[cfg(feature = "wayvr")]
|
||||||
app.wayvr.borrow_mut().data.tick_finish()?;
|
if let Some(wayland_server) = app.wayland_server.as_ref() {
|
||||||
|
wayland_server.borrow_mut().data.tick_finish()?;
|
||||||
|
}
|
||||||
|
|
||||||
// Begin layer submit
|
// Begin layer submit
|
||||||
layers.sort_by(|a, b| b.0.total_cmp(&a.0));
|
layers.sort_by(|a, b| b.0.total_cmp(&a.0));
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
use std::{cell::RefCell, rc::Rc};
|
use std::{cell::RefCell, rc::Rc};
|
||||||
|
|
||||||
use crate::ipc::ipc_server;
|
|
||||||
use wayvr_ipc::packet_server;
|
use wayvr_ipc::packet_server;
|
||||||
|
|
||||||
#[cfg(feature = "wayvr")]
|
#[cfg(feature = "wayvr")]
|
||||||
@@ -112,18 +111,17 @@ pub fn tick_events<O>(
|
|||||||
where
|
where
|
||||||
O: Default,
|
O: Default,
|
||||||
{
|
{
|
||||||
#[cfg(feature = "wayvr")]
|
let wayland_server = app.wayland_server.clone();
|
||||||
let r_wayvr = app.wayvr.clone();
|
|
||||||
#[cfg(feature = "wayvr")]
|
|
||||||
let mut wayvr = r_wayvr.borrow_mut();
|
|
||||||
|
|
||||||
while let Some(signal) = app.wayvr_signals.read() {
|
while let Some(signal) = app.wayvr_signals.read() {
|
||||||
match signal {
|
match signal {
|
||||||
#[cfg(feature = "wayvr")]
|
#[cfg(feature = "wayvr")]
|
||||||
WayVRSignal::DisplayVisibility(display_handle, visible) => {
|
WayVRSignal::DisplayVisibility(display_handle, visible) => {
|
||||||
if let Some(overlay_id) = wayvr.display_handle_map.get(&display_handle) {
|
if let Some(mut wayland_server) = wayland_server.as_ref().map(|r| r.borrow_mut())
|
||||||
|
&& let Some(overlay_id) = wayland_server.display_handle_map.get(&display_handle)
|
||||||
|
{
|
||||||
let overlay_id = *overlay_id;
|
let overlay_id = *overlay_id;
|
||||||
wayvr
|
wayland_server
|
||||||
.data
|
.data
|
||||||
.state
|
.state
|
||||||
.set_display_visible(display_handle, visible);
|
.set_display_visible(display_handle, visible);
|
||||||
@@ -144,7 +142,12 @@ where
|
|||||||
}
|
}
|
||||||
#[cfg(feature = "wayvr")]
|
#[cfg(feature = "wayvr")]
|
||||||
WayVRSignal::DisplayWindowLayout(display_handle, layout) => {
|
WayVRSignal::DisplayWindowLayout(display_handle, layout) => {
|
||||||
wayvr.data.state.set_display_layout(display_handle, layout);
|
if let Some(mut wayland_server) = wayland_server.as_ref().map(|r| r.borrow_mut()) {
|
||||||
|
wayland_server
|
||||||
|
.data
|
||||||
|
.state
|
||||||
|
.set_display_layout(display_handle, layout);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#[cfg(feature = "wayvr")]
|
#[cfg(feature = "wayvr")]
|
||||||
WayVRSignal::BroadcastStateChanged(packet) => {
|
WayVRSignal::BroadcastStateChanged(packet) => {
|
||||||
@@ -153,7 +156,9 @@ where
|
|||||||
}
|
}
|
||||||
#[cfg(feature = "wayvr")]
|
#[cfg(feature = "wayvr")]
|
||||||
WayVRSignal::Haptics(haptics) => {
|
WayVRSignal::Haptics(haptics) => {
|
||||||
wayvr.pending_haptics = Some(haptics);
|
if let Some(mut wayland_server) = wayland_server.as_ref().map(|r| r.borrow_mut()) {
|
||||||
|
wayland_server.pending_haptics = Some(haptics);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
WayVRSignal::DropOverlay(overlay_id) => {
|
WayVRSignal::DropOverlay(overlay_id) => {
|
||||||
app.tasks
|
app.tasks
|
||||||
@@ -170,8 +175,16 @@ where
|
|||||||
|
|
||||||
#[cfg(feature = "wayvr")]
|
#[cfg(feature = "wayvr")]
|
||||||
{
|
{
|
||||||
let tick_tasks = wayvr.data.tick_events(app)?;
|
if let Some(wayland_server) = wayland_server {
|
||||||
process_tick_tasks(app, tick_tasks, &r_wayvr)?;
|
let tick_tasks = wayland_server.borrow_mut().data.tick_events(app)?;
|
||||||
|
process_tick_tasks(app, tick_tasks, &wayland_server)?;
|
||||||
|
|
||||||
|
overlays::wayvr::create_queued_displays(
|
||||||
|
app,
|
||||||
|
&mut wayland_server.borrow_mut(),
|
||||||
|
overlays,
|
||||||
|
)?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(feature = "wayvr"))]
|
#[cfg(not(feature = "wayvr"))]
|
||||||
@@ -182,8 +195,5 @@ where
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "wayvr")]
|
|
||||||
overlays::wayvr::create_queued_displays(app, &mut wayvr, overlays)?;
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ use vulkano::{
|
|||||||
format::Format,
|
format::Format,
|
||||||
image::{Image, ImageTiling, SubresourceLayout, view::ImageView},
|
image::{Image, ImageTiling, SubresourceLayout, view::ImageView},
|
||||||
};
|
};
|
||||||
use wayvr_ipc::packet_server::{self, PacketServer, WvrStateChanged};
|
use wayvr_ipc::packet_server::{PacketServer, WvrStateChanged};
|
||||||
use wgui::gfx::{
|
use wgui::gfx::{
|
||||||
WGfx,
|
WGfx,
|
||||||
pass::WGfxPass,
|
pass::WGfxPass,
|
||||||
@@ -658,11 +658,15 @@ pub fn create_wayvr_display_overlay(
|
|||||||
display_scale: f32,
|
display_scale: f32,
|
||||||
name: &str,
|
name: &str,
|
||||||
) -> anyhow::Result<OverlayWindowConfig> {
|
) -> anyhow::Result<OverlayWindowConfig> {
|
||||||
let wayvr = app.wayvr.clone();
|
let wayland_server = app
|
||||||
|
.wayland_server
|
||||||
|
.as_ref()
|
||||||
|
.map(|r| r.clone())
|
||||||
|
.context("wayland_server unavailable")?;
|
||||||
|
|
||||||
let backend = Box::new(WayVRBackend::new(
|
let backend = Box::new(WayVRBackend::new(
|
||||||
app,
|
app,
|
||||||
wayvr,
|
wayland_server,
|
||||||
display_handle,
|
display_handle,
|
||||||
[display_width, display_height],
|
[display_width, display_height],
|
||||||
)?);
|
)?);
|
||||||
@@ -719,7 +723,11 @@ fn action_app_click<O>(
|
|||||||
where
|
where
|
||||||
O: Default,
|
O: Default,
|
||||||
{
|
{
|
||||||
let wayvr = app.wayvr.clone();
|
let wayland_server = app
|
||||||
|
.wayland_server
|
||||||
|
.as_ref()
|
||||||
|
.map(|r| r.clone())
|
||||||
|
.context("wayland_server unavailable")?;
|
||||||
|
|
||||||
let catalog = app
|
let catalog = app
|
||||||
.session
|
.session
|
||||||
@@ -729,7 +737,7 @@ where
|
|||||||
.clone();
|
.clone();
|
||||||
|
|
||||||
if let Some(app_entry) = catalog.get_app(app_name) {
|
if let Some(app_entry) = catalog.get_app(app_name) {
|
||||||
let mut wayvr = wayvr.borrow_mut();
|
let mut wayvr = wayland_server.borrow_mut();
|
||||||
|
|
||||||
let disp_handle = get_or_create_display_by_name(
|
let disp_handle = get_or_create_display_by_name(
|
||||||
app,
|
app,
|
||||||
@@ -783,8 +791,11 @@ pub fn action_display_click<O>(
|
|||||||
where
|
where
|
||||||
O: Default,
|
O: Default,
|
||||||
{
|
{
|
||||||
let wayvr = app.wayvr.clone();
|
let wayland_server = app
|
||||||
let mut wayvr = wayvr.borrow_mut();
|
.wayland_server
|
||||||
|
.clone()
|
||||||
|
.context("wayland_server unavailable")?;
|
||||||
|
let mut wayvr = wayland_server.borrow_mut();
|
||||||
|
|
||||||
let Some(handle) = WayVR::get_display_by_name(&wayvr.data.state.displays, display_name) else {
|
let Some(handle) = WayVR::get_display_by_name(&wayvr.data.state.displays, display_name) else {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
@@ -843,10 +854,10 @@ pub fn wayvr_action<O>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
WayVRAction::ToggleDashboard => {
|
WayVRAction::ToggleDashboard => {
|
||||||
let wayvr = app.wayvr.clone();
|
if let Some(wayland_server) = app.wayland_server.as_ref().map(|r| r.clone())
|
||||||
let mut wayvr = wayvr.borrow_mut();
|
&& let Err(e) =
|
||||||
|
toggle_dashboard::<O>(app, overlays, &mut wayland_server.borrow_mut())
|
||||||
if let Err(e) = toggle_dashboard::<O>(app, overlays, &mut wayvr) {
|
{
|
||||||
error_toast(app, "toggle_dashboard failed", e);
|
error_toast(app, "toggle_dashboard failed", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,10 +60,8 @@ pub struct AppState {
|
|||||||
#[cfg(feature = "osc")]
|
#[cfg(feature = "osc")]
|
||||||
pub osc_sender: Option<OscSender>,
|
pub osc_sender: Option<OscSender>,
|
||||||
|
|
||||||
// wayland server
|
|
||||||
// TODO: rename to wayland_server?
|
|
||||||
#[cfg(feature = "wayvr")]
|
#[cfg(feature = "wayvr")]
|
||||||
pub wayvr: Rc<RefCell<WayVRData>>,
|
pub wayland_server: Option<Rc<RefCell<WayVRData>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unused_mut)]
|
#[allow(unused_mut)]
|
||||||
@@ -80,15 +78,18 @@ impl AppState {
|
|||||||
let wayvr_signals = SyncEventQueue::new();
|
let wayvr_signals = SyncEventQueue::new();
|
||||||
|
|
||||||
#[cfg(feature = "wayvr")]
|
#[cfg(feature = "wayvr")]
|
||||||
let wayvr =
|
let wayland_server = session
|
||||||
session
|
|
||||||
.wayvr_config
|
.wayvr_config
|
||||||
.post_load(&session.config, &mut tasks, wayvr_signals.clone())?;
|
.post_load(&session.config, &mut tasks, wayvr_signals.clone())
|
||||||
|
.inspect_err(|e| log::error!("Could not initialize wayland server: {e:?}"))
|
||||||
|
.ok();
|
||||||
|
|
||||||
let mut hid_provider = HidWrapper::new();
|
let mut hid_provider = HidWrapper::new();
|
||||||
|
|
||||||
#[cfg(feature = "wayvr")]
|
#[cfg(feature = "wayvr")]
|
||||||
hid_provider.set_wayvr(wayvr.clone());
|
if let Some(wayland_server) = wayland_server.as_ref() {
|
||||||
|
hid_provider.set_wayvr(wayland_server.clone());
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "osc")]
|
#[cfg(feature = "osc")]
|
||||||
let osc_sender = crate::subsystem::osc::OscSender::new(session.config.osc_out_port).ok();
|
let osc_sender = crate::subsystem::osc::OscSender::new(session.config.osc_out_port).ok();
|
||||||
@@ -150,7 +151,7 @@ impl AppState {
|
|||||||
osc_sender,
|
osc_sender,
|
||||||
|
|
||||||
#[cfg(feature = "wayvr")]
|
#[cfg(feature = "wayvr")]
|
||||||
wayvr,
|
wayland_server,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user