steamvr poc works

This commit is contained in:
galister
2024-01-23 16:43:17 +01:00
parent 6cfbc6ffcd
commit 51160f97fe
12 changed files with 817 additions and 376 deletions

View File

@@ -39,11 +39,11 @@ where
get_screens_x11()
};
let watch = create_watch::<T>(&app, &screens);
overlays.insert(watch.state.id, watch);
//let watch = create_watch::<T>(&app, &screens);
//overlays.insert(watch.state.id, watch);
let keyboard = create_keyboard(&app);
overlays.insert(keyboard.state.id, keyboard);
//let keyboard = create_keyboard(&app);
//overlays.insert(keyboard.state.id, keyboard);
let mut first = true;
for mut screen in screens {

View File

@@ -8,7 +8,7 @@ use ovr_overlay::overlay::OverlayManager;
use vulkano::command_buffer::CommandBufferUsage;
use vulkano::format::Format;
use vulkano::image::view::ImageView;
use vulkano::image::{ImageAccess, ImageLayout, ImageViewAbstract, ImmutableImage};
use vulkano::image::ImageLayout;
use crate::backend::overlay::{OverlayData, OverlayRenderer, OverlayState, SplitOverlayBackend};
use crate::graphics::WlxGraphics;
@@ -20,7 +20,7 @@ static AUTO_INCREMENT: AtomicUsize = AtomicUsize::new(1);
pub(super) struct LinePool {
lines: IdMap<usize, OverlayData<OpenVrOverlayData>>,
view: Arc<ImageView<ImmutableImage>>,
view: Arc<ImageView>,
}
impl LinePool {
@@ -34,7 +34,7 @@ impl LinePool {
graphics
.transition_layout(
texture.inner().image.clone(),
texture.clone(),
ImageLayout::ShaderReadOnlyOptimal,
ImageLayout::TransferSrcOptimal,
)
@@ -116,7 +116,7 @@ impl LinePool {
}
struct StaticRenderer {
view: Arc<ImageView<ImmutableImage>>,
view: Arc<ImageView>,
}
impl OverlayRenderer for StaticRenderer {
@@ -124,7 +124,7 @@ impl OverlayRenderer for StaticRenderer {
fn pause(&mut self, _app: &mut AppState) {}
fn resume(&mut self, _app: &mut AppState) {}
fn render(&mut self, _app: &mut AppState) {}
fn view(&mut self) -> Option<Arc<dyn ImageViewAbstract>> {
fn view(&mut self) -> Option<Arc<ImageView>> {
Some(self.view.clone())
}
}

View File

@@ -4,7 +4,7 @@ use ovr_overlay::{
pose::Matrix3x4,
sys::{ETrackingUniverseOrigin, VRVulkanTextureData_t},
};
use vulkano::{image::ImageAccess, Handle, VulkanObject};
use vulkano::{Handle, VulkanObject};
use crate::{
backend::overlay::{OverlayData, RelativeTo},
@@ -195,7 +195,7 @@ impl OverlayData<OpenVrOverlayData> {
return;
};
let image = view.image().inner().image.clone();
let image = view.image().clone();
let raw_image = image.handle().as_raw();
@@ -205,17 +205,14 @@ impl OverlayData<OpenVrOverlayData> {
}
}
let Some(format) = image.format() else {
panic!("{}: Image format is None", self.state.name);
};
let dimensions = image.dimensions();
let dimensions = image.extent();
let format = image.format();
let mut texture = VRVulkanTextureData_t {
m_nImage: raw_image,
m_nFormat: format as _,
m_nWidth: dimensions.width(),
m_nHeight: dimensions.height(),
m_nWidth: dimensions[0],
m_nHeight: dimensions[1],
m_nSampleCount: image.samples() as u32,
m_pDevice: graphics.device.handle().as_raw() as *mut _,
m_pPhysicalDevice: graphics.device.physical_device().handle().as_raw() as *mut _,
@@ -224,8 +221,9 @@ impl OverlayData<OpenVrOverlayData> {
m_nQueueFamilyIndex: graphics.queue.queue_family_index(),
};
log::debug!(
"UploadTex: {:?}, {}x{}, {:?}",
log::info!(
"{}: UploadTex {:?}, {}x{}, {:?}",
self.state.name,
format,
texture.m_nWidth,
texture.m_nHeight,
@@ -234,5 +232,6 @@ impl OverlayData<OpenVrOverlayData> {
if let Err(e) = overlay.set_image_vulkan(handle, &mut texture) {
panic!("Failed to set overlay texture: {}", e);
}
log::info!("{}: Uploaded texture", self.state.name);
}
}

View File

@@ -7,7 +7,7 @@ use std::{
};
use glam::{Affine2, Affine3A, Mat3A, Quat, Vec3, Vec3A};
use vulkano::image::ImageViewAbstract;
use vulkano::image::view::ImageView;
use crate::state::AppState;
@@ -134,7 +134,7 @@ where
pub fn render(&mut self, app: &mut AppState) {
self.backend.render(app);
}
pub fn view(&mut self) -> Option<Arc<dyn ImageViewAbstract>> {
pub fn view(&mut self) -> Option<Arc<ImageView>> {
self.backend.view()
}
}
@@ -144,7 +144,7 @@ pub trait OverlayRenderer {
fn pause(&mut self, app: &mut AppState);
fn resume(&mut self, app: &mut AppState);
fn render(&mut self, app: &mut AppState);
fn view(&mut self) -> Option<Arc<dyn ImageViewAbstract>>;
fn view(&mut self) -> Option<Arc<ImageView>>;
}
pub struct FallbackRenderer;
@@ -154,7 +154,7 @@ impl OverlayRenderer for FallbackRenderer {
fn pause(&mut self, _app: &mut AppState) {}
fn resume(&mut self, _app: &mut AppState) {}
fn render(&mut self, _app: &mut AppState) {}
fn view(&mut self) -> Option<Arc<dyn ImageViewAbstract>> {
fn view(&mut self) -> Option<Arc<ImageView>> {
None
}
}
@@ -196,7 +196,7 @@ impl OverlayRenderer for SplitOverlayBackend {
fn render(&mut self, app: &mut AppState) {
self.renderer.render(app);
}
fn view(&mut self) -> Option<Arc<dyn ImageViewAbstract>> {
fn view(&mut self) -> Option<Arc<ImageView>> {
self.renderer.view()
}
}