Clean up util naming;

This commit is contained in:
bjorn 2016-11-19 00:37:43 -08:00
parent a743cfd3b6
commit 0c200b9a2c
6 changed files with 70 additions and 85 deletions

View File

@ -30,11 +30,11 @@ void lovrInit(lua_State* L, int argc, char** argv) {
lua_setglobal(L, "lovr");
// Preload modules
luaPreloadModule(L, "lovr.event", l_lovrEventInit);
luaPreloadModule(L, "lovr.filesystem", l_lovrFilesystemInit);
luaPreloadModule(L, "lovr.graphics", l_lovrGraphicsInit);
luaPreloadModule(L, "lovr.headset", l_lovrHeadsetInit);
luaPreloadModule(L, "lovr.timer", l_lovrTimerInit);
luax_preloadmodule(L, "lovr.event", l_lovrEventInit);
luax_preloadmodule(L, "lovr.filesystem", l_lovrFilesystemInit);
luax_preloadmodule(L, "lovr.graphics", l_lovrGraphicsInit);
luax_preloadmodule(L, "lovr.headset", l_lovrHeadsetInit);
luax_preloadmodule(L, "lovr.timer", l_lovrTimerInit);
// Bootstrap
char buffer[2048];

View File

@ -86,11 +86,11 @@ const luaL_Reg lovrGraphics[] = {
int l_lovrGraphicsInit(lua_State* L) {
lua_newtable(L);
luaL_register(L, NULL, lovrGraphics);
luaRegisterType(L, "Buffer", lovrBuffer);
luaRegisterType(L, "Model", lovrModel);
luaRegisterType(L, "Shader", lovrShader);
luaRegisterType(L, "Skybox", lovrSkybox);
luaRegisterType(L, "Texture", lovrTexture);
luax_registertype(L, "Buffer", lovrBuffer);
luax_registertype(L, "Model", lovrModel);
luax_registertype(L, "Shader", lovrShader);
luax_registertype(L, "Skybox", lovrSkybox);
luax_registertype(L, "Texture", lovrTexture);
map_init(&BufferAttributeTypes);
map_set(&BufferAttributeTypes, "float", BUFFER_FLOAT);
@ -530,7 +530,7 @@ int l_lovrGraphicsNewBuffer(lua_State* L) {
}
vec_deinit(&format);
luax_pushlovrtype(L, Buffer, buffer);
luax_pushtype(L, Buffer, buffer);
return 1;
}
@ -617,7 +617,7 @@ int l_lovrGraphicsNewTexture(lua_State* L) {
texture = lovrTextureCreate(data, size);
free(data);
} else {
Buffer* buffer = luax_checklovrtype(L, 1, Buffer); // TODO don't error if it's not a buffer
Buffer* buffer = luax_checktype(L, 1, Buffer); // TODO don't error if it's not a buffer
texture = lovrTextureCreateFromBuffer(buffer);
}

View File

@ -34,7 +34,7 @@ const luaL_Reg lovrHeadset[] = {
int l_lovrHeadsetInit(lua_State* L) {
lua_newtable(L);
luaL_register(L, NULL, lovrHeadset);
luaRegisterType(L, "Controller", lovrController);
luax_registertype(L, "Controller", lovrController);
map_init(&ControllerHands);
map_set(&ControllerHands, "left", CONTROLLER_HAND_LEFT);

View File

@ -69,32 +69,32 @@ const luaL_Reg lovrBuffer[] = {
};
int l_lovrBufferDraw(lua_State* L) {
Buffer* buffer = luax_checklovrtype(L, 1, Buffer);
Buffer* buffer = luax_checktype(L, 1, Buffer);
lovrBufferDraw(buffer);
return 0;
}
int l_lovrBufferGetDrawMode(lua_State* L) {
Buffer* buffer = luax_checklovrtype(L, 1, Buffer);
Buffer* buffer = luax_checktype(L, 1, Buffer);
lua_pushstring(L, map_int_find(&BufferDrawModes, lovrBufferGetDrawMode(buffer)));
return 1;
}
int l_lovrBufferSetDrawMode(lua_State* L) {
Buffer* buffer = luax_checklovrtype(L, 1, Buffer);
Buffer* buffer = luax_checktype(L, 1, Buffer);
BufferDrawMode* drawMode = (BufferDrawMode*) luax_checkenum(L, 2, &BufferDrawModes, "buffer draw mode");
lovrBufferSetDrawMode(buffer, *drawMode);
return 0;
}
int l_lovrBufferGetVertexCount(lua_State* L) {
Buffer* buffer = luax_checklovrtype(L, 1, Buffer);
Buffer* buffer = luax_checktype(L, 1, Buffer);
lua_pushnumber(L, lovrBufferGetVertexCount(buffer));
return 1;
}
int l_lovrBufferGetVertex(lua_State* L) {
Buffer* buffer = luax_checklovrtype(L, 1, Buffer);
Buffer* buffer = luax_checktype(L, 1, Buffer);
int index = luaL_checkint(L, 2) - 1;
void* vertex = lovrBufferGetScratchVertex(buffer);
lovrBufferGetVertex(buffer, index, vertex);
@ -103,7 +103,7 @@ int l_lovrBufferGetVertex(lua_State* L) {
}
int l_lovrBufferSetVertex(lua_State* L) {
Buffer* buffer = luax_checklovrtype(L, 1, Buffer);
Buffer* buffer = luax_checktype(L, 1, Buffer);
int index = luaL_checkint(L, 2) - 1;
BufferFormat format = lovrBufferGetVertexFormat(buffer);
void* vertex = lovrBufferGetScratchVertex(buffer);
@ -182,7 +182,7 @@ int l_lovrBufferSetVertex(lua_State* L) {
}
int l_lovrBufferSetVertices(lua_State* L) {
Buffer* buffer = luax_checklovrtype(L, 1, Buffer);
Buffer* buffer = luax_checktype(L, 1, Buffer);
BufferFormat format = lovrBufferGetVertexFormat(buffer);
luaL_checktype(L, 2, LUA_TTABLE);
int vertexCount = lua_objlen(L, 2);
@ -239,7 +239,7 @@ int l_lovrBufferSetVertices(lua_State* L) {
}
int l_lovrBufferGetVertexMap(lua_State* L) {
Buffer* buffer = luax_checklovrtype(L, 1, Buffer);
Buffer* buffer = luax_checktype(L, 1, Buffer);
int count;
unsigned int* indices = lovrBufferGetVertexMap(buffer, &count);
@ -258,7 +258,7 @@ int l_lovrBufferGetVertexMap(lua_State* L) {
}
int l_lovrBufferSetVertexMap(lua_State* L) {
Buffer* buffer = luax_checklovrtype(L, 1, Buffer);
Buffer* buffer = luax_checktype(L, 1, Buffer);
if (lua_isnoneornil(L, 2)) {
lovrBufferSetVertexMap(buffer, NULL, 0);
@ -290,7 +290,7 @@ int l_lovrBufferSetVertexMap(lua_State* L) {
}
int l_lovrBufferGetDrawRange(lua_State* L) {
Buffer* buffer = luax_checklovrtype(L, 1, Buffer);
Buffer* buffer = luax_checktype(L, 1, Buffer);
if (!lovrBufferIsRangeEnabled(buffer)) {
lua_pushnil(L);
return 1;
@ -304,7 +304,7 @@ int l_lovrBufferGetDrawRange(lua_State* L) {
}
int l_lovrBufferSetDrawRange(lua_State* L) {
Buffer* buffer = luax_checklovrtype(L, 1, Buffer);
Buffer* buffer = luax_checktype(L, 1, Buffer);
if (lua_isnoneornil(L, 2)) {
lovrBufferSetRangeEnabled(buffer, 0);
return 0;
@ -321,13 +321,13 @@ int l_lovrBufferSetDrawRange(lua_State* L) {
}
int l_lovrBufferGetTexture(lua_State* L) {
Buffer* buffer = luax_checklovrtype(L, 1, Buffer);
Buffer* buffer = luax_checktype(L, 1, Buffer);
luax_pushtexture(L, lovrBufferGetTexture(buffer));
return 1;
}
int l_lovrBufferSetTexture(lua_State* L) {
Buffer* buffer = luax_checklovrtype(L, 1, Buffer);
Buffer* buffer = luax_checktype(L, 1, Buffer);
Texture* texture = luax_checktexture(L, 2);
lovrBufferSetTexture(buffer, texture);
return 0;

View File

@ -18,7 +18,34 @@ unsigned char* loadImage(void* data, size_t size, int* w, int* h, int* n, int ch
return stbi_load_from_memory(data, size, w, h, n, channels);
}
int luaPreloadModule(lua_State* L, const char* key, lua_CFunction f) {
// Returns a key that maps to value or NULL if the value is not in the map
const char* map_int_find(map_int_t* map, int value) {
const char* key;
map_iter_t iter = map_iter(map);
while ((key = map_next(map, &iter))) {
if (*map_get(map, key) == value) {
return key;
}
}
return NULL;
}
void* lovrAlloc(size_t size, void (*destructor)(const Ref* ref)) {
void* object = malloc(size);
if (!object) return NULL;
*((Ref*) object) = (Ref) { destructor, 1 };
return object;
}
void lovrRetain(const Ref* ref) {
((Ref*) ref)->count++;
}
void lovrRelease(const Ref* ref) {
if (--((Ref*) ref)->count == 0 && ref->free) ref->free(ref);
}
int luax_preloadmodule(lua_State* L, const char* key, lua_CFunction f) {
lua_getglobal(L, "package");
lua_getfield(L, -1, "preload");
lua_pushcfunction(L, f);
@ -27,23 +54,7 @@ int luaPreloadModule(lua_State* L, const char* key, lua_CFunction f) {
return 0;
}
void luaRegisterModule(lua_State* L, const char* name, const luaL_Reg* module) {
// Get reference to lovr
lua_getglobal(L, "lovr");
// Create a table and fill it with the module functions
lua_newtable(L);
luaL_register(L, NULL, module);
// lovr[name] = module
lua_setfield(L, -2, name);
// Pop lovr
lua_pop(L, 1);
}
void luaRegisterType(lua_State* L, const char* name, const luaL_Reg* functions) {
void luax_registertype(lua_State* L, const char* name, const luaL_Reg* functions) {
// Push metatable
luaL_newmetatable(L, name);
@ -54,7 +65,7 @@ void luaRegisterType(lua_State* L, const char* name, const luaL_Reg* functions)
lua_setfield(L, -1, "__index");
// m.__gc = gc
lua_pushcfunction(L, luax_destroylovrtype);
lua_pushcfunction(L, luax_releasetype);
lua_setfield(L, -2, "__gc");
// m.name = name
@ -70,16 +81,9 @@ void luaRegisterType(lua_State* L, const char* name, const luaL_Reg* functions)
lua_pop(L, 1);
}
// Returns a key that maps to value or NULL if the value is not in the map
const char* map_int_find(map_int_t* map, int value) {
const char* key;
map_iter_t iter = map_iter(map);
while ((key = map_next(map, &iter))) {
if (*map_get(map, key) == value) {
return key;
}
}
return NULL;
int luax_releasetype(lua_State* L) {
lovrRelease(*(Ref**) lua_touserdata(L, 1));
return 0;
}
void* luax_checkenum(lua_State* L, int index, map_int_t* map, const char* typeName) {
@ -103,23 +107,3 @@ void* luax_optenum(lua_State* L, int index, const char* fallback, map_int_t* map
return value;
}
void* lovrAlloc(size_t size, void (*destructor)(const Ref* ref)) {
void* object = malloc(size);
if (!object) return NULL;
*((Ref*) object) = (Ref) { destructor, 1 };
return object;
}
void lovrRetain(const Ref* ref) {
((Ref*) ref)->count++;
}
void lovrRelease(const Ref* ref) {
if (--((Ref*) ref)->count == 0 && ref->free) ref->free(ref);
}
int luax_destroylovrtype(lua_State* L) {
lovrRelease(*(Ref**) lua_touserdata(L, 1));
return 0;
}

View File

@ -6,6 +6,8 @@
#ifndef UTIL_TYPES
#define UTIL_TYPES
#define containerof(ptr, type) ((type*)((char*)(ptr) - offsetof(type, ref)))
#define MAX(a, b) a > b ? a : b
#define MIN(a, b) a < b ? a : b
@ -15,9 +17,9 @@
#define LOVR_COLOR_B(c) (c >> 8 & 0xff)
#define LOVR_COLOR_A(c) (c >> 0 & 0xff)
#define luax_checklovrtype(L, i, T) *(T**) luaL_checkudata(L, i, #T);
#define luax_checktype(L, i, T) *(T**) luaL_checkudata(L, i, #T);
#define luax_pushlovrtype(L, T, x) \
#define luax_pushtype(L, T, x) \
T** u = (T**) lua_newuserdata(L, sizeof(T**)); \
luaL_getmetatable(L, #T); \
lua_setmetatable(L, -2); \
@ -28,20 +30,19 @@ typedef struct ref {
int count;
} Ref;
#define containerof(ptr, type) ((type*)((char*)(ptr) - offsetof(type, ref)))
typedef vec_t(unsigned int) vec_uint_t;
#endif
void error(const char* format, ...);
unsigned char* loadImage(void* data, size_t size, int* w, int* h, int* n, int channels);
void luaRegisterModule(lua_State* L, const char* name, const luaL_Reg* module);
void luaRegisterType(lua_State* L, const char* name, const luaL_Reg* functions);
int luaPreloadModule(lua_State* L, const char* key, lua_CFunction f);
const char* map_int_find(map_int_t *map, int value);
void* luax_checkenum(lua_State* L, int index, map_int_t* map, const char* typeName);
void* luax_optenum(lua_State* L, int index, const char* fallback, map_int_t* map, const char* typeName);
void* lovrAlloc(size_t size, void (*destructor)(const Ref* ref));
void lovrRetain(const Ref* ref);
void lovrRelease(const Ref* ref);
int luax_destroylovrtype(lua_State* L);
int luax_preloadmodule(lua_State* L, const char* key, lua_CFunction f);
void luax_registertype(lua_State* L, const char* name, const luaL_Reg* functions);
int luax_releasetype(lua_State* L);
void* luax_checkenum(lua_State* L, int index, map_int_t* map, const char* typeName);
void* luax_optenum(lua_State* L, int index, const char* fallback, map_int_t* map, const char* typeName);