mirror of https://github.com/bjornbytes/lovr.git
Clean up util naming;
This commit is contained in:
parent
a743cfd3b6
commit
0c200b9a2c
10
src/lovr.c
10
src/lovr.c
|
@ -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];
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
82
src/util.c
82
src/util.c
|
@ -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;
|
||||
}
|
||||
|
|
21
src/util.h
21
src/util.h
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue