apply pipewire transforms to screens

This commit is contained in:
galister
2024-11-19 15:38:28 +09:00
parent a3f9f7cc46
commit e23444aa89
12 changed files with 875 additions and 700 deletions
+8 -3
View File
@@ -11,7 +11,9 @@ use vulkano::format::Format;
use vulkano::image::view::ImageView;
use vulkano::image::ImageLayout;
use crate::backend::overlay::{OverlayData, OverlayRenderer, OverlayState, SplitOverlayBackend};
use crate::backend::overlay::{
FrameTransform, OverlayData, OverlayRenderer, OverlayState, SplitOverlayBackend,
};
use crate::graphics::WlxGraphics;
use crate::state::AppState;
@@ -189,7 +191,10 @@ impl OverlayRenderer for StaticRenderer {
fn view(&mut self) -> Option<Arc<ImageView>> {
Some(self.view.clone())
}
fn extent(&mut self) -> Option<[u32; 3]> {
Some(self.view.image().extent())
fn frame_transform(&mut self) -> Option<FrameTransform> {
Some(FrameTransform {
extent: self.view.image().extent(),
..Default::default()
})
}
}
+9 -2
View File
@@ -188,7 +188,7 @@ impl OverlayData<OpenVrOverlayData> {
}
pub(super) fn upload_transform(
&self,
&mut self,
universe: ETrackingUniverseOrigin,
overlay: &mut OverlayManager,
) {
@@ -197,7 +197,14 @@ impl OverlayData<OpenVrOverlayData> {
return;
};
let transform = Matrix3x4::from_affine(&self.state.transform);
let effective = self.state.transform
* self
.backend
.frame_transform()
.map(|f| f.transform)
.unwrap_or_default();
let transform = Matrix3x4::from_affine(&effective);
if let Err(e) = overlay.set_transform_absolute(handle, universe, &transform) {
log::error!(