Skip to content

Make proper use of WaitGetPoses - #141

Open
BastiaanOlij wants to merge 1 commit into
GodotVR:Godot-3.xfrom
BastiaanOlij:advance_frame_timing
Open

BastiaanOlij wants to merge 1 commit into
GodotVR:Godot-3.xfrom
BastiaanOlij:advance_frame_timing

Conversation

@BastiaanOlij

Copy link
Copy Markdown
Member

The function WaitGetPoses returns two sets of tracking data. Tracking data for the current frame, and predictive tracking data for the next frame.

We call, as we should, WaitGetPoses as close to when we render as possible, however we do not update the positions of our node until we process the next frame.

This PR ensures that our head position for rendering uses the most up to date tracking data as we currently do, but we now use the predictive tracking data for the next frame when positioning nodes.

Now Godot 3 still processes this data within _process so we do not have the nodes in the correct position until after that nodes _process has run, but this can be dealt with. This is something that has been improved in Godot 4.

But with this fix it should ensure that controller positions no longer seem to be a frame behind and more importantly, that nodes childed to the ARVRCamera will appear in the correct position.

@BastiaanOlij BastiaanOlij added this to the 1.2.0 milestone Jan 26, 2022
@BastiaanOlij BastiaanOlij self-assigned this Jan 26, 2022
@beniwtv

beniwtv commented Jan 28, 2022

Copy link
Copy Markdown
Collaborator

Very cool! Gonna have to give this a spin soon :)

@fire

fire commented Oct 6, 2025

Copy link
Copy Markdown
Contributor

@vilhalmer Is this still relevant?

@vilhalmer

Copy link
Copy Markdown
Collaborator

I have no idea, I'm hoping to go through the remaining PRs after I get my last set posted which should be very soon now that #169 is in.

@vilhalmer

Copy link
Copy Markdown
Collaborator

This is the last old PR I still need to wrap my head around. It obviously won't apply as-is.

Since this was posted, WaitGetPoses is now called as part of XRInterface::_get_transform_for_view and replaced by GetLastPoses here in process. If I'm understanding correctly, this means the pose data is now retrieved in time to be updated the same frame, achieving the same thing that getting the predictive poses was doing here to be ready for the next cycle around process.

So I think this can be closed?

@fire

fire commented Apr 30, 2026

Copy link
Copy Markdown
Contributor

Let's close it then.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants