Expose runtime name in lovr.headset.getDriver;

This commit is contained in:
bjorn 2023-07-10 19:35:21 -07:00
parent dabbd449a8
commit 74325d81a1
6 changed files with 32 additions and 2 deletions

View File

@ -174,6 +174,10 @@ var webxr = {
}
},
webxr_getDriverName: function(name, size) {
return false;
}
webxr_getName: function(name, size) {
return false;
},

View File

@ -84,7 +84,13 @@ static int l_lovrHeadsetStart(lua_State* L) {
static int l_lovrHeadsetGetDriver(lua_State* L) {
luax_pushenum(L, HeadsetDriver, lovrHeadsetInterface->driverType);
return 1;
char name[256];
if (lovrHeadsetInterface->getDriverName(name, sizeof(name))) {
lua_pushstring(L, name);
} else {
lua_pushnil(L);
}
return 2;
}
static int l_lovrHeadsetGetName(lua_State* L) {

View File

@ -131,6 +131,7 @@ typedef struct HeadsetInterface {
void (*start)(void);
void (*stop)(void);
void (*destroy)(void);
bool (*getDriverName)(char* name, size_t length);
bool (*getName)(char* name, size_t length);
bool (*isSeated)(void);
void (*getDisplayDimensions)(uint32_t* width, uint32_t* height);

View File

@ -51,6 +51,7 @@ uintptr_t gpu_vk_get_queue(uint32_t* queueFamilyIndex, uint32_t* queueIndex);
#define XR_FOREACH(X)\
X(xrDestroyInstance)\
X(xrGetInstanceProperties)\
X(xrPollEvent)\
X(xrResultToString)\
X(xrGetSystem)\
@ -1391,9 +1392,17 @@ static void openxr_destroy(void) {
memset(&state, 0, sizeof(state));
}
static bool openxr_getDriverName(char* name, size_t length) {
XrInstanceProperties properties = { .type = XR_TYPE_INSTANCE_PROPERTIES };
if (XR_FAILED(xrGetInstanceProperties(state.instance, &properties))) return false;
strncpy(name, properties.runtimeName, length - 1);
name[length - 1] = '\0';
return true;
}
static bool openxr_getName(char* name, size_t length) {
XrSystemProperties properties = { .type = XR_TYPE_SYSTEM_PROPERTIES };
XR(xrGetSystemProperties(state.instance, state.system, &properties), "Failed to query system properties");
if (XR_FAILED(xrGetSystemProperties(state.instance, state.system, &properties))) return false;
strncpy(name, properties.systemName, length - 1);
name[length - 1] = '\0';
return true;
@ -2589,6 +2598,7 @@ HeadsetInterface lovrHeadsetOpenXRDriver = {
.start = openxr_start,
.stop = openxr_stop,
.destroy = openxr_destroy,
.getDriverName = openxr_getDriverName,
.getName = openxr_getName,
.isSeated = openxr_isSeated,
.getDisplayDimensions = openxr_getDisplayDimensions,

View File

@ -97,6 +97,12 @@ static void simulator_destroy(void) {
simulator_stop();
}
static bool simulator_getDriverName(char* name, size_t length) {
strncpy(name, "LÖVR", length - 1);
name[length - 1] = '\0';
return true;
}
static bool simulator_getName(char* name, size_t length) {
strncpy(name, "Simulator", length - 1);
name[length - 1] = '\0';
@ -389,6 +395,7 @@ HeadsetInterface lovrHeadsetSimulatorDriver = {
.start = simulator_start,
.stop = simulator_stop,
.destroy = simulator_destroy,
.getDriverName = simulator_getDriverName,
.getName = simulator_getName,
.isSeated = simulator_isSeated,
.getDisplayDimensions = simulator_getDisplayDimensions,

View File

@ -3,6 +3,7 @@
extern bool webxr_init(HeadsetConfig* config);
extern void webxr_start(void);
extern void webxr_destroy(void);
extern bool webxr_getDriverName(char* name, size_t length);
extern bool webxr_getName(char* name, size_t length);
extern bool webxr_isSeated(void);
extern void webxr_getDisplayDimensions(uint32_t* width, uint32_t* height);
@ -59,6 +60,7 @@ HeadsetInterface lovrHeadsetWebXRDriver = {
.init = webxr_init,
.start = webxr_start,
.destroy = webxr_destroy,
.getDriverName = webxr_getDriverName,
.getName = webxr_getName,
.isSeated = webxr_isSeated,
.getDisplayTime = webxr_getDisplayTime,