Skip to content

Commit ff85b79

Browse files
committed
Merge pull request #118901 from dsnopek/ext-frame-synthesis-preparation
OpenXR: Fix crash when using `XR_EXT_frame_synthesis` after Godot 4.7-dev5
2 parents e8a58d1 + 412dad0 commit ff85b79

2 files changed

Lines changed: 7 additions & 14 deletions

File tree

modules/openxr/extensions/openxr_frame_synthesis_extension.cpp

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -258,16 +258,15 @@ void OpenXRFrameSynthesisExtension::on_main_swapchains_created() {
258258
}
259259
}
260260

261-
void OpenXRFrameSynthesisExtension::on_pre_render() {
261+
void OpenXRFrameSynthesisExtension::on_pre_draw_viewport(RID p_render_target) {
262262
if (!frame_synthesis_ext) {
263263
return;
264264
}
265265

266266
OpenXRAPI *openxr_api = OpenXRAPI::get_singleton();
267267
ERR_FAIL_NULL(openxr_api);
268268

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

320319
void OpenXRFrameSynthesisExtension::on_post_draw_viewport(RID p_render_target) {
321320
// Check if our extension is supported and enabled.
322-
if (!frame_synthesis_ext || !enabled || render_state.config_views.size() != 2 || render_state.skip_next_frame) {
321+
if (!frame_synthesis_ext || !enabled || render_state.config_views.size() != 2 || render_state.frame_synthesis_info.size() != 2 || render_state.skip_next_frame) {
323322
return;
324323
}
325324

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

332331
void *OpenXRFrameSynthesisExtension::set_projection_views_and_get_next_pointer(int p_view_index, void *p_next_pointer) {
333332
// Check if our extension is supported and enabled.
334-
if (!frame_synthesis_ext || !enabled || render_state.config_views.size() != 2) {
333+
if (!frame_synthesis_ext || !enabled || render_state.config_views.size() != 2 || render_state.frame_synthesis_info.size() != 2) {
335334
return nullptr;
336335
}
337336

@@ -344,14 +343,8 @@ void *OpenXRFrameSynthesisExtension::set_projection_views_and_get_next_pointer(i
344343
return nullptr;
345344
}
346345

347-
// Check if we can run frame synthesis.
348-
size_t view_count = render_state.config_views.size();
349-
if (enabled && view_count == 2) {
350-
render_state.frame_synthesis_info[p_view_index].next = p_next_pointer;
351-
return &render_state.frame_synthesis_info[p_view_index];
352-
}
353-
354-
return nullptr;
346+
render_state.frame_synthesis_info[p_view_index].next = p_next_pointer;
347+
return &render_state.frame_synthesis_info[p_view_index];
355348
}
356349

357350
bool OpenXRFrameSynthesisExtension::is_available() const {

modules/openxr/extensions/openxr_frame_synthesis_extension.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class OpenXRFrameSynthesisExtension : public OpenXRExtensionWrapper {
5656
virtual void on_session_destroyed() override;
5757

5858
virtual void on_main_swapchains_created() override;
59-
virtual void on_pre_render() override;
59+
virtual void on_pre_draw_viewport(RID p_render_target) override;
6060
virtual void on_post_draw_viewport(RID p_render_target) override;
6161
virtual void *set_projection_views_and_get_next_pointer(int p_view_index, void *p_next_pointer) override;
6262

0 commit comments

Comments
 (0)