virtualvoid*set_system_properties_and_get_next_pointer(void*p_next_pointer);// Add additional data structures when we interrogate OpenXRS system abilities.
virtualvoid*set_instance_create_info_and_get_next_pointer(void*p_next_pointer);// Add additional data structures when we create our OpenXR instance.
virtualvoid*set_session_create_and_get_next_pointer(void*p_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);// Add additional data structures when creating OpenXR swap chains.
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_session);// `on_session_created` is called right after we've successfully created our OpenXR session.
virtualvoidon_session_destroyed();// `on_session_destroyed` is called right before we destroy our OpenXR session.
virtualvoidon_pre_render();// `on_pre_render` is called right before we start rendering our XR viewports.
virtualvoidon_main_swapchains_created();// `on_main_swapchains_created` is called right after our main swapchains are (re)created.
virtualvoidon_pre_draw_viewport(RIDp_render_target);// `on_pre_draw_viewport` is called right before we start rendering this viewport
virtualvoidon_post_draw_viewport(RIDp_render_target);// `on_port_draw_viewport` is called right after we start rendering this viewport (note that on Vulkan draw commands may only be queued)
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.
GDVIRTUAL0(_on_state_idle);
GDVIRTUAL0(_on_state_ready);
GDVIRTUAL0(_on_state_synchronized);
GDVIRTUAL0(_on_state_visible);
GDVIRTUAL0(_on_state_focused);
GDVIRTUAL0(_on_state_stopping);
GDVIRTUAL0(_on_state_loss_pending);
GDVIRTUAL0(_on_state_exiting);
// These will only be called on extensions registered via OpenXRAPI::register_composition_layer_provider().
virtualvoid*set_viewport_composition_layer_and_get_next_pointer(constXrCompositionLayerBaseHeader*p_layer,constDictionary&p_property_values,void*p_next_pointer);// Add additional data structures to composition layers created via OpenXRCompositionLayer.
virtualvoidon_viewport_composition_layer_destroyed(constXrCompositionLayerBaseHeader*p_layer);// `on_viewport_composition_layer_destroyed` is called when a composition layer created via OpenXRCompositionLayer is destroyed.
virtualvoidget_viewport_composition_layer_extension_properties(List<PropertyInfo>*p_property_list);// Get additional property definitions for OpenXRCompositionLayer.
virtualDictionaryget_viewport_composition_layer_extension_property_defaults();// Get the default values for the additional property definitions for OpenXRCompositionLayer.
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.
virtualRIDget_density_map(void*p_swapchain_graphics_data,intp_image_index)=0;// `get_density_map` returns a Godot texture RID for the current active density map in our swapchain (if any).