int LuaUnitRendering::SetMaterial(lua_State* L) { CUnit* unit = ParseUnit(L, __FUNCTION__, 1); if (unit == NULL) { return 0; } const unsigned int lod = (unsigned int)luaL_checknumber(L, 2) - 1; const string matName = luaL_checkstring(L, 3); const LuaMatType matType = ParseMaterialType(matName); LuaUnitMaterial* unitMat = GetUnitMaterial(unit, matName); if (unitMat == NULL) { return 0; } LuaUnitLODMaterial* lodMat = unitMat->GetMaterial(lod); if (lodMat == NULL) { return 0; } if (lua_isuserdata(L, 4)) { LuaMatRef** matRef = (LuaMatRef**) luaL_checkudata(L, 4, "MatRef"); if (matRef) { lodMat->matref = **matRef; } } else { lodMat->matref = ParseMaterial(L, __FUNCTION__, 4, matType); } return 0; }
// Set all lods at once? int LuaUnitRendering::SetUnitUniform(lua_State* L) // FIXME { CUnit* unit = ParseUnit(L, __FUNCTION__, 1); if (unit == NULL) { return 0; } GML_LODMUTEX_LOCK(unit); // SetUnitUniform const string matName = luaL_checkstring(L, 2); LuaUnitMaterial* unitMat = GetUnitMaterial(unit, matName); if (unitMat == NULL) { return 0; } const unsigned int lod = (unsigned int)luaL_checknumber(L, 3) - 1; LuaUnitLODMaterial* lodMat = unitMat->GetMaterial(lod); if (lodMat == NULL) { return 0; } const int args = lua_gettop(L) - 3; const int lastArg = min(args, lodMat->uniforms.customCount + 3); for (int i = 3; i <= lastArg; i++) { } return 0; }
int LuaUnitRendering::SetMaterialDisplayLists(lua_State* L) { CUnit* unit = ParseUnit(L, __FUNCTION__, 1); if (unit == NULL) { return 0; } const unsigned int lod = (unsigned int)luaL_checknumber(L, 2) - 1; const string matName = luaL_checkstring(L, 3); LuaUnitMaterial* unitMat = GetUnitMaterial(unit, matName); if (unitMat == NULL) { return 0; } LuaUnitLODMaterial* lodMat = unitMat->GetMaterial(lod); if (lodMat == NULL) { return 0; } lodMat->preDisplayList = ParseDisplayList(L, __FUNCTION__, 4); lodMat->postDisplayList = ParseDisplayList(L, __FUNCTION__, 5); return 0; }