openxr: support changing overlay opacity
This commit is contained in:
@@ -4,8 +4,8 @@ use anyhow::bail;
|
||||
use ovr_overlay::{
|
||||
input::{ActionHandle, ActionSetHandle, ActiveActionSet, InputManager, InputValueHandle},
|
||||
sys::{
|
||||
k_unMaxTrackedDeviceCount, ETrackedControllerRole, ETrackedDeviceClass,
|
||||
ETrackedDeviceProperty, ETrackingUniverseOrigin,
|
||||
ETrackedControllerRole, ETrackedDeviceClass, ETrackedDeviceProperty,
|
||||
ETrackingUniverseOrigin,
|
||||
},
|
||||
system::SystemManager,
|
||||
TrackedDeviceIndex,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user