lovr.headset.getDisplayFrequency;

This commit is contained in:
bjorn 2020-01-24 23:06:30 -08:00
parent 4f7bb9e53e
commit 7ca23bc58a
3 changed files with 18 additions and 1 deletions

View File

@ -147,6 +147,16 @@ static int l_lovrHeadsetGetDisplayDimensions(lua_State* L) {
return 2;
}
static int l_lovrHeadsetGetDisplayFrequency(lua_State* L) {
float frequency = lovrHeadsetDriver->getDisplayFrequency ? lovrHeadsetDriver->getDisplayFrequency() : 0.f;
if (frequency == 0.f) {
lua_pushnil(L);
} else {
lua_pushnumber(L, frequency);
}
return 1;
}
static int l_lovrHeadsetGetDisplayMask(lua_State* L) {
uint32_t count;
const float* points = lovrHeadsetDriver->getDisplayMask(&count);
@ -537,6 +547,7 @@ static const luaL_Reg lovrHeadset[] = {
{ "getDisplayWidth", l_lovrHeadsetGetDisplayWidth },
{ "getDisplayHeight", l_lovrHeadsetGetDisplayHeight },
{ "getDisplayDimensions", l_lovrHeadsetGetDisplayDimensions },
{ "getDisplayFrequency", l_lovrHeadsetGetDisplayFrequency },
{ "getDisplayMask", l_lovrHeadsetGetDisplayMask },
{ "getClipDistance", l_lovrHeadsetGetClipDistance },
{ "setClipDistance", l_lovrHeadsetSetClipDistance },

View File

@ -59,6 +59,7 @@ typedef struct HeadsetInterface {
bool (*getName)(char* name, size_t length);
HeadsetOrigin (*getOriginType)(void);
void (*getDisplayDimensions)(uint32_t* width, uint32_t* height);
float (*getDisplayFrequency)(void);
const float* (*getDisplayMask)(uint32_t* count);
double (*getDisplayTime)(void);
void (*getClipDistance)(float* clipNear, float* clipFar);

View File

@ -207,6 +207,10 @@ static void openvr_getDisplayDimensions(uint32_t* width, uint32_t* height) {
state.system->GetRecommendedRenderTargetSize(width, height);
}
static float openvr_getDisplayFrequency() {
return state.system->GetFloatTrackedDeviceProperty(HEADSET, ETrackedDeviceProperty_Prop_DisplayFrequency_Float, NULL);
}
static const float* openvr_getDisplayMask(uint32_t* count) {
struct HiddenAreaMesh_t hiddenAreaMesh = state.system->GetHiddenAreaMesh(EVREye_Eye_Left, EHiddenAreaMeshType_k_eHiddenAreaMesh_Standard);
@ -231,7 +235,7 @@ static double openvr_getDisplayTime(void) {
float secondsSinceVsync;
state.system->GetTimeSinceLastVsync(&secondsSinceVsync, NULL);
float frequency = state.system->GetFloatTrackedDeviceProperty(HEADSET, ETrackedDeviceProperty_Prop_DisplayFrequency_Float, NULL);
float frequency = openvr_getDisplayFrequency();
float frameDuration = 1.f / frequency;
float vsyncToPhotons = state.system->GetFloatTrackedDeviceProperty(HEADSET, ETrackedDeviceProperty_Prop_SecondsFromVsyncToPhotons_Float, NULL);
@ -533,6 +537,7 @@ HeadsetInterface lovrHeadsetOpenVRDriver = {
.getName = openvr_getName,
.getOriginType = openvr_getOriginType,
.getDisplayDimensions = openvr_getDisplayDimensions,
.getDisplayFrequency = openvr_getDisplayFrequency,
.getDisplayMask = openvr_getDisplayMask,
.getDisplayTime = openvr_getDisplayTime,
.getClipDistance = openvr_getClipDistance,