All vertex component arguments to Mesh:setVertex and Mesh:setVertexAttribute are now optional rather than required. Float vertex components default to 0, and byte components default to 255.

This commit is contained in:
Alex Szpakowski
2015-06-21 11:47:56 -03:00
parent c82ccbb89b
commit 0583ebe470
2 changed files with 30 additions and 15 deletions
+15 -8
View File
@@ -582,15 +582,22 @@ static Mesh::DrawMode luax_optmeshdrawmode(lua_State *L, int idx, Mesh::DrawMode
return def; return def;
} }
template <typename T> static inline size_t writeVertexByteData(lua_State *L, int startidx, int components, char *data)
static inline size_t writeVertexData(lua_State *L, int startidx, int components, char *data)
{ {
T *componentdata = (T *) data; uint8 *componentdata = (uint8 *) data;
for (int i = 0; i < components; i++) for (int i = 0; i < components; i++)
componentdata[i] = (T) luaL_checknumber(L, startidx + i); componentdata[i] = (uint8) luaL_optnumber(L, startidx + i, 255);
return sizeof(T) * components; return sizeof(uint8) * components;
}
static inline size_t writeVertexFloatData(lua_State *L, int startidx, int components, char *data)
{
float *componentdata = (float *) data;
for (int i = 0; i < components; i++)
componentdata[i] = (float) luaL_optnumber(L, startidx + i, 0);
return sizeof(float) * components;
} }
static Mesh *newStandardMesh(lua_State *L) static Mesh *newStandardMesh(lua_State *L)
@@ -760,11 +767,11 @@ static Mesh *newCustomMesh(lua_State *L)
switch (vertexformat[i].type) switch (vertexformat[i].type)
{ {
case Mesh::DATA_BYTE: case Mesh::DATA_BYTE:
writeVertexData<uint8>(L, -components, components, data); writeVertexByteData(L, -components, components, data);
break; break;
case Mesh::DATA_FLOAT: case Mesh::DATA_FLOAT:
default: default:
writeVertexData<float>(L, -components, components, data); writeVertexFloatData(L, -components, components, data);
break; break;
} }
+15 -7
View File
@@ -39,14 +39,22 @@ Mesh *luax_checkmesh(lua_State *L, int idx)
return luax_checktype<Mesh>(L, idx, GRAPHICS_MESH_ID); return luax_checktype<Mesh>(L, idx, GRAPHICS_MESH_ID);
} }
template <typename T> static inline size_t writeByteData(lua_State *L, int startidx, int components, char *data)
static inline size_t writeData(lua_State *L, int startidx, int components, char *data)
{ {
T *componentdata = (T *) data; uint8 *componentdata = (uint8 *) data;
for (int i = 0; i < components; i++) for (int i = 0; i < components; i++)
componentdata[i] = (T) luaL_checknumber(L, startidx + i); componentdata[i] = (uint8) luaL_optnumber(L, startidx + i, 255);
return sizeof(T) * components; return sizeof(uint8) * components;
}
static inline size_t writeFloatData(lua_State *L, int startidx, int components, char *data)
{
float *componentdata = (float *) data;
for (int i = 0; i < components; i++)
componentdata[i] = (float) luaL_optnumber(L, startidx + i, 0);
return sizeof(float) * components;
} }
static inline char *writeAttributeData(lua_State *L, int startidx, Mesh::DataType type, int components, char *data) static inline char *writeAttributeData(lua_State *L, int startidx, Mesh::DataType type, int components, char *data)
@@ -54,9 +62,9 @@ static inline char *writeAttributeData(lua_State *L, int startidx, Mesh::DataTyp
switch (type) switch (type)
{ {
case Mesh::DATA_BYTE: case Mesh::DATA_BYTE:
return data + writeData<uint8>(L, startidx, components, data); return data + writeByteData(L, startidx, components, data);
case Mesh::DATA_FLOAT: case Mesh::DATA_FLOAT:
return data + writeData<float>(L, startidx, components, data); return data + writeFloatData(L, startidx, components, data);
default: default:
return data; return data;
} }