1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Renderer agnostic motion vector rendering/OpenXR changes

This commit is contained in:
devloglogan
2024-12-10 13:40:47 -06:00
parent a372214a4a
commit 3deb5884d7
25 changed files with 429 additions and 12 deletions

View File

@@ -102,6 +102,9 @@ private:
// composition layer providers
Vector<OpenXRCompositionLayerProvider *> composition_layer_providers;
// projection views extensions
Vector<OpenXRExtensionWrapper *> projection_views_extensions;
// view configuration
uint32_t num_view_configuration_types = 0;
XrViewConfigurationType *supported_view_configuration_types = nullptr;
@@ -153,7 +156,6 @@ private:
enum OpenXRSwapChainTypes {
OPENXR_SWAPCHAIN_COLOR,
OPENXR_SWAPCHAIN_DEPTH,
// OPENXR_SWAPCHAIN_VELOCITY,
OPENXR_SWAPCHAIN_MAX
};
@@ -165,6 +167,10 @@ private:
XrSpace view_space = XR_NULL_HANDLE;
XRPose::TrackingConfidence head_pose_confidence = XRPose::XR_TRACKING_CONFIDENCE_NONE;
RID velocity_texture;
RID velocity_depth_texture;
Size2i velocity_target_size;
// When LOCAL_FLOOR isn't supported, we use an approach based on the example code in the
// OpenXR spec in order to emulate it.
// See: https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html#XR_EXT_local_floor
@@ -345,6 +351,9 @@ private:
bool submit_depth_buffer = false; // if set to true we submit depth buffers to OpenXR if a suitable extension is enabled.
bool view_pose_valid = false;
double z_near = 0.0;
double z_far = 0.0;
Size2i main_swapchain_size;
OpenXRSwapChainInfo main_swapchains[OPENXR_SWAPCHAIN_MAX];
} render_state;
@@ -477,6 +486,12 @@ public:
XrSwapchain get_color_swapchain();
RID get_color_texture();
RID get_depth_texture();
void set_velocity_texture(RID p_render_target);
RID get_velocity_texture();
void set_velocity_depth_texture(RID p_render_target);
RID get_velocity_depth_texture();
void set_velocity_target_size(const Size2i &p_target_size);
Size2i get_velocity_target_size();
void post_draw_viewport(RID p_render_target);
void end_frame();
@@ -502,9 +517,13 @@ public:
Size2 get_play_space_bounds() const;
// swapchains
PackedInt64Array get_supported_swapchain_formats();
int64_t get_color_swapchain_format() const { return color_swapchain_format; }
int64_t get_depth_swapchain_format() const { return depth_swapchain_format; }
double get_render_state_z_near() const { return render_state.z_near; }
double get_render_state_z_far() const { return render_state.z_far; }
// action map
String get_default_action_map_resource_name();
@@ -542,6 +561,9 @@ public:
void register_composition_layer_provider(OpenXRCompositionLayerProvider *provider);
void unregister_composition_layer_provider(OpenXRCompositionLayerProvider *provider);
void register_projection_views_extension(OpenXRExtensionWrapper *p_extension);
void unregister_projection_views_extension(OpenXRExtensionWrapper *p_extension);
const XrEnvironmentBlendMode *get_supported_environment_blend_modes(uint32_t &count);
bool is_environment_blend_mode_supported(XrEnvironmentBlendMode p_blend_mode) const;
bool set_environment_blend_mode(XrEnvironmentBlendMode p_blend_mode);