pub struct OpenXrRayOverlay { /* private fields */ }Expand description
Swapchain and upload resources for a standalone ray composition layer.
Texture pixels are regenerated only when hit classification changes. Drop waits for the owned Vulkan device to become idle before unmapping and freeing staging resources.
§Examples
use ailloli_ui_openxr::OpenXrRayOverlay;
fn update(overlay: &mut OpenXrRayOverlay) { let _ = overlay; }Implementations§
Source§impl OpenXrRayOverlay
impl OpenXrRayOverlay
Sourcepub fn new(
session: &Session<Vulkan>,
context: OpenXrExternalVulkanContext<'_>,
options: OpenXrRayOverlayOptions,
) -> Result<Self, OpenXrRuntimeError>
pub fn new( session: &Session<Vulkan>, context: OpenXrExternalVulkanContext<'_>, options: OpenXrRayOverlayOptions, ) -> Result<Self, OpenXrRuntimeError>
Creates the ray swapchain and persistently mapped staging buffer.
Texture dimensions are clamped to at least one. context must belong to
the Vulkan device backing session and must include memory properties.
§Errors
Returns format, swapchain, image enumeration, memory-property, buffer, allocation, binding, or mapping failures.
§Examples
use ailloli_ui_openxr::{OpenXrExternalVulkanContext, OpenXrRayOverlay, OpenXrRayOverlayOptions, OpenXrRuntimeError};
fn create(session: &openxr::Session<openxr::Vulkan>, context: OpenXrExternalVulkanContext<'_>) -> Result<OpenXrRayOverlay, OpenXrRuntimeError> {
OpenXrRayOverlay::new(session, context, OpenXrRayOverlayOptions::default())
}Sourcepub fn ensure_texture(
&mut self,
context: OpenXrExternalVulkanContext<'_>,
hit_kind: OpenXrRayHitKind,
) -> Result<(), OpenXrRuntimeError>
pub fn ensure_texture( &mut self, context: OpenXrExternalVulkanContext<'_>, hit_kind: OpenXrRayHitKind, ) -> Result<(), OpenXrRuntimeError>
Uploads the generated texture when its hit classification changed.
Repeated calls for the already-uploaded kind are a no-op. Upload records and synchronously waits for a one-time Vulkan queue submission.
§Errors
Returns acquisition, staging upload, queue, image-index, or release errors.
§Examples
use ailloli_ui_openxr::{OpenXrExternalVulkanContext, OpenXrRayHitKind, OpenXrRayOverlay, OpenXrRuntimeError};
fn upload(overlay: &mut OpenXrRayOverlay, context: OpenXrExternalVulkanContext<'_>) -> Result<(), OpenXrRuntimeError> {
overlay.ensure_texture(context, OpenXrRayHitKind::Ui)
}Sourcepub fn build_layer<'a>(
&'a self,
reference_space: &'a Space,
sample: &OpenXrRaySample,
) -> Option<CompositionLayerQuad<'a, Vulkan>>
pub fn build_layer<'a>( &'a self, reference_space: &'a Space, sample: &OpenXrRaySample, ) -> Option<CompositionLayerQuad<'a, Vulkan>>
Builds a quad layer centered along the clamped ray segment.
Returns None until a texture upload succeeded. The layer borrows the
overlay swapchain and reference space and uses the sample’s distance,
clamped to configured minimum/maximum metres.
§Examples
use ailloli_ui_openxr::{OpenXrRayOverlay, OpenXrRaySample};
fn build<'a>(overlay: &'a OpenXrRayOverlay, space: &'a openxr::Space, sample: &OpenXrRaySample) -> Option<openxr::CompositionLayerQuad<'a, openxr::Vulkan>> {
overlay.build_layer(space, sample)
}Trait Implementations§
Auto Trait Implementations§
impl Freeze for OpenXrRayOverlay
impl !RefUnwindSafe for OpenXrRayOverlay
impl !Send for OpenXrRayOverlay
impl !Sync for OpenXrRayOverlay
impl Unpin for OpenXrRayOverlay
impl !UnwindSafe for OpenXrRayOverlay
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more