openxr: sort overlays by distance

This commit is contained in:
galister
2024-01-30 21:56:29 +01:00
parent 6999a4b277
commit d960ad3df1
2 changed files with 8 additions and 4 deletions

View File

@@ -217,20 +217,25 @@ pub fn openxr_run(running: Arc<AtomicBool>) -> Result<(), BackendError> {
o.render(&mut app_state);
let dist_sq = (app_state.input_state.hmd.translation - o.state.transform.translation)
.length_squared();
if let Some(quad) = o.present_xr(&xr_state, &mut command_buffer) {
layers.push(quad);
layers.push((dist_sq, quad));
};
}
for quad in lines.present_xr(&xr_state, &mut command_buffer) {
layers.push(quad);
layers.push((0.0, quad));
}
command_buffer.build_and_execute_now();
layers.sort_by(|a, b| b.0.partial_cmp(&a.0).unwrap());
let frame_ref = layers
.iter()
.map(|f| f as &xr::CompositionLayerBase<xr::Vulkan>)
.map(|f| &f.1 as &xr::CompositionLayerBase<xr::Vulkan>)
.collect::<Vec<_>>();
frame_stream

View File

@@ -6,7 +6,6 @@ use super::{swapchain::SwapchainRenderData, transform_to_posef, XrState};
use crate::{
backend::{openxr::swapchain::create_swapchain_render_data, overlay::OverlayData},
graphics::WlxCommandBuffer,
state::AppState,
};
use vulkano::image::view::ImageView;