Commit Graph

99 Commits

Author SHA1 Message Date
bjorn 4ee092e81b Make Pass a regular object;
It uses newPass instead of getPass.  Temporary objects had lifetime
issues that were nearly impossible to solve.  And normal objects are
easier to understand because they behave like all other LÖVR objects.

However, Pass commands are not retained from frame to frame.  Pass
objects must be re-recorded before every submit, and must be reset
before being recorded again.

Pass objects now provide a natural place for render-pass-related info
like clears and texture handles.  They also allow more information to be
precomputed which should reduce overhead a bit.

It is now possible to request a stencil buffer and antialiasing on the
window and headset textures, via conf.lua.

lovr.graphics.setBackground should instead set the clear color on the
window pass.  Though we're still going to try to do spherical harmonics
in some capacity.

There are still major issues with OpenXR that are going to be ironed
out, and the desktop driver hasn't been converted over to the new
headset Pass system yet.  So lovr.headset integration is a bit WIP.
2022-08-02 22:06:44 -07:00
bjorn 289f08b0df Fix OpenXR texture layer count; 2022-08-01 22:43:44 -07:00
bjorn 83fa750a4d Support and default to reverse-z with infinite far plane; 2022-07-17 12:37:59 -07:00
bjorn 1946fbb540 Reduce default near plane;
I feel like we've (un)done this before...
2022-07-17 11:05:24 -07:00
bjorn d088c5471d Model;
Does not include some of the fancier accessors yet.
2022-07-03 17:26:31 -07:00
bjorn 7def390f9c OpenXR/CMake fixes; 2022-06-20 15:51:24 -07:00
bjorn c1bb47d737 Merge branch 'master' into dev 2022-06-16 23:50:11 -07:00
bjorn d5325b87b4 Headset support; 2022-06-05 20:38:14 -07:00
Samuel Gosselin 255f4e4a34 fixup: keep coding style consistent. 2022-05-06 10:55:29 -07:00
Samuel Gosselin 02c67d090d fixup: gracefully handle XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB and return |false| instead. 2022-05-06 10:55:29 -07:00
Samuel Gosselin 425a2ca343 Add support for setting the display refresh-rate.
OpenXR provides APIs to enumerate the supported refresh-rates, and
selecting a new refresh-rate. This patch adds two new APIs to the
lovr.headset module:

  - lovr.headset.getDisplayFrequencies():
	Returns a table containing the supported refresh-rates on
	success; nil otherwise.
  - lovr.headset.setDisplayFrequency(refreshRate:number):
	Returns true on success, false otherwise.

Only the OpenXR backend has support for this feature and it is
gated by the "refreshRate" feature flag, similarly to what the
"getDisplayFrequency()" API does.
2022-05-06 10:55:29 -07:00
Ryan Pavlik 307d33b327 Allow XR_KHR_android_create_instance to be optional.
It's essentially replaced by KHR_loader_init_android,
and will eventually not be provided by new/updated runtimes
2022-05-06 09:28:15 -07:00
jascase901 51d96f6fa2 include required for linux support. 2022-04-24 13:07:59 -07:00
jascase901 aeb269b24a use static assert macro instead of keyword
This change fixes a linker error I noticed when compiling on my windows
sytstem. see #551

