openxr: sort overlays by distance
This commit is contained in:
@@ -217,20 +217,25 @@ pub fn openxr_run(running: Arc<AtomicBool>) -> Result<(), BackendError> {
|
|||||||
|
|
||||||
o.render(&mut app_state);
|
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) {
|
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) {
|
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();
|
command_buffer.build_and_execute_now();
|
||||||
|
|
||||||
|
layers.sort_by(|a, b| b.0.partial_cmp(&a.0).unwrap());
|
||||||
|
|
||||||
let frame_ref = layers
|
let frame_ref = layers
|
||||||
.iter()
|
.iter()
|
||||||
.map(|f| f as &xr::CompositionLayerBase<xr::Vulkan>)
|
.map(|f| &f.1 as &xr::CompositionLayerBase<xr::Vulkan>)
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
frame_stream
|
frame_stream
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ use super::{swapchain::SwapchainRenderData, transform_to_posef, XrState};
|
|||||||
use crate::{
|
use crate::{
|
||||||
backend::{openxr::swapchain::create_swapchain_render_data, overlay::OverlayData},
|
backend::{openxr::swapchain::create_swapchain_render_data, overlay::OverlayData},
|
||||||
graphics::WlxCommandBuffer,
|
graphics::WlxCommandBuffer,
|
||||||
state::AppState,
|
|
||||||
};
|
};
|
||||||
use vulkano::image::view::ImageView;
|
use vulkano::image::view::ImageView;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user