diff --git a/src/modules/graphics/opengl/wrap_Graphics.cpp b/src/modules/graphics/opengl/wrap_Graphics.cpp index 5da79e111..98c885b05 100644 --- a/src/modules/graphics/opengl/wrap_Graphics.cpp +++ b/src/modules/graphics/opengl/wrap_Graphics.cpp @@ -582,15 +582,22 @@ static Mesh::DrawMode luax_optmeshdrawmode(lua_State *L, int idx, Mesh::DrawMode return def; } -template -static inline size_t writeVertexData(lua_State *L, int startidx, int components, char *data) +static inline size_t writeVertexByteData(lua_State *L, int startidx, int components, char *data) { - T *componentdata = (T *) data; - + uint8 *componentdata = (uint8 *) data; 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) @@ -760,11 +767,11 @@ static Mesh *newCustomMesh(lua_State *L) switch (vertexformat[i].type) { case Mesh::DATA_BYTE: - writeVertexData(L, -components, components, data); + writeVertexByteData(L, -components, components, data); break; case Mesh::DATA_FLOAT: default: - writeVertexData(L, -components, components, data); + writeVertexFloatData(L, -components, components, data); break; } diff --git a/src/modules/graphics/opengl/wrap_Mesh.cpp b/src/modules/graphics/opengl/wrap_Mesh.cpp index a7af1809b..0538edc6d 100644 --- a/src/modules/graphics/opengl/wrap_Mesh.cpp +++ b/src/modules/graphics/opengl/wrap_Mesh.cpp @@ -39,14 +39,22 @@ Mesh *luax_checkmesh(lua_State *L, int idx) return luax_checktype(L, idx, GRAPHICS_MESH_ID); } -template -static inline size_t writeData(lua_State *L, int startidx, int components, char *data) +static inline size_t writeByteData(lua_State *L, int startidx, int components, char *data) { - T *componentdata = (T *) data; + uint8 *componentdata = (uint8 *) data; 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) @@ -54,9 +62,9 @@ static inline char *writeAttributeData(lua_State *L, int startidx, Mesh::DataTyp switch (type) { case Mesh::DATA_BYTE: - return data + writeData(L, startidx, components, data); + return data + writeByteData(L, startidx, components, data); case Mesh::DATA_FLOAT: - return data + writeData(L, startidx, components, data); + return data + writeFloatData(L, startidx, components, data); default: return data; }