Mesh:setVertices can now accept a Data object.

This commit is contained in:
Alex Szpakowski
2015-12-11 00:07:42 -04:00
parent 20fb7f44df
commit 7769090c1f
+17 -4
View File
@@ -108,12 +108,28 @@ const char *luax_readAttributeData(lua_State *L, Mesh::DataType type, int compon
int w_Mesh_setVertices(lua_State *L)
{
Mesh *t = luax_checkmesh(L, 1);
luaL_checktype(L, 2, LUA_TTABLE);
size_t vertoffset = (size_t) luaL_optnumber(L, 3, 1) - 1;
if (vertoffset >= t->getVertexCount())
return luaL_error(L, "Invalid vertex start index (must be between 1 and %d)", (int) t->getVertexCount());
size_t stride = t->getVertexStride();
size_t byteoffset = vertoffset * stride;
if (luax_istype(L, 2, DATA_ID))
{
Data *d = luax_checktype<Data>(L, 2, DATA_ID);
size_t datasize = std::min(d->getSize(), (t->getVertexCount() - vertoffset) * stride);
char *bytedata = (char *) t->mapVertexData() + byteoffset;
memcpy(bytedata, d->getData(), datasize);
t->unmapVertexData(byteoffset, datasize);
return 0;
}
luaL_checktype(L, 2, LUA_TTABLE);
size_t nvertices = luax_objlen(L, 2);
if (vertoffset + nvertices > t->getVertexCount())
@@ -125,9 +141,6 @@ int w_Mesh_setVertices(lua_State *L)
for (const Mesh::AttribFormat &format : vertexformat)
ncomponents += format.components;
size_t stride = t->getVertexStride();
size_t byteoffset = vertoffset * stride;
char *data = (char *) t->mapVertexData() + byteoffset;
for (size_t i = 0; i < nvertices; i++)