Added dependency tree system, methods for generating dependency trees from resources, and saving/loading dependency trees to the project cache folder

This commit is contained in:
parax0
2016-07-25 02:12:30 -06:00
parent c1405bfac1
commit 9341c11ac8
30 changed files with 886 additions and 56 deletions

View File

@@ -10,7 +10,7 @@ CGameArea::CGameArea(CResourceEntry *pEntry /*= 0*/)
, mTerrainMerged(false)
, mOriginalWorldMeshCount(0)
, mUsesCompression(false)
, mMaterialSet(nullptr)
, mpMaterialSet(nullptr)
, mpGeneratorLayer(nullptr)
, mpCollision(nullptr)
{
@@ -31,6 +31,32 @@ CGameArea::~CGameArea()
delete mLightLayers[iLyr][iLight];
}
CDependencyTree* CGameArea::BuildDependencyTree() const
{
// Base dependencies
CAreaDependencyTree *pTree = new CAreaDependencyTree(ResID());
for (u32 iMat = 0; iMat < mpMaterialSet->NumMaterials(); iMat++)
{
CMaterial *pMat = mpMaterialSet->MaterialByIndex(iMat);
pTree->AddDependency(pMat->IndTexture());
for (u32 iPass = 0; iPass < pMat->PassCount(); iPass++)
pTree->AddDependency(pMat->Pass(iPass)->Texture());
}
pTree->AddDependency(mpPoiToWorldMap);
Log::Warning("CGameArea::FindDependencies not handling PATH/PTLA");
// Layer dependencies
for (u32 iLayer = 0; iLayer < mScriptLayers.size(); iLayer++)
pTree->AddScriptLayer(mScriptLayers[iLayer]);
pTree->AddScriptLayer(mpGeneratorLayer);
return pTree;
}
void CGameArea::AddWorldModel(CModel *pModel)
{
mWorldModels.push_back(pModel);
@@ -52,7 +78,7 @@ void CGameArea::MergeTerrain()
for (u32 iSurf = 0; iSurf < SubmeshCount; iSurf++)
{
SSurface *pSurf = pMdl->GetSurface(iSurf);
CMaterial *pMat = mMaterialSet->MaterialByIndex(pSurf->MaterialID);
CMaterial *pMat = mpMaterialSet->MaterialByIndex(pSurf->MaterialID);
bool NewMat = true;
for (std::vector<CStaticModel*>::iterator it = mStaticWorldModels.begin(); it != mStaticWorldModels.end(); it++)
@@ -93,7 +119,7 @@ void CGameArea::ClearTerrain()
delete mStaticWorldModels[iStatic];
mStaticWorldModels.clear();
if (mMaterialSet) delete mMaterialSet;
if (mpMaterialSet) delete mpMaterialSet;
mVertexCount = 0;
mTriangleCount = 0;

View File

@@ -45,7 +45,7 @@ class CGameArea : public CResource
std::vector<SSectionNumber> mSectionNumbers;
// Geometry
CMaterialSet *mMaterialSet;
CMaterialSet *mpMaterialSet;
std::vector<CModel*> mWorldModels; // TerrainModels is the original version of each model; this is currently mainly used in the POI map editor
std::vector<CStaticModel*> mStaticWorldModels; // StaticTerrainModels is the merged terrain for faster rendering in the world editor
// Script
@@ -62,6 +62,7 @@ class CGameArea : public CResource
public:
CGameArea(CResourceEntry *pEntry = 0);
~CGameArea();
CDependencyTree* BuildDependencyTree() const;
void AddWorldModel(CModel *pModel);
void MergeTerrain();