982 Commits over 610 Days - 0.07cph!
Fetch rendering recommendations from fpxr
Remove silly hack hard-coding all our extensions, fetch them properly
Don't use outdated nuget packages, let's include & link against the most recent version
Re-build swapchains if any part is out of date
Pass recommended render target size and refresh rate to user, but let them handle everything
Compile with LTCG
Macro cleanup, assert views == 2 (until we have reason to support 1 or 4 views)
RenderTarget refactor, becomes its own class and manages frame start/end/sync
Pass vulkan-related stuff in as structure
Shove vulkan-related stuff into its own separate structure
Hack around extension-related crash for now
RequirementsBuilder API
Print error code inside debug callback
Remove RequirementsBuilder, just fetch requirements inside SessionBuilder::Build()
Treat warnings as errors
Move OpenXR requirements into Facepunch.XR
Requirements are done automatically now, make instance/device extension format consistent
Fetch extensions, add support for debug callbacks
Remove direct OpenXR bindings
Pass debug callback eto Facepunch.XR, make a session
Use UpperCamelCase naming (same as our other stuff), static linking
openxr_loader lib
Add Facepunch.XR native library
Initial bindings to Facepunch.XR
Render target API (for swapchains)
Pump events correctly
Track all session states, just convert directly from OpenXR to FPXR
Static library
Headless support
Example project
Clean up, move everything into OpenXR class
Log session state info
Environment blend mode logic
View configurations, create swapchains
Poll for all events (defined in https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html#_xrpollevent)
ApplicationRunning default
Clean up
Bend over backwards to give OpenXR the exact vulkan instance it wants
Remove hack & fetch instance extensions properly
VRSystem has state, logical split for instance/session
Basic event loop polling
Handle session events, begin/end session
Log unhandled events
Create Vulkan graphics binding for OpenXR, pass to session
Declare OpenXR graphics requirements for render devices
Temp - environment variables for openxr validation layers
Properly init XrGraphicsRequirementsVulkanKHR
Fetch required extensions
OpenXR handle management tweaks (need to work on this a bit)
Treat handles as pointers
Obtain system ID, create session
Instance properties, destroy instance on shutdown, spin up debug messenger thru XR_EXT_debug_utils
Attempt to make gradients match their web counterparts a little more
This isn't perfect and we should really investigate the root cause
for this: sbox-issues/issues/5477
Stub out everything VR-related, remove calls to SteamVR functions
Initial bindings, init API, fetch & spew extensions
VR: Fix render models loading improperly
VR: Don't submit or wait for poses if the headset is in standby (prevents editor stalling when headset goes idle)
VR: Fix angular velocity & velocity coordinate conversion
VR: keep track of input deltas manually
Move ControlModeSettings into Sandbox.Engine (from tools addon)
Launcher displays VR button for projects with VR support
Add quick editor option to enable/disable VR without restarting the editor
Squashed commit of initial standalone exe and wizard
Squashed commit of full exe implementation
Wizard cleanup, shares wizard code between publish/standalone
Rebase fixes
VR: Hide menu when in-game
VR: Keep track of whether we want new poses or not
VR: don't use explicit timing, causes issues w/ sync and latency
Fix assembly loading, mount assemblies in their own filesystem on packages
Initial standalone build wizard
Standalone player exe
Export into `data\`, copy everything we want
Application.IsStandalone, don't try to load menu project if standalone
Load from manifest, un-hardcode paths
Fix paths, temporarily copy sbproj
We should be able to get away with not copying these manually, asset system should handle dependencies
Clean up, slightly improved wizard
Don't hard-code these paths, do all setup inside StandaloneAppSystem
Standalone wizard shows basic ETA
Mount everything we need, gets us as far as at least loading scenes (even if they're missing all content)
Load assembly, filesystem
Copy base UI textures and fonts
Move standalone-specific stuff into StandaloneGameInstance
Use code resources from code manifests
Only copy compiled code resources, don't copy tool DLLs
Standalone games that don't use citizen won't copy or mount content (saves 1GB, builds faster)
Clean up, try to get as much of this standalone stuff as contained as possible
Copy all core models too (mainly for box, sphere models)
Wizard UX improvements
Fix paths for new folder layout
Change "build" naming to "export", makes more sense
Wizard cleanup, share wizard code between publish/standalone
Rebase fixes
Don't update scene view camera input if the editor window isn't active (sbox-issues/issues/5383)
Haptics NRE fix
Clamp haptic motor values where appropriate, matching existing behaviour
Basic controller haptics (#1498)
Allows for controller haptics based on haptic events.
```cs
public static void TriggerHaptics( HapticEffect pattern, float lengthScale = 1.0f, float frequencyScale = 1.0f, float amplitudeScale = 1.0f )
```
e.g.
```cs
Input.TriggerHaptics( HapticEffect.HardImpact );
```
Haptic effect support for VR
Squash history, update for SDL
Docs, cleanup
Apply LengthScale
Update haptics per-controller
Scoped haptics support
Vibrations -> Haptics, wrap patterns inside an event to simplify API
e.g.
```cs
Input.TriggerHaptics( HapticEffect.HardImpact );
```
Docs update
Change "build" naming to "export", makes more sense
Wizard cleanup
Share wizard code between publish/standalone
Initial standalone build wizard
Standalone player exe
Export into `data\`
Copy all the stuff we want from core, base, citizen, bin
Application.IsStandalone, don't try to load menu project if standalone
Load from manifest, un-hardcode paths
Fix paths, temporarily copy sbproj
We should be able to get away with not copying these manually, asset system should handle it
We need a few files from core, though
Clean up, slightly improved wizard
Don't hard-code these paths, do all setup inside StandaloneAppSystem
Standalone wizard shows basic ETA
Better ETA
Mount everything we need, gets us as far as at least loading scenes (even if they're missing all content)
Include gamecontrollerdb.txt in standalone build
Build queue before copying (so we get compiled assemblies)
Temp copy video.json (because I'm sick of it launching in fullscreen)
Split out data dir and game data dir
Don't need to save off absolute game data path, just use relative path
Temp copy some more stuff
data/ conflicts with existing path, use export/ instead
Load assembly, filesystem
Copy base UI textures and fonts
Cleanup
Move standalone-specific stuff into StandaloneGameInstance
Test fetching all code manifests
Interop as array
Safe copy
Log copies
Use code resources where we can
Only copy compiled code resources
Don't copy tool dlls
Cleanup
Standalone games that don't use citizen won't copy or mount content (saves 1GB, builds faster)
Clean up, try to get as much of this standalone stuff as contained as possible
Copy all core models too (mainly for box, sphere models)
Wizard UX improvements
Paths cleanup
Rebase fixes
Fix paths for new folder layout