Struct OpenXrExternalUiHost

Source
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>

Source

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())
}
Source

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)
}
Source

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(); }
Source

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); }
Source

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() }
Source

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()); }
Source

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§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,