2018-01-16 07:13:26 +00:00
|
|
|
#include "api.h"
|
|
|
|
#include "data/data.h"
|
2018-01-21 21:26:00 +00:00
|
|
|
#include "data/audioStream.h"
|
2018-01-23 02:24:39 +00:00
|
|
|
#include "data/model.h"
|
2018-01-22 16:40:47 +00:00
|
|
|
#include "data/rasterizer.h"
|
|
|
|
#include "data/texture.h"
|
2018-01-16 07:13:26 +00:00
|
|
|
|
|
|
|
int l_lovrDataInit(lua_State* L) {
|
|
|
|
lua_newtable(L);
|
|
|
|
luaL_register(L, NULL, lovrData);
|
2018-01-21 21:26:00 +00:00
|
|
|
luax_registertype(L, "AudioStream", lovrAudioStream);
|
2018-01-23 02:24:39 +00:00
|
|
|
luax_registertype(L, "ModelData", lovrModelData);
|
2018-01-22 16:40:47 +00:00
|
|
|
luax_registertype(L, "Rasterizer", lovrRasterizer);
|
|
|
|
luax_registertype(L, "TextureData", lovrTextureData);
|
2018-02-11 01:27:29 +00:00
|
|
|
luax_registertype(L, "VertexData", lovrVertexData);
|
2018-01-22 16:40:47 +00:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
int l_lovrDataNewAudioStream(lua_State* L) {
|
|
|
|
Blob* blob = luax_readblob(L, 1, "Sound");
|
|
|
|
size_t bufferSize = luaL_optinteger(L, 2, 4096);
|
|
|
|
AudioStream* stream = lovrAudioStreamCreate(blob, bufferSize);
|
|
|
|
luax_pushtype(L, AudioStream, stream);
|
|
|
|
lovrRelease(&blob->ref);
|
|
|
|
lovrRelease(&stream->ref);
|
2018-01-21 05:33:09 +00:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2018-01-23 02:24:39 +00:00
|
|
|
int l_lovrDataNewModelData(lua_State* L) {
|
|
|
|
Blob* blob = luax_readblob(L, 1, "Model");
|
|
|
|
ModelData* modelData = lovrModelDataCreate(blob);
|
|
|
|
luax_pushtype(L, ModelData, modelData);
|
|
|
|
lovrRelease(&blob->ref);
|
|
|
|
lovrRelease(&modelData->ref);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2018-01-22 16:40:47 +00:00
|
|
|
int l_lovrDataNewRasterizer(lua_State* L) {
|
|
|
|
Blob* blob = NULL;
|
|
|
|
float size;
|
|
|
|
|
|
|
|
if (lua_type(L, 1) == LUA_TNUMBER || lua_isnoneornil(L, 1)) {
|
|
|
|
size = luaL_optnumber(L, 1, 32);
|
|
|
|
} else {
|
|
|
|
blob = luax_readblob(L, 1, "Font");
|
|
|
|
size = luaL_optnumber(L, 2, 32);
|
|
|
|
}
|
|
|
|
|
|
|
|
Rasterizer* rasterizer = lovrRasterizerCreate(blob, size);
|
|
|
|
luax_pushtype(L, Rasterizer, rasterizer);
|
|
|
|
|
|
|
|
if (blob) {
|
|
|
|
lovrRelease(&blob->ref);
|
|
|
|
}
|
|
|
|
|
|
|
|
lovrRelease(&rasterizer->ref);
|
2018-01-21 21:26:00 +00:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2018-02-11 01:27:29 +00:00
|
|
|
int l_lovrDataNewTextureData(lua_State* L) {
|
|
|
|
TextureData* textureData = NULL;
|
|
|
|
if (lua_type(L, 1) == LUA_TNUMBER) {
|
|
|
|
int width = luaL_checknumber(L, 1);
|
|
|
|
int height = luaL_checknumber(L, 2);
|
|
|
|
textureData = lovrTextureDataGetBlank(width, height, 0x0, FORMAT_RGBA);
|
|
|
|
} else {
|
|
|
|
Blob* blob = luax_readblob(L, 1, "Texture");
|
|
|
|
textureData = lovrTextureDataFromBlob(blob);
|
|
|
|
lovrRelease(&blob->ref);
|
|
|
|
}
|
|
|
|
|
|
|
|
luax_pushtype(L, TextureData, textureData);
|
|
|
|
lovrRelease(&textureData->ref);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
int l_lovrDataNewVertexData(lua_State* L) {
|
|
|
|
uint32_t count = luaL_checkinteger(L, 1);
|
|
|
|
VertexFormat format;
|
|
|
|
vertexFormatInit(&format);
|
|
|
|
luax_checkvertexformat(L, 2, &format);
|
|
|
|
VertexData* vertexData = lovrVertexDataCreate(count, format.count > 0 ? &format : NULL, true);
|
|
|
|
luax_pushtype(L, VertexData, vertexData);
|
|
|
|
lovrRelease(&vertexData->ref);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2018-01-16 07:13:26 +00:00
|
|
|
const luaL_Reg lovrData[] = {
|
2018-01-21 21:26:00 +00:00
|
|
|
{ "newAudioStream", l_lovrDataNewAudioStream },
|
2018-01-23 02:24:39 +00:00
|
|
|
{ "newModelData", l_lovrDataNewModelData },
|
2018-01-22 16:40:47 +00:00
|
|
|
{ "newRasterizer", l_lovrDataNewRasterizer },
|
2018-01-21 05:33:09 +00:00
|
|
|
{ "newTextureData", l_lovrDataNewTextureData },
|
2018-02-11 01:27:29 +00:00
|
|
|
{ "newVertexData", l_lovrDataNewVertexData },
|
2018-01-16 07:13:26 +00:00
|
|
|
{ NULL, NULL }
|
|
|
|
};
|