mirror of https://github.com/bjornbytes/lovr.git
lovr.headset.getDisplayMask;
This commit is contained in:
parent
79a19ef267
commit
d87fc56b63
|
@ -181,6 +181,30 @@ static int l_lovrHeadsetGetDisplayDimensions(lua_State* L) {
|
|||
return 2;
|
||||
}
|
||||
|
||||
static int l_lovrHeadsetGetDisplayMask(lua_State* L) {
|
||||
uint32_t count;
|
||||
const float* points = lovrHeadsetDriver->getDisplayMask(&count);
|
||||
|
||||
if (!points) {
|
||||
lua_pushnil(L);
|
||||
return 1;
|
||||
}
|
||||
|
||||
lua_createtable(L, count, 0);
|
||||
for (uint32_t i = 0; i < count; i += 2) {
|
||||
lua_createtable(L, 2, 0);
|
||||
|
||||
lua_pushnumber(L, points[i + 0]);
|
||||
lua_rawseti(L, -2, 1);
|
||||
lua_pushnumber(L, points[i + 1]);
|
||||
lua_rawseti(L, -2, 2);
|
||||
|
||||
lua_rawseti(L, -2, i / 2 + 1);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_lovrHeadsetGetClipDistance(lua_State* L) {
|
||||
float clipNear, clipFar;
|
||||
lovrHeadsetDriver->getClipDistance(&clipNear, &clipFar);
|
||||
|
@ -579,6 +603,7 @@ static const luaL_Reg lovrHeadset[] = {
|
|||
{ "getDisplayWidth", l_lovrHeadsetGetDisplayWidth },
|
||||
{ "getDisplayHeight", l_lovrHeadsetGetDisplayHeight },
|
||||
{ "getDisplayDimensions", l_lovrHeadsetGetDisplayDimensions },
|
||||
{ "getDisplayMask", l_lovrHeadsetGetDisplayMask },
|
||||
{ "getClipDistance", l_lovrHeadsetGetClipDistance },
|
||||
{ "setClipDistance", l_lovrHeadsetSetClipDistance },
|
||||
{ "getBoundsWidth", l_lovrHeadsetGetBoundsWidth },
|
||||
|
|
|
@ -53,6 +53,10 @@ static void desktop_getDisplayDimensions(uint32_t* width, uint32_t* height) {
|
|||
*height = (uint32_t) h;
|
||||
}
|
||||
|
||||
static const float* desktop_getDisplayMask(uint32_t* count) {
|
||||
return *count = 0, NULL;
|
||||
}
|
||||
|
||||
static void desktop_getClipDistance(float* clipNear, float* clipFar) {
|
||||
*clipNear = state.clipNear;
|
||||
*clipFar = state.clipFar;
|
||||
|
@ -209,6 +213,7 @@ HeadsetInterface lovrHeadsetDesktopDriver = {
|
|||
.getName = desktop_getName,
|
||||
.getOriginType = desktop_getOriginType,
|
||||
.getDisplayDimensions = desktop_getDisplayDimensions,
|
||||
.getDisplayMask = desktop_getDisplayMask,
|
||||
.getClipDistance = desktop_getClipDistance,
|
||||
.setClipDistance = desktop_setClipDistance,
|
||||
.getBoundsDimensions = desktop_getBoundsDimensions,
|
||||
|
|
|
@ -92,6 +92,7 @@ typedef struct HeadsetInterface {
|
|||
bool (*getName)(char* name, size_t length);
|
||||
HeadsetOrigin (*getOriginType)(void);
|
||||
void (*getDisplayDimensions)(uint32_t* width, uint32_t* height);
|
||||
const float* (*getDisplayMask)(uint32_t* count);
|
||||
double (*getDisplayTime)(void);
|
||||
void (*getClipDistance)(float* clipNear, float* clipFar);
|
||||
void (*setClipDistance)(float clipNear, float clipFar);
|
||||
|
|
|
@ -137,6 +137,10 @@ static void oculus_getDisplayDimensions(uint32_t* width, uint32_t* height) {
|
|||
*height = size.h;
|
||||
}
|
||||
|
||||
static const float* oculus_getDisplayMask(uint32_t* count) {
|
||||
return *count = 0, NULL;
|
||||
}
|
||||
|
||||
static double oculus_getDisplayTime(void) {
|
||||
return ovr_GetPredictedDisplayTime(state.session, 0);
|
||||
}
|
||||
|
@ -409,6 +413,7 @@ HeadsetInterface lovrHeadsetOculusDriver = {
|
|||
.getName = oculus_getName,
|
||||
.getOriginType = oculus_getOriginType,
|
||||
.getDisplayDimensions = oculus_getDisplayDimensions,
|
||||
.getDisplayMask = oculus_getDisplayMask,
|
||||
.getDisplayTime = oculus_getDisplayTime,
|
||||
.getClipDistance = oculus_getClipDistance,
|
||||
.setClipDistance = oculus_setClipDistance,
|
||||
|
|
|
@ -58,6 +58,10 @@ static void vrapi_getDisplayDimensions(uint32_t* width, uint32_t* height) {
|
|||
*height = bridgeLovrMobileData.displayDimensions.height;
|
||||
}
|
||||
|
||||
static const float* vrapi_getDisplayMask(uint32_t* count) {
|
||||
return *count = 0, NULL;
|
||||
}
|
||||
|
||||
static void vrapi_getClipDistance(float* clipNear, float* clipFar) {
|
||||
// TODO
|
||||
}
|
||||
|
@ -255,6 +259,7 @@ HeadsetInterface lovrHeadsetOculusMobileDriver = {
|
|||
.getName = vrapi_getName,
|
||||
.getOriginType = vrapi_getOriginType,
|
||||
.getDisplayDimensions = vrapi_getDisplayDimensions,
|
||||
.getDisplayMask = vrapi_getDisplayMask,
|
||||
.getClipDistance = vrapi_getClipDistance,
|
||||
.setClipDistance = vrapi_setClipDistance,
|
||||
.getBoundsDimensions = vrapi_getBoundsDimensions,
|
||||
|
|
|
@ -86,6 +86,7 @@ static struct {
|
|||
RenderModel_t* deviceModels[16];
|
||||
RenderModel_TextureMap_t* deviceTextures[16];
|
||||
Canvas* canvas;
|
||||
float* mask;
|
||||
float boundsGeometry[16];
|
||||
float clipNear;
|
||||
float clipFar;
|
||||
|
@ -221,6 +222,7 @@ static void openvr_destroy(void) {
|
|||
state.deviceTextures[i] = NULL;
|
||||
}
|
||||
VR_ShutdownInternal();
|
||||
free(state.mask);
|
||||
memset(&state, 0, sizeof(state));
|
||||
}
|
||||
|
||||
|
@ -242,6 +244,24 @@ static void openvr_getDisplayDimensions(uint32_t* width, uint32_t* height) {
|
|||
state.system->GetRecommendedRenderTargetSize(width, height);
|
||||
}
|
||||
|
||||
static const float* openvr_getDisplayMask(uint32_t* count) {
|
||||
struct HiddenAreaMesh_t hiddenAreaMesh = state.system->GetHiddenAreaMesh(EVREye_Eye_Left, EHiddenAreaMeshType_k_eHiddenAreaMesh_Standard);
|
||||
|
||||
if (hiddenAreaMesh.unTriangleCount == 0) {
|
||||
return *count = 0, NULL;
|
||||
}
|
||||
|
||||
state.mask = realloc(state.mask, hiddenAreaMesh.unTriangleCount * 3 * 2 * sizeof(float));
|
||||
lovrAssert(state.mask, "Out of memory");
|
||||
|
||||
for (uint32_t i = 0; i < 3 * hiddenAreaMesh.unTriangleCount; i++) {
|
||||
state.mask[2 * i + 0] = hiddenAreaMesh.pVertexData[i].v[0];
|
||||
state.mask[2 * i + 1] = hiddenAreaMesh.pVertexData[i].v[1];
|
||||
}
|
||||
|
||||
return *count = hiddenAreaMesh.unTriangleCount * 3 * 2, state.mask;
|
||||
}
|
||||
|
||||
static double openvr_getDisplayTime(void) {
|
||||
float secondsSinceVsync;
|
||||
state.system->GetTimeSinceLastVsync(&secondsSinceVsync, NULL);
|
||||
|
@ -592,6 +612,7 @@ HeadsetInterface lovrHeadsetOpenVRDriver = {
|
|||
.getName = openvr_getName,
|
||||
.getOriginType = openvr_getOriginType,
|
||||
.getDisplayDimensions = openvr_getDisplayDimensions,
|
||||
.getDisplayMask = openvr_getDisplayMask,
|
||||
.getDisplayTime = openvr_getDisplayTime,
|
||||
.getClipDistance = openvr_getClipDistance,
|
||||
.setClipDistance = openvr_setClipDistance,
|
||||
|
|
|
@ -389,6 +389,10 @@ static void openxr_getDisplayDimensions(uint32_t* width, uint32_t* height) {
|
|||
*height = state.height;
|
||||
}
|
||||
|
||||
static const float* openxr_getDisplayMask(uint32_t* count) {
|
||||
return *count = 0, NULL;
|
||||
}
|
||||
|
||||
static double openxr_getDisplayTime(void) {
|
||||
return state.displayTime / 1e9;
|
||||
}
|
||||
|
@ -664,6 +668,7 @@ HeadsetInterface lovrHeadsetOpenXRDriver = {
|
|||
.getName = openxr_getName,
|
||||
.getOriginType = openxr_getOriginType,
|
||||
.getDisplayDimensions = openxr_getDisplayDimensions,
|
||||
.getDisplayMask = openxr_getDisplayMask,
|
||||
.getDisplayTime = openxr_getDisplayTime,
|
||||
.getClipDistance = openxr_getClipDistance,
|
||||
.setClipDistance = openxr_setClipDistance,
|
||||
|
|
|
@ -8,6 +8,7 @@ extern void webvr_destroy(void);
|
|||
extern bool webvr_getName(char* name, size_t length);
|
||||
extern HeadsetOrigin webvr_getOriginType(void);
|
||||
extern void webvr_getDisplayDimensions(uint32_t* width, uint32_t* height);
|
||||
extern const float* webvr_getDisplayMask(uint32_t* count);
|
||||
extern void webvr_getClipDistance(float* near, float* far);
|
||||
extern void webvr_setClipDistance(float near, float far);
|
||||
extern void webvr_getBoundsDimensions(float* width, float* depth);
|
||||
|
@ -51,6 +52,7 @@ HeadsetInterface lovrHeadsetWebVRDriver = {
|
|||
.getName = webvr_getName,
|
||||
.getOriginType = webvr_getOriginType,
|
||||
.getDisplayDimensions = webvr_getDisplayDimensions,
|
||||
.getDisplayMask = webvr_getDisplayMask,
|
||||
.getClipDistance = webvr_getClipDistance,
|
||||
.setClipDistance = webvr_setClipDistance,
|
||||
.getBoundsDimensions = webvr_getBoundsDimensions,
|
||||
|
|
|
@ -128,6 +128,11 @@ var LibraryLOVR = {
|
|||
HEAPU32[height >> 2] = webvr.height;
|
||||
},
|
||||
|
||||
webvr_getDisplayMask: function(count) {
|
||||
HEAPU32[count >> 2] = 0;
|
||||
return 0;
|
||||
},
|
||||
|
||||
webvr_getClipDistance: function(clipNear, clipFar) {
|
||||
HEAPF32[clipNear >> 2] = webvr.display.depthNear;
|
||||
HEAPF32[clipFar >> 2] = webvr.display.depthFar;
|
||||
|
|
Loading…
Reference in New Issue