1
0
Fork 0
mirror of https://github.com/bjornbytes/lovr.git synced 2024-07-22 21:53:35 +00:00

lovr.headset.getHandles;

This commit is contained in:
bjorn 2024-07-04 16:17:45 -07:00
parent 72539a6d53
commit 41da42b153
4 changed files with 24 additions and 0 deletions

View file

@ -61,6 +61,7 @@ dev
- Add support for creating a `MeshShape` from a `ModelData`.
- Add `Texture:getLabel` and `Shader:getLabel`.
- Add `Shader:hasVariable`.
- Add `lovr.headset.getHandles`.
### Change

View file

@ -702,6 +702,16 @@ static int l_lovrHeadsetGetHands(lua_State* L) {
return 1;
}
static int l_lovrHeadsetGetHandles(lua_State* L) {
if (lovrHeadsetInterface->driverType == DRIVER_OPENXR) {
lua_pushlightuserdata(L, (void*) lovrHeadsetInterface->getOpenXRInstanceHandle());
lua_pushlightuserdata(L, (void*) lovrHeadsetInterface->getOpenXRSessionHandle());
return 2;
} else {
return 0;
}
}
static const luaL_Reg lovrHeadset[] = {
{ "start", l_lovrHeadsetStart },
{ "getDriver", l_lovrHeadsetGetDriver },
@ -754,6 +764,7 @@ static const luaL_Reg lovrHeadset[] = {
{ "getTime", l_lovrHeadsetGetTime },
{ "getDeltaTime", l_lovrHeadsetGetDeltaTime },
{ "getHands", l_lovrHeadsetGetHands },
{ "getHandles", l_lovrHeadsetGetHandles },
{ NULL, NULL }
};

View file

@ -148,6 +148,8 @@ typedef struct HeadsetInterface {
void (*getVulkanPhysicalDevice)(void* instance, uintptr_t physicalDevice);
uint32_t (*createVulkanInstance)(void* instanceCreateInfo, void* allocator, uintptr_t instance, void* getInstanceProcAddr);
uint32_t (*createVulkanDevice)(void* instance, void* deviceCreateInfo, void* allocator, uintptr_t device, void* getInstanceProcAddr);
uintptr_t (*getOpenXRInstanceHandle)(void);
uintptr_t (*getOpenXRSessionHandle)(void);
bool (*init)(HeadsetConfig* config);
void (*start)(void);
void (*stop)(void);

View file

@ -541,6 +541,14 @@ static uint32_t openxr_createVulkanDevice(void* instance, void* deviceCreateInfo
return result;
}
static uintptr_t openxr_getOpenXRInstanceHandle(void) {
return (uintptr_t) state.instance;
}
static uintptr_t openxr_getOpenXRSessionHandle(void) {
return (uintptr_t) state.session;
}
static void openxr_destroy();
static void openxr_setClipDistance(float clipNear, float clipFar);
@ -2859,6 +2867,8 @@ HeadsetInterface lovrHeadsetOpenXRDriver = {
.getVulkanPhysicalDevice = openxr_getVulkanPhysicalDevice,
.createVulkanInstance = openxr_createVulkanInstance,
.createVulkanDevice = openxr_createVulkanDevice,
.getOpenXRInstanceHandle = openxr_getOpenXRInstanceHandle,
.getOpenXRSessionHandle = openxr_getOpenXRSessionHandle,
.init = openxr_init,
.start = openxr_start,
.stop = openxr_stop,