protected FFacetRenderLayer CreateFacetRenderLayer(FFacetType facetType, int batchIndex, FAtlas atlas, FShader shader)
{
//first, check and see if we already have a layer that matches the batchIndex
int previousLiveLayerCount = _previousLiveLayers.Count;
for(int p = 0; p<previousLiveLayerCount; ++p)
{
FFacetRenderLayer previousLiveLayer = _previousLiveLayers[p];
if(previousLiveLayer.batchIndex == batchIndex)
{
_previousLiveLayers.RemoveAt(p);
_liveLayers.Add (previousLiveLayer);
_allRenderables.Add(previousLiveLayer);
return previousLiveLayer;
}
}
//now see if we have a cached (old, now unused layer) that matches the batchIndex
int cachedLayerCount = _cachedLayers.Count;
for(int c = 0; c<cachedLayerCount; ++c)
{
FFacetRenderLayer cachedLayer = _cachedLayers[c];
if(cachedLayer.batchIndex == batchIndex)
{
_cachedLayers.RemoveAt(c);
cachedLayer.AddToWorld();
_liveLayers.Add (cachedLayer);
_allRenderables.Add(cachedLayer);
return cachedLayer;
}
}
//still no layer found? create a new one!
FFacetRenderLayer newLayer = facetType.createRenderLayer(_stage, facetType,atlas,shader);
_liveLayers.Add(newLayer);
_allLayers.Add(newLayer);
_allRenderables.Add(newLayer);
newLayer.AddToWorld();
return newLayer;
}