Struct openxr::FrameStream[][src]

pub struct FrameStream<G: Graphics> { /* fields omitted */ }
Expand description

Handle for managing frame presentation

This is a secondary interface to a Session object that exposes only the frame wait/begin/end operations. These are separated so that &mut self receivers can be used to statically guarantee that calls are synchronized as required by OpenXR, enabling a safe interface.

Example

A typical presentation loop body should look roughly as follows:

let state = frame_waiter.wait().unwrap();
let image = swapchain.acquire_image().unwrap();
swapchain.wait_image(openxr::Duration::INFINITE).unwrap();

frame_stream.begin().unwrap();

if state.should_render {
    // draw scene...
}

let (view_flags, views) = session
    .locate_views(
        openxr::ViewConfigurationType::PRIMARY_STEREO,
        state.predicted_display_time,
        world_space,
    )
    .unwrap();

// set view matrices and submit to GPU...

swapchain.release_image().unwrap();
frame_stream
    .end(
        state.predicted_display_time,
        openxr::EnvironmentBlendMode::OPAQUE,
        &[&openxr::CompositionLayerProjection::new()
            .space(world_space)
            .views(&[
                openxr::CompositionLayerProjectionView::new()
                    .pose(views[0].pose)
                    .fov(views[0].fov)
                    .sub_image(
                        openxr::SwapchainSubImage::new()
                            .swapchain(swapchain)
                            .image_array_index(0)
                            .image_rect(openxr::Rect2Di {
                                offset: openxr::Offset2Di { x: 0, y: 0 },
                                extent: view_resolution[0],
                            }),
                    ),
                openxr::CompositionLayerProjectionView::new()
                    .pose(views[1].pose)
                    .fov(views[1].fov)
                    .sub_image(
                        openxr::SwapchainSubImage::new()
                            .swapchain(swapchain)
                            .image_array_index(1)
                            .image_rect(openxr::Rect2Di {
                                offset: openxr::Offset2Di { x: 0, y: 0 },
                                extent: view_resolution[1],
                            }),
                    ),
            ])],
    )
    .unwrap();

Implementations

Indicate that graphics device work is beginning

Indicate that all graphics work for the frame has been submitted

layers is an array of references to any type of composition layer, e.g. CompositionLayerProjection.

Indicate that all graphics work for the frame has been submitted

layers is an array of references to any type of composition layer, e.g. CompositionLayerProjection.

secondary_info has the same information for the secondary layer

XR_MSFT_secondary_view_configuration must be loaded and the session must have been started with begin_secondary

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.