Commit Graph

4031 Commits

Author SHA1 Message Date
bjorn c097a266b4 Add Oculus OpenXR loader submodule; 2022-03-21 03:10:13 -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 dc11e048a2 LOVR_RESTRICT -> restrict; 2022-03-21 00:22:25 -07:00
bjorn 0a2c60e5dd LOVR_NORETURN -> _Noreturn; 2022-03-21 00:22:25 -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 fc47bde23b Compile as C11 instead of C99; 2022-03-20 01:44:18 -07:00
bjorn b132eaf889 Patch tinycthread to work with Visual Studio C11; 2022-03-20 01:42:31 -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 8955c6fc02 Remove assert for missing glyphs;
The notdef glyph will get rendered instead, which is slightly better.

Note that the default font does not have a notdef glyph (bug).

Note that notdef will be rasterized multiple times right now.
2022-03-19 13:26:28 -07:00
bjorn 5113290e1b OpenXR: Add bindings for Windows Mixed Reality controllers; 2022-03-18 15:23:21 -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 aa3b04e514 tup: fix OpenXR on Android; 2022-03-16 15:43:07 -07:00
bjorn 1ca3d1c8e1 Fix unintended int truncation in Font:getLineHeight; 2022-03-16 12:23:59 -07:00
bjorn 99a4c38712 Standard shader uses material alpha; 2022-03-16 12:17:37 -07:00
bjorn bbd502153a Formatting; 2022-03-15 16:33:53 -07:00
bjorn a4faad39f8 Font:getFilter; Font:setFilter; 2022-03-15 16:02:35 -07:00
Patrik Sjöberg 766b44f77a MeshShapes gets hits on all passed surfaces. Callback for each of them.
Fixes crash due to MAX_CONTACTS being sent to dCollide as the number of 
dContacts available.
2022-03-15 15:34:16 -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 47a4becc48 Upgrade OpenXR loader; 2022-03-15 15:20:46 -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 c9fe026a66 Fix undefined behavior in arr_free;
Currently there is a single allocator function used in arr_t.  Its
behavior depends on the values for the pointer and size arguments:

- If pointer is NULL, it should allocate new memory.
- If pointer is non-NULL and size is positive, it should resize memory.
- If size is zero, it should free memory.

All instances of arr_t use realloc for this right now.  The problem
is that realloc's behavior is undefined when the size argument is zero.
On Windows and Linux, realloc will free the pointer, but on macOS this
isn't the case.  This means that arr_t leaks memory on macOS.

It's best to not rely on undefined behavior like this, so let's instead
use a helper function that behaves the way we want.
2022-03-14 12:27:58 -07:00
bjorn 757987ef04 tup: fix glfw on macos; add avfoundation framework; 2022-03-11 16:44:39 -07:00
bjorn 90acaf0c48 tup: os_macos compiles as objective C; 2022-03-11 13:58:13 -07:00
Patrik Sjöberg 2c55d05be6 Fix a discrepancy between lovrRasterizerMeasure and lovrFontRender wrapping 2022-03-11 12:27:00 -08:00
bjorn 1e91eea9b0 Fix Mat4:__mul(Vec3);
The matrix was transforming the input vector, not the new vector.
2022-03-10 07:41:44 -08:00
bjorn 54154a643a Thumbrest support; 2022-03-06 17:43:04 -08:00
Josip Miskovic 2e5c529faf Return nil if device doesn't have that button
Functions `lh.isDown()` and `isTouched()` should return nil if device
doesn't have the queried button.
2022-03-06 17:41:33 -08:00
Josip Miskovic 2e82dfce92 For Quest, discern left/right XY/AB buttons
The VrApi implementation now checks that X, Y, A, B buttons exist on that
specific controller. X,Y are on left; A,B on the right controller. That
mapping covers Quest Touch and Quest 2 controllers.
2022-03-06 17:41:33 -08:00
murat g ee3ba6ef3e Font filtering now respects the default setting. 2022-03-03 22:41:47 -08:00
Luna ea1bc6c5c4 Use Texture's format when creating an Image from Canvas 2022-03-03 18:25:22 -08:00
Josip Miskovic ef41e06fc9 Add Vec2/3/4:angle(other)
Functions to calculate the angle between two vectors. Angle is always
positive. Implementations give the same result as this Lua code:

```lua
local function lua_angle(v1, v2)
  return math.acos(v1:dot(v2) / (v1:length() * v2:length()))
end
```

If either vector is zero-length, the pi/2 value is returned.
2022-03-03 14:12:56 -08:00
bjorn b22dbd8f0c Add luax_checku32 and luax_optu32;
These functions read an unsigned 32 bit integer from the Lua stack
and error if the value is negative or too big.  Currently converting
Lua numbers to integers will silently wrap or invoke undefined behavior
when they are outside of the acceptable range.

For projects that don't want the overhead of type/bounds checks, the
supercharge build option (LOVR_UNCHECKED) can now be used to skip all
type/bounds checks.
2022-02-21 14:19:24 -08:00
Josip Miskovic 517b104c1e Fix NaN handling when calculating angle for mat4
The arccos was incorrectly calculated when cosangle was larger than 1.0
2022-02-21 14:18:49 -08:00
bjorn a6a86fd908 lovr.filesystem.getDirectoryItems works if table.sort is unavailable;
It just doesn't sort the output.
2022-02-21 14:04:58 -08:00
bjorn 88f367c0e5 Declare data module constructors consistently; 2022-02-21 14:01:47 -08:00
bjorn a6747f97ea Sound:getByteStride; 2022-02-21 14:00:36 -08:00
bjorn bfb73f0c19 Improve Sound:getFrames Blob error message;
Probably need a generic "out of range" template, but this makes things
better for now.
2022-02-21 13:58:46 -08:00
Josip Miskovic 110333fce7 Fix gamma/linear conversion of a RGB table
Correcting the order of stack operations to fetch RGB components from
the table and to put in conversion the results.

Before the fix these two calls produced different results:
`lovr.math.gammaToLinear(  0.1, 0.2, 0.3  )`
`lovr.math.gammaToLinear( {0.1, 0.2, 0.3} )`
2022-02-19 22:21:35 -08:00
bjorn 9428b36986 Fix OpenVR driver; 2022-02-11 18:37:21 -08:00
bjorn 3f87393e04 Silence ode warning; 2022-02-02 14:37:11 -08:00
bjorn 6f3e46d8cf Fix some pointer formatting; 2022-02-02 12:01:38 -08:00