According to this link the macro is prefered to the keyword.
https://docs.microsoft.com/en-us/cpp/c-language/static-assert-c?view=msvc-170#:~:text=The%20_Static_assert%20keyword%2C%20and%20the%20static_assert%20macro%2C%20both,runtime%20and%20incur%20a%20runtime%20cost.%20Microsoft-specific%20behavior
2022-04-24 13:07:59 -07:00
bjorn 37221afbc6 rm graphics module; 2022-04-21 17:39:58 -07:00
bjorn b32244b787 OpenXR: Make update idempotent;
The state tracking here is getting pretty complicated... oh well!
2022-03-30 13:33:02 -07:00
bjorn 0238549e66 OpenXR: sync all subaction paths; 2022-03-30 13:33:02 -07:00
bjorn 2ec5a1a9dd OpenXR: Valve Index grip improvements; 2022-03-30 11:13:55 -07:00
bjorn 3972a8df20 Reset OpenXR event type after polling;
Otherwise the struct will have the wrong type when polling the next
event.  Kind of annoying.
2022-03-29 08:56:26 -07:00
bjorn 243e686ea4 rm lovr.headset.getDisplayMask; 2022-03-22 19:45:44 -07:00
bjorn 1eed2bc83c lovr.headset.isFocused; 2022-03-22 19:43:00 -07:00
bjorn 1f3c5dea79 dt uses headset time instead of system time; 2022-03-22 17:52:16 -07:00
bjorn 2da18d419b mv util src; 2022-03-22 00:13:38 -07:00
bjorn 721d4e180d Clean up OpenXR extensions;
One per line, with scannable name strings.
2022-03-21 17:01:03 -07:00
bjorn 428b569bfc OpenXR uses COUNTOF; 2022-03-21 17:00:56 -07:00
bjorn 339f75f579 Sketch support for XR_FB_hand_tracking_aim;
This adds support for /point devices and the trigger axis (mapped to
pinch) with hand tracking.
2022-03-21 15:45:48 -07:00
bjorn 0c17046847 Add eye/gaze device;
This provides an accurate pose for what the user is looking at, instead
of the poses of the individual eyes.  Supported on some OpenXR
implementations.
2022-03-21 15:05:23 -07:00
bjorn 9214ac8b29 rm unnecessary include; 2022-03-21 12:33:46 -07:00
bjorn ad4072d109 OpenXR: Bail if extensions can't be queried; 2022-03-21 12:27:32 -07:00
bjorn 0b2c2525ba rm openxr_oculus.h;
It is now an empty file in the Oculus OpenXR SDK, because the
corresponding extensions have been integrated into the main OpenXR SDK.
2022-03-21 01:00:28 -07:00
bjorn bebeff4fc2 OpenXR: Support getDisplayFrequency;
Quest only.  We don't support setting/querying/events yet, since it
isn't clear that this will be standardized behavior.
2022-03-21 00:51:24 -07:00
bjorn e4eb4e0df1 OpenXR: Support vive trackers; 2022-03-20 18:04:06 -07:00
bjorn ef9754c114 OpenXR: Rework actions;
Inline in the driver, less hand-centric.
2022-03-20 15:39:02 -07:00
bjorn 29cbe63b1d OpenXR: Add support for XR_FB_hand_tracking_mesh;
This adds the ability to load and animate a mesh for hand tracking on
the Oculus Quest.  It is more or less identical to the current
functionality on the vrapi driver.

One key part of this change is that getPose in OpenXR will see if action
spaces are active before locating their spaces.  This is due to some
behavior observed on the Oculus Quest with hand tracking  where pose
actions for controllers would return invalid data with all of the
location flags erroneously set.  The only way to detect and work around
this is to check the pose action state.  When this happens, we fall back
to returning the pose of the wrist joint, which is where the Oculus hand
mesh wants to be drawn.  In the event that both controllers and hand
tracking are active, the controller pose will be returned by getPose but
the wrist joint can still be accessed using getSkeleton.

Note that this does not yet include support for properly scaling the
hand mesh.

There are numerous opportunities for optimization here that may be
investigated in the future, though performance is well within an
acceptable range right now.
2022-03-19 17:49:13 -07:00
bjorn 36c7b93fed Details; 2022-03-17 19:30:53 -07:00
bjorn 99e2809db5 OpenXR: formatting; Use infinite swapchain wait timeout; 2022-03-17 19:30:21 -07:00
bjorn ad4ce298f1 s/os_get_context/os_get_win32_context; 2022-03-17 19:14:34 -07:00
bjorn c35c2bb7eb OpenXR doesn't crash if lovr.draw errors;
renderTo is idempotent in openxr driver now.
2022-03-17 19:11:07 -07:00
bjorn 99a42c5c71 OpenXR: Support /point devices; 2022-03-17 17:58:30 -07:00
bjorn 4417481a92 OpenXR: Support ABXY buttons; 2022-03-17 16:33:37 -07:00
bjorn 450ee72c89 OpenXR: Windows graphics plugin properly uses HDC instead of HWND;
The HWND was getting passed in directly instead of first converting
it to an HDC.  This was causing SteamVR to fail to create its OpenGL
context.
2022-03-15 15:21:31 -07:00
bjorn 17c05b1760 Merge branch 'master' into dev 2022-03-14 14:10:25 -07:00
bjorn a11121d739 OpenXR: fix thumbrest action; 2022-03-14 14:10:12 -07:00
bjorn fdfcb5539f Merge branch 'master' into dev 2022-03-14 13:19:59 -07:00
bjorn 54154a643a Thumbrest support; 2022-03-06 17:43:04 -08:00
bjorn 3ff64fa3ef OpenXR: Fix instance extension enumeration; 2022-01-29 15:31:44 -08:00
bjorn 8d3d233e91 Include unknwn.h to fix OpenXR on some windows systems; 2021-12-27 15:16:50 +02:00
bjorn 20e4567bd6 Merge branch 'master' into dev 2021-12-20 17:12:39 +02:00
bjorn e1527a949a openxr: fix xrLocateViews call;
- The input parameter is a count, not a size
- The view structs must be initialized with a type
2021-10-24 13:03:05 -07:00
bjorn 0582746137 Fix OpenXR compilation; 2021-06-12 14:42:30 -06:00