pub struct OpenXrExternalUiHost<A> { /* private fields */ }Expand description
Reusable renderer/input compositor driven by an application-owned XR loop.
It owns UI and optional ray swapchains but does not wait, begin, or end XR frames. Callers provide predicted time and submit returned layer references.
§Examples
use ailloli_ui_openxr::OpenXrExternalUiHost;
fn clear<A: 'static>(host: &mut OpenXrExternalUiHost<A>) { host.clear_input(); }Implementations§
Source§impl<A: 'static> OpenXrExternalUiHost<A>
impl<A: 'static> OpenXrExternalUiHost<A>
Sourcepub fn new(
instance: &Instance,
session: &Session<Vulkan>,
context: OpenXrExternalVulkanContext<'_>,
capabilities: OpenXrInputCapabilities,
runtime_handle: RuntimeHandle<A>,
root: impl IntoView<A>,
options: OpenXrExternalUiHostOptions,
) -> Result<Self, OpenXrRuntimeError>
pub fn new( instance: &Instance, session: &Session<Vulkan>, context: OpenXrExternalVulkanContext<'_>, capabilities: OpenXrInputCapabilities, runtime_handle: RuntimeHandle<A>, root: impl IntoView<A>, options: OpenXrExternalUiHostOptions, ) -> Result<Self, OpenXrRuntimeError>
Allocates swapchains, renderer, input actions, and optional ray resources.
The caller retains ownership of the instance, session, and Vulkan context.
Input actions are attached to session during construction.
§Errors
Returns swapchain, renderer, action, session-attachment, or ray-resource initialization failures. Zero pixel extents are rejected.
§Examples
use ailloli_ui_openxr::{OpenXrExternalUiHost, OpenXrExternalUiHostOptions, OpenXrExternalVulkanContext, OpenXrInputCapabilities, OpenXrRuntimeError};
use ailloli_ui_runtime::{app::RuntimeHandle, component::IntoView};
fn build<A: 'static>(instance: &openxr::Instance, session: &openxr::Session<openxr::Vulkan>, context: OpenXrExternalVulkanContext<'_>, handle: RuntimeHandle<A>, root: impl IntoView<A>) -> Result<OpenXrExternalUiHost<A>, OpenXrRuntimeError> {
OpenXrExternalUiHost::new(instance, session, context, OpenXrInputCapabilities::new(false, false), handle, root, OpenXrExternalUiHostOptions::default())
}Sourcepub fn render_frame<'a>(
&'a mut self,
frame: OpenXrExternalUiHostFrameParts<'a, '_>,
) -> Result<OpenXrExternalUiHostFrameResult<'a, A>, OpenXrRuntimeError>
pub fn render_frame<'a>( &'a mut self, frame: OpenXrExternalUiHostFrameParts<'a, '_>, ) -> Result<OpenXrExternalUiHostFrameResult<'a, A>, OpenXrRuntimeError>
Polls input, renders UI, releases the acquired image, and builds layers.
When input is unfocused, retained pointer state is cleared and the frame contains no input. UI image release is attempted even when rendering fails; if both fail, the render error takes precedence.
§Errors
Returns input polling, ray upload, swapchain, rendering, or release errors.
§Examples
use ailloli_ui_openxr::{OpenXrExternalUiHost, OpenXrExternalUiHostFrameParts, OpenXrExternalUiHostFrameResult, OpenXrRuntimeError};
fn render<'a, A: 'static>(host: &'a mut OpenXrExternalUiHost<A>, frame: OpenXrExternalUiHostFrameParts<'a, '_>) -> Result<OpenXrExternalUiHostFrameResult<'a, A>, OpenXrRuntimeError> {
host.render_frame(frame)
}Sourcepub fn clear_input(&mut self)
pub fn clear_input(&mut self)
Clears retained UI pointer state and OpenXR source locks.
No release events are synthesized.
§Examples
use ailloli_ui_openxr::OpenXrExternalUiHost;
fn clear<A: 'static>(host: &mut OpenXrExternalUiHost<A>) { host.clear_input(); }Sourcepub fn log_interaction_profiles(
&self,
instance: &Instance,
session: &Session<Vulkan>,
)
pub fn log_interaction_profiles( &self, instance: &Instance, session: &Session<Vulkan>, )
Logs active left and right interaction profiles when input is enabled.
Disabled input is a no-op.
§Examples
use ailloli_ui_openxr::OpenXrExternalUiHost;
fn log<A: 'static>(host: &OpenXrExternalUiHost<A>, instance: &openxr::Instance, session: &openxr::Session<openxr::Vulkan>) { host.log_interaction_profiles(instance, session); }Sourcepub fn logical_size(&self) -> Size
pub fn logical_size(&self) -> Size
Returns UI logical dimensions derived from pixel extent and DPR.
§Examples
use ailloli_ui_core::Size;
use ailloli_ui_openxr::OpenXrExternalUiHost;
fn size<A: 'static>(host: &OpenXrExternalUiHost<A>) -> Size { host.logical_size() }Sourcepub fn set_layer_options(&mut self, layer: OpenXrQuadLayerOptions)
pub fn set_layer_options(&mut self, layer: OpenXrQuadLayerOptions)
Replaces the quad pose and geometry used for input mapping and submission.
This does not recreate pixel swapchains or renderer resources.
§Examples
use ailloli_ui_openxr::{OpenXrExternalUiHost, OpenXrQuadLayerOptions};
fn move_panel<A: 'static>(host: &mut OpenXrExternalUiHost<A>) { host.set_layer_options(OpenXrQuadLayerOptions::default()); }Sourcepub fn renderer_stats(&self) -> VulkanRendererStats
pub fn renderer_stats(&self) -> VulkanRendererStats
Returns counters from the most recently completed renderer frame.
§Examples
use ailloli_ui_openxr::OpenXrExternalUiHost;
use ailloli_ui_render_vulkan::VulkanRendererStats;
fn stats<A: 'static>(host: &OpenXrExternalUiHost<A>) -> VulkanRendererStats { host.renderer_stats() }Auto Trait Implementations§
impl<A> !Freeze for OpenXrExternalUiHost<A>
impl<A> !RefUnwindSafe for OpenXrExternalUiHost<A>
impl<A> !Send for OpenXrExternalUiHost<A>
impl<A> !Sync for OpenXrExternalUiHost<A>
impl<A> Unpin for OpenXrExternalUiHost<A>
impl<A> !UnwindSafe for OpenXrExternalUiHost<A>
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