Easier enums;

This commit is contained in:
bjorn 2020-09-27 17:13:00 -07:00
parent 9ce5e9e625
commit 51f470cf85
21 changed files with 193 additions and 192 deletions

View File

@ -167,7 +167,7 @@ void _luax_pushtype(lua_State* L, const char* type, uint64_t hash, void* object)
lua_remove(L, -2);
}
int luax_checkenum(lua_State* L, int index, const StringEntry* map, const char* fallback, const char* label) {
int _luax_checkenum(lua_State* L, int index, const StringEntry* map, const char* fallback, const char* label) {
size_t length;
const char* string = fallback ? luaL_optlstring(L, index, fallback, &length) : luaL_checklstring(L, index, &length);

View File

@ -67,39 +67,39 @@ typedef struct {
#define ENTRY(s) { sizeof(s) - 1, s }
extern StringEntry ArcModes[];
extern StringEntry AttributeTypes[];
extern StringEntry BlendAlphaModes[];
extern StringEntry BlendModes[];
extern StringEntry BlockTypes[];
extern StringEntry BufferUsages[];
extern StringEntry CompareModes[];
extern StringEntry CoordinateSpaces[];
extern StringEntry Devices[];
extern StringEntry DeviceAxes[];
extern StringEntry DeviceButtons[];
extern StringEntry DrawModes[];
extern StringEntry DrawStyles[];
extern StringEntry EventTypes[];
extern StringEntry FilterModes[];
extern StringEntry HeadsetDrivers[];
extern StringEntry HeadsetOrigins[];
extern StringEntry HorizontalAligns[];
extern StringEntry JointTypes[];
extern StringEntry MaterialColors[];
extern StringEntry MaterialScalars[];
extern StringEntry MaterialTextures[];
extern StringEntry ShaderTypes[];
extern StringEntry ShapeTypes[];
extern StringEntry SourceTypes[];
extern StringEntry StencilActions[];
extern StringEntry TextureFormats[];
extern StringEntry TextureTypes[];
extern StringEntry TimeUnits[];
extern StringEntry UniformAccesses[];
extern StringEntry VerticalAligns[];
extern StringEntry Windings[];
extern StringEntry WrapModes[];
extern StringEntry lovrArcMode[];
extern StringEntry lovrAttributeType[];
extern StringEntry lovrBlendAlphaMode[];
extern StringEntry lovrBlendMode[];
extern StringEntry lovrBlockType[];
extern StringEntry lovrBufferUsage[];
extern StringEntry lovrCompareMode[];
extern StringEntry lovrCoordinateSpace[];
extern StringEntry lovrDevice[];
extern StringEntry lovrDeviceAxe[];
extern StringEntry lovrDeviceButton[];
extern StringEntry lovrDrawMode[];
extern StringEntry lovrDrawStyle[];
extern StringEntry lovrEventType[];
extern StringEntry lovrFilterMode[];
extern StringEntry lovrHeadsetDriver[];
extern StringEntry lovrHeadsetOrigin[];
extern StringEntry lovrHorizontalAlign[];
extern StringEntry lovrJointType[];
extern StringEntry lovrMaterialColor[];
extern StringEntry lovrMaterialScalar[];
extern StringEntry lovrMaterialTexture[];
extern StringEntry lovrShaderType[];
extern StringEntry lovrShapeType[];
extern StringEntry lovrSourceType[];
extern StringEntry lovrStencilAction[];
extern StringEntry lovrTextureFormat[];
extern StringEntry lovrTextureType[];
extern StringEntry lovrTimeUnit[];
extern StringEntry lovrUniformAccess[];
extern StringEntry lovrVerticalAlign[];
extern StringEntry lovrWinding[];
extern StringEntry lovrWrapMode[];
// General helpers
@ -121,7 +121,8 @@ typedef struct {
#define luax_totype(L, i, T) (T*) _luax_totype(L, i, hash64(#T, strlen(#T)))
#define luax_checktype(L, i, T) (T*) _luax_checktype(L, i, hash64(#T, strlen(#T)), #T)
#define luax_pushtype(L, T, o) _luax_pushtype(L, #T, hash64(#T, strlen(#T)), o)
#define luax_pushenum(L, m, x) lua_pushlstring(L, m[x].string, m[x].length)
#define luax_checkenum(L, i, T, x) _luax_checkenum(L, i, lovr ## T, x, #T)
#define luax_pushenum(L, T, x) lua_pushlstring(L, (lovr ## T)[x].string, (lovr ## T)[x].length)
#define luax_checkfloat(L, i) (float) luaL_checknumber(L, i)
#define luax_optfloat(L, i, x) (float) luaL_optnumber(L, i, x)
#define luax_geterror(L) lua_getfield(L, LUA_REGISTRYINDEX, "_lovrerror")
@ -133,7 +134,7 @@ void* _luax_totype(lua_State* L, int index, uint64_t hash);
void* _luax_checktype(lua_State* L, int index, uint64_t hash, const char* debug);
int luax_typeerror(lua_State* L, int index, const char* expected);
void _luax_pushtype(lua_State* L, const char* name, uint64_t hash, void* object);
int luax_checkenum(lua_State* L, int index, const StringEntry* map, const char* fallback, const char* label);
int _luax_checkenum(lua_State* L, int index, const StringEntry* map, const char* fallback, const char* label);
void luax_registerloader(lua_State* L, lua_CFunction loader, int index);
int luax_resume(lua_State* T, int n);
void luax_vthrow(void* L, const char* format, va_list args);

View File

@ -7,13 +7,13 @@
#include "core/ref.h"
#include <stdlib.h>
StringEntry SourceTypes[] = {
StringEntry lovrSourceType[] = {
[SOURCE_STATIC] = ENTRY("static"),
[SOURCE_STREAM] = ENTRY("stream"),
{ 0 }
};
StringEntry TimeUnits[] = {
StringEntry lovrTimeUnit[] = {
[UNIT_SECONDS] = ENTRY("seconds"),
[UNIT_SAMPLES] = ENTRY("samples"),
{ 0 }
@ -122,7 +122,7 @@ static int l_lovrAudioNewSource(lua_State* L) {
Source* source = NULL;
SoundData* soundData = luax_totype(L, 1, SoundData);
AudioStream* stream = luax_totype(L, 1, AudioStream);
bool isStatic = soundData || luax_checkenum(L, 2, SourceTypes, NULL, "SourceType") == SOURCE_STATIC;
bool isStatic = soundData || luax_checkenum(L, 2, SourceType, NULL) == SOURCE_STATIC;
if (isStatic) {
if (soundData) {

View File

@ -27,7 +27,7 @@ static int l_lovrSourceGetCone(lua_State* L) {
static int l_lovrSourceGetDuration(lua_State* L) {
Source* source = luax_checktype(L, 1, Source);
TimeUnit unit = luax_checkenum(L, 2, TimeUnits, "seconds", "TimeUnit");
TimeUnit unit = luax_checkenum(L, 2, TimeUnit, "seconds");
size_t duration = lovrSourceGetDuration(source);
if (unit == UNIT_SECONDS) {
@ -100,7 +100,7 @@ static int l_lovrSourceGetSampleRate(lua_State* L) {
static int l_lovrSourceGetType(lua_State* L) {
Source* source = luax_checktype(L, 1, Source);
luax_pushenum(L, SourceTypes, lovrSourceGetType(source));
luax_pushenum(L, SourceType, lovrSourceGetType(source));
return 1;
}
@ -157,7 +157,7 @@ static int l_lovrSourcePlay(lua_State* L) {
static int l_lovrSourceSeek(lua_State* L) {
Source* source = luax_checktype(L, 1, Source);
TimeUnit unit = luax_checkenum(L, 3, TimeUnits, "seconds", "TimeUnit");
TimeUnit unit = luax_checkenum(L, 3, TimeUnit, "seconds");
if (unit == UNIT_SECONDS) {
float seconds = luax_checkfloat(L, 2);
@ -257,7 +257,7 @@ static int l_lovrSourceStop(lua_State* L) {
static int l_lovrSourceTell(lua_State* L) {
Source* source = luax_checktype(L, 1, Source);
TimeUnit unit = luax_checkenum(L, 2, TimeUnits, "seconds", "TimeUnit");
TimeUnit unit = luax_checkenum(L, 2, TimeUnit, "seconds");
size_t offset = lovrSourceTell(source);
if (unit == UNIT_SECONDS) {

View File

@ -118,7 +118,7 @@ static int l_lovrDataNewTextureData(lua_State* L) {
if (lua_type(L, 1) == LUA_TNUMBER) {
int width = luaL_checkinteger(L, 1);
int height = luaL_checkinteger(L, 2);
TextureFormat format = luax_checkenum(L, 3, TextureFormats, "rgba", "TextureFormat");
TextureFormat format = luax_checkenum(L, 3, TextureFormat, "rgba");
Blob* blob = lua_isnoneornil(L, 4) ? NULL : luax_checktype(L, 4, Blob);
textureData = lovrTextureDataCreate(width, height, blob, 0x0, format);
} else {

View File

@ -30,7 +30,7 @@ static int l_lovrTextureDataGetDimensions(lua_State* L) {
static int l_lovrTextureDataGetFormat(lua_State* L) {
TextureData* textureData = luax_checktype(L, 1, TextureData);
luax_pushenum(L, TextureFormats, textureData->format);
luax_pushenum(L, TextureFormat, textureData->format);
return 1;
}

View File

@ -7,7 +7,7 @@
#include <stdlib.h>
#include <string.h>
StringEntry EventTypes[] = {
StringEntry lovrEventType[] = {
[EVENT_QUIT] = ENTRY("quit"),
[EVENT_RESTART] = ENTRY("restart"),
[EVENT_FOCUS] = ENTRY("focus"),
@ -21,7 +21,7 @@ StringEntry EventTypes[] = {
{ 0 }
};
StringEntry KeyCodes[] = {
StringEntry lovrKeyCode[] = {
[KEY_A] = ENTRY("a"),
[KEY_B] = ENTRY("b"),
[KEY_C] = ENTRY("c"),
@ -187,7 +187,7 @@ static int nextEvent(lua_State* L) {
if (event.type == EVENT_CUSTOM) {
lua_pushstring(L, event.data.custom.name);
} else {
luax_pushenum(L, EventTypes, event.type);
luax_pushenum(L, EventType, event.type);
}
switch (event.type) {
@ -205,13 +205,13 @@ static int nextEvent(lua_State* L) {
return 3;
case EVENT_KEYPRESSED:
luax_pushenum(L, KeyCodes, event.data.key.code);
luax_pushenum(L, KeyCode, event.data.key.code);
lua_pushinteger(L, event.data.key.scancode);
lua_pushboolean(L, event.data.key.repeat);
return 4;
case EVENT_KEYRELEASED:
luax_pushenum(L, KeyCodes, event.data.key.code);
luax_pushenum(L, KeyCode, event.data.key.code);
lua_pushinteger(L, event.data.key.scancode);
return 3;

View File

@ -16,14 +16,14 @@
#include <stdbool.h>
#include <stdlib.h>
StringEntry ArcModes[] = {
StringEntry lovrArcMode[] = {
[ARC_MODE_PIE] = ENTRY("pie"),
[ARC_MODE_OPEN] = ENTRY("open"),
[ARC_MODE_CLOSED] = ENTRY("closed"),
{ 0 }
};
StringEntry AttributeTypes[] = {
StringEntry lovrAttributeType[] = {
[I8] = ENTRY("byte"),
[U8] = ENTRY("ubyte"),
[I16] = ENTRY("short"),
@ -34,13 +34,13 @@ StringEntry AttributeTypes[] = {
{ 0 }
};
StringEntry BlendAlphaModes[] = {
StringEntry lovrBlendAlphaMode[] = {
[BLEND_ALPHA_MULTIPLY] = ENTRY("alphamultiply"),
[BLEND_PREMULTIPLIED] = ENTRY("premultiplied"),
{ 0 }
};
StringEntry BlendModes[] = {
StringEntry lovrBlendMode[] = {
[BLEND_ALPHA] = ENTRY("alpha"),
[BLEND_ADD] = ENTRY("add"),
[BLEND_SUBTRACT] = ENTRY("subtract"),
@ -51,20 +51,20 @@ StringEntry BlendModes[] = {
{ 0 }
};
StringEntry BlockTypes[] = {
StringEntry lovrBlockType[] = {
[BLOCK_UNIFORM] = ENTRY("uniform"),
[BLOCK_COMPUTE] = ENTRY("compute"),
{ 0 }
};
StringEntry BufferUsages[] = {
StringEntry lovrBufferUsage[] = {
[USAGE_STATIC] = ENTRY("static"),
[USAGE_DYNAMIC] = ENTRY("dynamic"),
[USAGE_STREAM] = ENTRY("stream"),
{ 0 }
};
StringEntry CompareModes[] = {
StringEntry lovrCompareMode[] = {
[COMPARE_EQUAL] = ENTRY("equal"),
[COMPARE_NEQUAL] = ENTRY("notequal"),
[COMPARE_LESS] = ENTRY("less"),
@ -74,13 +74,13 @@ StringEntry CompareModes[] = {
{ 0 }
};
StringEntry CoordinateSpaces[] = {
StringEntry lovrCoordinateSpace[] = {
[SPACE_LOCAL] = ENTRY("local"),
[SPACE_GLOBAL] = ENTRY("global"),
{ 0 }
};
StringEntry DefaultShaders[] = {
StringEntry lovrDefaultShader[] = {
[SHADER_UNLIT] = ENTRY("unlit"),
[SHADER_STANDARD] = ENTRY("standard"),
[SHADER_CUBE] = ENTRY("cube"),
@ -90,7 +90,7 @@ StringEntry DefaultShaders[] = {
{ 0 }
};
StringEntry DrawModes[] = {
StringEntry lovrDrawMode[] = {
[DRAW_POINTS] = ENTRY("points"),
[DRAW_LINES] = ENTRY("lines"),
[DRAW_LINE_STRIP] = ENTRY("linestrip"),
@ -101,39 +101,39 @@ StringEntry DrawModes[] = {
{ 0 }
};
StringEntry DrawStyles[] = {
StringEntry lovrDrawStyle[] = {
[STYLE_FILL] = ENTRY("fill"),
[STYLE_LINE] = ENTRY("line"),
{ 0 }
};
StringEntry FilterModes[] = {
StringEntry lovrFilterMode[] = {
[FILTER_NEAREST] = ENTRY("nearest"),
[FILTER_BILINEAR] = ENTRY("bilinear"),
[FILTER_TRILINEAR] = ENTRY("trilinear"),
{ 0 }
};
StringEntry HorizontalAligns[] = {
StringEntry lovrHorizontalAlign[] = {
[ALIGN_LEFT] = ENTRY("left"),
[ALIGN_CENTER] = ENTRY("center"),
[ALIGN_RIGHT] = ENTRY("right"),
{ 0 }
};
StringEntry MaterialColors[] = {
StringEntry lovrMaterialColor[] = {
[COLOR_DIFFUSE] = ENTRY("diffuse"),
[COLOR_EMISSIVE] = ENTRY("emissive"),
{ 0 }
};
StringEntry MaterialScalars[] = {
StringEntry lovrMaterialScalar[] = {
[SCALAR_METALNESS] = ENTRY("metalness"),
[SCALAR_ROUGHNESS] = ENTRY("roughness"),
{ 0 }
};
StringEntry MaterialTextures[] = {
StringEntry lovrMaterialTexture[] = {
[TEXTURE_DIFFUSE] = ENTRY("diffuse"),
[TEXTURE_EMISSIVE] = ENTRY("emissive"),
[TEXTURE_METALNESS] = ENTRY("metalness"),
@ -143,13 +143,13 @@ StringEntry MaterialTextures[] = {
{ 0 }
};
StringEntry ShaderTypes[] = {
StringEntry lovrShaderType[] = {
[SHADER_GRAPHICS] = ENTRY("graphics"),
[SHADER_COMPUTE] = ENTRY("compute"),
{ 0 }
};
StringEntry StencilActions[] = {
StringEntry lovrStencilAction[] = {
[STENCIL_REPLACE] = ENTRY("replace"),
[STENCIL_INCREMENT] = ENTRY("increment"),
[STENCIL_DECREMENT] = ENTRY("decrement"),
@ -159,7 +159,7 @@ StringEntry StencilActions[] = {
{ 0 }
};
StringEntry TextureFormats[] = {
StringEntry lovrTextureFormat[] = {
[FORMAT_RGB] = ENTRY("rgb"),
[FORMAT_RGBA] = ENTRY("rgba"),
[FORMAT_RGBA4] = ENTRY("rgba4"),
@ -198,7 +198,7 @@ StringEntry TextureFormats[] = {
{ 0 }
};
StringEntry TextureTypes[] = {
StringEntry lovrTextureType[] = {
[TEXTURE_2D] = ENTRY("2d"),
[TEXTURE_ARRAY] = ENTRY("array"),
[TEXTURE_CUBE] = ENTRY("cube"),
@ -206,27 +206,27 @@ StringEntry TextureTypes[] = {
{ 0 }
};
StringEntry UniformAccesses[] = {
StringEntry lovrUniformAccess[] = {
[ACCESS_READ] = ENTRY("read"),
[ACCESS_WRITE] = ENTRY("write"),
[ACCESS_READ_WRITE] = ENTRY("readwrite"),
{ 0 }
};
StringEntry VerticalAligns[] = {
StringEntry lovrVerticalAlign[] = {
[ALIGN_TOP] = ENTRY("top"),
[ALIGN_MIDDLE] = ENTRY("middle"),
[ALIGN_BOTTOM] = ENTRY("bottom"),
{ 0 }
};
StringEntry Windings[] = {
StringEntry lovrWinding[] = {
[WINDING_CLOCKWISE] = ENTRY("clockwise"),
[WINDING_COUNTERCLOCKWISE] = ENTRY("counterclockwise"),
{ 0 }
};
StringEntry WrapModes[] = {
StringEntry lovrWrapMode[] = {
[WRAP_CLAMP] = ENTRY("clamp"),
[WRAP_REPEAT] = ENTRY("repeat"),
[WRAP_MIRRORED_REPEAT] = ENTRY("mirroredrepeat"),
@ -616,14 +616,14 @@ static int l_lovrGraphicsGetBlendMode(lua_State* L) {
BlendMode mode;
BlendAlphaMode alphaMode;
lovrGraphicsGetBlendMode(&mode, &alphaMode);
luax_pushenum(L, BlendModes, mode);
luax_pushenum(L, BlendAlphaModes, alphaMode);
luax_pushenum(L, BlendMode, mode);
luax_pushenum(L, BlendAlphaMode, alphaMode);
return 2;
}
static int l_lovrGraphicsSetBlendMode(lua_State* L) {
BlendMode mode = lua_isnoneornil(L, 1) ? BLEND_NONE : luax_checkenum(L, 1, BlendModes, NULL, "BlendMode");
BlendAlphaMode alphaMode = luax_checkenum(L, 2, BlendAlphaModes, "alphamultiply", "BlendAlphaMode");
BlendMode mode = lua_isnoneornil(L, 1) ? BLEND_NONE : luax_checkenum(L, 1, BlendMode, NULL);
BlendAlphaMode alphaMode = luax_checkenum(L, 2, BlendAlphaMode, "alphamultiply");
lovrGraphicsSetBlendMode(mode, alphaMode);
return 0;
}
@ -687,13 +687,13 @@ static int l_lovrGraphicsSetCullingEnabled(lua_State* L) {
static int l_lovrGraphicsGetDefaultFilter(lua_State* L) {
TextureFilter filter = lovrGraphicsGetDefaultFilter();
luax_pushenum(L, FilterModes, filter.mode);
luax_pushenum(L, FilterMode, filter.mode);
lua_pushnumber(L, filter.anisotropy);
return 2;
}
static int l_lovrGraphicsSetDefaultFilter(lua_State* L) {
FilterMode mode = luax_checkenum(L, 1, FilterModes, NULL, "FilterMode");
FilterMode mode = luax_checkenum(L, 1, FilterMode, NULL);
float anisotropy = luax_optfloat(L, 2, 1.f);
lovrGraphicsSetDefaultFilter((TextureFilter) { .mode = mode, .anisotropy = anisotropy });
return 0;
@ -703,13 +703,13 @@ static int l_lovrGraphicsGetDepthTest(lua_State* L) {
CompareMode mode;
bool write;
lovrGraphicsGetDepthTest(&mode, &write);
luax_pushenum(L, CompareModes, mode);
luax_pushenum(L, CompareMode, mode);
lua_pushboolean(L, write);
return 2;
}
static int l_lovrGraphicsSetDepthTest(lua_State* L) {
CompareMode mode = lua_isnoneornil(L, 1) ? COMPARE_NONE : luax_checkenum(L, 1, CompareModes, NULL, "CompareMode");
CompareMode mode = lua_isnoneornil(L, 1) ? COMPARE_NONE : luax_checkenum(L, 1, CompareMode, NULL);
bool write = lua_isnoneornil(L, 2) ? true : lua_toboolean(L, 2);
lovrGraphicsSetDepthTest(mode, write);
return 0;
@ -765,7 +765,7 @@ static int l_lovrGraphicsGetStencilTest(lua_State* L) {
CompareMode mode;
int value;
lovrGraphicsGetStencilTest(&mode, &value);
luax_pushenum(L, CompareModes, mode);
luax_pushenum(L, CompareMode, mode);
lua_pushinteger(L, value);
return 2;
}
@ -774,7 +774,7 @@ static int l_lovrGraphicsSetStencilTest(lua_State* L) {
if (lua_isnoneornil(L, 1)) {
lovrGraphicsSetStencilTest(COMPARE_NONE, 0);
} else {
CompareMode mode = luax_checkenum(L, 1, CompareModes, NULL, "CompareMode");
CompareMode mode = luax_checkenum(L, 1, CompareMode, NULL);
int value = luaL_checkinteger(L, 2);
lovrGraphicsSetStencilTest(mode, value);
}
@ -782,12 +782,12 @@ static int l_lovrGraphicsSetStencilTest(lua_State* L) {
}
static int l_lovrGraphicsGetWinding(lua_State* L) {
luax_pushenum(L, Windings, lovrGraphicsGetWinding());
luax_pushenum(L, Winding, lovrGraphicsGetWinding());
return 1;
}
static int l_lovrGraphicsSetWinding(lua_State* L) {
Winding winding = luax_checkenum(L, 1, Windings, NULL, "Winding");
Winding winding = luax_checkenum(L, 1, Winding, NULL);
lovrGraphicsSetWinding(winding);
return 0;
}
@ -933,7 +933,7 @@ static int l_lovrGraphicsTriangle(lua_State* L) {
if (lua_isuserdata(L, 1)) {
material = luax_checktype(L, 1, Material);
} else {
style = luax_checkenum(L, 1, DrawStyles, NULL, "DrawStyle");
style = luax_checkenum(L, 1, DrawStyle, NULL);
}
float* vertices;
@ -950,7 +950,7 @@ static int l_lovrGraphicsPlane(lua_State* L) {
if (lua_isuserdata(L, 1)) {
material = luax_checktype(L, 1, Material);
} else {
style = luax_checkenum(L, 1, DrawStyles, NULL, "DrawStyle");
style = luax_checkenum(L, 1, DrawStyle, NULL);
}
float transform[16];
int index = luax_readmat4(L, 2, transform, 2);
@ -968,7 +968,7 @@ static int luax_rectangularprism(lua_State* L, int scaleComponents) {
if (lua_isuserdata(L, 1)) {
material = luax_checktype(L, 1, Material);
} else {
style = luax_checkenum(L, 1, DrawStyles, NULL, "DrawStyle");
style = luax_checkenum(L, 1, DrawStyle, NULL);
}
float transform[16];
luax_readmat4(L, 2, transform, scaleComponents);
@ -990,12 +990,12 @@ static int l_lovrGraphicsArc(lua_State* L) {
if (lua_isuserdata(L, 1)) {
material = luax_checktype(L, 1, Material);
} else {
style = luax_checkenum(L, 1, DrawStyles, NULL, "DrawStyle");
style = luax_checkenum(L, 1, DrawStyle, NULL);
}
ArcMode mode = ARC_MODE_PIE;
int index = 2;
if (lua_type(L, index) == LUA_TSTRING) {
mode = luax_checkenum(L, index++, ArcModes, NULL, "ArcMode");
mode = luax_checkenum(L, index++, ArcMode, NULL);
}
float transform[16];
index = luax_readmat4(L, index, transform, 1);
@ -1012,7 +1012,7 @@ static int l_lovrGraphicsCircle(lua_State* L) {
if (lua_isuserdata(L, 1)) {
material = luax_checktype(L, 1, Material);
} else {
style = luax_checkenum(L, 1, DrawStyles, NULL, "DrawStyle");
style = luax_checkenum(L, 1, DrawStyle, NULL);
}
float transform[16];
int index = luax_readmat4(L, 2, transform, 1);
@ -1056,15 +1056,15 @@ static int l_lovrGraphicsPrint(lua_State* L) {
float transform[16];
int index = luax_readmat4(L, 2, transform, 1);
float wrap = luax_optfloat(L, index++, 0.f);
HorizontalAlign halign = luax_checkenum(L, index++, HorizontalAligns, "center", "HorizontalAlign");
VerticalAlign valign = luax_checkenum(L, index++, VerticalAligns, "middle", "VerticalAlign");
HorizontalAlign halign = luax_checkenum(L, index++, HorizontalAlign, "center");
VerticalAlign valign = luax_checkenum(L, index++, VerticalAlign, "middle");
lovrGraphicsPrint(str, length, transform, wrap, halign, valign);
return 0;
}
static int l_lovrGraphicsStencil(lua_State* L) {
luaL_checktype(L, 1, LUA_TFUNCTION);
StencilAction action = luax_checkenum(L, 2, StencilActions, "replace", "StencilAction");
StencilAction action = luax_checkenum(L, 2, StencilAction, "replace");
int replaceValue = luaL_optinteger(L, 3, 1);
bool keepValues = lua_toboolean(L, 4);
if (!keepValues) {
@ -1167,14 +1167,14 @@ static int l_lovrGraphicsNewCanvas(lua_State* L) {
switch (lua_type(L, -1)) {
case LUA_TNIL: break;
case LUA_TBOOLEAN: flags.depth.enabled = lua_toboolean(L, -1); break;
case LUA_TSTRING: flags.depth.format = luax_checkenum(L, -1, TextureFormats, NULL, "TextureFormat"); break;
case LUA_TSTRING: flags.depth.format = luax_checkenum(L, -1, TextureFormat, NULL); break;
case LUA_TTABLE:
lua_getfield(L, -1, "readable");
flags.depth.readable = lua_toboolean(L, -1);
lua_pop(L, 1);
lua_getfield(L, -1, "format");
flags.depth.format = luax_checkenum(L, -1, TextureFormats, NULL, "TextureFormat");
flags.depth.format = luax_checkenum(L, -1, TextureFormat, NULL);
lua_pop(L, 1);
break;
default: lovrThrow("Expected boolean, string, or table for Canvas depth flag");
@ -1195,7 +1195,7 @@ static int l_lovrGraphicsNewCanvas(lua_State* L) {
if (attachmentCount == 0) {
lua_getfield(L, index, "format");
format = luax_checkenum(L, -1, TextureFormats, "rgba", "TextureFormat");
format = luax_checkenum(L, -1, TextureFormat, "rgba");
anonymous = lua_isnil(L, -1) || lua_toboolean(L, -1);
lua_pop(L, 1);
}
@ -1345,7 +1345,7 @@ static int l_lovrGraphicsNewMesh(lua_State* L) {
attributeNames[i] = lua_tostring(L, -1);
attributes[i].offset = (uint32_t) stride;
attributes[i].type = luax_checkenum(L, -2, AttributeTypes, "float", "AttributeType");
attributes[i].type = luax_checkenum(L, -2, AttributeType, "float");
attributes[i].components = luaL_optinteger(L, -3, 1);
switch (attributes[i].type) {
@ -1362,8 +1362,8 @@ static int l_lovrGraphicsNewMesh(lua_State* L) {
count = (uint32_t) (blob->size / stride);
}
DrawMode mode = luax_checkenum(L, drawModeIndex, DrawModes, "fan", "DrawMode");
BufferUsage usage = luax_checkenum(L, drawModeIndex + 1, BufferUsages, "dynamic", "BufferUsage");
DrawMode mode = luax_checkenum(L, drawModeIndex, DrawMode, "fan");
BufferUsage usage = luax_checkenum(L, drawModeIndex + 1, BufferUsage, "dynamic");
bool readable = lua_toboolean(L, drawModeIndex + 2);
Buffer* vertexBuffer = lovrBufferCreate(count * stride, NULL, BUFFER_VERTEX, usage, readable);
Mesh* mesh = lovrMeshCreate(mode, vertexBuffer, count);
@ -1516,7 +1516,7 @@ static int l_lovrGraphicsNewShader(lua_State* L) {
Shader* shader;
if (lua_isstring(L, 1) && (lua_istable(L, 2) || lua_gettop(L) == 1)) {
DefaultShader shaderType = luax_checkenum(L, 1, DefaultShaders, NULL, "DefaultShader");
DefaultShader shaderType = luax_checkenum(L, 1, DefaultShader, NULL);
if (lua_istable(L, 2)) {
lua_getfield(L, 2, "flags");
@ -1585,7 +1585,7 @@ static int l_lovrGraphicsNewShaderBlock(lua_State* L) {
arr_uniform_t uniforms;
arr_init(&uniforms);
BlockType type = luax_checkenum(L, 1, BlockTypes, NULL, "Blocktype");
BlockType type = luax_checkenum(L, 1, BlockType, NULL);
luaL_checktype(L, 2, LUA_TTABLE);
lua_pushnil(L);
@ -1622,7 +1622,7 @@ static int l_lovrGraphicsNewShaderBlock(lua_State* L) {
if (lua_istable(L, 3)) {
lua_getfield(L, 3, "usage");
usage = luax_checkenum(L, -1, BufferUsages, "dynamic", "BufferUsage");
usage = luax_checkenum(L, -1, BufferUsage, "dynamic");
lua_pop(L, 1);
lua_getfield(L, 3, "readable");
@ -1681,11 +1681,11 @@ static int l_lovrGraphicsNewTexture(lua_State* L) {
lua_pop(L, 1);
lua_getfield(L, index, "type");
type = lua_isnil(L, -1) ? type : (TextureType) luax_checkenum(L, -1, TextureTypes, NULL, "TextureType");
type = lua_isnil(L, -1) ? type : (TextureType) luax_checkenum(L, -1, TextureType, NULL);
lua_pop(L, 1);
lua_getfield(L, index, "format");
format = lua_isnil(L, -1) ? format : (TextureFormat) luax_checkenum(L, -1, TextureFormats, NULL, "TextureFormat");
format = lua_isnil(L, -1) ? format : (TextureFormat) luax_checkenum(L, -1, TextureFormat, NULL);
lua_pop(L, 1);
lua_getfield(L, index, "msaa");

View File

@ -4,7 +4,7 @@
static int l_lovrMaterialGetColor(lua_State* L) {
Material* material = luax_checktype(L, 1, Material);
MaterialColor colorType = luax_checkenum(L, 2, MaterialColors, "diffuse", "MaterialColor");
MaterialColor colorType = luax_checkenum(L, 2, MaterialColor, "diffuse");
Color color = lovrMaterialGetColor(material, colorType);
lua_pushnumber(L, color.r);
lua_pushnumber(L, color.g);
@ -18,7 +18,7 @@ static int l_lovrMaterialSetColor(lua_State* L) {
MaterialColor colorType = COLOR_DIFFUSE;
int index = 2;
if (lua_type(L, index) == LUA_TSTRING) {
colorType = luax_checkenum(L, index, MaterialColors, NULL, "MaterialColor");
colorType = luax_checkenum(L, index, MaterialColor, NULL);
index++;
}
Color color;
@ -29,7 +29,7 @@ static int l_lovrMaterialSetColor(lua_State* L) {
static int l_lovrMaterialGetScalar(lua_State* L) {
Material* material = luax_checktype(L, 1, Material);
MaterialScalar scalarType = luax_checkenum(L, 2, MaterialScalars, NULL, "MaterialScalar");
MaterialScalar scalarType = luax_checkenum(L, 2, MaterialScalar, NULL);
float value = lovrMaterialGetScalar(material, scalarType);
lua_pushnumber(L, value);
return 1;
@ -37,7 +37,7 @@ static int l_lovrMaterialGetScalar(lua_State* L) {
static int l_lovrMaterialSetScalar(lua_State* L) {
Material* material = luax_checktype(L, 1, Material);
MaterialScalar scalarType = luax_checkenum(L, 2, MaterialScalars, NULL, "MaterialScalar");
MaterialScalar scalarType = luax_checkenum(L, 2, MaterialScalar, NULL);
float value = luax_checkfloat(L, 3);
lovrMaterialSetScalar(material, scalarType, value);
return 0;
@ -45,7 +45,7 @@ static int l_lovrMaterialSetScalar(lua_State* L) {
static int l_lovrMaterialGetTexture(lua_State* L) {
Material* material = luax_checktype(L, 1, Material);
MaterialTexture textureType = luax_checkenum(L, 2, MaterialTextures, "diffuse", "MaterialTexture");
MaterialTexture textureType = luax_checkenum(L, 2, MaterialTexture, "diffuse");
Texture* texture = lovrMaterialGetTexture(material, textureType);
luax_pushtype(L, Texture, texture);
return 1;
@ -56,7 +56,7 @@ static int l_lovrMaterialSetTexture(lua_State* L) {
MaterialTexture textureType = TEXTURE_DIFFUSE;
int index = 2;
if (lua_type(L, index) == LUA_TSTRING) {
textureType = luax_checkenum(L, index, MaterialTextures, NULL, "MaterialTexture");
textureType = luax_checkenum(L, index, MaterialTexture, NULL);
index++;
}
Texture* texture = lua_isnoneornil(L, index) ? NULL : luax_checktype(L, index, Texture);

View File

@ -89,13 +89,13 @@ static int l_lovrMeshDraw(lua_State* L) {
static int l_lovrMeshGetDrawMode(lua_State* L) {
Mesh* mesh = luax_checktype(L, 1, Mesh);
luax_pushenum(L, DrawModes, lovrMeshGetDrawMode(mesh));
luax_pushenum(L, DrawMode, lovrMeshGetDrawMode(mesh));
return 1;
}
static int l_lovrMeshSetDrawMode(lua_State* L) {
Mesh* mesh = luax_checktype(L, 1, Mesh);
DrawMode mode = luax_checkenum(L, 2, DrawModes, NULL, "DrawMode");
DrawMode mode = luax_checkenum(L, 2, DrawMode, NULL);
lovrMeshSetDrawMode(mesh, mode);
return 0;
}
@ -112,7 +112,7 @@ static int l_lovrMeshGetVertexFormat(lua_State* L) {
lua_createtable(L, 3, 0);
lua_pushstring(L, lovrMeshGetAttributeName(mesh, i));
lua_rawseti(L, -2, 1);
luax_pushenum(L, AttributeTypes, attribute->type);
luax_pushenum(L, AttributeType, attribute->type);
lua_rawseti(L, -2, 2);
lua_pushinteger(L, attribute->components);
lua_rawseti(L, -2, 3);

View File

@ -127,7 +127,7 @@ static int l_lovrModelGetNodePose(lua_State* L) {
}
float position[4], rotation[4], angle, ax, ay, az;
CoordinateSpace space = luax_checkenum(L, 3, CoordinateSpaces, "global", "CoordinateSpace");
CoordinateSpace space = luax_checkenum(L, 3, CoordinateSpace, "global");
lovrModelGetNodePose(model, node, position, rotation, space);
lua_pushnumber(L, position[0]);
lua_pushnumber(L, position[1]);

View File

@ -65,7 +65,7 @@ int luax_checkuniform(lua_State* L, int index, const Uniform* uniform, void* des
case UNIFORM_SAMPLER: {
*((Texture**) dest + i) = luax_checktype(L, j, Texture);
TextureType type = lovrTextureGetType(*((Texture**) dest + i));
lovrAssert(type == uniform->textureType, "Attempt to send %s texture to %s sampler uniform", TextureTypes[type].string, TextureTypes[uniform->textureType].string);
lovrAssert(type == uniform->textureType, "Attempt to send %s texture to %s sampler uniform", lovrTextureType[type].string, lovrTextureType[uniform->textureType].string);
break;
}
@ -76,7 +76,7 @@ int luax_checkuniform(lua_State* L, int index, const Uniform* uniform, void* des
image->mipmap = 0;
image->access = ACCESS_READ_WRITE;
TextureType type = lovrTextureGetType(image->texture);
lovrAssert(type == uniform->textureType, "Attempt to send %s texture to %s image uniform", TextureTypes[type], TextureTypes[uniform->textureType]);
lovrAssert(type == uniform->textureType, "Attempt to send %s texture to %s image uniform", lovrTextureType[type], lovrTextureType[uniform->textureType]);
break;
}
@ -186,7 +186,7 @@ int luax_checkuniform(lua_State* L, int index, const Uniform* uniform, void* des
static int l_lovrShaderGetType(lua_State* L) {
Shader* shader = luax_checktype(L, 1, Shader);
luax_pushenum(L, ShaderTypes, lovrShaderGetType(shader));
luax_pushenum(L, ShaderType, lovrShaderGetType(shader));
return 1;
}
@ -235,7 +235,7 @@ static int l_lovrShaderSendBlock(lua_State* L) {
const char* name = luaL_checkstring(L, 2);
lovrAssert(lovrShaderHasBlock(shader, name), "Unknown shader block '%s'", name);
ShaderBlock* block = luax_checktype(L, 3, ShaderBlock);
UniformAccess access = luax_checkenum(L, 4, UniformAccesses, "readwrite", "UniformAccess");
UniformAccess access = luax_checkenum(L, 4, UniformAccess, "readwrite");
Buffer* buffer = lovrShaderBlockGetBuffer(block);
lovrShaderSetBlock(shader, name, buffer, 0, lovrBufferGetSize(buffer), access);
return 0;
@ -254,7 +254,7 @@ static int l_lovrShaderSendImage(lua_State* L) {
Texture* texture = luax_checktype(L, index++, Texture);
int slice = luaL_optinteger(L, index++, 0) - 1; // Default is -1
int mipmap = luax_optmipmap(L, index++, texture);
UniformAccess access = luax_checkenum(L, index++, UniformAccesses, "readwrite", "UniformAccess");
UniformAccess access = luax_checkenum(L, index++, UniformAccess, "readwrite");
Image image = { .texture = texture, .slice = slice, .mipmap = mipmap, .access = access };
lovrShaderSetImages(shader, name, &image, start, 1);
return 0;

View File

@ -6,7 +6,7 @@
static int l_lovrShaderBlockGetType(lua_State* L) {
ShaderBlock* block = luax_checktype(L, 1, ShaderBlock);
luax_pushenum(L, BlockTypes, lovrShaderBlockGetType(block));
luax_pushenum(L, BlockType, lovrShaderBlockGetType(block));
return 1;
}

View File

@ -9,7 +9,7 @@ int luax_optmipmap(lua_State* L, int index, Texture* texture) {
static int l_lovrTextureGetCompareMode(lua_State* L) {
Texture* texture = luax_checktype(L, 1, Texture);
luax_pushenum(L, CompareModes, lovrTextureGetCompareMode(texture));
luax_pushenum(L, CompareMode, lovrTextureGetCompareMode(texture));
return 1;
}
@ -34,14 +34,14 @@ static int l_lovrTextureGetDimensions(lua_State* L) {
static int l_lovrTextureGetFilter(lua_State* L) {
Texture* texture = luax_checktype(L, 1, Texture);
TextureFilter filter = lovrTextureGetFilter(texture);
luax_pushenum(L, FilterModes, filter.mode);
luax_pushenum(L, FilterMode, filter.mode);
lua_pushnumber(L, filter.anisotropy);
return 2;
}
static int l_lovrTextureGetFormat(lua_State* L) {
Texture* texture = luax_checktype(L, 1, Texture);
luax_pushenum(L, TextureFormats, lovrTextureGetFormat(texture));
luax_pushenum(L, TextureFormat, lovrTextureGetFormat(texture));
return 1;
}
@ -59,7 +59,7 @@ static int l_lovrTextureGetMipmapCount(lua_State* L) {
static int l_lovrTextureGetType(lua_State* L) {
Texture* texture = luax_checktype(L, 1, Texture);
luax_pushenum(L, TextureTypes, lovrTextureGetType(texture));
luax_pushenum(L, TextureType, lovrTextureGetType(texture));
return 1;
}
@ -72,10 +72,10 @@ static int l_lovrTextureGetWidth(lua_State* L) {
static int l_lovrTextureGetWrap(lua_State* L) {
Texture* texture = luax_checktype(L, 1, Texture);
TextureWrap wrap = lovrTextureGetWrap(texture);
luax_pushenum(L, WrapModes, wrap.s);
luax_pushenum(L, WrapModes, wrap.t);
luax_pushenum(L, WrapMode, wrap.s);
luax_pushenum(L, WrapMode, wrap.t);
if (lovrTextureGetType(texture) == TEXTURE_CUBE) {
luax_pushenum(L, WrapModes, wrap.r);
luax_pushenum(L, WrapMode, wrap.r);
return 3;
}
return 2;
@ -94,14 +94,14 @@ static int l_lovrTextureReplacePixels(lua_State* L) {
static int l_lovrTextureSetCompareMode(lua_State* L) {
Texture* texture = luax_checktype(L, 1, Texture);
CompareMode mode = lua_isnoneornil(L, 2) ? COMPARE_NONE : luax_checkenum(L, 2, CompareModes, NULL, "CompareMode");
CompareMode mode = lua_isnoneornil(L, 2) ? COMPARE_NONE : luax_checkenum(L, 2, CompareMode, NULL);
lovrTextureSetCompareMode(texture, mode);
return 0;
}
static int l_lovrTextureSetFilter(lua_State* L) {
Texture* texture = luax_checktype(L, 1, Texture);
FilterMode mode = luax_checkenum(L, 2, FilterModes, NULL, "FilterMode");
FilterMode mode = luax_checkenum(L, 2, FilterMode, NULL);
float anisotropy = luax_optfloat(L, 3, 1.f);
TextureFilter filter = { .mode = mode, .anisotropy = anisotropy };
lovrTextureSetFilter(texture, filter);
@ -111,9 +111,9 @@ static int l_lovrTextureSetFilter(lua_State* L) {
static int l_lovrTextureSetWrap(lua_State* L) {
Texture* texture = luax_checktype(L, 1, Texture);
TextureWrap wrap;
wrap.s = luax_checkenum(L, 2, WrapModes, NULL, "WrapMode");
wrap.t = luax_checkenum(L, 3, WrapModes, lua_tostring(L, 2), "WrapMode");
wrap.r = luax_checkenum(L, 4, WrapModes, lua_tostring(L, 2), "WrapMode");
wrap.s = luax_checkenum(L, 2, WrapMode, NULL);
wrap.t = luax_checkenum(L, 3, WrapMode, lua_tostring(L, 2));
wrap.r = luax_checkenum(L, 4, WrapMode, lua_tostring(L, 2));
lovrTextureSetWrap(texture, wrap);
return 0;
}

View File

@ -8,7 +8,7 @@
#include "core/ref.h"
#include <stdlib.h>
StringEntry HeadsetDrivers[] = {
StringEntry lovrHeadsetDriver[] = {
[DRIVER_DESKTOP] = ENTRY("desktop"),
[DRIVER_OCULUS] = ENTRY("oculus"),
[DRIVER_OPENVR] = ENTRY("openvr"),
@ -19,13 +19,13 @@ StringEntry HeadsetDrivers[] = {
{ 0 }
};
StringEntry HeadsetOrigins[] = {
StringEntry lovrHeadsetOrigin[] = {
[ORIGIN_HEAD] = ENTRY("head"),
[ORIGIN_FLOOR] = ENTRY("floor"),
{ 0 }
};
StringEntry Devices[] = {
StringEntry lovrDevice[] = {
[DEVICE_HEAD] = ENTRY("head"),
[DEVICE_HAND_LEFT] = ENTRY("hand/left"),
[DEVICE_HAND_RIGHT] = ENTRY("hand/right"),
@ -40,7 +40,7 @@ StringEntry Devices[] = {
{ 0 }
};
StringEntry DeviceButtons[] = {
StringEntry lovrDeviceButton[] = {
[BUTTON_TRIGGER] = ENTRY("trigger"),
[BUTTON_THUMBSTICK] = ENTRY("thumbstick"),
[BUTTON_TOUCHPAD] = ENTRY("touchpad"),
@ -54,7 +54,7 @@ StringEntry DeviceButtons[] = {
{ 0 }
};
StringEntry DeviceAxes[] = {
StringEntry lovrDeviceAxis[] = {
[AXIS_TRIGGER] = ENTRY("trigger"),
[AXIS_THUMBSTICK] = ENTRY("thumbstick"),
[AXIS_TOUCHPAD] = ENTRY("touchpad"),
@ -95,7 +95,7 @@ static Device luax_optdevice(lua_State* L, int index) {
} else if (!strcmp(str, "right")) {
return DEVICE_HAND_RIGHT;
}
return luax_checkenum(L, 1, Devices, "head", "Device");
return luax_checkenum(L, 1, Device, "head");
}
static int l_lovrHeadsetInit(lua_State* L) {
@ -115,7 +115,7 @@ static int l_lovrHeadsetInit(lua_State* L) {
int n = luax_len(L, -1);
for (int i = 0; i < n; i++) {
lua_rawgeti(L, -1, i + 1);
drivers[driverCount++] = luax_checkenum(L, -1, HeadsetDrivers, NULL, "HeadsetDriver");
drivers[driverCount++] = luax_checkenum(L, -1, HeadsetDriver, NULL);
lovrAssert(driverCount < sizeof(drivers) / sizeof(drivers[0]), "Too many headset drivers specified in conf.lua");
lua_pop(L, 1);
}
@ -151,14 +151,14 @@ static int l_lovrHeadsetInit(lua_State* L) {
static int l_lovrHeadsetGetDriver(lua_State* L) {
if (lua_gettop(L) == 0) {
luax_pushenum(L, HeadsetDrivers, lovrHeadsetDriver->driverType);
luax_pushenum(L, HeadsetDriver, lovrHeadsetDisplayDriver->driverType);
return 1;
} else {
Device device = luax_optdevice(L, 1);
float position[4], orientation[4];
FOREACH_TRACKING_DRIVER(driver) {
if (driver->getPose(device, position, orientation)) {
luax_pushenum(L, HeadsetDrivers, driver->driverType);
luax_pushenum(L, HeadsetDriver, driver->driverType);
return 1;
}
}
@ -168,7 +168,7 @@ static int l_lovrHeadsetGetDriver(lua_State* L) {
static int l_lovrHeadsetGetName(lua_State* L) {
char name[256];
if (lovrHeadsetDriver->getName(name, sizeof(name))) {
if (lovrHeadsetDisplayDriver->getName(name, sizeof(name))) {
lua_pushstring(L, name);
} else {
lua_pushnil(L);
@ -177,34 +177,34 @@ static int l_lovrHeadsetGetName(lua_State* L) {
}
static int l_lovrHeadsetGetOriginType(lua_State* L) {
luax_pushenum(L, HeadsetOrigins, lovrHeadsetDriver->getOriginType());
luax_pushenum(L, HeadsetOrigin, lovrHeadsetDisplayDriver->getOriginType());
return 1;
}
static int l_lovrHeadsetGetDisplayWidth(lua_State* L) {
uint32_t width, height;
lovrHeadsetDriver->getDisplayDimensions(&width, &height);
lovrHeadsetDisplayDriver->getDisplayDimensions(&width, &height);
lua_pushinteger(L, width);
return 1;
}
static int l_lovrHeadsetGetDisplayHeight(lua_State* L) {
uint32_t width, height;
lovrHeadsetDriver->getDisplayDimensions(&width, &height);
lovrHeadsetDisplayDriver->getDisplayDimensions(&width, &height);
lua_pushinteger(L, height);
return 1;
}
static int l_lovrHeadsetGetDisplayDimensions(lua_State* L) {
uint32_t width, height;
lovrHeadsetDriver->getDisplayDimensions(&width, &height);
lovrHeadsetDisplayDriver->getDisplayDimensions(&width, &height);
lua_pushinteger(L, width);
lua_pushinteger(L, height);
return 2;
}
static int l_lovrHeadsetGetDisplayFrequency(lua_State* L) {
float frequency = lovrHeadsetDriver->getDisplayFrequency ? lovrHeadsetDriver->getDisplayFrequency() : 0.f;
float frequency = lovrHeadsetDisplayDriver->getDisplayFrequency ? lovrHeadsetDisplayDriver->getDisplayFrequency() : 0.f;
if (frequency == 0.f) {
lua_pushnil(L);
} else {
@ -215,7 +215,7 @@ static int l_lovrHeadsetGetDisplayFrequency(lua_State* L) {
static int l_lovrHeadsetGetDisplayMask(lua_State* L) {
uint32_t count;
const float* points = lovrHeadsetDriver->getDisplayMask(&count);
const float* points = lovrHeadsetDisplayDriver->getDisplayMask(&count);
if (!points) {
lua_pushnil(L);
@ -238,14 +238,14 @@ static int l_lovrHeadsetGetDisplayMask(lua_State* L) {
}
static int l_lovrHeadsetGetViewCount(lua_State* L) {
lua_pushinteger(L, lovrHeadsetDriver->getViewCount());
lua_pushinteger(L, lovrHeadsetDisplayDriver->getViewCount());
return 1;
}
static int l_lovrHeadsetGetViewPose(lua_State* L) {
float position[4], orientation[4];
uint32_t view = luaL_checkinteger(L, 1) - 1;
if (!lovrHeadsetDriver->getViewPose(view, position, orientation)) {
if (!lovrHeadsetDisplayDriver->getViewPose(view, position, orientation)) {
lua_pushnil(L);
return 1;
}
@ -264,7 +264,7 @@ static int l_lovrHeadsetGetViewPose(lua_State* L) {
static int l_lovrHeadsetGetViewAngles(lua_State* L) {
float left, right, up, down;
uint32_t view = luaL_checkinteger(L, 1) - 1;
if (!lovrHeadsetDriver->getViewAngles(view, &left, &right, &up, &down)) {
if (!lovrHeadsetDisplayDriver->getViewAngles(view, &left, &right, &up, &down)) {
lua_pushnil(L);
return 1;
}
@ -277,7 +277,7 @@ static int l_lovrHeadsetGetViewAngles(lua_State* L) {
static int l_lovrHeadsetGetClipDistance(lua_State* L) {
float clipNear, clipFar;
lovrHeadsetDriver->getClipDistance(&clipNear, &clipFar);
lovrHeadsetDisplayDriver->getClipDistance(&clipNear, &clipFar);
lua_pushnumber(L, clipNear);
lua_pushnumber(L, clipFar);
return 2;
@ -286,27 +286,27 @@ static int l_lovrHeadsetGetClipDistance(lua_State* L) {
static int l_lovrHeadsetSetClipDistance(lua_State* L) {
float clipNear = luax_checkfloat(L, 1);
float clipFar = luax_checkfloat(L, 2);
lovrHeadsetDriver->setClipDistance(clipNear, clipFar);
lovrHeadsetDisplayDriver->setClipDistance(clipNear, clipFar);
return 0;
}
static int l_lovrHeadsetGetBoundsWidth(lua_State* L) {
float width, depth;
lovrHeadsetDriver->getBoundsDimensions(&width, &depth);
lovrHeadsetDisplayDriver->getBoundsDimensions(&width, &depth);
lua_pushnumber(L, width);
return 1;
}
static int l_lovrHeadsetGetBoundsDepth(lua_State* L) {
float width, depth;
lovrHeadsetDriver->getBoundsDimensions(&width, &depth);
lovrHeadsetDisplayDriver->getBoundsDimensions(&width, &depth);
lua_pushnumber(L, depth);
return 1;
}
static int l_lovrHeadsetGetBoundsDimensions(lua_State* L) {
float width, depth;
lovrHeadsetDriver->getBoundsDimensions(&width, &depth);
lovrHeadsetDisplayDriver->getBoundsDimensions(&width, &depth);
lua_pushnumber(L, width);
lua_pushnumber(L, depth);
return 2;
@ -314,7 +314,7 @@ static int l_lovrHeadsetGetBoundsDimensions(lua_State* L) {
static int l_lovrHeadsetGetBoundsGeometry(lua_State* L) {
uint32_t count;
const float* points = lovrHeadsetDriver->getBoundsGeometry(&count);
const float* points = lovrHeadsetDisplayDriver->getBoundsGeometry(&count);
if (!points) {
lua_pushnil(L);
@ -450,7 +450,7 @@ static int l_lovrHeadsetGetAngularVelocity(lua_State* L) {
static int l_lovrHeadsetIsDown(lua_State* L) {
Device device = luax_optdevice(L, 1);
DeviceButton button = luax_checkenum(L, 2, DeviceButtons, NULL, "DeviceButton");
DeviceButton button = luax_checkenum(L, 2, DeviceButton, NULL);
bool down, changed;
FOREACH_TRACKING_DRIVER(driver) {
if (driver->isDown(device, button, &down, &changed)) {
@ -464,7 +464,7 @@ static int l_lovrHeadsetIsDown(lua_State* L) {
static int l_lovrHeadsetWasPressed(lua_State* L) {
Device device = luax_optdevice(L, 1);
DeviceButton button = luax_checkenum(L, 2, DeviceButtons, NULL, "DeviceButton");
DeviceButton button = luax_checkenum(L, 2, DeviceButton, NULL);
bool down, changed;
FOREACH_TRACKING_DRIVER(driver) {
if (driver->isDown(device, button, &down, &changed)) {
@ -478,7 +478,7 @@ static int l_lovrHeadsetWasPressed(lua_State* L) {
static int l_lovrHeadsetWasReleased(lua_State* L) {
Device device = luax_optdevice(L, 1);
DeviceButton button = luax_checkenum(L, 2, DeviceButtons, NULL, "DeviceButton");
DeviceButton button = luax_checkenum(L, 2, DeviceButton, NULL);
bool down, changed;
FOREACH_TRACKING_DRIVER(driver) {
if (driver->isDown(device, button, &down, &changed)) {
@ -492,7 +492,7 @@ static int l_lovrHeadsetWasReleased(lua_State* L) {
static int l_lovrHeadsetIsTouched(lua_State* L) {
Device device = luax_optdevice(L, 1);
DeviceButton button = luax_checkenum(L, 2, DeviceButtons, NULL, "DeviceButton");
DeviceButton button = luax_checkenum(L, 2, DeviceButton, NULL);
bool touched;
FOREACH_TRACKING_DRIVER(driver) {
if (driver->isTouched(device, button, &touched)) {
@ -513,7 +513,7 @@ static const int axisCounts[MAX_AXES] = {
static int l_lovrHeadsetGetAxis(lua_State* L) {
Device device = luax_optdevice(L, 1);
DeviceAxis axis = luax_checkenum(L, 2, DeviceAxes, NULL, "DeviceAxis");
DeviceAxis axis = luax_checkenum(L, 2, DeviceAxis, NULL);
int count = axisCounts[axis];
float value[4];
FOREACH_TRACKING_DRIVER(driver) {
@ -644,19 +644,19 @@ static int l_lovrHeadsetRenderTo(lua_State* L) {
#else
headsetRenderData.L = L;
#endif
lovrHeadsetDriver->renderTo(renderHelper, &headsetRenderData);
lovrHeadsetDisplayDriver->renderTo(renderHelper, &headsetRenderData);
return 0;
}
static int l_lovrHeadsetUpdate(lua_State* L) {
float dt = luax_checkfloat(L, 1);
if (lovrHeadsetDriver->update) {
lovrHeadsetDriver->update(dt);
if (lovrHeadsetDisplayDriver->update) {
lovrHeadsetDisplayDriver->update(dt);
}
FOREACH_TRACKING_DRIVER(driver) {
if (driver->update && driver != lovrHeadsetDriver) {
if (driver->update && driver != lovrHeadsetDisplayDriver) {
driver->update(dt);
}
}
@ -665,14 +665,14 @@ static int l_lovrHeadsetUpdate(lua_State* L) {
}
static int l_lovrHeadsetGetTime(lua_State* L) {
lua_pushnumber(L, lovrHeadsetDriver->getDisplayTime());
lua_pushnumber(L, lovrHeadsetDisplayDriver->getDisplayTime());
return 1;
}
static int l_lovrHeadsetGetMirrorTexture(lua_State* L) {
Texture *texture = NULL;
if (lovrHeadsetDriver->getMirrorTexture)
texture = lovrHeadsetDriver->getMirrorTexture();
if (lovrHeadsetDisplayDriver->getMirrorTexture)
texture = lovrHeadsetDisplayDriver->getMirrorTexture();
luax_pushtype(L, Texture, texture);
return 1;
@ -691,7 +691,7 @@ static int l_lovrHeadsetGetHands(lua_State* L) {
for (size_t i = 0; i < sizeof(hands) / sizeof(hands[0]); i++) {
FOREACH_TRACKING_DRIVER(driver) {
if (driver->getPose(hands[i], position, orientation)) {
luax_pushenum(L, Devices, hands[i]);
luax_pushenum(L, Device, hands[i]);
lua_rawseti(L, -2, ++count);
}
}

View File

@ -2,7 +2,7 @@
#include "physics/physics.h"
#include "core/ref.h"
StringEntry ShapeTypes[] = {
StringEntry lovrShapeType[] = {
[SHAPE_SPHERE] = ENTRY("sphere"),
[SHAPE_BOX] = ENTRY("box"),
[SHAPE_CAPSULE] = ENTRY("capsule"),
@ -11,7 +11,7 @@ StringEntry ShapeTypes[] = {
{ 0 }
};
StringEntry JointTypes[] = {
StringEntry lovrJointType[] = {
[JOINT_BALL] = ENTRY("ball"),
[JOINT_DISTANCE] = ENTRY("distance"),
[JOINT_HINGE] = ENTRY("hinge"),

View File

@ -41,7 +41,7 @@ static int l_lovrJointDestroy(lua_State* L) {
static int l_lovrJointGetType(lua_State* L) {
Joint* joint = luax_checkjoint(L, 1);
luax_pushenum(L, JointTypes, lovrJointGetType(joint));
luax_pushenum(L, JointType, lovrJointGetType(joint));
return 1;
}

View File

@ -43,7 +43,7 @@ static int l_lovrShapeDestroy(lua_State* L) {
static int l_lovrShapeGetType(lua_State* L) {
Shape* shape = luax_checkshape(L, 1);
luax_pushenum(L, ShapeTypes, lovrShapeGetType(shape));
luax_pushenum(L, ShapeType, lovrShapeGetType(shape));
return 1;
}

View File

@ -1,7 +1,7 @@
#include "headset/headset.h"
#include "core/util.h"
HeadsetInterface* lovrHeadsetDriver = NULL;
HeadsetInterface* lovrHeadsetDisplayDriver = NULL;
HeadsetInterface* lovrHeadsetTrackingDrivers = NULL;
static bool initialized = false;
@ -40,11 +40,11 @@ bool lovrHeadsetInit(HeadsetDriver* drivers, size_t count, float supersample, fl
}
bool hasDisplay = interface->renderTo != NULL;
bool shouldInitialize = !hasDisplay || !lovrHeadsetDriver;
bool shouldInitialize = !hasDisplay || !lovrHeadsetDisplayDriver;
if (shouldInitialize && interface->init(supersample, offset, msaa)) {
if (hasDisplay) {
lovrHeadsetDriver = interface;
lovrHeadsetDisplayDriver = interface;
}
*trackingDrivers = interface;
@ -52,7 +52,7 @@ bool lovrHeadsetInit(HeadsetDriver* drivers, size_t count, float supersample, fl
}
}
lovrAssert(lovrHeadsetDriver, "No headset display driver available, check t.headset.drivers in conf.lua");
lovrAssert(lovrHeadsetDisplayDriver, "No headset display driver available, check t.headset.drivers in conf.lua");
return true;
}
@ -62,7 +62,7 @@ void lovrHeadsetDestroy() {
HeadsetInterface* driver = lovrHeadsetTrackingDrivers;
while (driver) {
if (driver != lovrHeadsetDriver) {
if (driver != lovrHeadsetDisplayDriver) {
driver->destroy();
}
HeadsetInterface* next = driver->next;
@ -70,8 +70,8 @@ void lovrHeadsetDestroy() {
driver = next;
}
if (lovrHeadsetDriver) {
lovrHeadsetDriver->destroy();
lovrHeadsetDriver = NULL;
if (lovrHeadsetDisplayDriver) {
lovrHeadsetDisplayDriver->destroy();
lovrHeadsetDisplayDriver = NULL;
}
}

View File

@ -139,7 +139,7 @@ extern HeadsetInterface lovrHeadsetWebXRDriver;
extern HeadsetInterface lovrHeadsetDesktopDriver;
// Active drivers
extern HeadsetInterface* lovrHeadsetDriver;
extern HeadsetInterface* lovrHeadsetDisplayDriver;
extern HeadsetInterface* lovrHeadsetTrackingDrivers;
#define FOREACH_TRACKING_DRIVER(i)\

View File

@ -30,28 +30,28 @@ static bool webxrAttached = false;
static HeadsetInterface* previousHeadsetDriver;
static void setDriver(HeadsetInterface* new) {
if (lovrHeadsetTrackingDrivers == lovrHeadsetDriver) {
if (lovrHeadsetTrackingDrivers == lovrHeadsetDisplayDriver) {
lovrHeadsetTrackingDrivers = new;
} else {
FOREACH_TRACKING_DRIVER(driver) {
if (driver->next == lovrHeadsetDriver) {
if (driver->next == lovrHeadsetDisplayDriver) {
driver->next = new;
break;
}
}
}
new->next = lovrHeadsetDriver->next;
lovrHeadsetDriver->next = NULL;
lovrHeadsetDriver = new;
new->next = lovrHeadsetDisplayDriver->next;
lovrHeadsetDisplayDriver->next = NULL;
lovrHeadsetDisplayDriver = new;
}
void webxr_attach() {
if (webxrAttached || lovrHeadsetDriver == &lovrHeadsetWebXRDriver) {
if (webxrAttached || lovrHeadsetDisplayDriver == &lovrHeadsetWebXRDriver) {
return;
}
previousHeadsetDriver = lovrHeadsetDriver;
previousHeadsetDriver = lovrHeadsetDisplayDriver;
setDriver(&lovrHeadsetWebXRDriver);
webxrAttached = true;
}