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
impl OpenXrQuadSwapchain
Sourcepub fn new(
session: &Session<Vulkan>,
width: u32,
height: u32,
) -> Result<Self, OpenXrRuntimeError>
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) }Sourcepub fn new_with_vulkan_context(
session: &Session<Vulkan>,
vk: &OpenXrVulkanContext,
width: u32,
height: u32,
) -> Result<Self, OpenXrRuntimeError>
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) }Sourcepub fn new_with_device(
session: &Session<Vulkan>,
device: &Device,
width: u32,
height: u32,
) -> Result<Self, OpenXrRuntimeError>
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) }Sourcepub fn handle(&self) -> &Swapchain<Vulkan>
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() }Sourcepub fn format(&self) -> OpenXrSwapchainFormat
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() }Sourcepub fn extent(&self) -> Extent2D
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 }Sourcepub fn image_rect(&self) -> Rect2Di
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() }Sourcepub fn acquire_wait(
&mut self,
) -> Result<OpenXrAcquiredImage, OpenXrRuntimeError>
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() }Sourcepub fn release(&mut self) -> Result<(), OpenXrRuntimeError>
pub fn release(&mut self) -> Result<(), OpenXrRuntimeError>
Sourcepub fn clear_acquired_image(
&self,
vk: &OpenXrVulkanContext,
acquired: &OpenXrAcquiredImage,
color: [f32; 4],
) -> Result<(), OpenXrRuntimeError>
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]) }Sourcepub fn frame_target(&self, acquired: &OpenXrAcquiredImage) -> VulkanFrameTarget
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§
Auto Trait Implementations§
impl Freeze for OpenXrQuadSwapchain
impl !RefUnwindSafe for OpenXrQuadSwapchain
impl Send for OpenXrQuadSwapchain
impl Sync for OpenXrQuadSwapchain
impl Unpin for OpenXrQuadSwapchain
impl !UnwindSafe for OpenXrQuadSwapchain
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