Bindings;

This commit is contained in:
bjorn 2023-10-18 21:25:11 -07:00
parent 72aac1c58a
commit 4c2e206e30
4 changed files with 188 additions and 5 deletions

View File

@ -38,6 +38,7 @@ extern StringEntry lovrDrawMode[];
extern StringEntry lovrDrawStyle[];
extern StringEntry lovrEffect[];
extern StringEntry lovrEventType[];
extern StringEntry lovrEyeMask[];
extern StringEntry lovrFilterMode[];
extern StringEntry lovrHeadsetDriver[];
extern StringEntry lovrHorizontalAlign[];

View File

@ -73,6 +73,14 @@ StringEntry lovrDeviceAxis[] = {
{ 0 }
};
StringEntry lovrEyeMask[] = {
[EYE_NONE] = ENTRY("none"),
[EYE_LEFT] = ENTRY("left"),
[EYE_RIGHT] = ENTRY("right"),
[EYE_BOTH] = ENTRY("both"),
{ 0 }
};
static Device luax_optdevice(lua_State* L, int index) {
const char* str = luaL_optstring(L, 1, "head");
if (!strcmp(str, "left")) {

View File

@ -1,11 +1,185 @@
#include "api.h"
#include "headset/headset.h"
#include "core/maf.h"
#include "util.h"
static int l_lovrLayerGetWidth(lua_State* L) {
lua_pushnumber(L, 0.);
static int l_lovrLayerGetPosition(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
float position[3], orientation[4];
lovrHeadsetInterface->getLayerPose(layer, position, orientation);
lua_pushnumber(L, position[0]);
lua_pushnumber(L, position[1]);
lua_pushnumber(L, position[2]);
return 3;
}
static int l_lovrLayerSetPosition(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
float position[3], orientation[4];
lovrHeadsetInterface->getLayerPose(layer, position, orientation);
luax_readvec3(L, 2, position, NULL);
lovrHeadsetInterface->setLayerPose(layer, position, orientation);
return 0;
}
static int l_lovrLayerGetOrientation(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
float position[3], orientation[4], angle, ax, ay, az;
lovrHeadsetInterface->getLayerPose(layer, position, orientation);
quat_getAngleAxis(orientation, &angle, &ax, &ay, &az);
lua_pushnumber(L, angle);
lua_pushnumber(L, ax);
lua_pushnumber(L, ay);
lua_pushnumber(L, az);
return 4;
}
static int l_lovrLayerSetOrientation(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
float position[3], orientation[4];
lovrHeadsetInterface->getLayerPose(layer, position, orientation);
luax_readquat(L, 2, orientation, NULL);
lovrHeadsetInterface->setLayerPose(layer, position, orientation);
return 0;
}
static int l_lovrLayerGetPose(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
float position[3], orientation[4], angle, ax, ay, az;
lovrHeadsetInterface->getLayerPose(layer, position, orientation);
lua_pushnumber(L, position[0]);
lua_pushnumber(L, position[1]);
lua_pushnumber(L, position[2]);
quat_getAngleAxis(orientation, &angle, &ax, &ay, &az);
lua_pushnumber(L, angle);
lua_pushnumber(L, ax);
lua_pushnumber(L, ay);
lua_pushnumber(L, az);
return 7;
}
static int l_lovrLayerSetPose(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
float position[3], orientation[4];
int index = luax_readvec3(L, 2, position, NULL);
luax_readquat(L, index, orientation, NULL);
lovrHeadsetInterface->setLayerPose(layer, position, orientation);
return 0;
}
static int l_lovrLayerGetSize(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
float width, height;
lovrHeadsetInterface->getLayerSize(layer, &width, &height);
lua_pushnumber(L, width);
lua_pushnumber(L, height);
return 2;
}
static int l_lovrLayerSetSize(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
float width = luax_checkfloat(L, 2);
float height = luax_checkfloat(L, 3);
lovrHeadsetInterface->setLayerSize(layer, width, height);
return 0;
}
static int l_lovrLayerGetEyeMask(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
EyeMask mask = lovrHeadsetInterface->getLayerEyeMask(layer);
luax_pushenum(L, EyeMask, mask);
return 1;
}
static int l_lovrLayerSetEyeMask(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
EyeMask mask = luax_checkenum(L, 2, EyeMask, "both");
lovrHeadsetInterface->setLayerEyeMask(layer, mask);
return 0;
}
static int l_lovrLayerGetViewport(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
uint32_t viewport[4];
lovrHeadsetInterface->getLayerViewport(layer, viewport);
lua_pushinteger(L, viewport[0]);
lua_pushinteger(L, viewport[1]);
lua_pushinteger(L, viewport[2]);
lua_pushinteger(L, viewport[3]);
return 4;
}
static int l_lovrLayerSetViewport(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
uint32_t viewport[4];
viewport[0] = luax_optu32(L, 2, 0);
viewport[1] = luax_optu32(L, 3, 0);
viewport[2] = luax_optu32(L, 4, ~0u);
viewport[3] = luax_optu32(L, 5, ~0u);
lovrHeadsetInterface->setLayerViewport(layer, viewport);
return 0;
}
static int l_lovrLayerGetSupersample(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
bool supersample = lovrHeadsetInterface->getLayerOption(layer, LAYER_SUPERSAMPLE);
lua_pushboolean(L, supersample);
return 1;
}
static int l_lovrLayerSetSupersample(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
bool supersample = lua_toboolean(L, 2);
lovrHeadsetInterface->setLayerOption(layer, LAYER_SUPERSAMPLE, supersample);
return 0;
}
static int l_lovrLayerGetSharpen(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
bool sharpen = lovrHeadsetInterface->getLayerOption(layer, LAYER_SHARPEN);
lua_pushboolean(L, sharpen);
return 1;
}
static int l_lovrLayerSetSharpen(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
bool sharpen = lua_toboolean(L, 2);
lovrHeadsetInterface->setLayerOption(layer, LAYER_SHARPEN, sharpen);
return 0;
}
static int l_lovrLayerGetTexture(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
struct Texture* texture = lovrHeadsetInterface->getLayerTexture(layer);
luax_pushtype(L, Texture, texture);
return 1;
}
static int l_lovrLayerGetPass(lua_State* L) {
Layer* layer = luax_checktype(L, 1, Layer);
struct Pass* pass = lovrHeadsetInterface->getLayerPass(layer);
luax_pushtype(L, Pass, pass);
return 1;
}
const luaL_Reg lovrLayer[] = {
{ "getWidth", l_lovrLayerGetWidth },
{ "getPosition", l_lovrLayerGetPosition },
{ "setPosition", l_lovrLayerSetPosition },
{ "getOrientation", l_lovrLayerGetOrientation },
{ "setOrientation", l_lovrLayerSetOrientation },
{ "getPose", l_lovrLayerGetPose },
{ "setPose", l_lovrLayerSetPose },
{ "getSize", l_lovrLayerGetSize },
{ "setSize", l_lovrLayerSetSize },
{ "getEyeMask", l_lovrLayerGetEyeMask },
{ "setEyeMask", l_lovrLayerSetEyeMask },
{ "getViewport", l_lovrLayerGetViewport },
{ "setViewport", l_lovrLayerSetViewport },
{ "getSupersample", l_lovrLayerGetSupersample },
{ "setSupersample", l_lovrLayerSetSupersample },
{ "getSharpen", l_lovrLayerGetSharpen },
{ "setSharpen", l_lovrLayerSetSharpen },
{ "getTexture", l_lovrLayerGetTexture },
{ "getPass", l_lovrLayerGetPass },
{ NULL, NULL }
};

View File

@ -187,8 +187,8 @@ typedef struct HeadsetInterface {
void (*destroyLayer)(void* ref);
Layer** (*getLayers)(uint32_t* count);
void (*setLayers)(Layer** layers, uint32_t count);
void (*getLayerTransform)(Layer* layer, float* position, float* orientation);
void (*setLayerTransform)(Layer* layer, float* position, float* orientation);
void (*getLayerPose)(Layer* layer, float* position, float* orientation);
void (*setLayerPose)(Layer* layer, float* position, float* orientation);
void (*getLayerSize)(Layer* layer, float* width, float* height);
void (*setLayerSize)(Layer* layer, float width, float height);
EyeMask (*getLayerEyeMask)(Layer* layer);