laser colors, improve scaling (wip)

This commit is contained in:
galister
2024-01-28 18:50:50 +01:00
parent e1e8165cc6
commit 328ef3cfde
11 changed files with 73 additions and 27 deletions

View File

@@ -186,13 +186,17 @@ pub fn openxr_run(running: Arc<AtomicBool>) -> Result<(), BackendError> {
app_state.input_state.hmd = hmd_pose_from_views(&views);
overlays
.iter_mut()
.for_each(|o| o.state.auto_movement(&mut app_state));
let pointer_lengths = interact(&mut overlays, &mut app_state);
for (idx, len) in pointer_lengths.iter().enumerate() {
lines.draw_from(
pointer_lines[idx],
app_state.input_state.pointers[idx].pose,
*len,
0,
app_state.input_state.pointers[idx].interaction.mode as usize + 1,
);
}
@@ -210,6 +214,7 @@ pub fn openxr_run(running: Arc<AtomicBool>) -> Result<(), BackendError> {
o.init(&mut app_state);
o.data.init = true;
}
o.render(&mut app_state);
if let Some(quad) = o.present_xr(&xr_state, &mut command_buffer) {

View File

@@ -6,6 +6,7 @@ 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;
@@ -51,6 +52,11 @@ impl OverlayData<OpenXrOverlayData> {
let sub_image = data.acquire_present_release(command_buffer, my_view);
let posef = transform_to_posef(&self.state.transform);
let scale_x = self.state.transform.matrix3.col(0).length();
log::info!("{}: scale_x = {}", self.state.name, scale_x);
let aspect_ratio = self.backend.extent()[1] as f32 / self.backend.extent()[0] as f32;
let scale_y = scale_x * aspect_ratio;
let quad = xr::CompositionLayerQuad::new()
.pose(posef)
.sub_image(sub_image)
@@ -58,9 +64,8 @@ impl OverlayData<OpenXrOverlayData> {
.layer_flags(CompositionLayerFlags::CORRECT_CHROMATIC_ABERRATION)
.space(&xr.stage)
.size(xr::Extent2Df {
width: self.state.width,
height: (self.backend.extent()[1] as f32 / self.backend.extent()[0] as f32)
* self.state.width,
width: scale_x,
height: scale_y,
});
Some(quad)
}