Monado OpenXR Runtime
Todo List
Global calibration_get_undistort_map (t_camera_calibration &calib, cv::InputArray rectify_transform_optional, cv::Mat new_camera_matrix_optional)
Scale Our intrinsics if the frame size we request
Global calibration_get_undistort_map (t_camera_calibration &calib, cv::InputArray rectify_transform_optional, cv::Mat new_camera_matrix_optional)
Scale Our intrinsics if the frame size we request
Global comp_compositor::expected_app_duration_ns
make this atomic.
Global comp_swapchain_create (struct xrt_compositor *xc, enum xrt_swapchain_create_flags create, enum xrt_swapchain_usage_bits bits, int64_t format, uint32_t sample_count, uint32_t width, uint32_t height, uint32_t face_count, uint32_t array_size, uint32_t mip_count)
memory leak of image fds and swapchain
Global hdk_found (struct xrt_prober *xp, struct xrt_prober_device **devices, size_t num_devices, size_t index, struct xrt_device **out_xdev)
just assuming anything else is 1.3 for now
Global MatchingTimePoints::getTimestamp (time_state const &prevState)

right now just doing steady clock for simplicity.

Eventually need to make the high-res clock steady.

Global oxr_action_enumerate_bound_sources (struct oxr_logger *log, struct oxr_session *sess, uint64_t key, uint32_t sourceCapacityInput, uint32_t *sourceCountOutput, XrPath *sources)
Implement
Global oxr_action_get_input_source_localized_name (struct oxr_logger *log, struct oxr_session *sess, const XrInputSourceLocalizedNameGetInfo *getInfo, uint32_t bufferCapacityInput, uint32_t *bufferCountOutput, char *buffer)
Implement
Global oxr_action_set_create (struct oxr_logger *log, struct oxr_instance *inst, const XrActionSetCreateInfo *createInfo, struct oxr_action_set **out_act_set)
Implement more fully.
Global oxr_action_suggest_interaction_profile_bindings (struct oxr_logger *log, struct oxr_instance *inst, const XrInteractionProfileSuggestedBinding *suggestedBindings)
Still needs to validate the paths.
Global oxr_binding_find_bindings_from_key (struct oxr_logger *log, struct oxr_interaction_profile *profile, uint32_t key, struct oxr_binding *bindings[32], size_t *num_bindings)
This function should be a two call function, or handle more then 32 bindings.
Global oxr_create_messenger (struct oxr_logger *, struct oxr_instance *inst, const XrDebugUtilsMessengerCreateInfoEXT *, struct oxr_debug_messenger **out_mssngr)
call into inst to create this instead?
Global oxr_find_profile_for_device (struct oxr_logger *log, struct oxr_instance *inst, struct xrt_device *xdev, struct oxr_interaction_profile **out_p)
A lot more clever selecting the profile here.
Global oxr_instance_create (struct oxr_logger *log, const XrInstanceCreateInfo *createInfo, struct oxr_instance **out_inst)
check if this (and other creates) failed?
Global oxr_session_begin (struct oxr_logger *log, struct oxr_session *sess, const XrSessionBeginInfo *beginInfo)
we only support a single view config type per system right now
Global oxr_session_frame_end (struct oxr_logger *log, struct oxr_session *sess, const XrFrameEndInfo *frameEndInfo)
More validation?
Global oxr_session_frame_wait (struct oxr_logger *log, struct oxr_session *sess, XrFrameState *frameState)
this should be carefully synchronized, because there may be more than one session per instance.
Global oxr_session_get_view_pose_at (struct oxr_logger *, struct oxr_session *sess, XrTime at_time, struct xrt_pose *)
Forcing a fixed amount of prediction for now since devices don't tell us timestamps yet.
Global oxr_session_request_exit (struct oxr_logger *log, struct oxr_session *sess)
start fading out the app.
Global oxr_session_views (struct oxr_logger *log, struct oxr_session *sess, const XrViewLocateInfo *viewLocateInfo, XrViewState *viewState, uint32_t viewCapacityInput, uint32_t *viewCountOutput, XrView *views)
Do not hardcode IPD.
Global oxr_space_action_relation (struct oxr_logger *log, struct oxr_session *sess, struct oxr_space *spc, struct oxr_space *baseSpc, XrTime time, struct xrt_space_relation *out_relation)

Can not relate to the view space right now.

Error code?

Global oxr_space_locate (struct oxr_logger *log, struct oxr_space *spc, struct oxr_space *baseSpc, XrTime time, XrSpaceLocation *location)
for longer paths in "space graph" than one edge, this will be a loop.
Global oxr_system_enumerate_blend_modes (struct oxr_logger *log, struct oxr_system *sys, XrViewConfigurationType viewConfigurationType, uint32_t environmentBlendModeCapacityInput, uint32_t *environmentBlendModeCountOutput, XrEnvironmentBlendMode *environmentBlendModes)
Take into account viewConfigurationType
Global oxr_system_get_properties (struct oxr_logger *log, struct oxr_system *sys, XrSystemProperties *properties)
conforming implementations must support at leastXR_MIN_COMPOSITION_LAYERS_SUPPORTED layers.
Global oxr_xrConvertTimespecTimeToTimeKHR (XrInstance instance, const struct timespec *timespecTime, XrTime *time)
do we need to check and see if this extension was enabled first?
Global oxr_xrGetInputSourceLocalizedName (XrSession session, const XrInputSourceLocalizedNameGetInfo *getInfo, uint32_t bufferCapacityInput, uint32_t *bufferCountOutput, char *buffer)
verify getInfo
Global oxr_xrGetReferenceSpaceBoundsRect (XrSession session, XrReferenceSpaceType referenceSpaceType, XrExtent2Df *bounds)
Implement
Global oxr_xrSuggestInteractionProfileBindings (XrInstance instance, const XrInteractionProfileSuggestedBinding *suggestedBindings)
verify path (s->binding).
Global psmv_found (struct xrt_prober *xp, struct xrt_prober_device **devices, size_t num_devices, size_t index, struct xrt_device **out_xdevs)
measure!
Global psvr_device_create (struct hid_device_info *hmd_handle_info, struct hid_device_info *hmd_control_info, struct xrt_prober *xp, bool print_spew, bool print_debug)
inject this, don't create it
Global t_stereo_camera_calibration_load_v1_hack (struct t_stereo_camera_calibration **out_data)

256 maybe not enough

Use multiple env vars?

Hardcoded 256

Global timepoint_ns
This is from u_time, duplicated to avoid layer violation.
Global vk_create_device (struct vk_bundle *vk, int forced_index)
why not vk->queue_family_index ?
Global XR_USE_GRAPHICS_API_VULKAN
Move these to the build system instead.
Global xrt_fusion::AbsolutePositionLeverArmMeasurement::AbsolutePositionLeverArmMeasurement (MeasurementVector const &measurement, MeasurementVector const &knownLocationInBodySpace, MeasurementVector const &variance)
the point we get from the camera isn't the center of the ball, but the center of the visible surface of the ball - a closer approximation would be translation along the vector to the center of projection....
Global xrt_fusion::implementation::LowPassIIR< Value, Scalar >::addSample (Value const &sample, timepoint_ns timestamp_ns, Scalar weight=1)
limit max dt?
Global xrt_gfx_provider_create_fd (struct xrt_device *xdev, bool flip_y)
set this to an estimate that's better than 6ms
Global XRT_INPUT_DAYDREAM_TOUCHPAD_VALUE_X
This should be merged and be tagged as a touchpad, maybe.
Class xrt_tracked_psmv
How do we communicate ball colour change?
Global xrt_tracked_psmv::get_tracked_pose )(struct xrt_tracked_psmv *, enum xrt_input_name name, struct time_state *timekeeper, timepoint_ns when_ns, struct xrt_space_relation *out_relation)
Should we add a out_time argument as a way to signal min and maximum, and as such only do interpelation between different captured frames.
Class xrt_tracked_psvr
How do we communicate led lighting status?
Global xrt_tracking_type
Is none, Colour, IR, Magnetic the kind of type we need to know about?