XrAndroidDepthTexture

Struct XrAndroidDepthTexture 

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

Main extension handler for Android depth texture functionality

This struct manages the XR_ANDROID_depth_texture extension, providing access to:

  • Depth and confidence texture data from device sensors
  • Multiple resolution options (quarter, half, full)
  • Both raw and processed depth information
  • Swapchain management for efficient rendering

###Examples

use stereokit_rust::tools::xr_android_depth_texture::*;

number_of_steps = 50;
test_steps!( // !!!! Get a proper main loop !!!!
    if iter == 10 {
        // Initialize extension and check system support
        if let Some(depth_ext) = XrAndroidDepthTexture::new() {
            // Check system support with logging
            match depth_ext.check_system_support(true) {
                Ok(_system_props) => {
                    stereokit_rust::system::Log::info("✅ System supports depth tracking");
                     
                    // Continue with depth texture operations...
                    let session = openxr_sys::Session::from_raw(
                        stereokit_rust::system::BackendOpenXR::session()
                    );
                     
                    // Create depth swapchain with smooth and raw depth images
                    let swapchain_info = create_depth_swapchain_info(
                        XR_DEPTH_RESOLUTION_HALF_ANDROID,
                        XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID
                            | XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID
                    );
                     
                    match depth_ext.create_depth_swapchain(session, &swapchain_info) {
                        Ok(swapchain) => {
                            stereokit_rust::system::Log::info("✅ Depth swapchain created!");
                             
                            // Enumerate swapchain images
                            if let Ok(images) = depth_ext.enumerate_depth_swapchain_images(swapchain) {
                                stereokit_rust::system::Log::info(
                                    format!("Found {} swapchain images", images.len())
                                );
                            }
                             
                            // Test image acquisition
                            if let Ok(index) = depth_ext.acquire_depth_swapchain_image(session, swapchain) {
                                stereokit_rust::system::Log::info(
                                    format!("Acquired image at index: {}", index)
                                );
                            }
                             
                            // Cleanup
                            let _ = depth_ext.destroy_depth_swapchain(swapchain);
                            stereokit_rust::system::Log::info("✅ Swapchain test completed!");
                        }
                        Err(e) => stereokit_rust::system::Log::err(format!("Swapchain creation failed: {}", e)),
                    }
                }
                Err(e) => stereokit_rust::system::Log::err(format!("System support check failed: {:?}", e)),
            }
        }
    }
);
§Depth Resolution Enumeration Example
use stereokit_rust::tools::xr_android_depth_texture::*;

number_of_steps = 20;
test_steps!( // !!!! Get a proper main loop !!!!
    if iter == 5 {
        // Test depth resolution enumeration and analysis
        if let Some(depth_ext) = XrAndroidDepthTexture::new() {
            let session = openxr_sys::Session::from_raw(
                stereokit_rust::system::BackendOpenXR::session()
            );
             
            match depth_ext.enumerate_depth_resolutions(session) {
                Ok(resolutions) => {
                    stereokit_rust::system::Log::info(
                        format!("✅ Found {} supported depth resolutions", resolutions.len())
                    );
                     
                    for (i, resolution) in resolutions.iter().enumerate() {
                        let (width, height) = get_resolution_dimensions(*resolution);
                        let resolution_name = match *resolution {
                            XR_DEPTH_RESOLUTION_QUARTER_ANDROID => "Quarter",
                            XR_DEPTH_RESOLUTION_HALF_ANDROID => "Half",
                            XR_DEPTH_RESOLUTION_FULL_ANDROID => "Full",
                            _ => "Unknown",
                        };
                         
                        stereokit_rust::system::Log::info(format!(
                            "  Resolution {}: {} ({}x{}) - enum: {}",
                            i, resolution_name, width, height, resolution
                        ));
                    }
                     
                    stereokit_rust::system::Log::info("✅ Resolution enumeration completed!");
                }
                Err(e) => stereokit_rust::system::Log::err(
                    format!("Resolution enumeration failed: {}", e)
                ),
            }
        }
    }
);

Implementations§

Source§

impl XrAndroidDepthTexture

Source

pub fn new() -> Option<Self>

Create and initialize a new AndroidDepthTextureExtension instance

This method combines creation and initialization, checking extension availability and loading all necessary OpenXR functions for depth texture operations.

§Returns
  • Some(Self) if extension is available and initialization succeeds
  • None if extension is not available or initialization fails
Source

pub fn check_system_support( &self, with_log: bool, ) -> Result<SystemProperties, Result>

Check if the system supports depth tracking

§Parameters
  • with_log: If true, outputs system properties to diagnostic log
§Returns

Ok(SystemProperties) with depth tracking properties if supported, or error on failure

Source

pub fn enumerate_depth_resolutions( &self, session: Session, ) -> Result<Vec<DepthResolutionAndroid>, String>

Wrapper methods used by lib.rs Enumerate available depth resolutions supported by the device

§Arguments
  • session - The OpenXR session
§Returns

Vector of supported depth resolution enum values

Source

pub fn create_depth_swapchain( &self, session: Session, create_info: &DepthSwapchainCreateInfoAndroid, ) -> Result<Swapchain, String>

Create a depth swapchain for rendering depth textures

§Arguments
  • session - The OpenXR session
  • create_info - Configuration for the depth swapchain
§Returns

Handle to the created swapchain or error description

Source

pub fn enumerate_depth_swapchain_images( &self, swapchain: Swapchain, ) -> Result<Vec<DepthSwapchainImageAndroid>, String>

Enumerate the images in a depth swapchain

§Arguments
  • swapchain - The depth swapchain to enumerate
§Returns

Vector of depth swapchain images with texture handles

Source

pub fn destroy_depth_swapchain( &self, swapchain: Swapchain, ) -> Result<(), String>

Destroy a previously created depth swapchain

§Arguments
  • swapchain - The depth swapchain to destroy
§Returns

Ok(()) on success or error description on failure

Source

pub fn acquire_depth_swapchain_image( &self, session: Session, swapchain: Swapchain, ) -> Result<u32, String>

Acquire an image from a depth swapchain

§Arguments
  • session - The OpenXR session
  • swapchain - The depth swapchain to acquire from
§Returns

Index of the acquired image or error description

Trait Implementations§

Source§

impl Debug for XrAndroidDepthTexture

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for XrAndroidDepthTexture

Source§

fn default() -> Self

Returns the “default value” for a 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
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

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

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

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, 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.
Source§

impl<T> WithSubscriber for T

Source§

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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