Struct OpenXrQuadSwapchain

Source
pub struct OpenXrQuadSwapchain { /* private fields */ }
Expand description

Single-image-array OpenXR swapchain for a UI composition layer.

The wrapper owns image views only when constructed with a Vulkan device; the OpenXR runtime owns its images. Acquired images must be released exactly once.

§Examples

use ailloli_ui_openxr::OpenXrQuadSwapchain;
fn extent(swapchain: &OpenXrQuadSwapchain) -> ash::vk::Extent2D { swapchain.extent() }

Implementations§

Source§

impl OpenXrQuadSwapchain

Source

pub fn new( session: &Session<Vulkan>, width: u32, height: u32, ) -> Result<Self, OpenXrRuntimeError>

Creates a swapchain without Vulkan image views.

Use this path for clear-only composition; Self::frame_target will contain a null view. Width and height must both be nonzero.

§Errors

Returns invalid extent, format enumeration/selection, swapchain creation, or image-enumeration failures.

§Examples
use ailloli_ui_openxr::{OpenXrQuadSwapchain, OpenXrRuntimeError};
fn create(session: &openxr::Session<openxr::Vulkan>) -> Result<OpenXrQuadSwapchain, OpenXrRuntimeError> { OpenXrQuadSwapchain::new(session, 1024, 576) }
Source

pub fn new_with_vulkan_context( session: &Session<Vulkan>, vk: &OpenXrVulkanContext, width: u32, height: u32, ) -> Result<Self, OpenXrRuntimeError>

Creates a swapchain and image views from an owned runtime Vulkan context.

§Errors

Returns the same failures as Self::new, plus image-view failures.

§Examples
use ailloli_ui_openxr::{OpenXrQuadSwapchain, OpenXrRuntimeError, OpenXrVulkanContext};
fn create(session: &openxr::Session<openxr::Vulkan>, vk: &OpenXrVulkanContext) -> Result<OpenXrQuadSwapchain, OpenXrRuntimeError> { OpenXrQuadSwapchain::new_with_vulkan_context(session, vk, 1024, 576) }
Source

pub fn new_with_device( session: &Session<Vulkan>, device: &Device, width: u32, height: u32, ) -> Result<Self, OpenXrRuntimeError>

Creates a swapchain and image views from an externally owned Vulkan device.

The device must be the one backing session and must outlive the returned wrapper so its image views can be destroyed safely.

§Errors

Returns invalid extent, format, swapchain, enumeration, or view failures.

§Examples
use ailloli_ui_openxr::{OpenXrQuadSwapchain, OpenXrRuntimeError};
fn create(session: &openxr::Session<openxr::Vulkan>, device: &ash::Device) -> Result<OpenXrQuadSwapchain, OpenXrRuntimeError> { OpenXrQuadSwapchain::new_with_device(session, device, 800, 600) }
Source

pub fn handle(&self) -> &Swapchain<Vulkan>

Returns the native swapchain handle used by composition layers.

§Examples
use ailloli_ui_openxr::OpenXrQuadSwapchain;
fn handle(swapchain: &OpenXrQuadSwapchain) -> &openxr::Swapchain<openxr::Vulkan> { swapchain.handle() }
Source

pub fn format(&self) -> OpenXrSwapchainFormat

Returns the selected Vulkan/raw format pair.

§Examples
use ailloli_ui_openxr::{OpenXrQuadSwapchain, OpenXrSwapchainFormat};
fn format(swapchain: &OpenXrQuadSwapchain) -> OpenXrSwapchainFormat { swapchain.format() }
Source

pub fn extent(&self) -> Extent2D

Returns the physical pixel extent supplied at construction.

§Examples
use ailloli_ui_openxr::OpenXrQuadSwapchain;
fn width(swapchain: &OpenXrQuadSwapchain) -> u32 { swapchain.extent().width }
Source

pub fn image_rect(&self) -> Rect2Di

Returns a full-image OpenXR rectangle with zero offset.

Width and height are cast to signed OpenXR fields; practical swapchain extents must therefore fit in i32.

§Examples
use ailloli_ui_openxr::OpenXrQuadSwapchain;
fn rect(swapchain: &OpenXrQuadSwapchain) -> openxr::Rect2Di { swapchain.image_rect() }
Source

pub fn acquire_wait( &mut self, ) -> Result<OpenXrAcquiredImage, OpenXrRuntimeError>

Acquires the next image and waits indefinitely until it is writable.

A successful call must be paired with Self::release. The returned view is null if the swapchain was constructed with Self::new.

§Errors

Returns acquisition, wait, or runtime-index bounds failures.

§Examples
use ailloli_ui_openxr::{OpenXrAcquiredImage, OpenXrQuadSwapchain, OpenXrRuntimeError};
fn acquire(swapchain: &mut OpenXrQuadSwapchain) -> Result<OpenXrAcquiredImage, OpenXrRuntimeError> { swapchain.acquire_wait() }
Source

pub fn release(&mut self) -> Result<(), OpenXrRuntimeError>

Releases the currently acquired image back to the runtime.

§Errors

Returns the native OpenXR release failure.

§Examples
use ailloli_ui_openxr::{OpenXrQuadSwapchain, OpenXrRuntimeError};
fn release(swapchain: &mut OpenXrQuadSwapchain) -> Result<(), OpenXrRuntimeError> { swapchain.release() }
Source

pub fn clear_acquired_image( &self, vk: &OpenXrVulkanContext, acquired: &OpenXrAcquiredImage, color: [f32; 4], ) -> Result<(), OpenXrRuntimeError>

Clears an acquired image and transitions it to shader-read layout.

The RGBA color is forwarded without clamping. Work is submitted through the runtime Vulkan context and waits for the queue to become idle.

§Errors

Returns command-buffer allocation, recording, submission, or wait errors.

§Examples
use ailloli_ui_openxr::{OpenXrAcquiredImage, OpenXrQuadSwapchain, OpenXrRuntimeError, OpenXrVulkanContext};
fn clear(swapchain: &OpenXrQuadSwapchain, vk: &OpenXrVulkanContext, image: &OpenXrAcquiredImage) -> Result<(), OpenXrRuntimeError> { swapchain.clear_acquired_image(vk, image, [0.0, 0.0, 0.0, 1.0]) }
Source

pub fn frame_target(&self, acquired: &OpenXrAcquiredImage) -> VulkanFrameTarget

Wraps an acquired image for ailloli_ui_render_vulkan.

Initial layout is declared undefined and final layout shader-read-only. The caller must have constructed image views for renderer use.

§Examples
use ailloli_ui_openxr::{OpenXrAcquiredImage, OpenXrQuadSwapchain};
use ailloli_ui_render_vulkan::VulkanFrameTarget;
fn target(swapchain: &OpenXrQuadSwapchain, image: &OpenXrAcquiredImage) -> VulkanFrameTarget { swapchain.frame_target(image) }

Trait Implementations§

Source§

impl Drop for OpenXrQuadSwapchain

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

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,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,