mirror of
https://github.com/love2d/love.git
synced 2026-08-19 20:19:42 +02:00
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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user