finish rendering

This commit is contained in:
awtterpip
2024-01-11 20:24:10 -06:00
parent 9e0c586610
commit 1a8a235eaa
2 changed files with 30 additions and 1 deletions

View File

@@ -3,6 +3,8 @@ mod utils;
use std::sync::Mutex;
use glam::UVec2;
use openxr::EnvironmentBlendMode;
use tracing::{info, info_span, warn};
use crate::{backend::oxr::graphics::VIEW_TYPE, prelude::*};
@@ -83,10 +85,13 @@ pub struct OXrSession {
)>,
>,
pub(crate) frame_state: Mutex<openxr::FrameState>,
pub(crate) views: Mutex<[openxr::View; 2]>,
pub(crate) frame_waiter: Mutex<openxr::FrameWaiter>,
pub(crate) swapchain: graphics::Swapchain,
pub(crate) stage: openxr::Space,
pub(crate) head: openxr::Space,
pub(crate) resolution: UVec2,
pub(crate) blend_mode: EnvironmentBlendMode,
}
impl SessionTrait for OXrSession {
@@ -171,6 +176,8 @@ impl SessionTrait for OXrSession {
.1
};
*self.views.lock().unwrap() = [views[0].clone(), views[1].clone()];
{
let _span = info_span!("xr_acquire_image").entered();
self.swapchain.acquire_image().unwrap()
@@ -195,7 +202,26 @@ impl SessionTrait for OXrSession {
}
fn end_frame(&self) -> Result<()> {
todo!()
{
let _span = info_span!("xr_release_image").entered();
self.swapchain.release_image().unwrap();
}
{
let _span = info_span!("xr_end_frame").entered();
let result = self.swapchain.end(
self.frame_state.lock().unwrap().predicted_display_time,
&*self.views.lock().unwrap(),
&self.stage,
self.resolution,
self.blend_mode,
// passthrough_layer.map(|p| p.into_inner()),
);
match result {
Ok(_) => {}
Err(e) => warn!("error: {}", e),
}
}
Ok(())
}
}

View File

@@ -298,6 +298,8 @@ pub fn init_oxr_graphics(
wgpu_adapter,
wgpu_instance,
))),
resolution,
views: Mutex::new([openxr::View::default(), openxr::View::default()]),
swapchain: Swapchain::Vulkan(SwapchainInner {
stream: Mutex::new(frame_stream),
swapchain: Mutex::new(swapchain),
@@ -309,6 +311,7 @@ pub fn init_oxr_graphics(
predicted_display_period: openxr::Duration::from_nanos(1),
should_render: true,
}),
blend_mode,
frame_waiter: Mutex::new(frame_wait),
stage: session
.create_reference_space(openxr::ReferenceSpaceType::STAGE, openxr::Posef::IDENTITY)?,