73 Commits over 184 Days - 0.02cph!
Check if we can actually init OpenXR when calling HasHeadset - makes the call more expensive(!) but more accurate
Additional checks when loading JSON bindings, don't poll for hand tracking if instance doesn't support it, make sure we have an instance
Don't crash if we fail to open bindings JSON file
PollEvents() returns NO_SESSION_RUNNING if a session isn't attached
Fix EXCEPTION_ACCESS_VIOLATION_EXEC finside InitHandTracking
InputBooleanActionState state is uint32_t for interop
Save off system properties when we make the system
Debug utils extension is optional, only do hand tracking stuff if we have it supported
Log enabled API layers
Don't exit immediately on fail, becomes confusing
Hand tracking support
Emulate finger curl by calculating distance between palm and finger tip bones
Add support for optional extensions, e.g. XR_EXT_hand_tracking
Use one single space for everything (stage space), move some stuff into sync()
Use local space instead of stage space for view locate & layer composition
Use local space for headset view/projection rather than stage space
Applications must provide poses manually when submitting (to ensure accurate reprojection)
Disable WholeProgramOptimization
Add empty action states to input arrays after loading bindings
Use m_xrViews instead of m_views when getting view info & proj matrix
Stubbed haptic vibration func
Use stage space for controller poses
Add xr_linear.h
Fetch projection matrix directly from xr_linear, means people don't have to calculate it themselves
Use our own matrix struct
Minor tweaks
Add GetInstanceProperties() for system name
Tweak logging buffer sizes, don't early return
Re-organise project, swap naming for public/private headers (now fpxr.h and fpxr_private.h)
Try out blame ignore revs
Update examples
Use less stack space
Input sources are passed as enum, fetch view info
Use interface through public header
README.md with examples
Simplify GetHandle
Controller bindings can be stored in separate files
Support input source paths
Add support for pose actions
Start moving over to subactions for per-controller input context
Change the way we handle bindings and actions
Implement Input::GetVector2ActionState
InputDigitalAction -> InputBooleanAction, move Input initialisation into instance and link session afterwards
Basic inputs + example
Remove asserts & logs in input functions
Show openxr error if xr operation doesn't succeed
Check if parsing json actually worked, if not then show error
Create input instance
Run OPENXR_CHECK inside input ctor, add comment about some runtimes throwing errors
Support more binding types, wrap xr calls in OPENXR_CHECK(...)
Use struct constructor instead of builder pattern for instances
Remove "reserved" enum entries
Add vjson (zpostfacto/vjson)
Load action sets, actions, and bindings from actions.json (similar to how steamvr does it)
Out ptr
Better formatting for default stdout logs
Better error checking, treat errors as warnings & compile with warning level 4
Revert "Move vkSubmit into EndFrame()"
This reverts commit 1f59cd0c1c499762b96d0d3a268a1c61bf02a4ba.
Only end frame if we've submitted
Move vkSubmit into EndFrame()
Remove per-frame debug logs
Copy submitted texture as one big block rather than two small blocks
Update state in locations that prevent threading issues
Compositor creates an EventManager in ctor, allows access to it - rather than creating an EventManager on demand
Cleanup
Update example
Contain frame state inside a struct, nice and clean
TextureSubmitInfo: remove bounds info
Better render target size management
Wait for fences on every submit
Debug callback type
Verbose logs
Keep track of frame start / end to prevent crashing with XR_ERROR_CALL_ORDER_INVALID
Perform vk copy operation as single step on submit
Use vk fences for vk copy sync
Remove logs
Use texture submit x/y as view subrect offset x/y
Compositor - getters for display info
Depth swapchain/texture are completely optional, can be ignored etc
Acquire/wait for views inside BeginFrame, save off for Submit
XR_EXT_debug_utils support
Minor tweaks
Remove RequestValidationLayers, m_useValidationLayers - unused
Get rid of right eye offset until I figure rendering out completely
Move xrWaitFrame into BeginFrame, sync now just calls EndFrame() and BeginFrame()
Max 1 second xrWaitSwapchainImage timeout
Bundle compositor operations into Sync()
Load API layers 🙈
This is redundant
Platform defines in fpxr.h and fpxr.cpp
Section headers
Compositor submit - copy app-provided texture data into OpenXR-provided swapchain images