Browse Source

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.

Alex Szpakowski 10 years ago
parent
commit
0583ebe470

+ 14 - 7
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;
 	return def;
 }
 }
 
 
-template <typename T>
-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] = (uint8) luaL_optnumber(L, startidx + i, 255);
+
+	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++)
 	for (int i = 0; i < components; i++)
-		componentdata[i] = (T) luaL_checknumber(L, startidx + i);
+		componentdata[i] = (float) luaL_optnumber(L, startidx + i, 0);
 
 
-	return sizeof(T) * components;
+	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
src/modules/graphics/opengl/wrap_Mesh.cpp

@@ -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 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++)
 	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;
 	}
 	}