Skip some files in ig build when possible

hg/feature/sse2
kaetemi 11 years ago
parent 13e3849c89
commit 06e8090669

@ -205,6 +205,7 @@ struct SOptions : public SExportOptions
{ {
CIXml xml (true); CIXml xml (true);
xml.init (fileIn); xml.init (fileIn);
ZoneRegionFile = filename;
ZoneRegion = new CZoneRegion; ZoneRegion = new CZoneRegion;
ZoneRegion->serial (xml); ZoneRegion->serial (xml);
} }

@ -2402,55 +2402,79 @@ void CExport::transformCMB (const std::string &name, const NLMISC::CMatrix &tran
_ExportCB->dispWarning("Can't find " + cmbNoExtension + ".cmb"); _ExportCB->dispWarning("Can't find " + cmbNoExtension + ".cmb");
return; return;
} }
CIFile inStream; std::string outFileName = _Options->OutCMBDir +"/" + cmbNoExtension + ".cmb";
if (inStream.open(cmbName)) bool needUpdate = true;
if (CFile::fileExists(outFileName))
{ {
try uint32 outModification = CFile::getFileModificationDate(outFileName);
needUpdate =
CFile::getFileModificationDate(cmbName) > outModification
|| (CFile::fileExists(_Options->HeightMapFile) && (CFile::getFileModificationDate(_Options->HeightMapFile) > outModification))
|| (CFile::fileExists(_Options->HeightMapFile2) && (CFile::getFileModificationDate(_Options->HeightMapFile2) > outModification))
|| (CFile::fileExists(_Options->ContinentFile) && (CFile::getFileModificationDate(_Options->ContinentFile) > outModification))
|| (CFile::fileExists(_Options->ZoneRegionFile) && (CFile::getFileModificationDate(_Options->ZoneRegionFile) > outModification));
}
if (needUpdate)
{
if (_ExportCB != NULL)
_ExportCB->dispInfo("UPDATE " + cmbName);
printf("UPDATE %s\n", cmbName.c_str());
CIFile inStream;
if (inStream.open(cmbName))
{ {
CCollisionMeshBuild cmb; try
cmb.serial(inStream);
// translate and save
cmb.transform (transfo);
COFile outStream;
std::string outFileName = _Options->OutCMBDir +"/" + cmbNoExtension + ".cmb";
if (!outStream.open(outFileName))
{
if (_ExportCB != NULL)
_ExportCB->dispWarning("Couldn't open " + outFileName + "for writing, not exporting");
}
else
{ {
try CCollisionMeshBuild cmb;
cmb.serial(inStream);
// translate and save
cmb.transform (transfo);
COFile outStream;
if (!outStream.open(outFileName))
{ {
cmb.serial(outStream); if (_ExportCB != NULL)
outStream.close(); _ExportCB->dispWarning("Couldn't open " + outFileName + "for writing, not exporting");
} }
catch (const EStream &e) else
{ {
outStream.close(); try
if (_ExportCB != NULL)
{ {
_ExportCB->dispWarning("Error while writing " + outFileName); cmb.serial(outStream);
_ExportCB->dispWarning(e.what()); outStream.close();
}
catch (const EStream &e)
{
outStream.close();
if (_ExportCB != NULL)
{
_ExportCB->dispWarning("Error while writing " + outFileName);
_ExportCB->dispWarning(e.what());
}
} }
} }
inStream.close();
}
catch (const EStream &e)
{
inStream.close();
if (_ExportCB != NULL)
{
_ExportCB->dispWarning("Error while reading " + cmbName);
_ExportCB->dispWarning(e.what());
}
} }
inStream.close();
} }
catch (const EStream &e) else
{ {
inStream.close();
if (_ExportCB != NULL) if (_ExportCB != NULL)
{ _ExportCB->dispWarning("Unable to open " + cmbName);
_ExportCB->dispWarning("Error while reading " + cmbName);
_ExportCB->dispWarning(e.what());
}
} }
} }
else else
{ {
if (_ExportCB != NULL) if (_ExportCB != NULL)
_ExportCB->dispWarning("Unable to open " + cmbName); _ExportCB->dispInfo("SKIP " + cmbName);
printf("SKIP %s\n", cmbName.c_str());
} }
} }
@ -2471,98 +2495,122 @@ void CExport::transformAdditionnalIG (const std::string &name, const NLMISC::CMa
_ExportCB->dispWarning("Can't find " + igNoExtension + ".cmb"); _ExportCB->dispWarning("Can't find " + igNoExtension + ".cmb");
return; return;
} }
CIFile inStream; std::string outFileName = _Options->AdditionnalIGOutDir +"/" + igNoExtension + ".ig";
if (inStream.open(igName)) bool needUpdate = true;
if (CFile::fileExists(outFileName))
{ {
try uint32 outModification = CFile::getFileModificationDate(outFileName);
needUpdate =
CFile::getFileModificationDate(igName) > outModification
|| (CFile::fileExists(_Options->HeightMapFile) && (CFile::getFileModificationDate(_Options->HeightMapFile) > outModification))
|| (CFile::fileExists(_Options->HeightMapFile2) && (CFile::getFileModificationDate(_Options->HeightMapFile2) > outModification))
|| (CFile::fileExists(_Options->ContinentFile) && (CFile::getFileModificationDate(_Options->ContinentFile) > outModification))
|| (CFile::fileExists(_Options->ZoneRegionFile) && (CFile::getFileModificationDate(_Options->ZoneRegionFile) > outModification));
}
if (needUpdate)
{
if (_ExportCB != NULL)
_ExportCB->dispInfo("UPDATE " + igName);
printf("UPDATE %s\n", igName.c_str());
CIFile inStream;
if (inStream.open(igName))
{ {
CInstanceGroup ig, igOut; try
ig.serial(inStream); {
CInstanceGroup ig, igOut;
ig.serial(inStream);
CVector globalPos; CVector globalPos;
CInstanceGroup::TInstanceArray IA; CInstanceGroup::TInstanceArray IA;
std::vector<CCluster> Clusters; std::vector<CCluster> Clusters;
std::vector<CPortal> Portals; std::vector<CPortal> Portals;
std::vector<CPointLightNamed> PLN; std::vector<CPointLightNamed> PLN;
ig.retrieve(globalPos, IA, Clusters, Portals, PLN); ig.retrieve(globalPos, IA, Clusters, Portals, PLN);
bool realTimeSuncontribution = ig.getRealTimeSunContribution(); bool realTimeSuncontribution = ig.getRealTimeSunContribution();
uint k; uint k;
// elevate instance // elevate instance
for(k = 0; k < IA.size(); ++k) for(k = 0; k < IA.size(); ++k)
{
IA[k].Pos = transfo * IA[k].Pos;
IA[k].Rot = rotTransfo * IA[k].Rot;
}
// lights
for(k = 0; k < PLN.size(); ++k)
{
PLN[k].setPosition(transfo * PLN[k].getPosition());
}
// portals
std::vector<CVector> portal;
for(k = 0; k < Portals.size(); ++k)
{
Portals[k].getPoly(portal);
for(uint l = 0; l < portal.size(); ++l)
{ {
portal[l] = transfo * portal[l]; IA[k].Pos = transfo * IA[k].Pos;
IA[k].Rot = rotTransfo * IA[k].Rot;
}
// lights
for(k = 0; k < PLN.size(); ++k)
{
PLN[k].setPosition(transfo * PLN[k].getPosition());
}
// portals
std::vector<CVector> portal;
for(k = 0; k < Portals.size(); ++k)
{
Portals[k].getPoly(portal);
for(uint l = 0; l < portal.size(); ++l)
{
portal[l] = transfo * portal[l];
}
Portals[k].setPoly(portal);
} }
Portals[k].setPoly(portal);
}
// clusters // clusters
for(k = 0; k < Clusters.size(); ++k) for(k = 0; k < Clusters.size(); ++k)
{ {
Clusters[k].applyMatrix (transfo); Clusters[k].applyMatrix (transfo);
} }
igOut.build(globalPos, IA, Clusters, Portals, PLN); igOut.build(globalPos, IA, Clusters, Portals, PLN);
igOut.enableRealTimeSunContribution(realTimeSuncontribution); igOut.enableRealTimeSunContribution(realTimeSuncontribution);
COFile outStream; COFile outStream;
std::string outFileName = _Options->AdditionnalIGOutDir +"/" + igNoExtension + ".ig"; if (!outStream.open(outFileName))
if (!outStream.open(outFileName))
{
if (_ExportCB != NULL)
_ExportCB->dispWarning("Couldn't open " + outFileName + "for writing, not exporting");
}
else
{
try
{ {
igOut.serial(outStream); if (_ExportCB != NULL)
outStream.close(); _ExportCB->dispWarning("Couldn't open " + outFileName + "for writing, not exporting");
} }
catch (const EStream &e) else
{ {
outStream.close(); try
if (_ExportCB != NULL)
{ {
_ExportCB->dispWarning("Error while writing " + outFileName); igOut.serial(outStream);
_ExportCB->dispWarning(e.what()); outStream.close();
}
catch (const EStream &e)
{
outStream.close();
if (_ExportCB != NULL)
{
_ExportCB->dispWarning("Error while writing " + outFileName);
_ExportCB->dispWarning(e.what());
}
} }
} }
inStream.close();
}
catch (const EStream &e)
{
inStream.close();
if (_ExportCB != NULL)
{
_ExportCB->dispWarning("Error while reading " + igName);
_ExportCB->dispWarning(e.what());
}
} }
inStream.close();
} }
catch (const EStream &e) else
{ {
inStream.close();
if (_ExportCB != NULL) if (_ExportCB != NULL)
{ _ExportCB->dispWarning("Unable to open " + igName);
_ExportCB->dispWarning("Error while reading " + igName);
_ExportCB->dispWarning(e.what());
}
} }
} }
else else
{ {
if (_ExportCB != NULL) if (_ExportCB != NULL)
_ExportCB->dispWarning("Unable to open " + igName); _ExportCB->dispInfo("SKIP " + igName);
printf("SKIP %s\n", igName.c_str());
} }
} }

@ -107,6 +107,7 @@ struct SExportOptions
// Options not saved // Options not saved
std::string ZoneRegionFile;
NLLIGO::CZoneRegion *ZoneRegion; // The region to make NLLIGO::CZoneRegion *ZoneRegion; // The region to make
float CellSize; float CellSize;
float Threshold; float Threshold;

Loading…
Cancel
Save