Наследование: FRenderableLayerInterface
Пример #1
0
    public void ClearLayersThatUseAtlas(FAtlas atlas)
    {
        bool didHaveLayerThatUsedAtlas = false;

        for (int a = _allLayers.Count - 1; a >= 0; --a)
        {
            if (_allLayers[a].atlas == atlas)
            {
                didHaveLayerThatUsedAtlas = true;

                FFacetRenderLayer layer = _allLayers[a];

                _liveLayers.Remove(layer);
                _previousLiveLayers.Remove(layer);
                _cachedLayers.Remove(layer);
                _allRenderables.Remove(layer);
                _allLayers.Remove(layer);

                layer.Destroy();
            }
        }

        if (didHaveLayerThatUsedAtlas)
        {
            _stage.HandleFacetsChanged();
        }
    }
Пример #2
0
 public void AddRenderableLayer(FRenderableLayerInterface renderableLayer)
 {
     _allRenderables.Add(renderableLayer);
     if(_topLayer != null)
     {
         _topLayer.Close();
         _topLayer = null;
     }
 }
Пример #3
0
 //添加可渲染层级
 public void AddRenderableLayer(FRenderableLayerInterface renderableLayer)
 {
     _allRenderables.Add(renderableLayer);
     if (_topLayer != null)
     {
         _topLayer.Close();
         _topLayer = null;
     }
 }
Пример #4
0
	public void StartRender()
	{
		//make the livelayers empty, put those layers in _previousLiveLayers
		List<FFacetRenderLayer> swapLayers = _liveLayers;
		_liveLayers = _previousLiveLayers;
		_previousLiveLayers = swapLayers;
		
		_topLayer = null;
		
		_allRenderables.Clear();
	}
Пример #5
0
    public void StartRender()
    {
        //make the livelayers empty, put those layers in _previousLiveLayers
        List <FFacetRenderLayer> swapLayers = _liveLayers;

        _liveLayers         = _previousLiveLayers;
        _previousLiveLayers = swapLayers;

        _topLayer = null;

        _allRenderables.Clear();
    }
Пример #6
0
    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);
    }
Пример #7
0
    public void GetFacetRenderLayer(out FFacetRenderLayer renderLayer, out int firstFacetIndex, FFacetType facetType, FAtlas atlas, FShader shader, int numberOfFacetsNeeded)
    {
        int batchIndex = facetType.index*10000000 + atlas.index*10000 + shader.index;

        if(_topLayer == null)
        {
            _topLayer = CreateFacetRenderLayer(facetType, batchIndex, atlas, shader);
            _topLayer.Open();
        }
        else
        {
            if(_topLayer.batchIndex != batchIndex) //we're changing layers!
            {
                _topLayer.Close(); //close the old layer

                _topLayer = CreateFacetRenderLayer(facetType, batchIndex, atlas, shader);
                _topLayer.Open(); //open the new layer
            }
        }

        renderLayer = _topLayer;
        firstFacetIndex = _topLayer.GetNextFacetIndex(numberOfFacetsNeeded);
    }
Пример #8
0
    //获取Facet渲染层级
    public void GetFacetRenderLayer(out FFacetRenderLayer renderLayer, out int firstFacetIndex, FFacetType facetType, FAtlas atlas, FShader shader, int numberOfFacetsNeeded)
    {
        int batchIndex = facetType.index * 10000000 + atlas.index * 10000 + shader.index;

        if (_topLayer == null)
        {
            _topLayer = CreateFacetRenderLayer(facetType, batchIndex, atlas, shader);
            _topLayer.Open();
        }
        else
        {
            if (_topLayer.batchIndex != batchIndex) //we're changing layers!
            {
                _topLayer.Close();                  //close the old layer

                _topLayer = CreateFacetRenderLayer(facetType, batchIndex, atlas, shader);
                _topLayer.Open(); //open the new layer
            }
        }

        renderLayer     = _topLayer;
        firstFacetIndex = _topLayer.GetNextFacetIndex(numberOfFacetsNeeded);
    }