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

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; 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 l_lovrHeadsetGetDisplayWidth(lua_State* L) {
int width; int width;
lovrHeadsetGetDisplayDimensions(&width, NULL); lovrHeadsetGetDisplayDimensions(&width, NULL);
@ -209,6 +220,8 @@ int l_lovrHeadsetRenderTo(lua_State* L) {
const luaL_Reg lovrHeadset[] = { const luaL_Reg lovrHeadset[] = {
{ "isPresent", l_lovrHeadsetIsPresent }, { "isPresent", l_lovrHeadsetIsPresent },
{ "getType", l_lovrHeadsetGetType }, { "getType", l_lovrHeadsetGetType },
{ "isMirrored", l_lovrHeadsetIsMirrored },
{ "setMirrored", l_lovrHeadsetSetMirrored },
{ "getDisplayWidth", l_lovrHeadsetGetDisplayWidth }, { "getDisplayWidth", l_lovrHeadsetGetDisplayWidth },
{ "getDisplayHeight", l_lovrHeadsetGetDisplayHeight }, { "getDisplayHeight", l_lovrHeadsetGetDisplayHeight },
{ "getDisplayDimensions", l_lovrHeadsetGetDisplayDimensions }, { "getDisplayDimensions", l_lovrHeadsetGetDisplayDimensions },

View file

@ -36,6 +36,8 @@ void lovrHeadsetDestroy();
void lovrHeadsetPoll(); void lovrHeadsetPoll();
int lovrHeadsetIsPresent(); int lovrHeadsetIsPresent();
const char* lovrHeadsetGetType(); const char* lovrHeadsetGetType();
int lovrHeadsetIsMirrored();
void lovrHeadsetSetMirrored(int mirror);
void lovrHeadsetGetDisplayDimensions(int* width, int* height); void lovrHeadsetGetDisplayDimensions(int* width, int* height);
void lovrHeadsetGetClipDistance(float* near, float* far); void lovrHeadsetGetClipDistance(float* near, float* far);
void lovrHeadsetSetClipDistance(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() { void lovrHeadsetInit() {
state.isInitialized = 0; state.isInitialized = 0;
state.isRendering = 0; state.isRendering = 0;
state.isMirrored = 1;
state.texture = NULL; state.texture = NULL;
vec_init(&state.controllers); vec_init(&state.controllers);
@ -174,6 +175,14 @@ const char* lovrHeadsetGetType() {
return state.isInitialized ? "Vive" : NULL; return state.isInitialized ? "Vive" : NULL;
} }
int lovrHeadsetIsMirrored() {
return state.isMirrored;
}
void lovrHeadsetSetMirrored(int mirror) {
state.isMirrored = mirror;
}
void lovrHeadsetGetDisplayDimensions(int* width, int* height) { void lovrHeadsetGetDisplayDimensions(int* width, int* height) {
if (!state.isInitialized) { if (!state.isInitialized) {
*width = *height = 0; *width = *height = 0;
@ -646,5 +655,8 @@ void lovrHeadsetRenderTo(headsetRenderCallback callback, void* userdata) {
state.isRendering = 0; state.isRendering = 0;
lovrGraphicsPopCanvas(); lovrGraphicsPopCanvas();
if (state.isMirrored) {
lovrGraphicsPlaneFullscreen(state.texture); lovrGraphicsPlaneFullscreen(state.texture);
}
} }

View file

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

View file

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