Only dump model surfs once for iw5 as well

This commit is contained in:
Jan 2022-04-17 15:44:25 +02:00
parent 30870c5e07
commit 2ec65924c6
2 changed files with 27 additions and 2 deletions

View File

@ -11,6 +11,24 @@
using namespace IW5;
namespace IW5
{
class SurfsDumpingZoneState final : public IZoneAssetDumperState
{
std::set<const XModelSurfs*> m_dumped_surfs;
public:
bool ShouldDumpTechnique(const XModelSurfs* surfs)
{
if (m_dumped_surfs.find(surfs) != m_dumped_surfs.end())
return false;
m_dumped_surfs.emplace(surfs);
return true;
}
};
}
bool AssetDumperXModel::ShouldDump(XAssetInfo<XModel>* asset)
{
return !asset->m_name.empty() && asset->m_name[0] != ',';
@ -234,10 +252,14 @@ void AssetDumperXModel::DumpObjLod(const AssetDumpingContext& context, XAssetInf
void AssetDumperXModel::DumpObj(AssetDumpingContext& context, XAssetInfo<XModel>* asset)
{
const auto* model = asset->Asset();
auto* surfZoneState = context.GetZoneAssetDumperState<SurfsDumpingZoneState>();
DumpObjMat(context, asset);
for (auto currentLod = 0u; currentLod < model->numLods; currentLod++)
{
if (!model->lodInfo[currentLod].modelSurfs || !surfZoneState->ShouldDumpTechnique(model->lodInfo[currentLod].modelSurfs))
continue;
DumpObjLod(context, asset, currentLod);
}
}
@ -592,11 +614,14 @@ void AssetDumperXModel::DumpXModelExportLod(const AssetDumpingContext& context,
writer->Write(*assetFile);
}
void AssetDumperXModel::DumpXModelExport(const AssetDumpingContext& context, XAssetInfo<XModel>* asset)
void AssetDumperXModel::DumpXModelExport(AssetDumpingContext& context, XAssetInfo<XModel>* asset)
{
auto* surfZoneState = context.GetZoneAssetDumperState<SurfsDumpingZoneState>();
const auto* model = asset->Asset();
for (auto currentLod = 0u; currentLod < model->numLods; currentLod++)
{
if (!model->lodInfo[currentLod].modelSurfs || !surfZoneState->ShouldDumpTechnique(model->lodInfo[currentLod].modelSurfs))
continue;
DumpXModelExportLod(context, asset, currentLod);
}
}

View File

@ -30,7 +30,7 @@ namespace IW5
static void AddXModelVertexBoneWeights(AbstractXModelWriter& writer, const XModelSurfs* modelSurfs, XModelVertexBoneWeightCollection& weightCollection);
static void AddXModelFaces(AbstractXModelWriter& writer, const DistinctMapper<Material*>& materialMapper, const XModelSurfs* modelSurfs, int baseSurfaceIndex);
static void DumpXModelExportLod(const AssetDumpingContext& context, XAssetInfo<XModel>* asset, unsigned lod);
static void DumpXModelExport(const AssetDumpingContext& context, XAssetInfo<XModel>* asset);
static void DumpXModelExport(AssetDumpingContext& context, XAssetInfo<XModel>* asset);
protected:
bool ShouldDump(XAssetInfo<XModel>* asset) override;