lovr.headset.isMirrored; lovr.headset.setMirrored;

Also add conf.lua field to configure initial mirroring state.
This commit is contained in:
bjorn 2017-03-11 19:12:03 -08:00
parent 0c6da83332
commit 49a0ba4d1c
5 changed files with 33 additions and 1 deletions

View File

@ -48,6 +48,17 @@ int l_lovrHeadsetGetType(lua_State* L) {
return 1;
}
int l_lovrHeadsetIsMirrored(lua_State* L) {
lua_pushboolean(L, lovrHeadsetIsMirrored());
return 1;
}
int l_lovrHeadsetSetMirrored(lua_State* L) {
int mirror = lua_toboolean(L, 1);
lovrHeadsetSetMirrored(mirror);
return 0;
}
int l_lovrHeadsetGetDisplayWidth(lua_State* L) {
int width;
lovrHeadsetGetDisplayDimensions(&width, NULL);
@ -209,6 +220,8 @@ int l_lovrHeadsetRenderTo(lua_State* L) {
const luaL_Reg lovrHeadset[] = {
{ "isPresent", l_lovrHeadsetIsPresent },
{ "getType", l_lovrHeadsetGetType },
{ "isMirrored", l_lovrHeadsetIsMirrored },
{ "setMirrored", l_lovrHeadsetSetMirrored },
{ "getDisplayWidth", l_lovrHeadsetGetDisplayWidth },
{ "getDisplayHeight", l_lovrHeadsetGetDisplayHeight },
{ "getDisplayDimensions", l_lovrHeadsetGetDisplayDimensions },

View File

@ -36,6 +36,8 @@ void lovrHeadsetDestroy();
void lovrHeadsetPoll();
int lovrHeadsetIsPresent();
const char* lovrHeadsetGetType();
int lovrHeadsetIsMirrored();
void lovrHeadsetSetMirrored(int mirror);
void lovrHeadsetGetDisplayDimensions(int* width, int* height);
void lovrHeadsetGetClipDistance(float* near, float* far);
void lovrHeadsetSetClipDistance(float near, float far);

View File

@ -35,6 +35,7 @@ static TrackedDevicePose_t getPose(unsigned int deviceIndex) {
void lovrHeadsetInit() {
state.isInitialized = 0;
state.isRendering = 0;
state.isMirrored = 1;
state.texture = NULL;
vec_init(&state.controllers);
@ -174,6 +175,14 @@ const char* lovrHeadsetGetType() {
return state.isInitialized ? "Vive" : NULL;
}
int lovrHeadsetIsMirrored() {
return state.isMirrored;
}
void lovrHeadsetSetMirrored(int mirror) {
state.isMirrored = mirror;
}
void lovrHeadsetGetDisplayDimensions(int* width, int* height) {
if (!state.isInitialized) {
*width = *height = 0;
@ -646,5 +655,8 @@ void lovrHeadsetRenderTo(headsetRenderCallback callback, void* userdata) {
state.isRendering = 0;
lovrGraphicsPopCanvas();
lovrGraphicsPlaneFullscreen(state.texture);
if (state.isMirrored) {
lovrGraphicsPlaneFullscreen(state.texture);
}
}

View File

@ -12,6 +12,7 @@
typedef struct {
int isInitialized;
int isRendering;
int isMirrored;
struct VR_IVRSystem_FnTable* system;
struct VR_IVRCompositor_FnTable* compositor;

View File

@ -92,6 +92,9 @@ void lovrInit(lua_State* L, int argc, char** argv) {
" headset = true, "
" math = true, "
" timer = true "
" }, "
" headset = { "
" mirror = true "
" } "
"} "
@ -110,6 +113,7 @@ void lovrInit(lua_State* L, int argc, char** argv) {
"end "
"lovr.filesystem.setIdentity(conf.identity or 'default') "
"if lovr.headset then lovr.headset.setMirrored(conf.headset and conf.headset.mirror) end "
"lovr.handlers = setmetatable({ "
" quit = function() end, "