openxr: support changing overlay opacity

This commit is contained in:
galister
2024-02-17 11:06:26 +01:00
parent 12003fdddd
commit d42c0ef670
7 changed files with 21 additions and 14 deletions

View File

@@ -135,10 +135,11 @@ impl LinePool {
if let Some(inner) = line.maybe_line.take() {
let quad = xr::CompositionLayerQuad::new()
.pose(inner.pose)
.sub_image(
line.swapchain
.acquire_present_release(command_buffer, inner.view),
)
.sub_image(line.swapchain.acquire_present_release(
command_buffer,
inner.view,
1.0,
))
.eye_visibility(xr::EyeVisibility::BOTH)
.layer_flags(xr::CompositionLayerFlags::CORRECT_CHROMATIC_ABERRATION)
.space(&xr.stage)

View File

@@ -50,7 +50,7 @@ impl OverlayData<OpenXrOverlayData> {
srd
});
let sub_image = data.acquire_present_release(command_buffer, my_view);
let sub_image = data.acquire_present_release(command_buffer, my_view, self.state.alpha);
let posef = helpers::transform_to_posef(&self.state.transform);
let aspect_ratio = extent[1] as f32 / extent[0] as f32;

View File

@@ -87,6 +87,7 @@ impl SwapchainRenderData {
&mut self,
command_buffer: &mut WlxCommandBuffer,
view: Arc<ImageView>,
alpha: f32,
) -> xr::SwapchainSubImage<xr::Vulkan> {
let idx = self.swapchain.acquire_image().unwrap() as usize;
self.swapchain.wait_image(xr::Duration::INFINITE).unwrap();
@@ -95,14 +96,18 @@ impl SwapchainRenderData {
command_buffer.begin_rendering(render_target.clone());
let target_extent = render_target.image().extent();
let set = self
let set0 = self
.pipeline
.uniform_sampler(0, view.clone(), Filter::Linear);
let set1 = self.pipeline.uniform_buffer(1, vec![alpha]);
let pass = self.pipeline.create_pass(
[target_extent[0] as _, target_extent[1] as _],
command_buffer.graphics.quad_verts.clone(),
command_buffer.graphics.quad_indices.clone(),
vec![set],
vec![set0, set1],
);
command_buffer.run_ref(&pass);
command_buffer.end_rendering();