874 Commits over 519 Days - 0.07cph!
Blur test
Chat moves into center of screen on ultrawide
More scoreboard style tweaks
Slimmer padding on scoreboard
Basic scoreboard, PlayerScore component
Make round status slimmer, hide health on enemy players
Tighten up player info UI
New round state UI, might be too bulky
Ultrawide canvas
Tweak vitals for consistency, increase effective safe area size
Resize input hints & text for consistency
Basic placeholder team icons
Main HUD has gradient
Move ammo into a component
Remove vitals background
Player role component
Centralise main HUD elements (vitals, role, ammo)
Remove chat background, contextual input prompts
Rebase fixes
Prevent reload if weapon ammo is full
New vitals UI, new UI font & theme (from ui-stash)
Make text bold again
Chat fixes + team chat
Add chat from ui stash branch - hopefully this doesn't fuck anything else up
Initial theming
Basic vitals (armor not hooked up yet)
sexy hud
Chat
Facepunch.XR works out bounds for us, gives us full render target size separately from eye render target size
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
Use Facepunch.XR provided logging levels
Pass bounds to texture submit info
Default IPD (for testing with null driver)
Facepunch.XR update
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
Fetch display info from compositor
Submit texture, render loop, etc.
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()
Initial FPXR presentation logic
Max 1 second xrWaitSwapchainImage timeout
Bundle compositor operations into Sync()
Delete all OpenVR files & references, stub out anything that required them
fpxr update
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
fpxr_platform.h no longer required
FPXR: Session now handled by Compositor, Instance is now a class
Apps need to be able to access vulkan extensions before making vulkan devices etc
Make all this easier to include in a project, don't include fpxr_platform in fpxr.h
Return compositor & event manager by value, clean up
Create vulkan transfer queue, command pool, command buffer for copying images across
Reduce stack usage
Vulkan headers
Include headers
Restructure (see desc)
fpxr::Instance now handles creating a compositor.
fpxr::Compositor handles creating an event manager.
The idea behind this is that we want to be able to use Vulkan functions
to create images, so that we can pass any valid VkImage in from an app
and then have FPXR copy it over to the VkImage that OpenXR wants to use,
meaning that you don't have to fuck around with passing images and image
views to and from OpenXR and your application.
We'll manually vkCmdCopyImage at the end of the frame before submitting
to OpenXR (i.e. when rendering a layer).
```cpp
fpxr::InstanceBuilder instance_builder{};
fpxr::Instance instance = instance_builder.SetAppName("fpxr")
.WithGraphicsAPI(fpxr::GraphicsAPI::GRAPHICS_API_HEADLESS)
.RequestValidationLayers()
.WithDebugMessenger()
.Build();
fpxr::Compositor* compositor = instance.Compositor();
fpxr::EventManager* eventManager = compositor->EventManager();
```
Bind fpxr compositor and add everything we should need to start submitting
RenderTarget -> Compositor
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