Trying to implement OpenXR on Quest
I am currently implementing OpenXR for Quest into my custom game engine and am running into some issues:
- An action bound to "/user/hand/left/input/menu/click" gets triggered by the "Y" button AND the "menu" button. I'd expect it to only be triggered by the "menu" button.
- There is no "local floor" reference space in OpenXR, is the "stage" reference space supposed to be the new normal for standing experiences? Meaning no more resetting? Is it ok to still catch the reset event and move the UI in front of the player? Would be great if there was some documentation somewhere on what the expected behavior is now that the old default is apparently not a thing anymore.
- Performance levels are different, there is power saving, low, high and boost. Setting it to power saving does seem to do nothing, while LOW corresponds to a level of 1, HIGH is 2 and BOOST is 3 (Only checked on Quest 2). But BOOST is meant to not be thermally sustainable, while level 3 usually seems to be perfectly fine and is what a lot of games run at?
- Looks like "Phase Sync" is the new default and "Extra Latency Mode" is not a thing anymore with OpenXR?
- Some description or diagram on how to implement fixed foveated rendering with OpenXR would be nice. To use with vulkan it requires 4 different extensions and they are not that easy to follow.
- Is there no way to set a foveation profile when creating the swapchain?
- I didn't find what the default foveation profile is supposed to be if none is set (Is this not defined by the spec or did I just not find it?)
- I think the vkImage for the foveation has R8G8 as format, but besides some article on implementing foveation on Quest from some time ago I could not find any information on that. Is this somehow defined by the fragment density map extension? Is there a way to query it from the vkImage?
