virtualvoid*set_system_properties_and_get_next_pointer(void*p_next_pointer){returnp_next_pointer;}// Add additional data structures when we interogate OpenXRS system abilities.
virtualvoid*set_instance_create_info_and_get_next_pointer(void*p_next_pointer){returnp_next_pointer;}// Add additional data structures when we create our OpenXR instance.
virtualvoid*set_session_create_and_get_next_pointer(void*p_next_pointer){returnp_next_pointer;}// Add additional data structures when we create our OpenXR session.
virtualvoid*set_swapchain_create_info_and_get_next_pointer(void*p_next_pointer){returnp_next_pointer;}// Add additional data structures when creating OpenXR swap chains.
// `on_register_metadata` allows extensions to register additional controller metadata.
// This function is called even when OpenXRApi is not constructured as the metadata
// needs to be available to the editor.
// Also extensions should provide metadata regardless of whether they are supported
// on the host system as the controller data is used to setup action maps for users
// who may have access to the relevant hardware.
virtualvoidon_register_metadata(){}
virtualvoidon_before_instance_created(){}// `on_before_instance_created` is called before we create our OpenXR instance.
virtualvoidon_instance_created(constXrInstancep_instance){}// `on_instance_created` is called right after we've successfully created our OpenXR instance.
virtualvoidon_instance_destroyed(){}// `on_instance_destroyed` is called right before we destroy our OpenXR instance.
virtualvoidon_session_created(constXrSessionp_instance){}// `on_session_created` is called right after we've successsfully created our OpenXR session.
virtualvoidon_session_destroyed(){}// `on_session_destroyed` is called right before we destroy our OpenXR session.
// `on_process` is called as part of our OpenXR process handling,
// this happens right before physics process and normal processing is run.
// This is when controller data is queried and made available to game logic.
virtualvoidon_state_idle(){}// `on_state_idle` is called when the OpenXR session state is changed to idle.
virtualvoidon_state_ready(){}// `on_state_ready` is called when the OpenXR session state is changed to ready, this means OpenXR is ready to setup our session.
virtualvoidon_state_synchronized(){}// `on_state_synchronized` is called when the OpenXR session state is changed to synchronized, note that OpenXR also returns to this state when our application looses focus.
virtualvoidon_state_visible(){}// `on_state_visible` is called when the OpenXR session state is changed to visible, OpenXR is now ready to receive frames.
virtualvoidon_state_focused(){}// `on_state_focused` is called when the OpenXR session state is changed to focused, this state is the active state when our game runs.
virtualvoidon_state_stopping(){}// `on_state_stopping` is called when the OpenXR session state is changed to stopping.
virtualvoidon_state_loss_pending(){}// `on_state_loss_pending` is called when the OpenXR session state is changed to loss pending.
virtualvoidon_state_exiting(){}// `on_state_exiting` is called when the OpenXR session state is changed to exiting.
virtualvoidget_usable_swapchain_formats(Vector<int64_t>&p_usable_swap_chains)=0;// `get_usable_swapchain_formats` should return a list of usable color formats.
virtualvoidget_usable_depth_formats(Vector<int64_t>&p_usable_swap_chains)=0;// `get_usable_depth_formats` should return a list of usable depth formats.
virtualStringget_swapchain_format_name(int64_tp_swapchain_format)const=0;// `get_swapchain_format_name` should return the constant name of a given format.
virtualboolget_swapchain_image_data(XrSwapchainp_swapchain,int64_tp_swapchain_format,uint32_tp_width,uint32_tp_height,uint32_tp_sample_count,uint32_tp_array_size,void**r_swapchain_graphics_data)=0;// `get_swapchain_image_data` extracts image IDs for the swapchain images and stores there in an implementation dependent data structure.
virtualvoidcleanup_swapchain_graphics_data(void**p_swapchain_graphics_data)=0;// `cleanup_swapchain_graphics_data` cleans up the data held in our implementation dependent data structure and should free up its memory.
virtualboolcreate_projection_fov(constXrFovfp_fov,doublep_z_near,doublep_z_far,Projection&r_camera_matrix)=0;// `create_projection_fov` creates a proper projection matrix based on asymmetric FOV data provided by OpenXR.
virtualRIDget_texture(void*p_swapchain_graphics_data,intp_image_index)=0;// `get_texture` returns a Godot texture RID for the current active texture in our swapchain.