Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 6 additions & 13 deletions modules/openxr/extensions/openxr_frame_synthesis_extension.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -258,16 +258,15 @@ void OpenXRFrameSynthesisExtension::on_main_swapchains_created() {
}
}

void OpenXRFrameSynthesisExtension::on_pre_render() {
void OpenXRFrameSynthesisExtension::on_pre_draw_viewport(RID p_render_target) {
if (!frame_synthesis_ext) {
return;
}

OpenXRAPI *openxr_api = OpenXRAPI::get_singleton();
ERR_FAIL_NULL(openxr_api);

size_t view_count = render_state.config_views.size();
if (!enabled || view_count != 2 || render_state.skip_next_frame) {
if (!enabled || render_state.config_views.size() != 2 || render_state.frame_synthesis_info.size() != 2 || render_state.skip_next_frame) {
// Unset these just in case.
openxr_api->set_velocity_texture(RID());
openxr_api->set_velocity_depth_texture(RID());
Expand Down Expand Up @@ -319,7 +318,7 @@ void OpenXRFrameSynthesisExtension::on_pre_render() {

void OpenXRFrameSynthesisExtension::on_post_draw_viewport(RID p_render_target) {
// Check if our extension is supported and enabled.
if (!frame_synthesis_ext || !enabled || render_state.config_views.size() != 2 || render_state.skip_next_frame) {
if (!frame_synthesis_ext || !enabled || render_state.config_views.size() != 2 || render_state.frame_synthesis_info.size() != 2 || render_state.skip_next_frame) {
return;
}

Expand All @@ -331,7 +330,7 @@ void OpenXRFrameSynthesisExtension::on_post_draw_viewport(RID p_render_target) {

void *OpenXRFrameSynthesisExtension::set_projection_views_and_get_next_pointer(int p_view_index, void *p_next_pointer) {
// Check if our extension is supported and enabled.
if (!frame_synthesis_ext || !enabled || render_state.config_views.size() != 2) {
if (!frame_synthesis_ext || !enabled || render_state.config_views.size() != 2 || render_state.frame_synthesis_info.size() != 2) {
return nullptr;
}

Expand All @@ -344,14 +343,8 @@ void *OpenXRFrameSynthesisExtension::set_projection_views_and_get_next_pointer(i
return nullptr;
}

// Check if we can run frame synthesis.
size_t view_count = render_state.config_views.size();
if (enabled && view_count == 2) {
render_state.frame_synthesis_info[p_view_index].next = p_next_pointer;
return &render_state.frame_synthesis_info[p_view_index];
}

return nullptr;
render_state.frame_synthesis_info[p_view_index].next = p_next_pointer;
return &render_state.frame_synthesis_info[p_view_index];
}

bool OpenXRFrameSynthesisExtension::is_available() const {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ class OpenXRFrameSynthesisExtension : public OpenXRExtensionWrapper {
virtual void on_session_destroyed() override;

virtual void on_main_swapchains_created() override;
virtual void on_pre_render() override;
virtual void on_pre_draw_viewport(RID p_render_target) override;
virtual void on_post_draw_viewport(RID p_render_target) override;
virtual void *set_projection_views_and_get_next_pointer(int p_view_index, void *p_next_pointer) override;

Expand Down