One of my favourite parts about writing VR application code in languages other than C/C++ is the utter joy of parsing an XML or JSON API specification. The task is especially joyous when, at some point, the author has given up and just started writing C declaration syntax sprinkled with a few XML tags here and there.
If you are a normal person, and would prefer not to have to figure out all the special
cases required to just get some VR code running, you might consider having a look at my
parsers for xr.xml
and openvr_api.json
. If you’re writing Odin
you can just use the generated results, however even if you’re targeting another language,
the generators might be a useful reference.
OpenXR Bindings Generator #
My favourite part about this one is the special case to handle aliased command names, but
there is only one: xrGetVulkanGraphicsRequirements2KHR
.
OpenXR bindings generator for Odin
OpenVR Bindings Generator #
I think the fact that this is about half the length of the OpenXR one tells you how much
more of a joy it was to write. Unlike OpenXR, OpenVR evolved rather than being designed
as a strict spec, so my favourite part of this parser is the array of 30 non-standard
enum prefixes that I hand wrote to get something more consistent feeling in Odin. Odin
has scoped enums so instead of writing OverlayIntersectionPrimitiveType_Rectangle
I can simply
write .Rectangle
, lovely.
Odin bindings generator for OpenVR
The OpenVR repo also contains a very minimal application which queries and renders the connected devices using OpenGL. Sadly there is no standardised way to query device render models in OpenXR but that, and much more, is a story for another time.
Happy Virtual Realitying!